From d939aea2429c3ca894ae74206469ea6260c294b9 Mon Sep 17 00:00:00 2001 From: "Jiaxiao (mossaka) Zhou" Date: Mon, 16 Feb 2026 18:09:59 +0000 Subject: [PATCH] feat: add ARM64 multi-architecture container builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Publish multi-arch (amd64 + arm64) container images to GHCR so that gh-aw-firewall works on ARM64 self-hosted runners. Changes to release.yml: - Add QEMU setup step for arm64 emulation via binfmt_misc - Add `platforms: linux/amd64,linux/arm64` to squid, agent, and api-proxy builds - Scope GHA caches per image to prevent cross-image cache collisions - Keep agent-act as amd64-only (catthehacker/ubuntu:act-24.04 has no arm64 manifest) No Dockerfile changes needed — all base images already publish arm64 manifests. Closes github/gh-aw#16005 Co-Authored-By: Claude Opus 4.6 (1M context) --- .github/workflows/release.yml | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 32fc8324b..35b9ad649 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -56,6 +56,11 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3.2.0 + with: + platforms: arm64 + - name: Install cosign uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 # v3.5.0 @@ -65,11 +70,12 @@ jobs: with: context: ./containers/squid push: true + platforms: linux/amd64,linux/arm64 tags: | ghcr.io/${{ github.repository }}/squid:${{ steps.version_early.outputs.version_number }} ghcr.io/${{ github.repository }}/squid:latest - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=squid + cache-to: type=gha,mode=max,scope=squid - name: Sign Squid image with cosign run: | @@ -96,6 +102,7 @@ jobs: with: context: ./containers/agent push: true + platforms: linux/amd64,linux/arm64 tags: | ghcr.io/${{ github.repository }}/agent:${{ steps.version_early.outputs.version_number }} ghcr.io/${{ github.repository }}/agent:latest @@ -128,11 +135,12 @@ jobs: with: context: ./containers/api-proxy push: true + platforms: linux/amd64,linux/arm64 tags: | ghcr.io/${{ github.repository }}/api-proxy:${{ steps.version_early.outputs.version_number }} ghcr.io/${{ github.repository }}/api-proxy:latest - cache-from: type=gha - cache-to: type=gha,mode=max + cache-from: type=gha,scope=api-proxy + cache-to: type=gha,mode=max,scope=api-proxy - name: Sign API Proxy image with cosign run: | @@ -154,12 +162,14 @@ jobs: ghcr.io/${{ github.repository }}/api-proxy@${{ steps.build_api_proxy.outputs.digest }} # Build agent-act image with catthehacker/ubuntu:act-24.04 base for GitHub Actions parity + # amd64-only: catthehacker/ubuntu:act-24.04 does not publish arm64 manifests - name: Build and push Agent-Act image id: build_agent_act uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5 with: context: ./containers/agent push: true + platforms: linux/amd64 tags: | ghcr.io/${{ github.repository }}/agent-act:${{ steps.version_early.outputs.version_number }} ghcr.io/${{ github.repository }}/agent-act:latest