Skip to content

ci: build multi-arch image on native runners (no QEMU)#60

Merged
wadahiro merged 1 commit into
mainfrom
ci/docker-native-multiarch
Jun 13, 2026
Merged

ci: build multi-arch image on native runners (no QEMU)#60
wadahiro merged 1 commit into
mainfrom
ci/docker-native-multiarch

Conversation

@wadahiro

Copy link
Copy Markdown
Owner

Speeds up the slowest part of the release pipeline. The release image previously built linux/arm64 under QEMU emulation, and emulating a Rust release compile is extremely slow. (For comparison, the native per-arch binary builds finish in ~1–2 min.)

Change

Rework the single docker job into the canonical Docker native-runner pattern:

  • docker-build — matrix building each arch on its own native runner (linux/amd64ubuntu-latest, linux/arm64ubuntu-24.04-arm, free for public repos), pushing by digest. No QEMU → both archs compile at native speed.
  • docker-merge — assembles the multi-arch manifest (semver + latest) from the per-arch digests via docker buildx imagetools create.

GHA build cache is scoped per platform; the unused QEMU setup step is removed. All actions remain SHA-pinned.

Notes

  • This is a ci: change → it does not trigger a release.
  • The per-arch build uses the same Dockerfile already verified building natively (arm64 locally, amd64 in the CI docker-build check). The new part is the digest/merge orchestration (standard Docker docs pattern); it gets its first real exercise on the next release. A failure there would only mean "no image for that release" (recoverable) — the release itself is created by release-please independently.

🤖 Generated with Claude Code

The release image build was the slow part of the release pipeline: it built
linux/arm64 under QEMU emulation, and emulating a Rust release compile is
extremely slow (the native per-arch binary builds finish in ~1-2 min, while
the emulated docker arm64 layer can take many times longer).

Rework the single `docker` job into the canonical native-runner pattern:
- `docker-build`: a matrix that builds each architecture on its own native
  runner (linux/amd64 on ubuntu-latest, linux/arm64 on ubuntu-24.04-arm),
  pushing each by digest. No QEMU, so both archs compile at native speed.
- `docker-merge`: assembles the multi-arch manifest list (semver + latest
  tags) from the per-arch digests with `docker buildx imagetools create`.

GHA build cache is scoped per platform to avoid cross-arch collisions. The
now-unused QEMU setup step is dropped.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@wadahiro wadahiro merged commit c390bda into main Jun 13, 2026
12 checks passed
@wadahiro wadahiro deleted the ci/docker-native-multiarch branch June 13, 2026 06:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant