]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
ci: give docker refresh job ability to handle more than one os
authorMatthew Newton <matthew-git@newtoncomputing.co.uk>
Wed, 12 Feb 2025 18:42:41 +0000 (18:42 +0000)
committerMatthew Newton <matthew-git@newtoncomputing.co.uk>
Wed, 12 Feb 2025 18:46:43 +0000 (18:46 +0000)
.github/workflows/docker-refresh.yml

index 867fb4878398e050faed20b18541e10eace44681..e7dd23152f9f686f786b36397e2b6f67a58a03b1 100644 (file)
@@ -5,25 +5,41 @@ on:
     branches:
       - master
     paths:
-      - scripts/ci/Dockerfile
+      - .github/workflows/docker-refresh.yml
+      - scripts/ci/Dockerfile*
   workflow_dispatch:
   schedule:
     - cron: '0 1 * * *'
 
 env:
   DOCKER_REGISTRY: "docker.internal.networkradius.com"
-  DOCKER_IMAGE_NAME: "docker.internal.networkradius.com/self-hosted"
-  DOCKER_BASE_IMAGE: "ubuntu:20.04"
-  DOCKER_EXTRA_IMAGES: "mariadb postgres 4teamwork/389ds"
 
 jobs:
-  build-image:
+  process-images:
     timeout-minutes: 20
 
     runs-on: self-hosted
     if: github.event_name == 'workflow_dispatch' || github.repository_owner == 'FreeRADIUS'
 
-    name: "build-docker-image"
+    strategy:
+      fail-fast: false
+      matrix:
+        os:
+          - base_image: ubuntu:24.04
+            image_name: docker.internal.networkradius.com/self-hosted-ubuntu24
+            extra_tags:
+              - docker.internal.networkradius.com/self-hosted
+            dockerfile: scripts/ci/Dockerfile
+
+          - base_image: ubuntu:20.04
+            image_name: docker.internal.networkradius.com/self-hosted-ubuntu20
+            dockerfile: scripts/ci/Dockerfile-ubuntu20
+
+          - base_image: mariadb
+          - base_image: postgres
+          - base_image: 4teamwork/389ds
+
+    name: "process-images"
 
     steps:
 
@@ -31,21 +47,20 @@ jobs:
         with:
           lfs: false
 
-      - name: Fetch and label images
+      - name: Fetch and label image
         shell: bash
+        env:
+          DOCKER_BASE_IMAGE: ${{ matrix.os.base_image }}
         run: |
           docker pull "$DOCKER_BASE_IMAGE"
           echo "FROM $DOCKER_BASE_IMAGE" | docker build --label preserve=true -t "$DOCKER_REGISTRY/$DOCKER_BASE_IMAGE" -
-          for IMAGE in $DOCKER_EXTRA_IMAGES; do \
-            docker pull "$IMAGE"; \
-            echo "FROM $IMAGE" | docker build --label preserve=true -t "$DOCKER_REGISTRY/$IMAGE" -; \
-          done
 
       - name: Create build dependency package
+        if: ${{ matrix.os.image_name && matrix.os.dockerfile }}
         uses: addnab/docker-run-action@v3
         with:
           options: -v ${{ github.workspace }}:/work
-          image: ${{ env.DOCKER_BASE_IMAGE }}
+          image: ${{ matrix.os.base_image }}
           run: |
             apt-get update
             export DEBIAN_FRONTEND=noninteractive
@@ -59,9 +74,13 @@ jobs:
             chown $(stat -c'%u:%g' .git) *
 
       - name: Build main Docker image
+        if: ${{ matrix.os.image_name && matrix.os.dockerfile }}
         shell: bash
+        env:
+          DOCKER_IMAGE_NAME: ${{ matrix.os.image_name }}
+          DOCKERFILE: ${{ matrix.os.dockerfile }}
         run: |
-          docker build --no-cache -f scripts/ci/Dockerfile -t "$DOCKER_IMAGE_NAME" --label preserve=true .
+          docker build --no-cache -f "$DOCKERFILE" -t "$DOCKER_IMAGE_NAME" --label preserve=true .
 
       - name: Docker login
         uses: docker/login-action@v2
@@ -70,11 +89,30 @@ jobs:
           password: ${{ secrets.DOCKER_REPO_UPDATE_PASSWORD }}
           registry: ${{ env.DOCKER_REGISTRY }}
 
-      - name: Push images to local registry
+      - name: Push base image to local registry
         shell: bash
+        env:
+          DOCKER_BASE_IMAGE: ${{ matrix.os.base_image }}
         run: |
-          docker push "$DOCKER_IMAGE_NAME"
           docker push "$DOCKER_REGISTRY/$DOCKER_BASE_IMAGE"
-          for IMAGE in $DOCKER_EXTRA_IMAGES; do \
-            docker push "$DOCKER_REGISTRY/$IMAGE"; \
+
+      - name: Push main image to local registry
+        if: ${{ matrix.os.image_name && matrix.os.dockerfile }}
+        shell: bash
+        env:
+          DOCKER_IMAGE_NAME: ${{ matrix.os.image_name }}
+          DOCKER_BASE_IMAGE: ${{ matrix.os.base_image }}
+        run: |
+          docker push "$DOCKER_IMAGE_NAME"
+
+      - name: Create and push alternative tags
+        if: ${{ matrix.os.image_name && matrix.os.extra_tags }}
+        shell: bash
+        env:
+          DOCKER_IMAGE_NAME: ${{ matrix.os.image_name }}
+          DOCKER_TAGS: ${{ matrix.os.extra_tags }}
+        run: |
+          for TAG in $DOCKER_TAGS; do \
+            docker image tag "$DOCKER_IMAGE_NAME" "$TAG"; \
+            docker push "$TAG"; \
           done