build: require Python 3.10 for the prqlc Python package - #6225
Merged
Conversation
Python 3.9 is end-of-life and untested here (noxfile.py runs 3.10 and 3.12), and the stale `requires-python = ">=3.9"` claim has broken Dependabot's uv updater for this binding every day since 2026-08-07: Dependabot pins a candidate exactly, and pytest==9.1.1 requires 3.10+, so the python_full_version == '3.9.*' resolution fork is unsatisfiable and the whole job aborts. Regenerate uv.lock, which also picks up the pytest bump the blocked updater would have proposed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The
prqlcPython package declaresrequires-python = ">=3.9", but 3.9 is untested (noxfile.pyruns 3.10 and 3.12) and end-of-life since October 2025 — and the stale claim has been breaking Dependabot'suvupdater for the binding every day since 2026-08-07, so no Python dependency update has reached it in 16 days. This bumps the floor to>=3.10and regeneratesuv.lock. Verified by reproducing Dependabot's exact resolver error locally and confirming it resolves after the change.The failure
Dependabot's
uv in /prqlc/bindings/prqlc-pythonjob has failed on every run since 2026-08-07 — 16 consecutive daily runs, most recently 32506942984:Dependabot proposes a candidate as an exact pin (
pytest==9.1.1) across the whole declared range. pytest 9 requires 3.10+, so thepython_full_version == '3.9.*'fork is unsatisfiable and the whole job aborts — taking every other dependency in the group with it.uvnames the fix in its own hint: "Consider using a more restrictiverequires-pythonvalue (like >=3.10)."Note this is invisible to a normal
uv lock, which is free to fork the resolution (pytest v8.4.2 -> v8.4.2, v9.1.1) and succeeds. Only the exact-pin form Dependabot uses fails.Reproduction and verification
Simulating Dependabot by replacing the dev group's
pytest >= 7withpytest==9.1.1, against the currentrequires-python = ">=3.9":That reproduces the CI log character for character. With only
requires-pythonchanged to>=3.10and the same simulated pin:Why 3.10 is the right floor
noxfile.py'sVERSIONSis["3.10", "3.12"], andtest-python.yamlsets up exactly those two interpreters. The>=3.9claim has never been exercised.pipon 3.9 keeps resolving the last release that declared support, it just stops picking up new ones.Scope notes
uv.lockalso movespytest8.4.2 → 9.1.1 and drops two now-redundantpython_full_versionmarkers. That is the mechanical consequence of removing the 3.9 fork, not a separate decision — and CI already runs pytest 9, becausenoxfile.pyinstallspytest>=7directly rather than syncing from the lock.abi3-py37feature onpyo3is deliberately left alone. It sets the C ABI floor and the wheel tag, which is a separate concern from the metadata floor;cp37-abi3wheels install fine on 3.10+.pytest<9forpython_version<'3.10'), which unblocks Dependabot the same way at the cost of a marker-split dev dependency. Say the word and I'll switch it.Found by
The daily
review-runssweep, checking whyrustls-webpki's security-update job failed this morning. That turned up a wider pattern nothing in the loop currently watches: 10 open Dependabot alerts (oldest 2026-04-24) and four distinct update jobs failing —uv(16 days, this PR),cargo … for pyo3(security_update_not_possible, 0.27.2 installed vs 0.29.0 required — a genuine 0.27→0.29 migration, out of scope here),cargo … for rustls-webpki(alsoupdate_not_possible, but it reachesCargo.lockonly viatiberius/duckdbbehindtest-dbs/test-dbs-external, so it is not in any published artifact), andnpm_and_yarn … for dompurify. Details are in thereview-runstracking issue #6123; this PR is the one piece with a small, self-contained fix.