From 6f207079ac6293e65a4e4a3fb9f7f6b360bc1428 Mon Sep 17 00:00:00 2001 From: Ryan Hill Date: Sun, 12 Jul 2026 09:43:37 -0500 Subject: [PATCH] ci: build Linux wheels on manylinux_2_28 instead of manylinux2014 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. --- .github/workflows/main.yml | 12 ++++++------ .github/workflows/pre-release.yml | 12 ++++++------ .github/workflows/release.yml | 12 ++++++------ .github/workflows/test-release.yml | 12 ++++++------ CHANGELOG.md | 1 + 5 files changed, 25 insertions(+), 24 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 69db59f..daa169c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,27 +36,27 @@ jobs: python: 314 platform_id: win_amd64 - # Linux 64 bit manylinux2014 + # Linux 64 bit manylinux_2_28 - os: ubuntu-latest python: 310 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 311 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 312 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 313 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 314 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 # MacOS x86_64 - os: macos-15-intel diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index cdca022..c3b99e1 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -30,27 +30,27 @@ jobs: python: 314 platform_id: win_amd64 - # Linux 64 bit manylinux2014 + # Linux 64 bit manylinux_2_28 - os: ubuntu-latest python: 310 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 311 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 312 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 313 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 314 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 # MacOS x86_64 - os: macos-15-intel diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 142c34d..d660a47 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,27 +32,27 @@ jobs: python: 314 platform_id: win_amd64 - # Linux 64 bit manylinux2014 + # Linux 64 bit manylinux_2_28 - os: ubuntu-latest python: 310 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 311 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 312 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 313 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 314 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 # MacOS x86_64 - os: macos-15-intel diff --git a/.github/workflows/test-release.yml b/.github/workflows/test-release.yml index bd2b947..838f1aa 100644 --- a/.github/workflows/test-release.yml +++ b/.github/workflows/test-release.yml @@ -30,27 +30,27 @@ jobs: python: 314 platform_id: win_amd64 - # Linux 64 bit manylinux2014 + # Linux 64 bit manylinux_2_28 - os: ubuntu-latest python: 310 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 311 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 312 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 313 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 - os: ubuntu-latest python: 314 platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 + manylinux_image: manylinux_2_28 # MacOS x86_64 - os: macos-15-intel diff --git a/CHANGELOG.md b/CHANGELOG.md index 511e2b8..7c3e00b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ Types of changes: - Fixed the backend-dependent `dt` duration unit being incorrectly relabeled as `ns` when unrolling `delay` and `box` statements without a `device_cycle_time`. Since `dt` cannot be converted to SI units without a sample rate, it is now preserved as `dt`. ([#317](https://github.com/qBraid/pyqasm/pull/317)) ### Dependencies +- Migrated the Linux wheel *build container* from `manylinux2014` to `manylinux_2_28`. NumPy stopped publishing `manylinux2014` (glibc 2.17) wheels for CPython 3.12+, so `pip` fell back to building NumPy from source inside the build container, whose GCC is older than NumPy requires — failing every Linux wheel job for cp312/cp313/cp314. The published wheels are unaffected: auditwheel tags them from the extension's actual symbol requirements, so they remain `manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64` and still install on glibc 2.17 systems. - Bumped `actions/configure-pages` from 5 to 6. ([#307](https://github.com/qBraid/pyqasm/pull/307)) - Bumped `codecov/codecov-action` from 5.5.2 to 6.0.0. ([#308](https://github.com/qBraid/pyqasm/pull/308)) - Bumped `actions/deploy-pages` from 4 to 5. ([#309](https://github.com/qBraid/pyqasm/pull/309))