ci: build aarch64 and armv7l wheels on native ARM runners#774
Merged
Conversation
GitHub now provides public hosted Linux ARM64 runners (`ubuntu-24.04-arm`), so the aarch64 wheel build no longer needs to run under QEMU emulation on x86_64. The armv7l build also moves to the same aarch64 host; QEMU stays registered so binfmt picks up the 32-bit ARM userspace handler whether or not the host kernel has CONFIG_COMPAT enabled, and even with emulation aarch64-on-aarch64 is far cheaper than the previous aarch64-on-x86_64 path. The ppc64le, s390x, and riscv64 builds keep their ubuntu-latest + QEMU setup since there are no native GH-hosted runners for those. Each (qemu, tag) include combination is listed explicitly rather than letting partial-key include merging fan out across both tag values implicitly, and the qemu input is passed as a real boolean expression (`! matrix.native-arch`) instead of string literals.
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 do these changes do?
Move the aarch64 and armv7l legs of the odd-arch wheel matrix off the
x86_64 QEMU path and onto GitHub's public
ubuntu-24.04-armhostedrunner. aarch64 now builds natively with no emulation. armv7l still
gets
docker/setup-qemu-actionso binfmt registers a 32-bit ARMhandler whether or not the host kernel ships
CONFIG_COMPAT; evenunder emulation, running on an aarch64 host is far cheaper than the
previous aarch64-on-x86_64 layout.
ppc64le, s390x, and riscv64 keep the
ubuntu-latest+ QEMU setupsince there are no native GH-hosted runners for those.
The matrix gains an
include:block that overridesrunner-vm-osand a
native-archflag per arch; the job-levelqemuandrunner-vm-osexpressions fall back to the previous behaviour forthe unmodified arches.
This is a port of aio-libs/yarl#1724 to
frozenlist; thereusable-cibuildwheel.ymlalready exposes arunner-vm-osinputso no change to the reusable workflow is needed.
Are there changes in behavior for the user?
No. Wheels are still built for the same architectures and tags; only
the host that builds them changes. CI time on the aarch64 leg should
drop significantly.
Related issue number
No tracking issue; mirrors aio-libs/yarl#1724.
Checklist
CONTRIBUTORS.txt— already listedCHANGES/folderAgent run details (optional, for reviewers)
Drafted with Claude Code (claude-opus-4-7); reviewed by @bdraco.
Local validation:
pre-commit run --files .github/workflows/ci-cd.yml CHANGES/774.contrib.rst docs/spelling_wordlist.txt— passed (yamllint, actionlint, GH workflow validation, codespell).python -c "yaml.safe_load(open('.github/workflows/ci-cd.yml'))"confirms the matrixinclude:shape and the${{ ! matrix.native-arch }}/${{ matrix.runner-vm-os || 'ubuntu-latest' }}expressions parse cleanly.make doc-spellingreports only the pre-existingunobviousmisspelling inCHANGES/README.rston master; the new fragment introducesaarchonly, which is added todocs/spelling_wordlist.txt.Not validated locally: actual native-ARM cibuildwheel run. The runner label and matrix wiring look correct, but the real proof is the first CI run on this branch.