From 364d509949f41f671465853d33e931321237b777 Mon Sep 17 00:00:00 2001 From: Robbie Blaine <4052340+rblaine95@users.noreply.github.com> Date: Tue, 22 Oct 2024 16:41:10 +0000 Subject: [PATCH] Improved Docker build action * Split each architecture with a matrix build so each arch builds on it's own runner * Cache all architectures in GHA * Combine and push in final step --- .github/workflows/docker.yml | 45 ++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 23ca067..2a7b04d 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -9,14 +9,44 @@ env: jobs: build: name: Build + runs-on: ${{ matrix.runs-on }} + strategy: + matrix: + arch: [amd64, arm64, armv7] + include: + - arch: amd64 + runs-on: ubuntu-latest + platform: linux/amd64 + - arch: arm64 + runs-on: ubuntu-latest + platform: linux/arm64 + # One day, when ARM based Github Hosted Runners are GA... + # https://github.com/github/roadmap/issues/970 + # runs-on: ubuntu-latest-arm64 + - arch: armv7 + runs-on: ubuntu-latest + platform: linux/arm/v7 + steps: + - uses: actions/checkout@v4 + - uses: docker/setup-qemu-action@v3 + if: ${{ matrix.arch != 'amd64' }} + - uses: docker/setup-buildx-action@v3 + - uses: docker/build-push-action@v6 + with: + platforms: ${{ matrix.platform }} + push: false + cache-from: | + type=gha,scope=docker-build-${{ matrix.arch }} + cache-to: | + type=gha,mode=max,scope=docker-build-${{ matrix.arch }} + context: . + combine: + needs: [build] runs-on: ubuntu-latest permissions: contents: read packages: write steps: - - uses: actions/checkout@v4 - - uses: docker/setup-qemu-action@v3 - - uses: docker/setup-buildx-action@v3 - uses: docker/login-action@v3 with: registry: ghcr.io @@ -42,5 +72,10 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: | + type=gha,scope=docker-package + type=gha,scope=docker-build-amd64 + type=gha,scope=docker-build-arm64 + type=gha,scope=docker-build-armv7 + cache-to: | + type=gha,mode=max,scope=docker-package