From 3398a1e4fa1e88754a14c3f6503eeeaeb18edf4c Mon Sep 17 00:00:00 2001 From: Theo Mathieu Date: Tue, 27 Oct 2026 11:56:21 +0100 Subject: [PATCH] ci: build and test Python 3.15 wheels 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. --- .github/workflows/test.yml | 5 ++++- .github/workflows/typing.yml | 2 ++ .github/workflows/wheel.yml | 20 +++++++++++++++++--- docs/installing.rst | 8 ++++---- docs/news.rst | 10 ++++++++++ pyproject.toml | 2 +- 6 files changed, 38 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ce563e4c..1e3e0815 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,6 +29,8 @@ jobs: - '3.13t' - '3.14' - '3.14t' + - '3.15' + - '3.15t' arch: - 'arm64' - 'x86' @@ -105,7 +107,8 @@ jobs: uv -v run --locked -w cffi pytest --numprocesses=auto --hypothesis-profile=${HYPOTHESIS_PROFILE} -v - name: Test Rust Backend - if: matrix.arch != 'x86' + # PyO3 0.25 doesn't support Python 3.15. + if: matrix.arch != 'x86' && !startsWith(matrix.py, '3.15') # Rust backend is currently experimental. So ignore failures in it. continue-on-error: true env: diff --git a/.github/workflows/typing.yml b/.github/workflows/typing.yml index 926b5933..f147b949 100644 --- a/.github/workflows/typing.yml +++ b/.github/workflows/typing.yml @@ -22,6 +22,8 @@ jobs: - '3.13t' - '3.14' - '3.14t' + - '3.15' + - '3.15t' runs-on: 'ubuntu-24.04' steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 diff --git a/.github/workflows/wheel.yml b/.github/workflows/wheel.yml index a7a8ea29..0fac1585 100644 --- a/.github/workflows/wheel.yml +++ b/.github/workflows/wheel.yml @@ -22,6 +22,8 @@ jobs: - 'cp313' - 'cp314' - 'cp314t' + - 'cp315' + - 'cp315t' arch: - 'aarch64' - 'i686' @@ -66,11 +68,19 @@ jobs: image: 'manylinux2014' - py: 'cp314t' image: 'manylinux2014' + - py: 'cp315' + image: 'manylinux2014' + - py: 'cp315t' + image: 'manylinux2014' # Drop support for musllinux_1_1 on 3.14+ - py: 'cp314' image: 'musllinux_1_1' - py: 'cp314t' image: 'musllinux_1_1' + - py: 'cp315' + image: 'musllinux_1_1' + - py: 'cp315t' + image: 'musllinux_1_1' runs-on: ${{ matrix.arch == 'aarch64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }} env: CIBW_ARCHS: ${{ matrix.arch }} @@ -104,7 +114,7 @@ jobs: - name: Build wheels run: | - uvx -p 3.13 cibuildwheel@4.1.0 + uvx -p 3.13 cibuildwheel@4.3.4 - name: Upload Wheel if: ${{ !endsWith(matrix.py, 't') }} @@ -124,6 +134,8 @@ jobs: - 'cp313' - 'cp314' - 'cp314t' + - 'cp315' + - 'cp315t' arch: - 'arm64' - 'x86_64' @@ -144,7 +156,7 @@ jobs: - name: Build wheels run: | - uvx -p 3.13 cibuildwheel@4.1.0 + uvx -p 3.13 cibuildwheel@4.3.4 - name: Upload Wheel if: ${{ !endsWith(matrix.py, 't') }} @@ -164,6 +176,8 @@ jobs: - 'cp313' - 'cp314' - 'cp314t' + - 'cp315' + - 'cp315t' arch: - 'win32' - 'win_amd64' @@ -188,7 +202,7 @@ jobs: - name: Build wheels run: | - uvx -p 3.13 cibuildwheel@4.1.0 + uvx -p 3.13 cibuildwheel@4.3.4 - name: Upload Wheel if: ${{ !endsWith(matrix.py, 't') }} diff --git a/docs/installing.rst b/docs/installing.rst index c2f0e72b..8391f899 100644 --- a/docs/installing.rst +++ b/docs/installing.rst @@ -22,10 +22,10 @@ this package with ``conda``. Requirements ============ -This package is designed to run with Python 3.10, 3.11, 3.12, 3.13, and 3.14 -on common platforms (Linux, Windows, and OS X). On PyPy (both PyPy2 and PyPy3) -we support version 6.0.0 and above. x86 and x86_64 are well-tested on Windows. -Only x86_64 is well-tested on Linux and macOS. +This package is designed to run with Python 3.10, 3.11, 3.12, 3.13, 3.14, +and 3.15 on common platforms (Linux, Windows, and OS X). On PyPy (both PyPy2 +and PyPy3) we support version 6.0.0 and above. x86 and x86_64 are well-tested +on Windows. Only x86_64 is well-tested on Linux and macOS. CFFI Backend ============ diff --git a/docs/news.rst b/docs/news.rst index 83641a75..b0447865 100644 --- a/docs/news.rst +++ b/docs/news.rst @@ -17,6 +17,16 @@ Backwards Compatibility Notes * cibuildwheel upgrade required us to drop generating the CPython 3.13 free-threaded wheels. +Changes +------- + +* Python 3.15 support. We build ``cp315`` and free-threaded ``cp315t`` wheels + and have CI test coverage for the C and CFFI backends. Like 3.14, Linux wheels + are built with ``manylinux_2_28`` and ``musllinux_1_2``. The Rust backend + does not support 3.15 yet. +* cibuildwheel upgraded from 4.1.0 to 4.3.4, which builds against the final + CPython 3.15.0 release instead of a beta. + 0.25.0 (released 2025-09-14) ============================ diff --git a/pyproject.toml b/pyproject.toml index b358a7f5..f725fce2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Programming Language :: Python :: Free Threading :: 1 - Unstable", ] keywords = ["zstandard", "zstd", "compression"] @@ -61,7 +62,6 @@ line-length = 80 select = ["E4", "E7", "E9", "F", "I"] [tool.cibuildwheel] -enable = ["cpython-prerelease"] build-frontend = "build[uv]" # Turn compiler warnings into errors.