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:
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
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
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