Skip to content

Docker CI Image Refresh #711

Docker CI Image Refresh

Docker CI Image Refresh #711

name: Docker CI Image Refresh
on:
push:
branches:
- master
paths:
- .github/workflows/docker-refresh.yml
- scripts/ci/Dockerfile*
workflow_dispatch:
schedule:
- cron: '0 1 * * *'
env:
DOCKER_REGISTRY: "docker.internal.networkradius.com"
jobs:
process-images:
timeout-minutes: 20
runs-on: self-hosted
if: github.event_name == 'workflow_dispatch' || github.repository_owner == 'FreeRADIUS'
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: mariadb
- base_image: postgres
- base_image: 4teamwork/389ds
name: "process-images"
steps:
- uses: actions/checkout@v4
with:
lfs: false
- 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" -
- 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: ${{ matrix.os.base_image }}
run: |
apt-get update
export DEBIAN_FRONTEND=noninteractive
apt-get install -y --no-install-recommends build-essential devscripts equivs quilt
cd /work
debian/rules debian/control
mk-build-deps debian/control
mv freeradius-build-deps_*.deb freeradius-build-deps.deb
mk-build-deps scripts/ci/extra-packages.debian.control
mv freeradius-build-deps_1*.deb freeradius-build-deps-extra.deb
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 "$DOCKERFILE" -t "$DOCKER_IMAGE_NAME" --label preserve=true .
- name: Docker login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_REPO_UPDATE_USERNAME }}
password: ${{ secrets.DOCKER_REPO_UPDATE_PASSWORD }}
registry: ${{ env.DOCKER_REGISTRY }}
- name: Push base image to local registry
shell: bash
env:
DOCKER_BASE_IMAGE: ${{ matrix.os.base_image }}
run: |
docker push "$DOCKER_REGISTRY/$DOCKER_BASE_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: ${{ join(matrix.os.extra_tags, ' ') }}
run: |
for TAG in $DOCKER_TAGS; do \
docker image tag "$DOCKER_IMAGE_NAME" "$TAG"; \
docker push "$TAG"; \
done