Skip to content

Enhanced GitHub Workflow with ARM64 Docker Builds #426

Enhanced GitHub Workflow with ARM64 Docker Builds

Enhanced GitHub Workflow with ARM64 Docker Builds #426

Workflow file for this run

name: Main
on: [push, pull_request]
env:
should_push_image: |-
${{
github.event_name == 'push' && (
startsWith(github.event.ref, 'refs/tags/')
|| endsWith(github.event.ref, '/master')
)
}}
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: Cache docker buildx
uses: actions/cache@v2
with:
path: |
/home/runner/tmp
key: docker-tmp
- name: Compute Docker Tag
if: fromJSON(env.should_push_image)
id: compute_docker_tag
run: |
tag=${GITHUB_REF#refs/tags/}
branch=${GITHUB_REF#refs/heads/}
if [ "$tag" != "$GITHUB_REF" ]; then
tag=$(echo "$tag" | sed -e 's/[^a-zA-Z0-9\-\.]/-/g')
echo ::set-output name=DOCKER_TAG::${tag}
elif [ "$branch" != "$GITHUB_REF" ]; then
branch=$(echo "$branch" | sed -e 's/[^a-zA-Z0-9\-\.]/-/g')
echo ::set-output name=DOCKER_TAG::${branch}
else
echo "unable to determine docker tag" >&2
exit 1
fi
- name: Docker setup env
if: fromJSON(env.should_push_image)
run: |
echo "${{ secrets.DOCKER_HUB_PASSWORD }}" \
| docker login -u "${{ secrets.DOCKER_HUB_USER }}" --password-stdin
docker buildx create --use
docker buildx inspect --bootstrap
- name: Fill AMD64 cache
run: |
docker buildx build \
--platform linux/amd64 \
--cache-from type=local,src=/home/runner/tmp/amd64 \
--cache-to type=local,dest=/home/runner/tmp/amd64 \
--tag ${GITHUB_REPOSITORY,,}:amd64 \
--file cicd/Dockerfile .
- name: Fill ARM64 cache
run: |
docker buildx build \
--platform linux/arm64 \
--cache-from type=local,src=/home/runner/tmp/arm64 \
--cache-to type=local,dest=/home/runner/tmp/arm64 \
--tag ${GITHUB_REPOSITORY,,}:arm64 \
--file cicd/Dockerfile .
- name: Docker build from cache and push
if: fromJSON(env.should_push_image)
run: |
docker buildx build --push \
--platform linux/amd64,linux/arm64 \
--cache-from type=local,src=/home/runner/tmp/amd64 \
--cache-from type=local,src=/home/runner/tmp/arm64 \
--tag ${GITHUB_REPOSITORY,,}:${{ steps.compute_docker_tag.outputs.DOCKER_TAG }} \
--file cicd/Dockerfile .
- name: Docker build from cache & push latest
if: |
github.event_name == 'push' && (
startsWith(github.event.ref, 'refs/tags/')
)
run: |
docker buildx build --push \
--platform linux/amd64,linux/arm64 \
--cache-from type=local,src=/home/runner/tmp/amd64 \
--cache-from type=local,src=/home/runner/tmp/arm64 \
--tag ${GITHUB_REPOSITORY,,}:latest \
--file cicd/Dockerfile .