Skip to content

test(ci): run Python client CI across a 3.9-3.13 version matrix - #1572

Merged
inureyes merged 2 commits into
mainfrom
test/issue-1115-python-ci-matrix
Sep 2, 2026
Merged

inureyes merged 2 commits into
mainfrom
test/issue-1115-python-ci-matrix

Conversation

@inureyes

@inureyes inureyes commented Sep 2, 2026

Copy link
Copy Markdown
Member

Summary

python/pyproject.toml declares requires-python = ">=3.9" and classifiers for 3.9 through 3.13, but .github/workflows/python.yml pinned a single interpreter (3.11) with no version matrix, so four of the five supported versions never executed the test suite.

What changed

  • Split the single check job in .github/workflows/python.yml into a lint job (ruff check, ruff format --check, mypy python/src, unchanged, still a single leg on Python 3.11 since both tools are already pinned to py39 semantics) and a test job (pytest python/tests -m "not e2e", now matrixed over python-version: ['3.9', '3.11', '3.13'] with fail-fast: false so one version's failure does not mask the others).
  • Narrowed the classifiers list in python/pyproject.toml from 3.9-3.13 (five entries) to the three versions CI now actually exercises (3.9, 3.11, 3.13), so the published metadata and the tested matrix agree. requires-python stays ">=3.9" unbounded since that constraint is unaffected by which versions CI happens to test.
  • No changes to python/src/.

Test plan

  • Local Python 3.9 (system CPython 3.9.6 via uv venv): pip install -e "python[dev]" resolves cleanly, pytest python/tests -m "not e2e" -q passes 43/43.
  • Local Python 3.11 (uv-managed 3.11.10): same install and pytest, plus ruff check, ruff format --check, and mypy python/src all pass.
  • Local Python 3.13 (uv-managed 3.13.5): same install and pytest, passes 43/43.
  • python.yml parses as valid YAML with the expected job names (lint, test).
  • CI run on this PR: lint, test (Python 3.9), test (Python 3.11), and test (Python 3.13) all pass.

Closes #1115

python/pyproject.toml declares requires-python = ">=3.9" but .github/workflows/python.yml pinned a single interpreter (3.11), so four of the five supported versions never executed the test suite.

Split the check job into lint (ruff + mypy, unchanged, single leg since both are already pinned to py39 semantics) and test (pytest, now matrixed over ['3.9', '3.11', '3.13'] with fail-fast: false so one version's failure does not mask the others).

Narrowed the pyproject.toml classifiers to the three versions CI now actually exercises (3.9, 3.11, 3.13) so the published metadata and the tested matrix agree; requires-python stays >=3.9 unbounded since that constraint is unaffected.

Validated locally with uv-managed interpreters (3.9.6, 3.11.10, 3.13.5): pip install -e "python[dev]" resolves cleanly on all three and pytest python/tests -m "not e2e" passes 43/43 on each; ruff check, ruff format --check, and mypy python/src also pass on 3.11.

Refs #1115
@inureyes inureyes added type:test Test related changes priority:low Low priority status:review Under review labels Sep 2, 2026
@inureyes inureyes added status:done Completed and removed status:review Under review labels Sep 2, 2026
@inureyes
inureyes merged commit a7a12ac into main Sep 2, 2026
17 checks passed
@inureyes
inureyes deleted the test/issue-1115-python-ci-matrix branch September 2, 2026 00:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority:low Low priority status:done Completed type:test Test related changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

test(python): the client claims Python 3.9-3.13 but CI runs tests on 3.11 only

1 participant