Skip to content

fix: repair uv install, drop Python 3.9/3.10, add 3.13 - #154

Merged
giswqs merged 6 commits into
masterfrom
fix/uv-install-python-313
Jul 7, 2026
Merged

fix: repair uv install, drop Python 3.9/3.10, add 3.13#154
giswqs merged 6 commits into
masterfrom
fix/uv-install-python-313

Conversation

@giswqs

@giswqs giswqs commented Jul 7, 2026

Copy link
Copy Markdown
Member

Summary

  • Fixes geospatial package failing to install in UV #153: uv add geospatial failed building llvmlite==0.36.0 because the resolver backtracked numba to 0.53.1 (it caps numpy below the latest, so an ancient numba got chosen), and that old llvmlite has no Python 3.13 wheel. A numba>=0.60 floor keeps numba/llvmlite modern (numba==0.66.0, llvmlite==0.48.0, both ship cp313 wheels).
  • Raises the minimum Python to 3.11 and adds 3.13: updated requires-python, classifiers, and the Ubuntu test matrix (3.11, 3.12, 3.13); bumped the Windows and macOS smoke tests to 3.13.
  • Brings dependencies up to date: geemap>=0.36.0, leafmap>=0.55.0, pygis>=0.9.0, mkdocs-jupyter>=0.25.1, and the setup-uv pin from 0.4.12 to 0.11.27.
  • Adds geolibre and geolibre-wasm to the curated package set.

Test plan

  • uv pip compile requirements.txt resolves cleanly on Python 3.11 and 3.13
  • Resolution selects numba==0.66.0 / llvmlite==0.48.0 (cp313 wheels available) instead of the failing llvmlite==0.36.0
  • pre-commit run --all-files passes
  • CI green on Ubuntu 3.11/3.12/3.13, Windows 3.13, macOS 3.13

Summary by CodeRabbit

  • New Features

    • Expanded test coverage to include newer Python versions, including Python 3.13 and 3.14 in CI.
    • Raised the supported Python version for the package to 3.11+.
  • Chores

    • Updated GitHub Actions and deployment tooling across build, docs, CI, and release workflows.
    • Refreshed several dependency version ranges, including geospatial and documentation packages.

uv backtracked numba to 0.53.1 (dragging in llvmlite 0.36.0, which has
no Python 3.13 wheel and fails to build), so add a numba>=0.60 floor.
Also raise the minimum Python to 3.11, add 3.13 to the test matrix and
classifiers, refresh pinned dependency floors, and add geolibre and
geolibre-wasm.
@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@giswqs, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 6 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: e35c1feb-6c9a-4478-a7aa-70e242737fec

📥 Commits

Reviewing files that changed from the base of the PR and between c09ed19 and 78f2a23.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (3)
  • .github/workflows/ubuntu.yml
  • pyproject.toml
  • requirements.txt
📝 Walkthrough

Walkthrough

This PR upgrades GitHub Actions versions (checkout, setup-uv, docker/build-push-action, actions-netlify) across CI workflows, expands Python version support matrices (adding 3.13/3.14, dropping 3.9/3.10), raises the minimum supported Python to 3.11 in pyproject.toml, and bumps several package version constraints in requirements files.

Changes

CI/tooling and dependency version updates

Layer / File(s) Summary
CI workflow action and Python matrix upgrades
.github/workflows/docker-image.yml, .github/workflows/docs-build.yml, .github/workflows/docs.yml, .github/workflows/macos.yml, .github/workflows/pypi.yml, .github/workflows/ubuntu.yml, .github/workflows/windows.yml
Bumps actions/checkout to v7, astral-sh/setup-uv to v8.3.0 (uv 0.11.27), docker/build-push-action to v7, and actions-netlify to v4.0; updates Python matrices to add 3.13/3.14 and drop 3.9/3.10.
Minimum Python version and classifiers
pyproject.toml
Raises requires-python from >=3.9 to >=3.11 and updates trove classifiers to reflect Python 3.13/3.14 support instead of 3.9–3.12.
Dependency version constraint updates
requirements.txt, requirements_docs.txt
Bumps geemap, leafmap, pygis, mkdocs-jupyter constraints; adds numba and geolibre/geolibre-wasm entries.

Estimated code review effort: 2 (Simple) | ~10 minutes

