Skip to content

Build All Docker Images #1049

Build All Docker Images

Build All Docker Images #1049

Workflow file for this run

name: Build All Docker Images
on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
inputs:
logLevel:
description: 'reason'
required: true
default: ''
tags:
description: 'forced manual rebuild'
jobs:
provide_images_json:
# see json juggling: https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#example-6
# see https://stackoverflow.com/a/62953566/1348344
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: get docker json list
id: output_data
run: |
echo "::set-output name=matrix::$(python -c 'import json, sys; print(json.dumps([v for v in sys.argv[1:]]))' $(find . -name Dockerfile))"
# this step is needed, so the output gets to the next defined job
outputs:
matrix: ${{ steps.output_data.outputs.matrix }}
build_and_push:
needs: provide_images_json
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
dockerfile: ${{fromJson(needs.provide_images_json.outputs.matrix)}}
steps:
- name: Clone Main Repo
uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Init env vars
run: |
fullDockerfilePath=${{ matrix.dockerfile }}
folder=${fullDockerfilePath%"/Dockerfile"}
TMP_IMAGE_ARRAY=($(echo $folder | tr "/" "\n"))
IMAGE_NAME=${TMP_IMAGE_ARRAY[1]}
IMAGE_NAME_ESCAPED=${IMAGE_NAME/-/--}
TAG=${TMP_IMAGE_ARRAY[2]}
IMAGE_TAG_ESCAPED=${TAG/-/--}
echo "IMAGE_NAME=$IMAGE_NAME" >> $GITHUB_ENV
echo "IMAGE_NAME_ESCAPED=$IMAGE_NAME_ESCAPED" >> $GITHUB_ENV
echo "IMAGE_TAG=$TAG" >> $GITHUB_ENV
echo "IMAGE_TAG_ESCAPED=$IMAGE_TAG_ESCAPED" >> $GITHUB_ENV
echo "DOCKERFILE_FOLDER=$folder" >> $GITHUB_ENV
- name: Build Docker Images
run: |
curl -LO https://storage.googleapis.com/container-structure-test/latest/container-structure-test-linux-amd64 && chmod +x container-structure-test-linux-amd64 && sudo mv container-structure-test-linux-amd64 /usr/local/bin/container-structure-test
folder=${{ env.DOCKERFILE_FOLDER }}
IMAGE_NAME=${{ env.IMAGE_NAME }}
TAG=${{ env.IMAGE_TAG }}
export REGISTRY_TARGET=${{ secrets.AKT_ENG_REGISTRY_DOMAIN }} && ./build.sh --lint=true --test=true --image=$IMAGE_NAME --tag=$TAG
IMAGE_ID=$REGISTRY_TARGET/$IMAGE_NAME
IMAGE_SIZE=`docker images $IMAGE_ID:$TAG --format "{{.Size}}"`
echo "IMAGE_SIZE=$IMAGE_SIZE" >> $GITHUB_ENV
- name: Login to target registry
if: github.ref == 'refs/heads/main'
uses: docker/login-action@v1
with:
registry: https://eu.gcr.io
username: _json_key
password: ${{ secrets.AKT_ENG_REGISTRY_PUBLIC_JSON }}
- name: Push images to GCR only on main branch
if: github.ref == 'refs/heads/main'
run: docker images --format "{{.Repository}}:{{.Tag}}" | grep ${{ secrets.AKT_ENG_REGISTRY_DOMAIN }} | xargs -n 1 docker push
# - name: Create custom badge for image size
# id: badge_size
# if: github.ref == 'refs/heads/main'
# uses: djalal/job-status-badge@main
# with:
# cloudinary_url: ${{ secrets.CLOUDINARY_URL }}
# left_text: "image%20size"
# right_text: ${{ (startsWith(job.status, 'success') && env.IMAGE_SIZE) || 'N/A' }}
# color: ${{ (startsWith(job.status, 'success') && 'blue') || 'gray' }}
# public_id: ${{ env.IMAGE_NAME }}_${{ env.IMAGE_TAG }}-size
#
# - name: Create custom badge for build
# id: badge_build
# if: github.ref == 'refs/heads/main'
# uses: djalal/job-status-badge@main
# with:
# cloudinary_url: ${{ secrets.CLOUDINARY_URL }}
# left_text: ${{ env.IMAGE_NAME_ESCAPED }}%3A${{ env.IMAGE_TAG_ESCAPED }}
# right_text: ${{ (startsWith(job.status, 'success') && 'passing') || 'failed' }}
# color: ${{ (startsWith(job.status, 'success') && 'green') || 'red' }}
# public_id: ${{ env.IMAGE_NAME }}_${{ env.IMAGE_TAG }}-status
purge_camo_badges:
needs: build_and_push
if: always()
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Purge badges from camo
run: |
PurgeBadgeList() {
while read -t5 URL Badge; do
URL="${URL%\"*}";
Badge="'${Badge#*\"}' "
echo -n "Purging Badge ${Badge}: ";
read -t60 result < <( curl --silent --request 'PURGE' -H 'Content-Type:application/json' --user-agent "$UserAgentString" --output '/dev/stdout' $URL | jq .status )
result="${result//\"/}"
echo "${result:-???}"
done
}
export -f PurgeBadgeList;
PurgeBadgeList < <(cat ./.github/workflows/PURGE.md | grep -o 'https://camo.githubusercontent.com.*alt="[^"]*')