diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 9ddd6f45..87065cf7 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -16,7 +16,7 @@ jobs: contents: write steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: persist-credentials: false - name: Create Release @@ -34,11 +34,11 @@ jobs: needs: release runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: persist-credentials: false - name: Set up Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "3.x" - name: Install dependencies diff --git a/.github/workflows/upstream-dev-ci.yml b/.github/workflows/upstream-dev-ci.yml index afee242d..7a5d9b79 100644 --- a/.github/workflows/upstream-dev-ci.yml +++ b/.github/workflows/upstream-dev-ci.yml @@ -26,7 +26,7 @@ jobs: outputs: triggered: ${{ steps.detect-trigger.outputs.trigger-found }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 2 persist-credentials: false @@ -56,12 +56,12 @@ jobs: outputs: artifacts_availability: ${{ steps.status.outputs.ARTIFACTS_AVAILABLE }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 # Fetch all history for all branches and tags. persist-credentials: false - name: setup conda (micromamba) - uses: mamba-org/setup-micromamba@v2 + uses: mamba-org/setup-micromamba@v3 with: cache-downloads: true cache-environment: true @@ -90,7 +90,7 @@ jobs: run: | set -euo pipefail python -m pytest --timeout=60 -rf | tee output-${{ matrix.python-version }}-log || ( - echo '::set-output name=ARTIFACTS_AVAILABLE::true' && false + echo "ARTIFACTS_AVAILABLE=true" >> "$GITHUB_OUTPUT" && false ) - name: Upload artifacts if: | @@ -98,7 +98,7 @@ jobs: && steps.status.outcome == 'failure' && github.event_name == 'schedule' && github.repository == 'xarray-contrib/xskillscore' - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: output-${{ matrix.python-version }}-log path: output-${{ matrix.python-version }}-log @@ -119,13 +119,13 @@ jobs: run: shell: bash steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: persist-credentials: false - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: python-version: "3.x" - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: path: /tmp/workspace/logs - name: Move all log files into a single directory @@ -138,7 +138,7 @@ jobs: wget https://raw.githubusercontent.com/pydata/xarray/master/.github/workflows/parse_logs.py python parse_logs.py logs/**/*-log - name: Report failures - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | diff --git a/.github/workflows/xskillscore_installs.yml b/.github/workflows/xskillscore_installs.yml index 39404358..d6216fbf 100644 --- a/.github/workflows/xskillscore_installs.yml +++ b/.github/workflows/xskillscore_installs.yml @@ -17,7 +17,7 @@ jobs: outputs: triggered: ${{ steps.detect-trigger.outputs.trigger-found }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 2 persist-credentials: false @@ -37,13 +37,13 @@ jobs: strategy: matrix: os: [ "ubuntu-latest", "macos-latest", "windows-latest" ] - python-version: [ "3.9" ] + python-version: [ "3.10" ] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: persist-credentials: false - name: Setup python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: "${{ matrix.python-version }}" - name: Install dependencies diff --git a/.github/workflows/xskillscore_testing.yml b/.github/workflows/xskillscore_testing.yml index cc1418f6..1a4e2b59 100644 --- a/.github/workflows/xskillscore_testing.yml +++ b/.github/workflows/xskillscore_testing.yml @@ -18,7 +18,7 @@ jobs: outputs: triggered: ${{ steps.detect-trigger.outputs.trigger-found }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 2 persist-credentials: false @@ -38,23 +38,19 @@ 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" ] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: persist-credentials: false - name: Set up conda (micromamba) - uses: mamba-org/setup-micromamba@v2 + uses: mamba-org/setup-micromamba@v3 with: cache-downloads: true cache-environment: true environment-file: ci/minimum-tests.yml create-args: > python=${{ matrix.python-version }} - - name: Install minimal numpy - if: matrix.python-version == '3.9' - run: | - micromamba install numpy==1.24 - name: Run tests run: | pytest -n auto --cov=xskillscore --cov-report=xml --verbose @@ -78,11 +74,11 @@ jobs: matrix: python-version: [ "3.13" ] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: persist-credentials: false - name: Set up conda (micromamba) - uses: mamba-org/setup-micromamba@v2 + uses: mamba-org/setup-micromamba@v3 with: cache-downloads: true cache-environment: true @@ -106,13 +102,13 @@ jobs: shell: bash -l {0} strategy: matrix: - python-version: [ "3.9" ] + python-version: [ "3.10" ] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: persist-credentials: false - name: Set up conda (micromamba) - uses: mamba-org/setup-micromamba@v2 + uses: mamba-org/setup-micromamba@v3 with: cache-downloads: true cache-environment: true diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e7f4fd45..a17d4608 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -3,6 +3,23 @@ Changelog History ================= +xskillscore vNext (unreleased) +------------------------------ + +Breaking Changes +~~~~~~~~~~~~~~~~ +- Dropped support for Python 3.9. The minimum supported version is now Python 3.10. + `Aaron Spring`_ + +Internal Changes +~~~~~~~~~~~~~~~~ +- Bumped GitHub Actions to versions running on Node.js 24 (``actions/checkout@v5``, + ``actions/setup-python@v6``, ``actions/upload-artifact@v6``, + ``actions/download-artifact@v7``, ``actions/github-script@v8``, + ``mamba-org/setup-micromamba@v3``) to silence Node.js 20 deprecation warnings. + `Aaron Spring`_ + + xskillscore v0.0.29 (2026-02-18) -------------------------------- diff --git a/ci/dev.yml b/ci/dev.yml index 35e7befb..fde77906 100644 --- a/ci/dev.yml +++ b/ci/dev.yml @@ -2,7 +2,7 @@ name: xskillscore-dev channels: - conda-forge dependencies: - - python >= 3.9,<3.14 + - python >= 3.10,<3.14 - pip >= 23.0 # Documentation - matplotlib-base diff --git a/ci/doc.yml b/ci/doc.yml index d996d4e1..19b0063d 100644 --- a/ci/doc.yml +++ b/ci/doc.yml @@ -2,7 +2,7 @@ name: xskillscore-docs channels: - conda-forge dependencies: - - python >=3.9,<3.14 + - python >=3.10,<3.14 - pip >=23.0 - bottleneck - cftime diff --git a/ci/docs_notebooks.yml b/ci/docs_notebooks.yml index 3b5ea225..e83ad657 100644 --- a/ci/docs_notebooks.yml +++ b/ci/docs_notebooks.yml @@ -3,7 +3,7 @@ channels: - conda-forge - nodefaults dependencies: - - python >=3.9,<3.14 + - python >=3.10,<3.14 - pip >=23.0 - bottleneck - cftime diff --git a/ci/minimum-tests.yml b/ci/minimum-tests.yml index 63baf265..444d0d45 100644 --- a/ci/minimum-tests.yml +++ b/ci/minimum-tests.yml @@ -2,7 +2,7 @@ name: xskillscore-minimum-tests channels: - conda-forge dependencies: - - python >=3.9,<3.14 + - python >=3.10,<3.14 - pip >=23.0 - bottleneck - cftime diff --git a/pyproject.toml b/pyproject.toml index 3c3aef2c..b7f2193a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,6 @@ classifiers = [ "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", @@ -30,7 +29,7 @@ classifiers = [ "Topic :: Scientific/Engineering :: Atmospheric Science", "Topic :: Scientific/Engineering :: Mathematics", ] -requires-python = ">=3.9" +requires-python = ">=3.10" license = {file = "LICENSE.txt"} dynamic = ["readme", "version"] @@ -112,5 +111,5 @@ ignore_missing_imports = true follow_imports = "silent" [tool.black] -target-version = ["py39", "py310", "py311", "py312", "py313"] +target-version = ["py310", "py311", "py312", "py313"] line-length = 100