Skip to content

ci(python): build aarch64 wheels on native ubuntu-24.04-arm#1495

Merged
chaliy merged 1 commit intomainfrom
claude/fix-aarch64-wheel-native-runner
Apr 30, 2026
Merged

ci(python): build aarch64 wheels on native ubuntu-24.04-arm#1495
chaliy merged 1 commit intomainfrom
claude/fix-aarch64-wheel-native-runner

Conversation

@chaliy
Copy link
Copy Markdown
Contributor

@chaliy chaliy commented Apr 30, 2026

Summary

Build aarch64 Python wheels on a native ubuntu-24.04-arm runner instead of cross-compiling from x86_64 inside the manylinux container.

The cross-compile path has now broken our publish twice in a row, each time on a different transitive C dep:

  • v0.2.0aws-lc-sys 0.39.1 references AT_HWCAP2, missing from the manylinux2014 cross sysroot's glibc 2.17 headers.
  • v0.2.1 — switched rustls to ring (fix(http): switch rustls crypto provider to ring #1493) to drop aws-lc-sys, and ring's aarch64 .S files now fail to compile with error: ARM assembler must define __ARM_ARCH because the cross aarch64-linux-gnu-gcc doesn't predefine the macro.

Both are cross-compile-toolchain gaps, not bugs in our code or the crypto crates. The clean fix is to build natively: maturin sees host == target and never involves the cross gcc. publish-js.yml already uses ubuntu-24.04-arm for its aarch64 NAPI binding (see the JS native binding matrix in specs/release-process.md); this brings the Python wheel build in line.

Change

   - os: linux
     target: aarch64
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04-arm

   - os: linux
     target: aarch64
     manylinux: musllinux_1_1
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04-arm

Commit message has the full background.

Test plan

  • YAML lint passes
  • CI green on PR (workflow file change only — actual exercise comes from dispatch)
  • After merge: workflow_dispatch publish-python.yml against main. The workflow checks out main where Cargo.toml is already at 0.2.1, so the wheels built will be bashkit-0.2.1-*.whl. PyPI trusted publishing then uploads v0.2.1.
  • pip index versions bashkit shows 0.2.1

Generated by Claude Code

The auto manylinux container's cross-compile toolchain has had two
distinct breakages in a row when building the linux/aarch64 wheel:

- v0.2.0: aws-lc-sys 0.39.1 required AT_HWCAP2, but the cross sysroot
  ships glibc 2.17 (manylinux2014) which is missing it.
- v0.2.1: after switching rustls to ring (#1493) to drop aws-lc-sys,
  ring's aarch64 .S assembler fails with `ARM assembler must define
  __ARM_ARCH` because the cross gcc doesn't predefine it.

Both are cross-compile-toolchain gaps, not bugs in our code or the
crypto crates. Building the aarch64 wheels on a native arm64 runner
sidesteps the entire class -- maturin sees host==target and never
involves the cross gcc. publish-js.yml already uses ubuntu-24.04-arm
for its aarch64 NAPI binding (see specs/release-process.md JS native
binding matrix).

Apply the same fix to both linux/aarch64 wheel rows -- manylinux auto
and musllinux_1_1.
@cloudflare-workers-and-pages
Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
bashkit 462d577 Commit Preview URL

Branch Preview URL
Apr 30 2026, 05:59 PM

@chaliy chaliy merged commit d89d4f6 into main Apr 30, 2026
16 checks passed
@chaliy chaliy deleted the claude/fix-aarch64-wheel-native-runner branch April 30, 2026 18:09
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 30, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant