55 branches :
66 - master
77 paths :
8- - scripts/ci/Dockerfile
8+ - .github/workflows/docker-refresh.yml
9+ - scripts/ci/Dockerfile*
910 workflow_dispatch :
1011 schedule :
1112 - cron : ' 0 1 * * *'
1213
1314env :
1415 DOCKER_REGISTRY : " docker.internal.networkradius.com"
15- DOCKER_IMAGE_NAME : " docker.internal.networkradius.com/self-hosted"
16- DOCKER_BASE_IMAGE : " ubuntu:20.04"
17- DOCKER_EXTRA_IMAGES : " mariadb postgres 4teamwork/389ds"
1816
1917jobs :
20- build-image :
18+ process-images :
2119 timeout-minutes : 20
2220
2321 runs-on : self-hosted
2422 if : github.event_name == 'workflow_dispatch' || github.repository_owner == 'FreeRADIUS'
2523
26- name : " build-docker-image"
24+ strategy :
25+ fail-fast : false
26+ matrix :
27+ os :
28+ - base_image : ubuntu:24.04
29+ image_name : docker.internal.networkradius.com/self-hosted-ubuntu24
30+ extra_tags :
31+ - docker.internal.networkradius.com/self-hosted
32+ dockerfile : scripts/ci/Dockerfile
33+
34+ - base_image : ubuntu:20.04
35+ image_name : docker.internal.networkradius.com/self-hosted-ubuntu20
36+ dockerfile : scripts/ci/Dockerfile-ubuntu20
37+
38+ - base_image : mariadb
39+ - base_image : postgres
40+ - base_image : 4teamwork/389ds
41+
42+ name : " process-images"
2743
2844 steps :
2945
3046 - uses : actions/checkout@v4
3147 with :
3248 lfs : false
3349
34- - name : Fetch and label images
50+ - name : Fetch and label image
3551 shell : bash
52+ env :
53+ DOCKER_BASE_IMAGE : ${{ matrix.os.base_image }}
3654 run : |
3755 docker pull "$DOCKER_BASE_IMAGE"
3856 echo "FROM $DOCKER_BASE_IMAGE" | docker build --label preserve=true -t "$DOCKER_REGISTRY/$DOCKER_BASE_IMAGE" -
39- for IMAGE in $DOCKER_EXTRA_IMAGES; do \
40- docker pull "$IMAGE"; \
41- echo "FROM $IMAGE" | docker build --label preserve=true -t "$DOCKER_REGISTRY/$IMAGE" -; \
42- done
4357
4458 - name : Create build dependency package
59+ if : ${{ matrix.os.image_name && matrix.os.dockerfile }}
4560 uses : addnab/docker-run-action@v3
4661 with :
4762 options : -v ${{ github.workspace }}:/work
48- image : ${{ env.DOCKER_BASE_IMAGE }}
63+ image : ${{ matrix.os.base_image }}
4964 run : |
5065 apt-get update
5166 export DEBIAN_FRONTEND=noninteractive
5974 chown $(stat -c'%u:%g' .git) *
6075
6176 - name : Build main Docker image
77+ if : ${{ matrix.os.image_name && matrix.os.dockerfile }}
6278 shell : bash
79+ env :
80+ DOCKER_IMAGE_NAME : ${{ matrix.os.image_name }}
81+ DOCKERFILE : ${{ matrix.os.dockerfile }}
6382 run : |
64- docker build --no-cache -f scripts/ci/Dockerfile -t "$DOCKER_IMAGE_NAME" --label preserve=true .
83+ docker build --no-cache -f "$DOCKERFILE" -t "$DOCKER_IMAGE_NAME" --label preserve=true .
6584
6685 - name : Docker login
6786 uses : docker/login-action@v2
@@ -70,11 +89,30 @@ jobs:
7089 password : ${{ secrets.DOCKER_REPO_UPDATE_PASSWORD }}
7190 registry : ${{ env.DOCKER_REGISTRY }}
7291
73- - name : Push images to local registry
92+ - name : Push base image to local registry
7493 shell : bash
94+ env :
95+ DOCKER_BASE_IMAGE : ${{ matrix.os.base_image }}
7596 run : |
76- docker push "$DOCKER_IMAGE_NAME"
7797 docker push "$DOCKER_REGISTRY/$DOCKER_BASE_IMAGE"
78- for IMAGE in $DOCKER_EXTRA_IMAGES; do \
79- docker push "$DOCKER_REGISTRY/$IMAGE"; \
98+
99+ - name : Push main image to local registry
100+ if : ${{ matrix.os.image_name && matrix.os.dockerfile }}
101+ shell : bash
102+ env :
103+ DOCKER_IMAGE_NAME : ${{ matrix.os.image_name }}
104+ DOCKER_BASE_IMAGE : ${{ matrix.os.base_image }}
105+ run : |
106+ docker push "$DOCKER_IMAGE_NAME"
107+
108+ - name : Create and push alternative tags
109+ if : ${{ matrix.os.image_name && matrix.os.extra_tags }}
110+ shell : bash
111+ env :
112+ DOCKER_IMAGE_NAME : ${{ matrix.os.image_name }}
113+ DOCKER_TAGS : ${{ matrix.os.extra_tags }}
114+ run : |
115+ for TAG in $DOCKER_TAGS; do \
116+ docker image tag "$DOCKER_IMAGE_NAME" "$TAG"; \
117+ docker push "$TAG"; \
80118 done
0 commit comments