Repository navigation
feat: build and test on native arm64 runners - #176
Merged
Merged
Conversation
Replace the moving <os>-latest labels with the newest generally available images (Ubuntu 26.04, Windows Server 2025, and macOS 26) so runner upgrades happen deliberately.
Add Ubuntu 26.04 arm64 and Windows 11 arm64 runners to the test and wheel matrices. Linux aarch64 wheels are now built natively instead of under QEMU, and Windows ARM64 wheels are published for the first time. macOS already runs on Apple silicon and keeps building both x86_64 and arm64 wheels. Name wheel artifacts after the runner label so the two Linux and two Windows jobs do not collide.
PyYoshi
force-pushed
the
feat/native-arm64-runners
branch
from
October 5, 2026 12:18
eb0f833 to
a2a59f2
Compare
uv resolved the matrix versions to emulated x86-64 interpreters on the windows-11-arm runner, so those jobs never exercised ARM64 and the free-threaded 3.15 job failed while building an x86-64 dependency with the ARM64 Rust toolchain. Request the aarch64 build explicitly there, and check on every runner that the interpreter architecture matches the runner.
macOS runners provide python.org universal2 interpreters, whose sysconfig platform names neither architecture alone. Check the running process architecture for those builds instead.
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.
Summary
<os>-latestlabels:ubuntu-26.04,windows-2025, andmacos-26ubuntu-26.04-armandwindows-11-arm, to both the test matrix and the wheel matrixwin_arm64) wheels for the first timematrix.osso the two Linux and two Windows jobs do not collide; the publish job still downloads them withpattern: "*"On
windows-11-arm, uv resolved plain version requests such as3.15tto emulated x86-64 interpreters. The first CI run therefore tested x86-64 rather than ARM64 there, andPython 3.15t / windows-11-armfailed while buildingnh3for x86-64 with the runner's ARM64 Rust toolchain. The test job now requestscpython-<version>-windows-aarch64-noneon that runner, and a newCheck interpreter architecturestep on every runner asserts that the interpreter architecture matchesRUNNER_ARCH. The step usessysconfig.get_platform(), except for the python.orguniversal2interpreters on macOS runners, where it checksplatform.machine()of the running process instead. The wheel jobs were unaffected because cibuildwheel uses the nativepythonarm64packages and theHostARM64\ARM64MSVC toolchain.With the
[tool.cibuildwheel.linux]override removed,archs = "auto"selects only the native architecture of each runner:ubuntu-26.04ubuntu-26.04-armwindows-2025windows-11-armmacos-26(Apple silicon)All standard GitHub-hosted runners, including the arm64 ones, are free and unlimited for public repositories.
Merge notes
Protect masterruleset now requires the new job names. The policy is unchanged: Python 3.11–3.14 on every runner (now including the arm64 ones), plusNative ASan / UBSan,Verify distributions, and the fiveWheels / <runner>jobs, for 27 checks in total.CHANGES.mdentries share the existingUnreleasedsection. The README "Support Platforms" list now includes Windows ARM64.Validation
ubuntu:26.04container (GCC 15.2), which matches the newNative ASan / UBSanrunnercp311–cp315twin_arm64identifiers with--archs ARM64, and itsautoselection is native-only (plus x86 on Windows AMD64)libssl-dev. CI needs these when it builds dev dependencies that ship no free-threaded wheels.ubuntu-26.04andubuntu-26.04-armare unknown labels, because its built-in label list predates themuv lock --checkpassescp311–cp315tfor bothmanylinux_aarch64andwin_arm64References
archsoption: https://cibuildwheel.pypa.io/en/stable/options/#archs