Skip to content

ci: build Linux wheels on manylinux_2_28 instead of manylinux2014#326

Merged
ryanhill1 merged 1 commit into
mainfrom
fix/manylinux-2-28-wheels
Jul 12, 2026
Merged

ci: build Linux wheels on manylinux_2_28 instead of manylinux2014#326
ryanhill1 merged 1 commit into
mainfrom
fix/manylinux-2-28-wheels

Conversation

@ryanhill1

@ryanhill1 ryanhill1 commented Jul 12, 2026

Copy link
Copy Markdown
Member

Summary of changes

Every Linux wheel job for cp312 / cp313 / cp314 is currently failing on main and 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 ships manylinux_2_27 / manylinux_2_28 only. NumPy is a build dependency here (it's in build-system.requires, and the Cython extension compiles against its headers), so pip inside the manylinux2014 build 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:

Downloading numpy-2.5.1.tar.gz (20.8 MB)
...
../meson.build:25:4: ERROR: Problem encountered: NumPy requires GCC >= ...
error: metadata-generation-failed

cp310/cp311 still pass only because pip resolves 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 manylinux2014 to manylinux_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:

pyqasm-1.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

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:

Image Python What pip resolves NumPy to
manylinux2014 cp312 numpy-2.5.1.tar.gz (source build → GCC error)
manylinux_2_28 cp312 numpy-2.5.1-cp312-...-manylinux_2_28_x86_64.whl
manylinux_2_28 cp314 numpy-2.5.1-cp314-...-manylinux_2_28_x86_64.whl

Also ran cibuildwheel locally end-to-end for cp312-manylinux_x86_64 against 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 main now pass.

@ryanhill1 ryanhill1 requested a review from TheGupta2012 as a code owner July 12, 2026 14:44
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: cf94c92a-8eb1-493e-aeda-1a97f8c452a7

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/manylinux-2-28-wheels

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov-commenter

Copy link
Copy Markdown

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.
@ryanhill1 ryanhill1 force-pushed the fix/manylinux-2-28-wheels branch from 1a88a47 to 6f20707 Compare July 12, 2026 14:50
@ryanhill1 ryanhill1 merged commit 13a1b0b into main Jul 12, 2026
26 checks passed
@ryanhill1 ryanhill1 deleted the fix/manylinux-2-28-wheels branch July 12, 2026 15:03
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.

2 participants