From eda774d8261bd0b0c017ca4e9480b5a4452f7f68 Mon Sep 17 00:00:00 2001 From: yokofly Date: Fri, 12 Jun 2026 07:54:06 -0700 Subject: [PATCH] Unpin cibuildwheel container images so the release can build 3.14 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cibuildwheel 3.x rejects the musllinux_1_1 alias outright (it killed release run 27423060149 at startup), and the manylinux2014 images froze at CentOS 7 EOL without Python 3.14, so neither pin can produce cp314/cp314t wheels. The 3.4.1 defaults (manylinux_2_28 / musllinux_1_2) carry every targeted interpreter. Verified locally: the config now yields the full identifier set (cp38-cp314t + pp311, x86_64 + aarch64) and a real cp314t wheel builds through cibuildwheel with the smoke test passing; auditwheel grades it to manylinux2014/manylinux_2_17, so old-glibc compatibility survives the newer build image. This failure class was invisible to PR CI because only the release workflow runs cibuildwheel — so the test workflow now builds one real wheel (cp314t) through cibuildwheel on every PR, which resolves all image options upfront and fails in seconds on config rot. Co-Authored-By: Claude Fable 5 --- .github/workflows/test.yml | 21 +++++++++++++++++++++ CHANGELOG.md | 6 ++++++ pyproject.toml | 19 +++++-------------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6c039c7..339721b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -173,6 +173,27 @@ jobs: python -m pip install pytest python -m pytest tests/test_freethreading.py::ExtensionConcurrencyTestCase -v + # The release workflow is the only other place cibuildwheel runs, so its + # config rots invisibly: the stale musllinux_1_1 image pin killed release + # run 27423060149 at startup despite fully green PR checks. cibuildwheel + # resolves every image option upfront (verified: a bad musllinux pin fails + # this job in seconds even though it builds a manylinux target), so + # building one real wheel here surfaces config breakage — and runs the + # in-container block-import smoke test — on every PR instead of at + # release time. + cibuildwheel-smoke: + name: cibuildwheel config + single-wheel build + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - name: Build one wheel through cibuildwheel + # Keep the version in lockstep with the release workflow + # (.github/workflows/actions.yml) — validating with a different + # cibuildwheel than the release uses defeats the purpose. + uses: pypa/cibuildwheel@v3.4.1 + with: + only: cp314t-manylinux_x86_64 + coveralls-finished: name: Indicate completion to coveralls.io needs: tests diff --git a/CHANGELOG.md b/CHANGELOG.md index 559e410..8283fd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,12 @@ 0.2.10 had shipped one, so interpreters without a prebuilt wheel had no installable artifact. The sdist bundles the pre-generated Cython C and builds without Cython. +- Linux wheels are built on the `manylinux_2_28` / `musllinux_1_2` + images (cibuildwheel 3.x removed `musllinux_1_1`, and the frozen + `manylinux2014` images predate Python 3.14). auditwheel still grades + each wheel by the symbols it actually needs — the extensions grade to + `manylinux2014`/`manylinux_2_17`, so old-glibc compatibility is + preserved. ## [0.2.3] - 2022-02-07 ### Added diff --git a/pyproject.toml b/pyproject.toml index efdcbc8..d7fbd5f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,20 +40,11 @@ test-extras = [] container-engine = "docker" -manylinux-x86_64-image = "manylinux2014" -manylinux-i686-image = "manylinux2014" -manylinux-aarch64-image = "manylinux2014" -manylinux-ppc64le-image = "manylinux2014" -manylinux-s390x-image = "manylinux2014" -manylinux-pypy_x86_64-image = "manylinux2014" -manylinux-pypy_i686-image = "manylinux2014" -manylinux-pypy_aarch64-image = "manylinux2014" - -musllinux-x86_64-image = "musllinux_1_1" -musllinux-i686-image = "musllinux_1_1" -musllinux-aarch64-image = "musllinux_1_1" -musllinux-ppc64le-image = "musllinux_1_1" -musllinux-s390x-image = "musllinux_1_1" +# No image pins: cibuildwheel 3.x rejects the musllinux_1_1 alias outright, +# and the manylinux2014 images froze at CentOS 7 EOL without Python 3.14 — +# neither can build cp314/cp314t. The 3.4.1 defaults (manylinux_2_28 / +# musllinux_1_2) carry every interpreter we target; older-glibc systems +# install from the sdist. [tool.cibuildwheel.linux]