Build the aarch64 wheel on a native arm64 runner - #307
Merged
Merged
Conversation
The v4.0.0b4 release published nothing. Its `linux (aarch64)` job failed, and fail-fast then cancelled `linux (x86_64)`, so the `release` job never ran. maturin-action chooses its container from the host architecture. On an x64 host, target aarch64 cross-compiles in `rust-cross/manylinux2014-cross:aarch64`, whose toolchain is GCC 4.8.5. `libmimalloc-sys` 0.1.49 passes `-Wno-error=date-time` unconditionally on every non-Windows target, and GCC only knows `-Wdate-time` from 4.9, so that image cannot compile the bundled allocator. mimalloc arrived with the Rust rewrite, and b1 and b3 predate the wheel-building workflow, so this release was the first to reach that image. Move the aarch64 build to `ubuntu-24.04-arm`. maturin-action then selects `pypa/manylinux2014_aarch64`, which carries GCC 10. This keeps the glibc 2.17 floor that `manylinux: 2_28` would raise to 2.28, dropping CentOS 7 and Amazon Linux 2. Turn fail-fast off on every wheel matrix so one broken target reports its own result rather than hiding the others. Add a `manylinux-wheels` job to the pull request workflow. The `packaging` job builds with the runner's own compiler and never enters a manylinux container, so the release was the first place the release toolchain ran. Bump the artifact actions off the deprecated Node 20 runtime.
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
Closes: DNE
The
v4.0.0b4release published no artifacts. Itslinux (aarch64)job failed,fail-fastcancelledlinux (x86_64), and thereleasejob never ran.Cause
aarch64cross-compiles inrust-cross/manylinux2014-cross:aarch64, whose toolchain is GCC 4.8.5.libmimalloc-sys0.1.49build.rs:45passes-Wno-error=date-timeon every non-Windows target. It usesflag(), notflag_if_supported(). GCC knows-Wdate-timeonly from 4.9, socc1errors.mimallocarrived with Rust rewrite #302. Releases b1 and b3 predate the wheel-building workflow, so b4 was the first release to reach that image.libmimalloc-syson crates.io. No upstream fix exists.I probed each candidate image with Docker:
-Wno-error=date-timerust-cross/manylinux2014-cross:x86_64rust-cross/manylinux2014-cross:aarch64rust-cross/manylinux_2_28-cross:aarch64pypa/manylinux2014_aarch64Release workflow
linuxgains arunnermatrix.aarch64moves toubuntu-24.04-arm, so maturin-action selectspypa/manylinux2014_aarch64. The glibc 2.17 floor is unchanged.manylinux: 2_28. It builds, but it raises the floor to glibc 2.28 and drops CentOS 7 and Amazon Linux 2.fail-fast: falseon thelinux,windows,musllinuxandmacosmatrices. One broken target now reports its own result instead of hiding the others.actions/upload-artifactv4 to v7 andactions/download-artifactv4 to v8, off the deprecated Node 20 runtime. Every input in use still exists. v8 also turns an artifact digest mismatch into an error.Pull request workflow
manylinux-wheelsjob. It mirrors the releaselinuxmatrix. Thepackagingjob builds with the runner's own compiler and never enters a manylinux container, so the release was the first place the release toolchain ran.After merge
Re-run the deploy workflow for the
v4.0.0b4tag.--skip-existingprotects the upload step.Test plan
./scripts/build.py lint./scripts/build.py pytest --coveragemkdocs build --strictcargo fmt --checkcargo clippy --locked --all-targets --all-features -- -D warningscargo llvm-cov -p hier_config_core --fail-under-lines 90cargo test --locked --workspace --all-featureshier_config_corepasses; see belowcargo test -p hier_config --libaborts on my machine. The linker picks an x86_64 Homebrewlibpython3.13.dylibon an arm64 host, so dyld cannot resolve_PyBool_Type. I reproduced the same abort against unmodifiednext, so it is environmental and not from this change. CI runs the crate on clean runners.ubuntu-24.04-armis already proven here:rust-tests (ubuntu-24.04-arm)andpackaging (ubuntu-24.04-arm)pass onnext.Self-Review Checklist
uv run --no-sync ./scripts/build.py lint-and-testpasses locally (lint + 95% test coverage).uv run --no-sync maturin develop --release --locked; Cargo formatting, Clippy, tests, and native coverage (95%) pass. — No Rust changed, so the extension was not rebuilt. Formatting, Clippy and native coverage pass;cargo teston the PyO3 crate aborts for the environmental reason above.manylinux-wheelsjob is the regression guard: it fails on the pre-fix workflow and passes after it.CHANGELOG.mdhas an entry under## [Unreleased]referencing this issue/PR ((#NNN)).mkdocs build --strictpasses if docs were touched). — No public API or driver behavior changed;mkdocs build --strictpasses.AI-Assisted Contributions
Written with Claude Code and reviewed with the
hier-config-reviewskill.