From 96f204bcc34fb80ccd395588eb5251856dfc382d Mon Sep 17 00:00:00 2001 From: William Barnhart Date: Mon, 20 Jul 2026 18:30:47 +0000 Subject: [PATCH] ci: build CPython 3.14 wheels (bump cibuildwheel to 4.x) The release wheel job pinned pypa/cibuildwheel@v2.21.3 (Oct 2024), which predates CPython 3.14. cibuildwheel only builds the interpreters its own release knows about, so `build = "cp3*"` expanded to at most cp313 and no 3.14 wheels were ever produced or uploaded to PyPI for 0.12.0/0.12.1 -- a local install on 3.14 has to compile from the sdist (issue #715). The test matrix separately tests 3.14 via setup-python, which is why the gap only showed up in the published wheels. Bump the action to v4.1.0, which builds CPython 3.14 by default (since cibuildwheel 3.1) and still supports cp310-cp313. Because free-threading is no longer experimental in 3.14, cibuildwheel would now also build free-threaded (cp314t) wheels by default; the Cython extension has not been validated under a no-GIL interpreter, so skip `cp31?t-*` for now. Verified with `cibuildwheel --print-build-identifiers` that the linux build set is now cp310..cp314 manylinux_x86_64 (no cp314t, no musllinux). The manylinux2014 image shorthand and the existing build/skip/archs/before-build options remain valid in 4.x. Fixes #715 Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01HHPL4VFWQRQPpjR1gXSKyL --- .github/workflows/python-package.yml | 5 ++++- pyproject.toml | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 667a141d4..47484469c 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -203,7 +203,10 @@ jobs: with: fetch-depth: 0 - name: Build wheels - uses: pypa/cibuildwheel@v2.21.3 + # cibuildwheel 2.21.3 predates CPython 3.14, so `build = "cp3*"` + # stopped at cp313 and no 3.14 wheels were published (issue #715). + # 4.x builds 3.14 by default and still supports cp310-cp313. + uses: pypa/cibuildwheel@v4.1.0 - uses: actions/upload-artifact@v4 with: name: cibw-wheels-${{ matrix.os }} diff --git a/pyproject.toml b/pyproject.toml index aaf28974a..f4729860e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -117,7 +117,12 @@ testpaths = [ build = "cp3*" archs = ["auto64"] -skip = ["*musllinux*"] +# Skip musllinux, and skip the free-threaded builds (cp313t/cp314t): as of +# cibuildwheel 3.1 free-threading is no longer experimental for 3.14, so +# `cp3*` would otherwise build free-threaded wheels for the Cython extension, +# which has not been validated under a no-GIL interpreter. Drop `cp31?t-*` +# from this list once faust is verified free-threading-safe. +skip = ["*musllinux*", "cp31?t-*"] before-build = "pip install Cython"