Adding CAT #1448
Workflow file for this run
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
##### --------------------------------------------------------------------------- ##### | |
##### This workflow looks for new dockefiles and builds them to the test target. ##### | |
##### This in intended to start on a pull request (PR) ##### | |
##### Ana06 is being used instead of jitterbit because of the filter option ##### | |
##### --------------------------------------------------------------------------- ##### | |
name: Test New Dockerfiles | |
on: pull_request | |
jobs: | |
find_new_dockerfiles: | |
runs-on: ubuntu-latest | |
outputs: | |
json: ${{ steps.files.outputs.added_modified }} | |
steps: | |
- uses: actions/checkout@v4 | |
- id: files | |
uses: Ana06/[email protected] | |
with: | |
format: 'json' | |
filter: 'Dockerfile' | |
- run: "echo ${{ steps.files.outputs.all }}" | |
build_to_test: | |
needs: find_new_dockerfiles | |
if: needs.find_new_dockerfiles.outputs.json != '[]' | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
added_modified: ${{ fromJson(needs.find_new_dockerfiles.outputs.json) }} | |
steps: | |
- name: parse file path | |
id: parse | |
run: | | |
tool=$(echo "${{ matrix.added_modified }}" | cut -f 1 -d "/" ) | |
version=$(echo "${{ matrix.added_modified }}" | cut -f 2 -d "/" ) | |
echo "tool=$tool" >> $GITHUB_OUTPUT | |
echo "version=$version" >> $GITHUB_OUTPUT | |
##### --------------------------------------------------------------------------- ##### | |
##### Workflows still cannot be run in parrallel as of 2022-12-01 ##### | |
##### --------------------------------------------------------------------------- ##### | |
# - name: test files | |
# uses: ./.github/workflows/build-to-test.yml | |
# with: | |
# path_to_context: "./${{ steps.parse.outputs.tool }}/${{ steps.parse.outputs.version }}" | |
# cache: ${{ steps.parse.outputs.tool }} | |
##### --------------------------------------------------------------------------- ##### | |
##### The steps of ./.github/workflows/build-to-test.yml are copied here. ##### | |
##### --------------------------------------------------------------------------- ##### | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Layer check | |
run: | | |
#checking layers | |
warning='' | |
app_layer=$(grep FROM ./${{ steps.parse.outputs.tool }}/${{ steps.parse.outputs.version }}/Dockerfile | grep -E "as app|AS app") | |
tst_layer=$(grep FROM ./${{ steps.parse.outputs.tool }}/${{ steps.parse.outputs.version }}/Dockerfile | grep -E "as test|AS test") | |
if [ -z "$app_layer" ] ; then echo "FATAL : app layer is missing" ; warning='warning' ; fi | |
if [ -z "$tst_layer" ] ; then echo "FATAL : test layer is missing" ; warning='warning' ; fi | |
if [ -n "$warning" ] ; then echo "Please see template for recommended format https://github.com/StaPH-B/docker-builds/blob/master/dockerfile-template/Dockerfile" ; exit 1 ; fi | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Cache Docker layers | |
uses: actions/cache@v4 | |
with: | |
path: /tmp/.buildx-cache-${{ steps.parse.outputs.tool }} | |
key: ${{ runner.os }}-buildx-${{ steps.parse.outputs.tool }}-${{ github.sha }} | |
restore-keys: | | |
${{ runner.os }}-buildx-${{ steps.parse.outputs.tool }} | |
- name: Build to test | |
id: docker_build_to_test | |
uses: docker/build-push-action@v5 | |
with: | |
context: ./${{ steps.parse.outputs.tool }}/${{ steps.parse.outputs.version }} | |
file: ./${{ steps.parse.outputs.tool }}/${{ steps.parse.outputs.version }}/Dockerfile | |
target: test | |
tags: ${{ steps.parse.outputs.tool }}:${{ steps.parse.outputs.version }} | |
load: true | |
push: false | |
cache-from: type=local,src=/tmp/.buildx-cache-${{ steps.parse.outputs.tool }} | |
cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-${{ steps.parse.outputs.tool }}-new | |
- name: Check labels | |
run: | | |
# checking labels | |
warning='' | |
for label in base.image dockerfile.version software software.version description website maintainer maintainer.email | |
do | |
value=$(docker inspect --format '{{ index .Config.Labels "'$label'"}}' ${{ steps.parse.outputs.tool }}:${{ steps.parse.outputs.version }} ) | |
if [ -z "$value" ] ; then warning='warning' ; echo "FATAL : $label label not found in ${{ steps.parse.outputs.tool }}:${{ steps.parse.outputs.version }}" ; fi | |
done | |
if [ -z "$(docker inspect --format '{{.Config.WorkingDir}}' ${{ steps.parse.outputs.tool }}:${{ steps.parse.outputs.version }} )" ] ; | |
then | |
warning='warning' | |
echo "FATAL : WORKDIR not set." | |
fi | |
if [ -n "$warning" ] ; then echo "Please see template for recommended format https://github.com/StaPH-B/docker-builds/blob/master/dockerfile-template/Dockerfile" ; exit 1 ; fi | |
- name: Check commonly overlooked commands | |
run: | | |
# checking commands | |
docker run ${{ steps.parse.outputs.tool }}:${{ steps.parse.outputs.version }} ps --help | |
- name: Move cache # apparently prevents the cache from growing in size forever | |
run: | | |
rm -rf /tmp/.buildx-cache-${{ steps.parse.outputs.tool }} | |
mv /tmp/.buildx-cache-${{ steps.parse.outputs.tool }}-new /tmp/.buildx-cache-${{ steps.parse.outputs.tool }} | |
- name: Image digest | |
run: echo ${{ steps.docker_build_to_test.outputs.digest }} |