Repository navigation
Publish the image for linux/arm64 as well as linux/amd64 - #4
Merged
Merged
Conversation
The release built amd64 only, because an arm64 leg of this Rust build under QEMU was too slow to be worth it. Build each architecture natively instead: amd64 on ubuntu-latest, arm64 on the ubuntu-24.04-arm runner. Each job pushes its image by digest and a merge job tags a manifest list over both, so the version and latest tags stay a single multi-arch image. Cross-compiling was the other option, but aws-lc-sys (rustls' crypto provider) needs an aarch64 C toolchain and cmake in the builder; native runners keep the Dockerfile unchanged. Pull requests now run both builds with nothing pushed, and every build is smoke-tested on its own runner: the image architecture matches the target, the binary prints its version, and config.example.yaml passes --config-check.
The image's architecture field is only what the image claims. An amd64 binary inside an arm64 image still runs on a runner with binfmt emulation, so --version alone would not catch it; read the ELF machine of the binary copied out of the image and require it to match.
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
4pdosc/cache_aware_routeris published as a multi-arch image (linux/amd64 + linux/arm64) instead of amd64 only.ubuntu-latest, arm64 onubuntu-24.04-arm.mergejob then creates a manifest list over both digests and puts the version tag (andlatest, except for prereleases) on it. The tag logic is unchanged.--version, andconfig.example.yamlpasses--config-check.Why native runners
An arm64 leg under QEMU is what kept this amd64-only: compiling Rust there is very slow. Cross-compiling with cargo was the alternative, but
aws-lc-sys(rustls' crypto provider) needs an aarch64 C toolchain and cmake in the builder. Native arm64 runners keep the Dockerfile unchanged and build at native speed.Testing
The PR run itself is the test: both platform builds and their smoke tests must pass. The push path (digest push + manifest merge) only runs on a tag.