From 09350697fcae10515787bac307c382e3746d8f1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Robert?= Date: Sun, 12 Oct 2025 09:44:32 +0200 Subject: [PATCH 1/3] WHL: drop support for EOL CPythons 3.8 and 3.9 and add explicit support for CPython 3.14 --- .github/workflows/cibuildwheel.yml | 13 ++++++------- .github/workflows/tests_conda.yml | 2 +- pyproject.toml | 10 ++++------ 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/.github/workflows/cibuildwheel.yml b/.github/workflows/cibuildwheel.yml index fbb9366e..37668aae 100644 --- a/.github/workflows/cibuildwheel.yml +++ b/.github/workflows/cibuildwheel.yml @@ -42,29 +42,28 @@ jobs: - name: Build just oldest and newest on PRs, all on tags shell: bash - # - Always omit musl 3.8 b/c NumPy does not provide wheels for it # - Always omit musllinux_aarch64 because it's slow and niche # - On PPs, omit musllinux for speed - # - On PRs, run just oldest and newest Python versions (and omit 3.8 aarch64) + # - On PRs, run just oldest and newest Python versions run: | if [[ "${{ github.event_name }}" == "pull_request" ]]; then - CIBW_SKIP="cp38-* cp39-* cp310-* cp311-* cp38-*_aarch64 *musllinux*" + CIBW_SKIP="cp311-* cp312-* cp313-* *musllinux*" else - CIBW_SKIP="cp38-* *musllinux_aarch64" + CIBW_SKIP="*musllinux_aarch64" fi echo "CIBW_SKIP=$CIBW_SKIP" >> $GITHUB_ENV echo "Setting CIBW_SKIP=$CIBW_SKIP" - name: "Building ${{ matrix.os }} (${{ matrix.arch }}) wheels" - uses: pypa/cibuildwheel@v3.2.0 + uses: pypa/cibuildwheel@v3.2.1 env: CIBW_SKIP: ${{ env.CIBW_SKIP }} CIBW_ARCHS: ${{ matrix.arch }} CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 CIBW_MANYLINUX_AARCH64_IMAGE: manylinux2014 - # Emulated testing is slow, so trust that the Python 3.12 test is good enough on aarch64 + # Emulated testing is slow, so trust that the Python 3.14 test is good enough on aarch64 # (takes about 5 minutes per wheel to build, and 5 minutes to test) - CIBW_TEST_SKIP: "cp39-*_aarch64 cp310-*_aarch64 cp311-*_aarch64" + CIBW_TEST_SKIP: "cp3{10,11,12,13}-*_aarch64" CIBW_TEST_GROUPS: dev CIBW_TEST_COMMAND: > python -c "import cftime; print(f'cftime v{cftime.__version__}')" && diff --git a/.github/workflows/tests_conda.yml b/.github/workflows/tests_conda.yml index 48198cd9..1c1a96e6 100644 --- a/.github/workflows/tests_conda.yml +++ b/.github/workflows/tests_conda.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ "3.9", "3.10", "3.11", "3.12", "3.13" ] + python-version: [ "3.10", "3.11", "3.12", "3.13", "3.14" ] os: [windows-latest, ubuntu-latest, macos-latest] platform: [x64, x32] experimental: [false] diff --git a/pyproject.toml b/pyproject.toml index 6e59c27a..59209a05 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,18 +15,17 @@ classifiers = [ 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', + 'Programming Language :: Python :: 3.14', 'Topic :: Scientific/Engineering', ] dependencies = [ - "numpy>1.13.3", + "numpy>=1.21.2", ] -requires-python = ">=3.8" +requires-python = ">=3.10" [dependency-groups] dev = [ @@ -44,8 +43,7 @@ dev = [ requires = [ "setuptools>=77.0.1", "cython>=0.29.20", - "oldest-supported-numpy ; python_version < '3.9'", - "numpy>=2.0.0,<3 ; python_version >= '3.9'", + "numpy>=2.0.0,<3", ] build-backend = "setuptools.build_meta" From 08b61db170435dad55081a48580873b84ce55352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Robert?= Date: Sun, 12 Oct 2025 10:07:52 +0200 Subject: [PATCH 2/3] TST: drop pytest-cov plugin, use coverage directly --- .github/workflows/tests_conda.yml | 5 +++-- pyproject.toml | 7 +++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/tests_conda.yml b/.github/workflows/tests_conda.yml index 1c1a96e6..6dd4ccdc 100644 --- a/.github/workflows/tests_conda.yml +++ b/.github/workflows/tests_conda.yml @@ -36,7 +36,7 @@ jobs: numpy>1.13.3 cython>=0.29.20 pytest - pytest-cov + coverage - name: Install unstable dependencies if: matrix.experimental == true shell: bash -l {0} @@ -57,4 +57,5 @@ jobs: - name: Run Tests shell: bash -l {0} run: | - pytest -vv test + coverage run -m pytest -vv test + coverage report diff --git a/pyproject.toml b/pyproject.toml index 59209a05..05298983 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -30,11 +30,10 @@ requires-python = ">=3.10" [dependency-groups] dev = [ "check-manifest", - "coverage", + "coverage>=7.10.0", "coveralls", "cython>=0.29.20", "pytest", - "pytest-cov", "sphinx", "twine", ] @@ -56,8 +55,6 @@ addopts = [ "-ra", "-v", "--doctest-modules", - "--cov=cftime", - "--cov-report=term-missing", ] doctest_optionflags = [ "NORMALIZE_WHITESPACE", @@ -65,6 +62,7 @@ doctest_optionflags = [ ] [tool.coverage.run] +source = ["src"] relative_files = true branch = true plugins = [ @@ -82,6 +80,7 @@ omit = [ ] [tool.coverage.report] +show_missing = true exclude_lines = [ "pragma: no cover", "def __repr__", From 777948b8deaec53d1889b253b60c5aa2c6c6e685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Robert?= Date: Sun, 12 Oct 2025 11:04:41 +0200 Subject: [PATCH 3/3] WHL: skip 3.14t wheels for now --- .github/workflows/cibuildwheel.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cibuildwheel.yml b/.github/workflows/cibuildwheel.yml index 37668aae..115739ed 100644 --- a/.github/workflows/cibuildwheel.yml +++ b/.github/workflows/cibuildwheel.yml @@ -43,13 +43,14 @@ jobs: - name: Build just oldest and newest on PRs, all on tags shell: bash # - Always omit musllinux_aarch64 because it's slow and niche + # - Always skip free-threading wheels for now # - On PPs, omit musllinux for speed # - On PRs, run just oldest and newest Python versions run: | if [[ "${{ github.event_name }}" == "pull_request" ]]; then - CIBW_SKIP="cp311-* cp312-* cp313-* *musllinux*" + CIBW_SKIP="cp311-* cp312-* cp313-* cp314t-* *musllinux*" else - CIBW_SKIP="*musllinux_aarch64" + CIBW_SKIP="cp314t-* *musllinux_aarch64" fi echo "CIBW_SKIP=$CIBW_SKIP" >> $GITHUB_ENV echo "Setting CIBW_SKIP=$CIBW_SKIP"