Summary
Multi-arch Docker builds using QEMU emulation are slow because buildx emulates the CPU rather than cross-compiling. GitHub now offers native ARM runners (ubuntu-24.04-arm) that can build arm64 images natively.
Proposed change
Replace the single QEMU-emulated multi-platform Docker build with:
- A matrix strategy with two parallel jobs — one on
ubuntu-latest (amd64) and one on ubuntu-24.04-arm (arm64) — each building natively for its platform
- Each job pushes by digest and uploads the digest as an artifact
- A final manifest job downloads both digests and creates a multi-arch manifest list
Reference
This was implemented successfully in imposter-project/imposter-cli in commits d1addaf and cfbe507. See .github/workflows/ci.yaml in that repo for the working configuration.
This eliminates the QEMU dependency and runs both architecture builds in parallel on native hardware.
Summary
Multi-arch Docker builds using QEMU emulation are slow because buildx emulates the CPU rather than cross-compiling. GitHub now offers native ARM runners (
ubuntu-24.04-arm) that can build arm64 images natively.Proposed change
Replace the single QEMU-emulated multi-platform Docker build with:
ubuntu-latest(amd64) and one onubuntu-24.04-arm(arm64) — each building natively for its platformReference
This was implemented successfully in imposter-project/imposter-cli in commits d1addaf and cfbe507. See
.github/workflows/ci.yamlin that repo for the working configuration.This eliminates the QEMU dependency and runs both architecture builds in parallel on native hardware.