Skip to content

Docker images for integration tests #3

Docker images for integration tests

Docker images for integration tests #3

name: Docker images for integration tests
on:
# push:
# branches:
# - master
workflow_dispatch:
env:
PLATFORMS: "linux/amd64"
jobs:
list-dockerfiles:
name: Create list of existing dockerfiles
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get file list
id: set-matrix
run: |
# lists all Dockerfile_* and ignore (grep) files with extension (e.g. *.md5)
# tranforms the file list in JSON array (StackOverflow#10234327)
# converts the list into objects of dockerfile and image name
ls integration-tests/Dockerfile_* |
grep -Ev "\..{0,3}$" |
jq -R -s 'split("\n")[:-1]' |
jq '. | map({dockerfile: ., image: sub(".*_"; "")})' > filelist.json
echo "matrix=$(jq -c . filelist.json)" >> "$GITHUB_OUTPUT"
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
docker:
needs: [list-dockerfiles]
name: Build and push Docker image
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include: ${{ fromJson(needs.list-dockerfiles.outputs.matrix) }}
permissions:
packages: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: MD5 of Dockerfile
id: md5_result
run: |
echo "md5=$(md5sum "${{ matrix.dockerfile }}" | awk '{ print $1 }')" >> $GITHUB_OUTPUT
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/${{ github.repository_owner }}/${{ matrix.image }}
labels: |
rocks.goss.dockerfile-md5=${{ steps.md5_result.outputs.md5 }}
- name: Build and push tag
uses: docker/build-push-action@v5
with:
context: .
file: ${{ matrix.dockerfile }}
push: true
tags: |
ghcr.io/${{ github.repository_owner }}/${{ matrix.image }}:latest
labels: ${{ steps.meta.outputs.labels }}
platforms: ${{ env.PLATFORMS }}