Related issues: Fixes an install failure caused by attempting to build llvmlite==0.36.0 under Python 3.13 via UV (#153), addressed by raising the minimum supported Python version and updating incompatible dependency constraints.

Poem

A rabbit hops through YAML fields so bright,
Bumping actions v6 to v7, setting versions right,
Python 3.11 now the floor, 3.13 and 3.14 in sight,
leafmap, pygis, geemap grow anew,
No more llvmlite woes to chew! 🐇✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly reflects the UV install fix and Python support changes in the PR.
Linked Issues check ✅ Passed The numba floor and Python 3.11+ support address the llvmlite/numba resolution problem described in #153.
Out of Scope Changes check ✅ Passed The workflow and dependency bumps align with the stated UV and Python support updates; no unrelated changes stand out.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/uv-install-python-313

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

giswqs added 2 commits July 6, 2026 23:49
The committed uv.lock could not be parsed by newer uv, breaking CI, so
regenerate it against the updated requirements. Also bump the workflow
actions (checkout v7, setup-uv v8, build-push-action v7, actions-netlify
v4) to their latest major versions.
astral-sh/setup-uv does not publish a floating v8 major tag, so pin the
full release version to resolve the action.
@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown

@github-actions
github-actions Bot temporarily deployed to pull request July 7, 2026 03:59 Inactive
The full dependency tree resolves cleanly on 3.14 with modern
numba/llvmlite, so add it to the classifiers and Ubuntu test matrix.
@github-actions
github-actions Bot temporarily deployed to pull request July 7, 2026 04:01 Inactive
@github-actions
github-actions Bot temporarily deployed to pull request July 7, 2026 04:03 Inactive

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

♻️ Duplicate comments (5)
.github/workflows/docs-build.yml (1)

16-23: 🔒 Security & Privacy | 🔵 Trivial | ⚖️ Poor tradeoff

Same unpinned-action concern as docker-image.yml.

Also applies to: 54-54

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/docs-build.yml around lines 16 - 23, The workflow still
uses unpinned third-party actions, so update the actions in the docs build job
to pinned commit SHAs instead of floating tags. Apply this to the checkout and
setup-uv steps in the workflow, matching the same pinning approach used
elsewhere, and keep the existing step names and configuration while only
changing the action references.

Source: Linters/SAST tools

.github/workflows/macos.yml (1)

22-27: 🔒 Security & Privacy | 🔵 Trivial | ⚖️ Poor tradeoff

Same unpinned-action concern as docker-image.yml.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/macos.yml around lines 22 - 27, The workflow uses a
floating action reference for actions/checkout, so pin it to a specific
immutable version or commit like the other workflow fix. Update the checkout
step in the macos workflow to use a fixed release/sha, and keep the existing
setup-uv pin as-is; use the action names actions/checkout and astral-sh/setup-uv
to locate the steps.

Source: Linters/SAST tools

.github/workflows/pypi.yml (1)

12-12: 🔒 Security & Privacy | 🔵 Trivial | ⚖️ Poor tradeoff

Same unpinned-action concern as docker-image.yml.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/pypi.yml at line 12, The workflow is using an unpinned
GitHub Action in the checkout step, which should be fixed the same way as in
docker-image.yml. Update the actions/checkout reference in the pypi workflow to
a specific pinned release or commit so the job is reproducible and not tied to a
moving tag.

Source: Linters/SAST tools

.github/workflows/docs.yml (1)

16-23: 🔒 Security & Privacy | 🔵 Trivial | ⚖️ Poor tradeoff

Same unpinned-action concern as docker-image.yml.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/docs.yml around lines 16 - 23, The workflow still uses
floating action references, so pin the external actions in the docs workflow to
immutable versions instead of tag-based refs. Update the actions used in the
checkout/setup steps, specifically actions/checkout and astral-sh/setup-uv, to
fixed commit SHAs (and keep their configuration the same) so the workflow is
reproducible and consistent with the docker-image workflow.

Source: Linters/SAST tools

.github/workflows/windows.yml (1)

18-23: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low value

Consider pinning actions to commit SHA.

Same unpinned-action concern raised for ubuntu.yml applies here for actions/checkout@v7 and astral-sh/setup-uv@v8.3.0.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/windows.yml around lines 18 - 23, Pin the workflow actions
in this job to immutable commit SHAs instead of version tags. Update the uses
entries for actions/checkout and astral-sh/setup-uv in the windows workflow to
reference their specific commit hashes, keeping the same action behavior while
removing the unpinned dependency risk.

Source: Linters/SAST tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/docker-image.yml:
- Line 21: Pin the third-party GitHub Actions references in the workflow instead
of using tag-based versions. Update the action usages for actions/checkout and
docker/build-push-action to full commit SHAs, and keep the version tag in a
comment for readability so the workflow remains tied to a specific reviewed
revision.

In @.github/workflows/ubuntu.yml:
- Around line 19-24: The workflow job uses mutable action tags for
actions/checkout and astral-sh/setup-uv, so update the references in the ubuntu
workflow to pinned commit SHAs instead of version tags. Locate the checkout step
and the Install uv step in the workflow, replace each action version with its
immutable SHA pin, and keep the setup-uv version input unchanged.

In @.github/workflows/windows.yml:
- Around line 15-16: The Windows workflow currently only tests Python 3.13, so
the minimum supported version is not covered on that platform. Update the matrix
in the windows workflow so the job also runs with Python 3.11, keeping the
existing setup around the python-version matrix and the Windows CI job intact.

In `@requirements.txt`:
- Around line 50-51: Update the Numba dependency floor in requirements so it
requires Python 3.13 support; the current numba>=0.60 constraint still permits
0.60.x, so change the version guard in the requirements entry for numba to
numba>=0.61.

---

Duplicate comments:
In @.github/workflows/docs-build.yml:
- Around line 16-23: The workflow still uses unpinned third-party actions, so
update the actions in the docs build job to pinned commit SHAs instead of
floating tags. Apply this to the checkout and setup-uv steps in the workflow,
matching the same pinning approach used elsewhere, and keep the existing step
names and configuration while only changing the action references.

In @.github/workflows/docs.yml:
- Around line 16-23: The workflow still uses floating action references, so pin
the external actions in the docs workflow to immutable versions instead of
tag-based refs. Update the actions used in the checkout/setup steps,
specifically actions/checkout and astral-sh/setup-uv, to fixed commit SHAs (and
keep their configuration the same) so the workflow is reproducible and
consistent with the docker-image workflow.

In @.github/workflows/macos.yml:
- Around line 22-27: The workflow uses a floating action reference for
actions/checkout, so pin it to a specific immutable version or commit like the
other workflow fix. Update the checkout step in the macos workflow to use a
fixed release/sha, and keep the existing setup-uv pin as-is; use the action
names actions/checkout and astral-sh/setup-uv to locate the steps.

In @.github/workflows/pypi.yml:
- Line 12: The workflow is using an unpinned GitHub Action in the checkout step,
which should be fixed the same way as in docker-image.yml. Update the
actions/checkout reference in the pypi workflow to a specific pinned release or
commit so the job is reproducible and not tied to a moving tag.

In @.github/workflows/windows.yml:
- Around line 18-23: Pin the workflow actions in this job to immutable commit
SHAs instead of version tags. Update the uses entries for actions/checkout and
astral-sh/setup-uv in the windows workflow to reference their specific commit
hashes, keeping the same action behavior while removing the unpinned dependency
risk.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 588bde28-8bf0-4881-b0bb-453a1e58d37c

📥 Commits

Reviewing files that changed from the base of the PR and between 7a2a96e and c09ed19.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (10)
  • .github/workflows/docker-image.yml
  • .github/workflows/docs-build.yml
  • .github/workflows/docs.yml
  • .github/workflows/macos.yml
  • .github/workflows/pypi.yml
  • .github/workflows/ubuntu.yml
  • .github/workflows/windows.yml
  • pyproject.toml
  • requirements.txt
  • requirements_docs.txt

Comment thread .github/workflows/docker-image.yml
Comment thread .github/workflows/ubuntu.yml
Comment thread .github/workflows/windows.yml
Comment thread requirements.txt Outdated
- Raise numba floor to >=0.61; 0.60.x does not support Python 3.13, and
  0.61.0 is the first release with 3.13 support. Refresh uv.lock.
@giswqs
giswqs merged commit 6e035c3 into master Jul 7, 2026
10 checks passed
@giswqs
giswqs deleted the fix/uv-install-python-313 branch July 7, 2026 04:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

geospatial package failing to install in UV

1 participant