diff --git a/.github/workflows/cibuildwheel.yml b/.github/workflows/cibuildwheel.yml index fbb9366e..115739ed 100644 --- a/.github/workflows/cibuildwheel.yml +++ b/.github/workflows/cibuildwheel.yml @@ -42,29 +42,29 @@ 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 + # - Always skip free-threading wheels for now # - 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-* cp314t-* *musllinux*" else - CIBW_SKIP="cp38-* *musllinux_aarch64" + CIBW_SKIP="cp314t-* *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..6dd4ccdc 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] @@ -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 6e59c27a..05298983 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,27 +15,25 @@ 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 = [ "check-manifest", - "coverage", + "coverage>=7.10.0", "coveralls", "cython>=0.29.20", "pytest", - "pytest-cov", "sphinx", "twine", ] @@ -44,8 +42,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" @@ -58,8 +55,6 @@ addopts = [ "-ra", "-v", "--doctest-modules", - "--cov=cftime", - "--cov-report=term-missing", ] doctest_optionflags = [ "NORMALIZE_WHITESPACE", @@ -67,6 +62,7 @@ doctest_optionflags = [ ] [tool.coverage.run] +source = ["src"] relative_files = true branch = true plugins = [ @@ -84,6 +80,7 @@ omit = [ ] [tool.coverage.report] +show_missing = true exclude_lines = [ "pragma: no cover", "def __repr__",