ci: build Linux wheels on manylinux_2_28 instead of manylinux2014#326
Conversation
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Every Linux wheel job for cp312/cp313/cp314 fails. NumPy no longer
publishes manylinux2014 (glibc 2.17) wheels for those interpreters -- it
ships manylinux_2_27/manylinux_2_28 only -- so pip falls back to building
NumPy from source inside the manylinux2014 container, whose GCC is older
than NumPy's meson build requires:
Downloading numpy-2.5.1.tar.gz (20.8 MB)
../meson.build:25:4: ERROR: Problem encountered: NumPy requires GCC >= ...
NumPy is a build dependency here (build-system.requires, and the Cython
extension includes its headers), so this is unavoidable while the build
container is manylinux2014.
Only the build container changes. auditwheel tags the repaired wheel from
the extension's actual symbol requirements, so the published artifact is
still tagged
manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64 and
installs on glibc 2.17 systems exactly as before -- verified in CI.
Applied to all four workflows that build wheels -- main, release,
pre-release and test-release -- so the release pipeline does not hit the
same wall.
1a88a47 to
6f20707
Compare
Summary of changes
Every Linux wheel job for cp312 / cp313 / cp314 is currently failing on
mainand on every open PR (e.g. #324, #325). This fixes them.Why they fail
NumPy no longer publishes
manylinux2014(glibc 2.17) wheels for those interpreters — it shipsmanylinux_2_27/manylinux_2_28only. NumPy is a build dependency here (it's inbuild-system.requires, and the Cython extension compiles against its headers), sopipinside themanylinux2014build container finds no compatible wheel, falls back to a source build, and dies because that image's GCC is older than NumPy's meson build requires:cp310/cp311 still pass only because
pipresolves them to an older NumPy that does have a manylinux2014 wheel — so this was always going to spread as those interpreters age out.Note
The
Error response from daemon: No such image: quay.io/pypa/manylinux2014_x86_64:...line in the failing logs is a red herring — cibuildwheel emits it before pulling, and it appears on successful builds too. The image is pullable; the NumPy source build is the real failure.The fix
Switch the Linux build container from
manylinux2014tomanylinux_2_28, which is the platform NumPy itself now targets.Applied to all four workflows that build wheels —
main,release,pre-release,test-release— so the release pipeline doesn't hit the same wall when publishing.No impact on users
Only the build container changes; the published artifact does not. auditwheel tags the repaired wheel from the extension's actual symbol requirements, not from the image it was built in, and pyqasm's Cython extension only needs old glibc symbols. The wheel CI produces on this branch is still tagged:
so it installs on glibc 2.17 systems exactly as before. No minimum-glibc bump.
Verification
Reproduced the failure and confirmed the fix directly inside the images:
manylinux2014numpy-2.5.1.tar.gz(source build → GCC error)manylinux_2_28numpy-2.5.1-cp312-...-manylinux_2_28_x86_64.whlmanylinux_2_28numpy-2.5.1-cp314-...-manylinux_2_28_x86_64.whlAlso ran
cibuildwheellocally end-to-end forcp312-manylinux_x86_64against this branch: wheel built and the in-container test suite passed (671 passed, 3 skipped).CI on this PR is green — all five Linux wheel jobs that fail on
mainnow pass.