From 5622b71a85d00d2f76655296668a19cc2fc187c1 Mon Sep 17 00:00:00 2001 From: Matthew Newton Date: Wed, 12 Feb 2025 18:42:41 +0000 Subject: [PATCH] ci: give docker refresh job ability to handle more than one os --- .github/workflows/docker-refresh.yml | 72 +++++++++++++++++++++------- 1 file changed, 55 insertions(+), 17 deletions(-) diff --git a/.github/workflows/docker-refresh.yml b/.github/workflows/docker-refresh.yml index 867fb48783..e7dd23152f 100644 --- a/.github/workflows/docker-refresh.yml +++ b/.github/workflows/docker-refresh.yml @@ -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 -- 2.47.3