From 7c0e2230d946f582201779d8df309d8f839288cc Mon Sep 17 00:00:00 2001 From: mayeut Date: Thu, 9 May 2024 18:57:39 +0200 Subject: [PATCH] feat: add Python 3.13 beta 1 --- .github/workflows/test.yml | 2 +- .github/workflows/update-dependencies.yml | 2 +- README.md | 6 +++-- cibuildwheel/resources/build-platforms.toml | 16 +++++++++++++ .../resources/constraints-python313.txt | 24 +++++++++++++++++++ cibuildwheel/util.py | 2 +- docs/options.md | 1 + noxfile.py | 2 +- test/test_manylinuxXXXX_only.py | 16 +++++++++---- test/utils.py | 2 ++ unit_test/build_selector_test.py | 6 +++-- 11 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 cibuildwheel/resources/constraints-python313.txt diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0db222414..af3e6be36 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: pipx run nox -s pylint test: - name: Test cibuildwheel on ${{ matrix.os }} + name: Test cibuildwheel on ${{ matrix.os }} (${{ matrix.python_version }}) needs: lint runs-on: ${{ matrix.os }} strategy: diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml index 832ed2ec9..52fc21803 100644 --- a/.github/workflows/update-dependencies.yml +++ b/.github/workflows/update-dependencies.yml @@ -24,7 +24,7 @@ jobs: - uses: wntrblm/nox@2024.04.15 with: - python-versions: "3.7, 3.8, 3.9, 3.10, 3.11, 3.12" + python-versions: "3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13" - name: "Run update: dependencies" run: nox --force-color -s update_constraints diff --git a/README.md b/README.md index 332831453..cf738fe03 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Python wheels are great. Building them across **Mac, Linux, Windows**, on **mult What does it do? ---------------- -| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux
musllinux x86_64 | manylinux
musllinux i686 | manylinux
musllinux aarch64 | manylinux
musllinux ppc64le | manylinux
musllinux s390x | +| | macOS Intel | macOS Apple Silicon | Windows 64bit | Windows 32bit | Windows Arm64 | manylinux
musllinux x86_64 | manylinux
musllinux i686 | manylinux
musllinux aarch64 | manylinux
musllinux ppc64le | manylinux
musllinux s390x | |----------------|----|-----|-----|-----|-----|----|-----|----|-----|-----| | CPython 3.6 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | | CPython 3.7 | ✅ | N/A | ✅ | ✅ | N/A | ✅ | ✅ | ✅ | ✅ | ✅ | @@ -30,7 +30,8 @@ What does it do? | CPython 3.9 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | | CPython 3.10 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | | CPython 3.11 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | -| CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | +| CPython 3.12 | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | +| CPython 3.13³ | ✅ | ✅ | ✅ | ✅ | ✅² | ✅ | ✅ | ✅ | ✅ | ✅ | | PyPy 3.7 v7.3 | ✅ | N/A | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | | PyPy 3.8 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | | PyPy 3.9 v7.3 | ✅ | ✅ | ✅ | N/A | N/A | ✅¹ | ✅¹ | ✅¹ | N/A | N/A | @@ -38,6 +39,7 @@ What does it do? ¹ PyPy is only supported for manylinux wheels.
² Windows arm64 support is experimental.
+³ CPython 3.13 is available using the [CIBW_PRERELEASE_PYTHONS](https://cibuildwheel.pypa.io/en/stable/options/#prerelease-pythons) option.
- Builds manylinux, musllinux, macOS 10.9+, and Windows wheels for CPython and PyPy - Works on GitHub Actions, Azure Pipelines, Travis CI, AppVeyor, CircleCI, GitLab CI, and Cirrus CI diff --git a/cibuildwheel/resources/build-platforms.toml b/cibuildwheel/resources/build-platforms.toml index a102fac1e..f95d329cc 100644 --- a/cibuildwheel/resources/build-platforms.toml +++ b/cibuildwheel/resources/build-platforms.toml @@ -7,6 +7,7 @@ python_configurations = [ { identifier = "cp310-manylinux_x86_64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_x86_64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-manylinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-manylinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -14,6 +15,7 @@ python_configurations = [ { identifier = "cp310-manylinux_i686", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_i686", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-manylinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "pp37-manylinux_x86_64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" }, { identifier = "pp38-manylinux_x86_64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp39-manylinux_x86_64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, @@ -25,6 +27,7 @@ python_configurations = [ { identifier = "cp310-manylinux_aarch64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_aarch64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-manylinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-manylinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -32,6 +35,7 @@ python_configurations = [ { identifier = "cp310-manylinux_ppc64le", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_ppc64le", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-manylinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-manylinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-manylinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-manylinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -39,6 +43,7 @@ python_configurations = [ { identifier = "cp310-manylinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-manylinux_s390x", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-manylinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-manylinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "pp37-manylinux_aarch64", version = "3.7", path_str = "/opt/python/pp37-pypy37_pp73" }, { identifier = "pp38-manylinux_aarch64", version = "3.8", path_str = "/opt/python/pp38-pypy38_pp73" }, { identifier = "pp39-manylinux_aarch64", version = "3.9", path_str = "/opt/python/pp39-pypy39_pp73" }, @@ -54,6 +59,7 @@ python_configurations = [ { identifier = "cp310-musllinux_x86_64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_x86_64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_x86_64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_x86_64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-musllinux_i686", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_i686", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_i686", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -61,6 +67,7 @@ python_configurations = [ { identifier = "cp310-musllinux_i686", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_i686", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_i686", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_i686", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-musllinux_aarch64", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_aarch64", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_aarch64", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -68,6 +75,7 @@ python_configurations = [ { identifier = "cp310-musllinux_aarch64", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_aarch64", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_aarch64", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_aarch64", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-musllinux_ppc64le", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_ppc64le", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_ppc64le", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -75,6 +83,7 @@ python_configurations = [ { identifier = "cp310-musllinux_ppc64le", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_ppc64le", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_ppc64le", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_ppc64le", version = "3.13", path_str = "/opt/python/cp313-cp313" }, { identifier = "cp36-musllinux_s390x", version = "3.6", path_str = "/opt/python/cp36-cp36m" }, { identifier = "cp37-musllinux_s390x", version = "3.7", path_str = "/opt/python/cp37-cp37m" }, { identifier = "cp38-musllinux_s390x", version = "3.8", path_str = "/opt/python/cp38-cp38" }, @@ -82,6 +91,7 @@ python_configurations = [ { identifier = "cp310-musllinux_s390x", version = "3.10", path_str = "/opt/python/cp310-cp310" }, { identifier = "cp311-musllinux_s390x", version = "3.11", path_str = "/opt/python/cp311-cp311" }, { identifier = "cp312-musllinux_s390x", version = "3.12", path_str = "/opt/python/cp312-cp312" }, + { identifier = "cp313-musllinux_s390x", version = "3.13", path_str = "/opt/python/cp313-cp313" }, ] [macos] @@ -103,6 +113,9 @@ python_configurations = [ { identifier = "cp312-macosx_x86_64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" }, { identifier = "cp312-macosx_arm64", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" }, { identifier = "cp312-macosx_universal2", version = "3.12", url = "https://www.python.org/ftp/python/3.12.3/python-3.12.3-macos11.pkg" }, + { identifier = "cp313-macosx_x86_64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0b1-macos11.pkg" }, + { identifier = "cp313-macosx_arm64", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0b1-macos11.pkg" }, + { identifier = "cp313-macosx_universal2", version = "3.13", url = "https://www.python.org/ftp/python/3.13.0/python-3.13.0b1-macos11.pkg" }, { identifier = "pp37-macosx_x86_64", version = "3.7", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-osx64.tar.bz2" }, { identifier = "pp38-macosx_x86_64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_x86_64.tar.bz2" }, { identifier = "pp38-macosx_arm64", version = "3.8", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-macos_arm64.tar.bz2" }, @@ -128,10 +141,13 @@ python_configurations = [ { identifier = "cp311-win_amd64", version = "3.11.9", arch = "64" }, { identifier = "cp312-win32", version = "3.12.3", arch = "32" }, { identifier = "cp312-win_amd64", version = "3.12.3", arch = "64" }, + { identifier = "cp313-win32", version = "3.13.0-b1", arch = "32" }, + { identifier = "cp313-win_amd64", version = "3.13.0-b1", arch = "64" }, { identifier = "cp39-win_arm64", version = "3.9.10", arch = "ARM64" }, { identifier = "cp310-win_arm64", version = "3.10.11", arch = "ARM64" }, { identifier = "cp311-win_arm64", version = "3.11.9", arch = "ARM64" }, { identifier = "cp312-win_arm64", version = "3.12.3", arch = "ARM64" }, + { identifier = "cp313-win_arm64", version = "3.13.0-b1", arch = "ARM64" }, { identifier = "pp37-win_amd64", version = "3.7", arch = "64", url = "https://downloads.python.org/pypy/pypy3.7-v7.3.9-win64.zip" }, { identifier = "pp38-win_amd64", version = "3.8", arch = "64", url = "https://downloads.python.org/pypy/pypy3.8-v7.3.11-win64.zip" }, { identifier = "pp39-win_amd64", version = "3.9", arch = "64", url = "https://downloads.python.org/pypy/pypy3.9-v7.3.16-win64.zip" }, diff --git a/cibuildwheel/resources/constraints-python313.txt b/cibuildwheel/resources/constraints-python313.txt new file mode 100644 index 000000000..f9325ba0a --- /dev/null +++ b/cibuildwheel/resources/constraints-python313.txt @@ -0,0 +1,24 @@ +# This file was autogenerated by uv via the following command: +# nox -s update_constraints +altgraph==0.17.4 + # via macholib +build==1.2.1 +delocate==0.11.0 +distlib==0.3.8 + # via virtualenv +filelock==3.14.0 + # via virtualenv +macholib==1.16.3 + # via delocate +packaging==24.0 + # via + # build + # delocate +pip==24.0 +platformdirs==4.2.1 + # via virtualenv +pyproject-hooks==1.1.0 + # via build +typing-extensions==4.11.0 + # via delocate +virtualenv==20.26.1 diff --git a/cibuildwheel/util.py b/cibuildwheel/util.py index a225575b8..410b1c02a 100644 --- a/cibuildwheel/util.py +++ b/cibuildwheel/util.py @@ -238,7 +238,7 @@ class BuildSelector: requires_python: SpecifierSet | None = None # a pattern that skips prerelease versions, when include_prereleases is False. - PRERELEASE_SKIP: ClassVar[str] = "" + PRERELEASE_SKIP: ClassVar[str] = "cp313-*" prerelease_pythons: bool = False def __call__(self, build_id: str) -> bool: diff --git a/docs/options.md b/docs/options.md index c7d9d3b0b..75ac6b9be 100644 --- a/docs/options.md +++ b/docs/options.md @@ -296,6 +296,7 @@ When setting the options, you can use shell-style globbing syntax, as per [fnmat | Python 3.10 | cp310-macosx_x86_64
cp310-macosx_universal2
cp310-macosx_arm64 | cp310-win_amd64
cp310-win32
cp310-win_arm64 | cp310-manylinux_x86_64
cp310-manylinux_i686
cp310-musllinux_x86_64
cp310-musllinux_i686 | cp310-manylinux_aarch64
cp310-manylinux_ppc64le
cp310-manylinux_s390x
cp310-musllinux_aarch64
cp310-musllinux_ppc64le
cp310-musllinux_s390x | | Python 3.11 | cp311-macosx_x86_64
cp311-macosx_universal2
cp311-macosx_arm64 | cp311-win_amd64
cp311-win32
cp311-win_arm64 | cp311-manylinux_x86_64
cp311-manylinux_i686
cp311-musllinux_x86_64
cp311-musllinux_i686 | cp311-manylinux_aarch64
cp311-manylinux_ppc64le
cp311-manylinux_s390x
cp311-musllinux_aarch64
cp311-musllinux_ppc64le
cp311-musllinux_s390x | | Python 3.12 | cp312-macosx_x86_64
cp312-macosx_universal2
cp312-macosx_arm64 | cp312-win_amd64
cp312-win32
cp312-win_arm64 | cp312-manylinux_x86_64
cp312-manylinux_i686
cp312-musllinux_x86_64
cp312-musllinux_i686 | cp312-manylinux_aarch64
cp312-manylinux_ppc64le
cp312-manylinux_s390x
cp312-musllinux_aarch64
cp312-musllinux_ppc64le
cp312-musllinux_s390x | +| Python 3.13 | cp313-macosx_x86_64
cp313-macosx_universal2
cp313-macosx_arm64 | cp313-win_amd64
cp313-win32
cp313-win_arm64 | cp313-manylinux_x86_64
cp313-manylinux_i686
cp313-musllinux_x86_64
cp313-musllinux_i686 | cp313-manylinux_aarch64
cp313-manylinux_ppc64le
cp313-manylinux_s390x
cp313-musllinux_aarch64
cp313-musllinux_ppc64le
cp313-musllinux_s390x | | PyPy3.7 v7.3 | pp37-macosx_x86_64 | pp37-win_amd64 | pp37-manylinux_x86_64
pp37-manylinux_i686 | pp37-manylinux_aarch64 | | PyPy3.8 v7.3 | pp38-macosx_x86_64
pp38-macosx_arm64 | pp38-win_amd64 | pp38-manylinux_x86_64
pp38-manylinux_i686 | pp38-manylinux_aarch64 | | PyPy3.9 v7.3 | pp39-macosx_x86_64
pp39-macosx_arm64 | pp39-win_amd64 | pp39-manylinux_x86_64
pp39-manylinux_i686 | pp39-manylinux_aarch64 | diff --git a/noxfile.py b/noxfile.py index 19dbed42b..8529e6002 100644 --- a/noxfile.py +++ b/noxfile.py @@ -68,7 +68,7 @@ def update_constraints(session: nox.Session) -> None: if getattr(session.virtualenv, "venv_backend", "") != "uv": session.install("uv>=0.1.23") - for minor_version in range(7, 13): + for minor_version in range(7, 14): python_version = f"3.{minor_version}" env = os.environ.copy() # CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to diff --git a/test/test_manylinuxXXXX_only.py b/test/test_manylinuxXXXX_only.py index 06082a7bb..3bc6820fa 100644 --- a/test/test_manylinuxXXXX_only.py +++ b/test/test_manylinuxXXXX_only.py @@ -86,10 +86,10 @@ def test(manylinux_image, tmp_path): add_env["CIBW_SKIP"] = "pp* cp31*" if manylinux_image in {"manylinux2010"}: # We don't have a manylinux2010 image for PyPy 3.9+, CPython 3.11+ - add_env["CIBW_SKIP"] = "pp39* pp31* cp311* cp312*" + add_env["CIBW_SKIP"] = "pp39* pp31* cp311* cp312* cp313*" if manylinux_image in {"manylinux_2_24"}: # We don't have a manylinux_2_24 image for PyPy 3.10+, CPython 3.12+ - add_env["CIBW_SKIP"] = "pp31* cp312*" + add_env["CIBW_SKIP"] = "pp31* cp312* cp313*" if manylinux_image == "manylinux_2_28" and platform.machine() == "x86_64": # We don't have a manylinux_2_28 image for i686 add_env["CIBW_ARCHS"] = "x86_64" @@ -116,12 +116,20 @@ def test(manylinux_image, tmp_path): expected_wheels = [ w for w in expected_wheels - if "-pp39" not in w and "-pp31" not in w and "-cp311" not in w and "-cp312" not in w + if "-pp39" not in w + and "-pp31" not in w + and "-cp311" not in w + and "-cp312" not in w + and "-cp313" not in w ] if manylinux_image in {"manylinux_2_24"}: # remove PyPy 3.10+ & CPython 3.11 and above - expected_wheels = [w for w in expected_wheels if "-pp31" not in w and "-cp312" not in w] + expected_wheels = [ + w + for w in expected_wheels + if "-pp31" not in w and "-cp312" not in w and "-cp313" not in w + ] if manylinux_image == "manylinux_2_28" and platform.machine() == "x86_64": # We don't have a manylinux_2_28 image for i686 diff --git a/test/utils.py b/test/utils.py index 28324a965..522db18b6 100644 --- a/test/utils.py +++ b/test/utils.py @@ -171,6 +171,7 @@ def expected_wheels( "cp310-cp310", "cp311-cp311", "cp312-cp312", + "cp313-cp313", ] if machine_arch in ["x86_64", "AMD64", "x86", "aarch64"]: @@ -189,6 +190,7 @@ def expected_wheels( "cp310-cp310", "cp311-cp311", "cp312-cp312", + "cp313-cp313", "pp38-pypy38_pp73", "pp39-pypy39_pp73", "pp310-pypy310_pp73", diff --git a/unit_test/build_selector_test.py b/unit_test/build_selector_test.py index 9fa7eabda..7d7eeb5fb 100644 --- a/unit_test/build_selector_test.py +++ b/unit_test/build_selector_test.py @@ -13,6 +13,7 @@ def test_build(): assert build_selector("cp310-manylinux_x86_64") assert build_selector("cp311-manylinux_x86_64") assert build_selector("cp312-manylinux_x86_64") + assert not build_selector("cp313-manylinux_x86_64") assert build_selector("pp36-manylinux_x86_64") assert build_selector("pp37-manylinux_x86_64") assert build_selector("cp36-manylinux_i686") @@ -33,6 +34,7 @@ def test_build(): assert build_selector("cp310-win_amd64") assert build_selector("cp311-win_amd64") assert build_selector("cp312-win_amd64") + assert not build_selector("cp313-win_amd64") assert not build_selector("pp36-win_amd64") assert not build_selector("pp37-win_amd64") @@ -45,9 +47,9 @@ def test_build_filter_pre(): ) assert build_selector("cp37-manylinux_x86_64") - assert build_selector("cp312-manylinux_x86_64") + assert build_selector("cp313-manylinux_x86_64") assert build_selector("cp37-win_amd64") - assert build_selector("cp312-win_amd64") + assert build_selector("cp313-win_amd64") def test_skip():