chore(ci,deps): move actions to Node 24, drop Python 3.9 support - #77
Closed
thomasht86 wants to merge 1 commit into
Closed
chore(ci,deps): move actions to Node 24, drop Python 3.9 support#77thomasht86 wants to merge 1 commit into
thomasht86 wants to merge 1 commit into
Conversation
Closes #75, closes #71. ## Node 24 (#75) GitHub Actions emits Node 20 deprecation warnings for actions still pinned to the Node 20 runtime. Bump every official action to its first Node 24 major and standardize the stray setup-uv pin: - actions/checkout v4 -> v5 - actions/setup-python v5 -> v6 - actions/cache v4 -> v5 - actions/upload-artifact v4 -> v6 - actions/download-artifact v4 -> v7 - actions/attest-build-provenance v2 -> v3 - astral-sh/setup-uv v5 -> v7 (copilot-setup-steps) maturin-action@v1, github-action-benchmark@v1, setup-uv@v7 and docker-run-action@v3 already resolve to node24/docker, so they are left as-is. None of the bumped majors' breaking changes affect this repo's usage (we upload/download zipped artifacts by name, not by ID). ## Drop Python 3.9 (#71) 3.9 reached EOL in October 2025; the minimum is now 3.10. - pyproject.toml: requires-python >=3.10, drop 3.9 classifier (add 3.14), collapse the pytest version split, bump mypy python_version to 3.10 - Cargo.toml: pyo3 abi3-py39 -> abi3-py310 - CI test matrix: drop 3.9 - benchmark PEP 723 scripts: requires-python >=3.10 (keeps ruff's X | Y syntax valid), Optional[str] -> str | None - uv.lock: regenerated; collapses the py<3.10 dependency duplicates The typing_extensions.Unpack fallback stays: typing.Unpack only lands in 3.11, so 3.10 still needs it. No further code simplification is unlocked by dropping only 3.9. Verified: maturin develop, 123 unit tests pass, ruff + mypy clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Owner
Author
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.
Addresses both open issues.
Closes #75
Closes #71
#75 — Node 24 for GitHub Actions
CI emits Node 20 deprecation warnings for actions still pinned to the Node 20 runtime. Every official action is bumped to its first Node 24 major (minimal, deliberate — not chasing absolute-latest), and the stray
setup-uvpin is standardized:actions/checkoutactions/setup-pythonactions/cacheactions/upload-artifactactions/download-artifactactions/attest-build-provenanceastral-sh/setup-uv(copilot-setup-steps)Left as-is because their floating tags already resolve to Node 24 (or are Docker actions):
PyO3/maturin-action@v1,benchmark-action/github-action-benchmark@v1,astral-sh/setup-uv@v7(main CI),addnab/docker-run-action@v3.I reviewed the major-version release notes for each bumped action: none of the breaking changes affect this repo (we upload/download zipped artifacts by name, so the artifact actions' by-ID path and direct-upload changes don't apply).
#71 — Drop Python 3.9 (EOL Oct 2025)
Minimum is now 3.10:
pyproject.toml:requires-python = ">=3.10", drop the 3.9 classifier (and add the already-tested 3.14), collapse the conditionalpytestsplit into a singlepytest>=9.0.3, bumpmypypython_versionto 3.10Cargo.toml: pyo3abi3-py39→abi3-py310"3.9"requires-python = ">=3.10"+Optional[str]→str | None(keeps ruff'sUP007happy now that the inferred target is 3.10)uv.lock: regenerated — this collapses the manypython_version < '3.10'dependency duplicates (e.g. cryptography 47.0.0) that only existed for the 3.9 branchNo further code simplification is unlocked by dropping only 3.9: the
typing_extensions.Unpackfallback must stay becausetyping.Unpackfirst appears in 3.11, so 3.10 still needs it.Verification
uv run task dev(built withabi3-py310) ✅uv run task test:unit→ 123 passed, 2 skipped ✅uv run task lint(ruff + mypy) clean ✅🤖 Generated with Claude Code