Skip to content

ci: build aarch64 and armv7l wheels on native ARM runners#1354

Merged
bdraco merged 1 commit into
aio-libs:masterfrom
bdraco:ci/native-arm-wheels
May 19, 2026
Merged

ci: build aarch64 and armv7l wheels on native ARM runners#1354
bdraco merged 1 commit into
aio-libs:masterfrom
bdraco:ci/native-arm-wheels

Conversation

@bdraco
Copy link
Copy Markdown
Member

@bdraco bdraco commented May 19, 2026

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-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.

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-arm is GA on public repositories; the
windows-11-arm precedent already in this workflow has the same
shape, and the reusable workflow's qemu / runner-vm-os inputs
stay unchanged.

Related issue number

No tracking issue; ported from aio-libs/yarl#1724.

Checklist

  • I think the code is well written
  • Unit tests for the changes exist - N/A (CI-only change, exercised by the next release run)
  • Documentation reflects the changes - N/A
  • If you provide code modification, please add yourself to CONTRIBUTORS.txt - already listed
  • Add a new news fragment into the CHANGES/ folder
Agent 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 matrix include: shape and that the ${{ ! matrix.native-arch }} / ${{ matrix.runner-vm-os || 'ubuntu-latest' }} expressions parse cleanly.
  • make doc-spelling reports only 5 pre-existing misspellings in CHANGES.rst that are also present on master; the fragment introduced aarch only, added to docs/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.

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.
@psf-chronographer psf-chronographer Bot added the bot:chronographer:provided There is a change note present in this PR label May 19, 2026
@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented May 19, 2026

Merging this PR will not alter performance

✅ 242 untouched benchmarks


Comparing bdraco:ci/native-arm-wheels (c4ce09d) with master (6696a1c)

Open in CodSpeed

@bdraco bdraco marked this pull request as ready for review May 19, 2026 21:25
@bdraco bdraco requested review from asvetlov and webknjaz as code owners May 19, 2026 21:25
@bdraco bdraco merged commit 6134040 into aio-libs:master May 19, 2026
52 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bot:chronographer:provided There is a change note present in this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant