Skip to content

Drop Python 3.10 from CI matrix and minimum supported version #240

@Olen

Description

@Olen

Context

Current CI matrix in `python-package.yml`:

```yaml
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
```

Minimum in `pyproject.toml`: `python = ">=3.10"`. `tool.ruff.target-version` is currently `"py310"`.

Why drop 3.10

Python 3.10 reaches end-of-life in October 2026 — roughly five months out from now (2026-05-14). After that date 3.10 stops getting security fixes upstream, so most maintained libraries either drop or stop testing it.

Dropping it now also unlocks:

  • Cleaner CI — 4 matrix jobs instead of 5 (one less to wait on per PR).
  • Bumping `ruff.target-version` to `"py311"`, which enables modern rewrites (e.g. `X | Y` union syntax) that `py310` already allows but newer rules continue to expand.

Why this should be one consistent change

If we drop 3.10 only from CI but leave `python = ">=3.10"` in pyproject.toml, the package would still claim to support a version we no longer test against — and a regression that breaks on 3.10 would land silently. Either drop both, or drop neither.

Suggested sub-tasks

  • `python-package.yml`: remove `"3.10"` from the matrix.
  • `pyproject.toml`: bump `python = ">=3.10"` → `python = ">=3.11"`.
  • `pyproject.toml`: bump `tool.ruff.target-version = "py310"` → `"py311"` (and update the trailing comment).
  • Run `ruff check --fix` to apply any newly-enabled pyupgrade/typing rewrites; review the diff.
  • Optional: bump the floor again in October 2026 when 3.11's EOL clock starts (Oct 2027).

Conservative alternative

If a 5-month-early drop feels too aggressive, just drop `"3.10"` from the CI matrix and keep the pyproject floor — but add a comment to that effect so the asymmetry is intentional rather than a future trap.

Surfaced during the docstring audit / pdoc PR (#237).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions