Skip to content

ci: build and test Python 3.15 wheels - #372

Open
Mokto wants to merge 1 commit into
indygreg:mainfrom
Mokto:python-3.15-wheels
Open

Mokto wants to merge 1 commit into
indygreg:mainfrom
Mokto:python-3.15-wheels

Conversation

@Mokto

@Mokto Mokto commented Oct 27, 2026

Copy link
Copy Markdown

Builds and tests Python 3.15 wheels. Refs #354.

  • Adds cp315 and free-threaded cp315t to the Linux, macOS and Windows wheel matrices. Like 3.14, Linux wheels use manylinux_2_28 and musllinux_1_2 only.
  • Upgrades cibuildwheel from 4.1.0 to 4.3.4, the first line that builds against the final CPython 3.15.0 rather than a beta, and drops the cpython-prerelease enable flag, which 3.15 no longer needs.
  • Adds 3.15 and 3.15t to the test and typing matrices. The Rust backend step is skipped on 3.15 because PyO3 0.25 rejects it ("newer than PyO3's maximum supported version (3.14)").
  • Adds the 3.15 classifier and updates installing.rst and news.rst.

No C, CFFI or Python changes were needed.

Relationship to #357

#357 also adds 3.15, but it depends on the PyO3 0.29 upgrade in #356 and the CI fixes in #358. This PR applies to main on its own, so 3.15 wheels can ship without waiting for the Rust backend work. It also builds against 3.15.0 final; #357 keeps cibuildwheel 4.1.0 with cpython-prerelease, which builds against a 3.15 beta. If #357 lands first, I'll close this one.

Testing

Fork CI run on this branch:

  • test.yml: all 3.15 and 3.15t jobs on Linux x64/arm64, macOS arm64/x64 and Windows x86/x64/arm64 pass the C and CFFI backends, except macos-26-intel 3.15 CFFI. That job hit a hypothesis DeadlineExceeded in a fuzzing test (20.4s against a 20s deadline). The same flake hit macos-26-intel 3.14 in this run, and macos-26-intel 3.13 on main (run).
  • wheel.yml: 28 of 30 cp315/cp315t jobs pass, including installing and testing the built wheel. The two failures are s390x musllinux_1_2. Every s390x musllinux_1_2 job fails the same way on main (run): the zstandard wheel builds and repairs, then installing the test dependency group fails to build ast-serialize, which mypy pulls in. The set of failing non-3.15 jobs is the same as on main.
  • typing.yml, ruff, sdist and pypy pass.

Locally on macOS arm64 with ZSTD_SLOW_TESTS=1, ZSTD_WARNINGS_AS_ERRORS=1, PYTHONDEVMODE=1 and --hypothesis-profile=ci, both backends gave the same results on 3.14.7, 3.15.0 and 3.15.1t: C 292 passed, CFFI 266 passed with 26 skipped. mypy is clean on 3.15 and 3.15t.

Build cp315 and free-threaded cp315t wheels on Linux, macOS and Windows,
and add 3.15 and 3.15t to the test and typing matrices. Like 3.14, Linux
wheels use manylinux_2_28 and musllinux_1_2 only.

Upgrade cibuildwheel from 4.1.0 to 4.3.4 so the wheels are built against
the final CPython 3.15.0 release rather than the beta bundled with 4.1.0,
and drop the cpython-prerelease enable flag, which 3.15 no longer needs.

The Rust backend is skipped on 3.15 because PyO3 0.25 does not support it.
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.

1 participant