Skip to content

ci: test every supported Python version; require Python 3.11+ - #195

Merged
nicolasbisurgi merged 1 commit into
masterfrom
ci-supported-python-versions
Oct 20, 2026
Merged

nicolasbisurgi merged 1 commit into
masterfrom
ci-supported-python-versions

Conversation

@nicolasbisurgi

Copy link
Copy Markdown
Collaborator

Summary

The unit-test matrix was fixed at 3.9 and 3.13. Python 3.9 and 3.10 are past end of life, and four supported versions went untested. A first job now reads the supported versions from endoflife.date on every run, so the matrix follows new releases and end-of-life dates without edits.

 jobs:
+  python-versions:                 # released and not past EOL, from endoflife.date
+    outputs: versions, oldest      # today: ["3.11","3.12","3.13","3.14","3.15"]
+                                   # API down or empty → fixed fallback list + ::warning::
   unit-tests:
+    needs: python-versions
     strategy:
+      fail-fast: false
       matrix:
-        python-version: ["3.9", "3.13"]
+        python-version: ${{ fromJSON(needs.python-versions.outputs.versions) }}
     steps:
       - Run unit tests
-      - Run unit tests with coverage   if: matrix.python-version == '3.11'
+      - Run unit tests with coverage   if: matrix.python-version == needs.python-versions.outputs.oldest

Coverage was gated on 3.11, which wasn't in the matrix, so it never ran. It now runs on the oldest supported version.

The package now claims only what CI tests:

-requires-python = ">=3.9"            classifiers 3.9 – 3.12
+requires-python = ">=3.11"           classifiers 3.11 – 3.15
-black target-version py39 – py312    ruff target-version py39
+black target-version py311 – py314   ruff target-version py311

Black stops at py314 because the Black version pinned in pre-commit (26.1.0) doesn't accept py315 yet. Black's targets only control which syntax it may use; 3.15 is still tested. installation.md and contributing.md now say 3.11+.

Evidence

  • Before: CI ran on 3.9 and 3.13 only; coverage never ran.
    After: the job's filter, run against the live API today, returns ["3.11","3.12","3.13","3.14","3.15"]. With the API URL broken, the fallback is used.
  • The unit suite passes locally on 3.11, 3.13, 3.14 and 3.15: 884 passed on each, with the feat: run phase time limits and result file Status (#124) #191 changes.
  • pre-commit run --all-files passes, and so do the CI lint job's ruff check and black --check. The workflow file is valid YAML.
  • This PR's own CI run is the first run of the new job.

Merge Danger

Door: one-way

Once a release ships with requires-python = ">=3.11", pip stops offering new RushTI releases to Python 3.9 and 3.10 users. Their existing installs keep working, and the standalone Windows executable isn't affected.

Blast Radius: packaging

  • This PR has no release label, so merging it publishes nothing. As with any unlabelled merge to master, the Build workflow re-uploads the Windows zip on the latest release (v2.3.2); the source is unchanged, so that build is effectively 2.3.2.
  • A future Python release (3.16 in October 2027) joins the matrix on its own. If dependencies don't support it yet, that matrix entry goes red, and with fail-fast: false the other versions still report.
  • Both this PR and feat: run phase time limits and result file Status (#124) #191 add CHANGELOG entries under [Unreleased]; the second to merge resolves a small conflict.

🤖 Generated with Claude Code

The unit-test matrix was fixed at 3.9 and 3.13, while 3.9 and 3.10 are
past end of life and 3.11, 3.12, 3.14 and 3.15 went untested. A first job
now reads the supported versions (released, not past EOL) from
endoflife.date and feeds them to the matrix, falling back to a fixed
list if the API is unreachable. fail-fast is off so one version's
failure doesn't cancel the others.

The coverage steps were gated on 3.11, which wasn't in the matrix, so
coverage never ran; they now run on the oldest supported version.

requires-python, the classifiers, the Black/Ruff targets and the docs
move to 3.11+ to match what CI tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@nicolasbisurgi
nicolasbisurgi merged commit 9962f5b into master Oct 20, 2026
15 checks passed
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.

1 participant