ci: build aarch64 and armv7l wheels on native ARM runners#1354
Merged
Conversation
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-arm hosted runner. aarch64 now builds natively with no emulation. armv7l still gets docker/setup-qemu-action so binfmt registers a 32-bit ARM handler whether or not the host kernel ships CONFIG_COMPAT; even under 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 setup since there are no native GH-hosted runners for those. The matrix gains an include: block that overrides runner-vm-os and a native-arch flag per arch; the job-level qemu and runner-vm-os expressions fall back to the previous behaviour for the unmodified arches.
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.
Ported from the equivalent yarl change in aio-libs/yarl#1724.
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. Release CI time on the aarch64
leg should drop from roughly 40 minutes to a few minutes.
Is it a substantial burden for the maintainers to support this?
No.
ubuntu-24.04-armis GA on public repositories; thewindows-11-armprecedent already in this workflow has the sameshape, and the reusable workflow's
qemu/runner-vm-osinputsstay unchanged.
Related issue number
No tracking issue; ported from 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/1354.contrib.rst docs/spelling_wordlist.txt(yamllint, Validate GitHub Workflows, Check GitHub Workflows set timeout-minutes, changelog:user:role check) all passed.python -c "yaml.safe_load(open('.github/workflows/ci-cd.yml'))"confirms the matrixinclude:shape and that the${{ ! matrix.native-arch }}/${{ matrix.runner-vm-os || 'ubuntu-latest' }}expressions parse cleanly.make doc-spellingreports only 5 pre-existing misspellings inCHANGES.rstthat are also present onmaster; the fragment introducedaarchonly, 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.