1313 workflow_dispatch :
1414
1515jobs :
16- pre-test :
17- runs-on : ubuntu-latest
18- outputs :
19- # selfhosted: 0
20- selfhosted : ${{ (github.repository_owner == 'FreeRADIUS') && '1' || '0' }}
21- steps :
22- - run : echo "Pre-test job; checking if using self-hosted runners"
23-
24- # Job only runs on GitHub-hosted runners
25- test-5hs-autoaccept :
26- needs : pre-test
27- runs-on : ubuntu-24.04
28- if : ${{ needs.pre-test.outputs.selfhosted != '1' }}
29-
30- env :
31- MULTI_SERVER_ENV_DOCKER_BUILD_OS : ubuntu24
32- MULTI_SERVER_TEST_LOG : build/tests/multi-server/freeradius-multi-server/multi_server_test.log
33- MULTI_SERVER_TEST_LISTENER_LOG : build/tests/multi-server/freeradius-listener-logs/custom_test-env-5hs-autoaccept.txt.bak
34-
35- steps :
36- # Checkout, but defer pulling LFS objects until we've restored the cache
37- - uses : actions/checkout@v4
38- with :
39- lfs : false
40-
41- - name : Package manager performance improvements
42- run : |
43- sudo sh -c 'echo force-unsafe-io > /etc/dpkg/dpkg.cfg.d/02speedup'
44- echo 'man-db man-db/auto-update boolean false' | sudo debconf-set-selections
45- sudo dpkg-reconfigure man-db
46- sudo sed -i 's/^update_initramfs=.*/update_initramfs=no/' /etc/initramfs-tools/update-initramfs.conf
47-
48- - name : NetworkRADIUS signing key
49- shell : bash
50- run : |
51- sudo install -d -o root -g root -m 0755 /etc/apt/keyrings
52- curl -s 'https://packages.inkbridgenetworks.com/pgp/packages.networkradius.com.asc' | sudo tee /etc/apt/keyrings/packages.networkradius.com.asc > /dev/null
53-
54- - name : Set up NetworkRADIUS extras repository
55- shell : bash
56- run : |
57- DIST=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
58- RELEASE=$(lsb_release -cs)
59- sudo /bin/sh -c "echo \"deb [arch=amd64 signed-by=/etc/apt/keyrings/packages.networkradius.com.asc] http://packages.networkradius.com/extras/${DIST}/${RELEASE} ${RELEASE} main\" \
60- > /etc/apt/sources.list.d/networkradius-extras.list"
61- sudo apt-get update
62-
63- # Remove pre-installed package which conflicts with dependency installation
64- - name : Remove package conflicts
65- run : |
66- sudo apt-get remove -y libhashkit2
67-
68- # Installing build dependencies requires a ubuntu-24.04 runner
69- - name : Install build dependencies
70- run : |
71- sudo apt-get install -y --no-install-recommends build-essential devscripts equivs quilt
72- debian/rules debian/control
73- sudo mk-build-deps -irt"apt-get -y --no-install-recommends" debian/control
74- sudo mk-build-deps -irt"apt-get -y --no-install-recommends" scripts/ci/extra-packages.debian.control
75-
76- - name : Build Docker image for multi-server test environment
77- run : |
78- ./configure
79- make docker.${MULTI_SERVER_ENV_DOCKER_BUILD_OS}.build
80-
81- # List all images
82- docker images --all
83-
84- # Tag freeradius build image using using a non-OS specific name to be used with the multi-server docker compose environment.
85- docker tag freeradius4/${MULTI_SERVER_ENV_DOCKER_BUILD_OS}:latest freeradius-build:latest
86-
87- - name : Run test-5hs-autoaccept test
88- run : |
89- if ! docker images --format '{{.Repository}}:{{.Tag}}' | grep -q "^freeradius-build:latest$"; then
90- echo "Error: freeradius-build:latest Docker image not found and required for multi-server test environment."
91- exit 1
92- fi
93- make -f src/tests/multi-server/all.mk test-5hs-autoaccept VERBOSE=4
94-
95- - name : Verify test results
96- shell : bash
97- run : |
98- set -euo pipefail
99-
100- echo "============ ${MULTI_SERVER_TEST_LOG} ============"
101- cat "${MULTI_SERVER_TEST_LOG}"
102-
103- if grep -q '\[Failed\]' "${MULTI_SERVER_TEST_LOG}"; then
104- echo "TEST FAILED: Found [Failed] in log"
105- grep '\[Failed\]' "${MULTI_SERVER_TEST_LOG}"
106-
107- # Display the framework's listener log for debugging purposes
108- echo "============ ${MULTI_SERVER_TEST_LISTENER_LOG} ============"
109- cat "${MULTI_SERVER_TEST_LISTENER_LOG}"
110- exit 1
111- fi
112-
113- if grep -Eq '\(Failures:[[:space:]]*[1-9][0-9]*[[:space:]]*\)' "${MULTI_SERVER_TEST_LOG}"; then
114- echo "TEST FAILED: Found Failures > 0 in log"
115- grep -E '\(Failures:[[:space:]]*[1-9][0-9]*[[:space:]]*\)' "${MULTI_SERVER_TEST_LOG}"
116-
117- # Display the framework's listener log for debugging purposes
118- echo "============ ${MULTI_SERVER_TEST_LISTENER_LOG} ============"
119- cat "${MULTI_SERVER_TEST_LISTENER_LOG}"
120- exit 1
121- fi
122-
123- log="${MULTI_SERVER_TEST_LOG}"
124- if awk '
125- BEGIN { found=0; n1=0; n2=0; line="" }
126- index($0,"Matched:") {
127- orig=$0
128- s=$0
129- gsub(/[[:space:]]/, "", s)
130- sub(/^.*Matched:/, "", s)
131- sub(/\(.*/, "", s)
132- n = split(s, parts, "/")
133- if (n == 2) {
134- a = parts[1] + 0
135- b = parts[2] + 0
136- if (a > 0 && a == b) { found=1; n1=a; n2=b; line=orig }
137- }
138- }
139- END {
140- if (found) { printf "MATCH: %d / %d\nMatched line: %s\n", n1, n2, line; exit 0 }
141- exit 1
142- }
143- ' "$log"
144- then
145- : # PASS
146- else
147- echo "TEST FAILED: No Matched line found with equal non-zero counts"
148- # Display the framework's listener log for debugging purposes
149- echo "============ ${MULTI_SERVER_TEST_LISTENER_LOG} ============"
150- cat "${MULTI_SERVER_TEST_LISTENER_LOG}"
151- exit 1
152- fi
153-
154- # Job only runs on self-hosted runners
15516 test-5hs-autoaccept-selfhosted :
156- needs : pre-test
15717 runs-on : self-hosted
158- if : ${{ needs.pre-test.outputs.selfhosted == '1' }}
15918
16019 services :
16120 dind :
16221 image : docker:dind
16322 options : --privileged
16423 env :
16524 DOCKER_TLS_CERTDIR : " "
25+ # Bypass the squid proxy for internal registry access.
26+ NO_PROXY : " *.networkradius.com,127.0.0.1"
27+ # Mount the host's internal CA so dind trusts
28+ # docker.internal.networkradius.com for image pulls.
29+ #
30+ # Share the runner's workspace with dind so that docker
31+ # compose bind-mounts (radiusd.conf, env-setup.sh, listener
32+ # dirs, etc.) resolve to real files inside the dind daemon.
33+ #
34+ # github.workspace is the HOST path to the workspace.
35+ # The runner mounts it into the job container at a
36+ # different path (/__w/...), so we use a fixed mount
37+ # point (/workspace) that both containers agree on.
38+ volumes :
39+ - /usr/local/share/ca-certificates/networkradius.com.crt:/etc/docker/certs.d/docker.internal.networkradius.com/ca.crt:ro
40+ - ${{ github.workspace }}:/workspace
16641
16742 env :
16843 MULTI_SERVER_TEST_LOG : build/tests/multi-server/freeradius-multi-server/multi_server_test.log
16944 MULTI_SERVER_TEST_LISTENER_LOG : build/tests/multi-server/freeradius-listener-logs/custom_test-env-5hs-autoaccept.txt.bak
170- DOCKER_HOST : tcp://dind:2375
17145
17246 container :
17347 image : docker.internal.networkradius.com/self-hosted
@@ -178,52 +52,47 @@ jobs:
17852 options : >-
17953 --privileged
18054 --memory-swap -1
55+ env :
56+ DOCKER_HOST : tcp://dind:2375
57+ NO_PROXY : dind
58+ # Shared workspace — see dind volumes comment above.
59+ volumes :
60+ - ${{ github.workspace }}:/workspace
61+
62+ defaults :
63+ run :
64+ working-directory : /workspace
18165
18266 steps :
18367
184- - name : Wait for Docker-in-Docker
68+ - name : Install extra packages
18569 run : |
186- for i in $(seq 1 30); do
187- docker info && break || sleep 1
188- done
70+ apt-get update && apt-get install -y --no-install-recommends docker.io docker-buildx docker-compose-v2 python3-venv
18971
19072 # Checkout, but defer pulling LFS objects until we've restored the cache
19173 - uses : actions/checkout@v4
19274 with :
19375 lfs : false
19476
195- - name : Get pre-built Docker image for self-hosted runner test
196- shell : bash
77+ # Authenticate to the internal registry via the dind daemon.
78+ # The host Docker daemon is logged in via the runner's
79+ # job-started hook, but dind is a separate daemon with no
80+ # auth config.
81+ - name : Login to internal Docker registry
19782 env :
198- DOCKER_REGISTRY : docker.internal.networkradius.com
199- DOCKER_IMAGE : self-hosted-ubuntu24
83+ DOCKER_USERNAME : ${{ secrets.DOCKER_REPO_USERNAME }}
84+ DOCKER_PASSWORD : ${{ secrets.DOCKER_REPO_PASSWORD }}
20085 run : |
201- docker pull "${DOCKER_REGISTRY}/${DOCKER_IMAGE}"
202-
203- # Tag freeradius build image using using a non-OS specific name to be used with the multi-server docker compose environment.
204- docker tag "${DOCKER_REGISTRY}/${DOCKER_IMAGE}" freeradius-build:latest
205-
206- # Display all docker images for debugging purposes
207- docker images --all
86+ echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin https://docker.internal.networkradius.com/
20887
209- - name : Configure and build freeradius-server from src
210- shell : bash
88+ - name : Build Docker image from source
21189 run : |
212- # The multi-server test framework requires the availability of the $BUILD_DIR, hence why
213- # the following is needed before running multi-server tests.
214- ./configure
215- make -j"$(nproc)" all
90+ make docker.ubuntu24.build
91+ docker tag freeradius4/ubuntu24:latest freeradius-build:latest
92+ docker images --all
21693
21794 - name : Run test-5hs-autoaccept test
218- shell : bash
21995 run : |
220- if ! docker images --format '{{.Repository}}:{{.Tag}}' | grep -q "^freeradius-build:latest$"; then
221- echo "Error: freeradius-build:latest Docker image not found and required for multi-server test environment."
222- exit 1
223- fi
224-
225- ls -l
226- which make
22796 make -f src/tests/multi-server/all.mk test-5hs-autoaccept
22897
22998 - name : Verify test results
0 commit comments