DockerImageUpdateChecker #96
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%YAML 1.1 | |
--- | |
name: 'DockerImageUpdateChecker' | |
# Adapted from https://github.com/marketplace/actions/docker-image-update-checker#minimal | |
# TODO: check the relevant tags in rel-10_0, rel-10_1, rel-11_0 and trigger rebuilds in these commits | |
# TODO: saner setup which branch uses which base image | |
on: | |
# The trigger on 'workflow_dispatch' allows manual start | |
# on https://github.com/RotherOSS/otobo/actions/workflows/docker_image_update_checker.yml | |
workflow_dispatch: | |
# The trigger on 'schedule' allows to run daily. Time is in UTC declared in cron syntax. | |
# The scheduled jobs run only on the default branch. | |
schedule: | |
- cron: '37 6 * * *' | |
jobs: | |
CheckDockerImageUpdate: | |
runs-on: 'ubuntu-latest' | |
strategy: | |
# set up a loop over OTOBO branches | |
matrix: | |
major_minor: [ '11_0', '11_1', ] | |
include: | |
- major_minor: '11_0' | |
base_image: 'perl:5.38-bookworm' | |
- major_minor: '11_1' | |
base_image: 'perl:5.40-slim-bookworm' | |
steps: | |
- name: Setting up the environment file | |
run: | | |
major_minor="${{ matrix.major_minor }}" | |
docker_tag="devel-${major_minor}_test" | |
mixed_case_repository="${{ github.repository }}" | |
lowercased_repository="${mixed_case_repository,,}" | |
build_date=$(date -u +'%Y-%m-%dT%H:%M:%SZ') | |
( | |
echo "otobo_branch=rel-${major_minor}" | |
echo "otobo_base_image=${{ matrix.base_image }}" | |
echo "otobo_docker_tag=${docker_tag}" | |
echo "otobo_image=${lowercased_repository}:${docker_tag}" | |
echo "otobo_build_date=${build_date}" | |
) >> $GITHUB_ENV | |
- | |
# this step sets ${{ steps.check.outputs.needs-updating }} | |
name: Check whether base image was updated | |
id: check | |
uses: lucacome/docker-image-update-checker@v1 | |
with: | |
base-image: ${{ env.otobo_base_image }} | |
image: ${{ env.otobo_image }} | |
- | |
# print the result in any case | |
name: Report the check result | |
run: | | |
echo "The OTOBO web image needs updating: ${{ steps.check.outputs.needs-updating }}" | |
- | |
name: Set up Docker Buildx | |
if: steps.check.outputs.needs-updating == 'true' | |
uses: docker/setup-buildx-action@v3 | |
- | |
name: 'check out the relevant OTOBO branch' | |
if: steps.check.outputs.needs-updating == 'true' | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ env.otobo_branch }} | |
- | |
# needed for build arg GIT_COMMIT | |
# can't use github.sha here as we need the commit of the checked out branch | |
name: 'get the commit SHA of the current checkout' | |
if: steps.check.outputs.needs-updating == 'true' | |
run: echo "otobo_commit=$(git log -1 '--format=format:%H')" >> $GITHUB_ENV | |
- | |
# build the image, not pushing yet, no pushing as DockerHub access is not set up yet | |
# Caching with Github Actions Cache, limited to 10 GB | |
# context: . indicates that the current checkout is used | |
name: Build | |
if: steps.check.outputs.needs-updating == 'true' | |
uses: docker/build-push-action@v6 | |
with: | |
load: true | |
context: . | |
file: otobo.web.dockerfile | |
pull: true | |
build-args: | | |
BUILD_DATE=${{ env.otobo_build_date }} | |
DOCKER_TAG=${{ env.otobo_docker_tag }} | |
GIT_REPO=${{ github.repositoryUrl }} | |
GIT_BRANCH=${{ env.otobo_branch }} | |
GIT_COMMIT=${{ env.otobo_commit }} | |
target: otobo-web | |
tags: ${{ env.otobo_image }} | |
cache-from: type=gha | |
cache-to: type=gha,mode=max` | |
- | |
# otobo_first_time hasn't run yet, so /opt/otobo is still empty | |
name: Info | |
if: steps.check.outputs.needs-updating == 'true' | |
run: | | |
docker run --rm -w /opt/otobo_install/otobo_next --entrypoint /bin/bash $otobo_image -c "more git-repo.txt git-branch.txt git-commit.txt RELEASE | cat" | |
- | |
# login to Docker Hub only after the build | |
name: Login to Docker Hub | |
if: steps.check.outputs.needs-updating == 'true' | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- | |
# finally upload to DockerHub | |
# the built image is already available in the job | |
name: Push to DockerHub | |
if: steps.check.outputs.needs-updating == 'true' | |
uses: docker/build-push-action@v6 | |
with: | |
push: true | |
context: . | |
file: otobo.web.dockerfile | |
pull: true | |
build-args: | | |
BUILD_DATE=${{ env.otobo_build_date }} | |
DOCKER_TAG=${{ env.otobo_docker_tag }} | |
GIT_REPO=${{ github.repositoryUrl }} | |
GIT_BRANCH=${{ env.otobo_branch }} | |
GIT_COMMIT=${{ env.otobo_commit }} | |
target: otobo-web | |
tags: ${{ env.otobo_image }} | |
cache-from: type=gha | |
cache-to: type=gha,mode=max` |