ci(uv): run cross-built wheels on native-arch runners - #1507
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
✨ Aspect Workflows Tasks📅 Wed Sep 9 18:43:29 UTC 2026 ✅ 44 successful tasks
⏱ Last updated Wed Sep 9 18:59:33 UTC 2026 · 📊 GitHub API quota 0/15,000 (0% used, resets in 1h 0m) |
py_binary startup benchmark
sys.path quality
Bazel analysis benchmark
py_image_layer benchmark
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 5ba3f3ec85
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
5ba3f3e to
81175ed
Compare
81175ed to
bda720b
Compare
454282e to
b2164a9
Compare
Each non-Rust crossbuild case exports <case>_{amd64,arm64}_bundle tarballs
(wheel plus its standalone test); CI cross-builds them on one runner,
uploads them, and pip-installs and runs them on a native runner of the
target architecture. Three pipelines: darwin -> linux/amd64+arm64 (gated to
main and *macos* branches), amd64 -> arm64, arm64 -> amd64. test-all gates
on the Linux pair. The bundle steps pass --remote_download_outputs=toplevel:
--config=ci builds without the bytes, and a warm cache otherwise leaves the
tarballs this job uploads undownloaded.
New cases, all cross-built for linux/amd64 and linux/arm64 and imported
natively: pycross-geohash (C++ with no upstream wheel, plus a manual macOS
amd64 cross collection driven by test.sh on macOS hosts), pycross-msgpack
(Cython via setuptools), pycross-numpy (meson-python with config_settings
for no BLAS), pycross-psutil, and pycross-compile_pyc (cross-arch pyc
precompilation regression guard). collect_wheels gains tags and check_elf
for the macOS collection; pycross-setuptools shares its setproctitle wheel
label between collect_wheels and the export.
pycross-rust keeps building as before and exports nothing, so the pipelines
do not depend on the Rust toolchain work. No change under uv/.
bda720b to
ffdedc6
Compare
The root and e2e/cases suites already run on Linux for every PR, and the crossbuild cases are exercised by the darwin cross-build pipeline. The job tripled macOS minutes without covering anything new.
test-all iterates over toJSON(needs) instead of spelling each job out, so a job added to needs cannot be forgotten by the gate. The darwin run job may be skipped only where the darwin pipeline is gated off; on main and *macos* branches a skipped run means its upstream build failed or was cancelled, and fails the gate.
…-exec-verify-macos # Conflicts: # e2e/README.md
pycross-rust, pycross-bcrypt and pycross-tiktoken get the pycross_wheel_export from #1507, so CI installs and runs their cross-built wheels on native amd64 and arm64 runners like every other crossbuild case.
pycross-rust, pycross-rust-rs and pycross-tiktoken get the pycross_wheel_export from #1507, so CI installs and runs their cross-built wheels on native amd64 and arm64 runners like every other crossbuild case. The rules_rs case's test file takes the bundle's name so the runner finds it.
pycross-rust, pycross-rust-rs and pycross-tiktoken get the pycross_wheel_export from #1507, so CI installs and runs their cross-built wheels on native amd64 and arm64 runners like every other crossbuild case. The rules_rs case's test file takes the bundle's name so the runner finds it.
pycross-rust, pycross-rust-rs and pycross-tiktoken get the pycross_wheel_export from #1507, so CI installs and runs their cross-built wheels on native amd64 and arm64 runners like every other crossbuild case. The rules_rs case's test file takes the bundle's name so the runner finds it. The crossbuild README lists the Rust cases alongside the other backends.
CI and e2e only: no change under
uv/; the public API is unchanged.Native-arch verification (
.github/workflows/ci-workflows.yaml): each crossbuild case exports<case>_{amd64,arm64}_bundletarballs (wheel plus its standalonetest_<case>.py,e2e/crossbuild/tools/wheel_export.bzl). Three pipelines cross-build on one runner, upload the bundles, andpip install+ run them on a native runner of the target architecture, with no containers and no emulation in the verdict:mainand*macos*branches),test-allgates on the two Linux pipelines and acceptsskippedfor the macOS one outside the gated branches. The bundle-building steps pass--remote_download_outputs=toplevel:--config=cibuilds without the bytes, and with a warm cache the tarballs this job uploads were not materialized (the first run of this branch passed only because its cache was cold).New cases, all built for linux/amd64 and linux/arm64 with
collect_wheels(Tag metadata, ELF arch of every bundled.so) plus a native import test:pycross-geohash: C++ extension with no upstream wheel. On a macOS host,test.shalso cross-builds it for macOS amd64 (a manualcollect_wheelswithcheck_elf = False; the platform transition always resolves to os:macos, sotarget_compatible_withcannot tell hosts apart).pycross-msgpack: Cython-generated C extension via setuptools.pycross-numpy: meson-python withconfig_settings = {"setup-args": ["-Dblas=none", "-Dlapack=none"]}(feat(uv): config_settings on uv.override_package for PEP 517 backends #1524); the hermetic sandbox has no BLAS.pycross-psutil: plain setuptools C extension.pycross-compile_pyc: regression guard for cross-archwhl_installpyc precompilation.The Rust cases stay out of this PR on purpose:
pycross-rustkeeps building as onmainand gets no export, so the pipelines never depend on the Rust toolchain work in #1526. Once that lands, the Rust cases join the native runs with a one-linepycross_wheel_exporteach.The macOS
smokejob is removed: the root ande2e/casessuites already run on Linux for every PR, and the crossbuild cases are exercised by the darwin cross-build pipeline above, so it tripled macOS minutes without covering anything new.collect_wheelsgainstagsandcheck_elffor the macOS collection;pycross-setuptoolsshares its setproctitle wheel label betweencollect_wheelsand the export instead of repeating it.Changes are visible to end-users: no
Test plan
cd e2e/crossbuild && bazel test //... && bash test.shpasses locally.test-all.