Skip to content

Commit 8663ea2

Browse files
committed
Test on Python 3.15 and lift the numpy cap to <2.6
Python 3.15.0 was released on 2026-10-09. Two things stopped it from installing: the numpy <2.5 cap in setup.cfg (the first numpy with a cp315 wheel is 2.5.2; numba 0.67 and 0.68 declare numpy<2.6, so the cap moves to match) and the libjxl=0.11.* pin in the two micromamba workflows, which conda-forge's rebuilt GDAL stack (libjxl >=0.12) can no longer satisfy. The pin's own comment asked for it to be removed once that rebuild landed. test.yml: PRs run 3.15 plus the 3.14t probe; main and nightly run 3.12 through 3.15 plus 3.14t. No 3.15t job until numba ships a cp315t wheel. test-geotiff-corpus.yml moves its newest slot to 3.15. test-cog-validator.yml stays on 3.12 with the pin removed.
1 parent 71e3ec1 commit 8663ea2

4 files changed

Lines changed: 16 additions & 25 deletions

File tree

‎.github/workflows/test-cog-validator.yml‎

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,10 @@ jobs:
4949
fail-fast: false
5050
matrix:
5151
# Pin to a python version where conda-forge ships a stable
52-
# rio-cogeo + GDAL combo. 3.12 is the safest target today;
53-
# 3.14 wheels for some of the GDAL stack are not yet
54-
# universally available, and the gate has to install reliably
55-
# to be a useful required check. Add 3.13 / 3.14 here once
56-
# conda-forge has caught up with stable rio-cogeo + GDAL
57-
# builds for those interpreters.
52+
# rio-cogeo + GDAL combo. 3.12 is the most conservative install
53+
# for a required check; conda-forge now has GDAL / rasterio
54+
# builds for 3.13 through 3.15 as well, so widening this is a
55+
# matter of choosing to, not of availability.
5856
python: ['3.12']
5957
defaults:
6058
run:
@@ -70,12 +68,6 @@ jobs:
7068
steps:
7169
- uses: actions/checkout@v4
7270
- name: Set up micromamba env (conda-forge rio-cogeo + GDAL)
73-
# libjxl is pinned to 0.11.* because conda-forge published libjxl
74-
# 0.12.0 (2026-07-03) before rebuilding libgdal-core / rasterio
75-
# against it, so an unpinned solve pairs a GDAL linked to
76-
# libjxl.so.0.11 with only 0.12 installed and rasterio fails to
77-
# import. Drop the pin once conda-forge ships libgdal-core /
78-
# rasterio builds linked against libjxl 0.12.
7971
uses: mamba-org/setup-micromamba@v1
8072
with:
8173
environment-name: xrspatial-cog-validator
@@ -86,7 +78,6 @@ jobs:
8678
rio-cogeo
8779
pyyaml
8880
tifffile
89-
libjxl=0.11.*
9081
condarc: |
9182
channels:
9283
- conda-forge

‎.github/workflows/test-geotiff-corpus.yml‎

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
fail-fast: false
3333
matrix:
3434
os: ${{ github.event_name == 'pull_request' && fromJson('["ubuntu-latest"]') || fromJson('["ubuntu-latest", "macos-latest", "windows-latest"]') }}
35-
python: ${{ github.event_name == 'pull_request' && fromJson('["3.14"]') || fromJson('["3.12", "3.14"]') }}
35+
python: ${{ github.event_name == 'pull_request' && fromJson('["3.15"]') || fromJson('["3.12", "3.15"]') }}
3636
defaults:
3737
run:
3838
# `-el` so micromamba's activation hooks fire and `rasterio`
@@ -41,12 +41,6 @@ jobs:
4141
steps:
4242
- uses: actions/checkout@v4
4343
- name: Set up micromamba env (conda-forge rasterio + GDAL)
44-
# libjxl is pinned to 0.11.* because conda-forge published libjxl
45-
# 0.12.0 (2026-07-03) before rebuilding libgdal-core / rasterio
46-
# against it, so an unpinned solve pairs a GDAL linked to
47-
# libjxl.so.0.11 with only 0.12 installed and rasterio fails to
48-
# import. Drop the pin once conda-forge ships libgdal-core /
49-
# rasterio builds linked against libjxl 0.12.
5044
uses: mamba-org/setup-micromamba@v1
5145
with:
5246
environment-name: xrspatial-geotiff
@@ -56,7 +50,6 @@ jobs:
5650
gdal
5751
pyyaml
5852
tifffile
59-
libjxl=0.11.*
6053
condarc: |
6154
channels:
6255
- conda-forge

‎.github/workflows/test.yml‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,12 @@ jobs:
3434
strategy:
3535
matrix:
3636
os: ['ubuntu-latest', 'macos-latest', 'windows-latest']
37-
python: ${{ github.event_name == 'pull_request' && fromJson('["3.14", "3.14t"]') || fromJson('["3.12", "3.13", "3.14", "3.14t"]') }}
37+
# PRs run the newest GIL interpreter plus the free-threaded probe;
38+
# push-to-main and the nightly run every supported version. There
39+
# is no 3.15t entry yet: numba 0.68.0 ships cp314t wheels but no
40+
# cp315t, so that job would build numba from source. Add it once a
41+
# numba release carries the wheel.
42+
python: ${{ github.event_name == 'pull_request' && fromJson('["3.15", "3.14t"]') || fromJson('["3.12", "3.13", "3.14", "3.15", "3.14t"]') }}
3843
env:
3944
OS: ${{ matrix.os }}
4045
PYTHON: ${{ matrix.python }}

‎setup.cfg‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,14 @@ include_package_data = True
2525
# numba, scipy oldest release shipping a CPython 3.12 wheel, which
2626
# is the floor python_requires allows anyway
2727
# numpy >=1.26 first cp312 wheel, and xarray's own numpy floor
28-
# numpy <2.5 mirrors numba: 0.64-0.66 declare numpy<2.5 and numba
28+
# numpy <2.6 mirrors numba: 0.67-0.68 declare numpy<2.6 and numba
2929
# re-checks it at import in _ensure_critical_deps.
3030
# Without this, pip installs a numpy that makes
3131
# `import xrspatial` raise ImportError. Re-check this
3232
# on every numba bump -- nothing flags a stale cap,
33-
# and leaving it behind blocks a numpy that works.
33+
# and leaving it behind blocks a numpy that works
34+
# (the old <2.5 cap blocked every numpy with a
35+
# CPython 3.15 wheel; the first is 2.5.2).
3436
# xarray >=2025.11 earlier releases drop attrs across DataArray binary
3537
# ops, so morph_gradient / morph_white_tophat /
3638
# morph_black_tophat and the mcda and corridor
@@ -44,7 +46,7 @@ install_requires =
4446
numba >=0.59
4547
scipy >=1.11.2
4648
xarray >=2025.11
47-
numpy >=1.26,<2.5
49+
numpy >=1.26,<2.6
4850
pandas >=2.2
4951
urllib3 >=2.7
5052
packages = find:

0 commit comments

Comments
 (0)