Skip to content

Drop EOL Pythons (3.7–3.9) from CI, add 3.12–3.14 - #418

Merged
bitwise-aiden merged 2 commits into
mainfrom
update-python-ci-matrix
Jul 30, 2026
Merged

Drop EOL Pythons (3.7–3.9) from CI, add 3.12–3.14#418
bitwise-aiden merged 2 commits into
mainfrom
update-python-ci-matrix

Conversation

@bitwise-aiden

@bitwise-aiden bitwise-aiden commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Why

Every PR's python-tests (3.8) job is currently failing with:

py38: skipped because could not find python interpreter with spec(s): py38

The interpreter is installed fine — the break is environmental: virtualenv 21.5.0 (2026-06-13) dropped support for creating Python 3.8 environments, and python/setup.py doesn't pin virtualenv, so tox 4.6.4 can no longer materialize a py38 env. The last green run on main (May 21, virtualenv 21.3.3) predates that release.

Rather than pinning an old virtualenv to keep an EOL interpreter alive, this updates the matrix to versions users actually run.

What

  • Drop 3.8 (EOL 2024-10, actively broken in CI) and 3.9 (EOL 2025-10, next in line to be dropped by the toolchain — e.g. hatchling ≥1.28 already has) from the CI matrix
  • Remove vestigial py37/py38/py39 from the tox envlist (setup.cfg) and the Makefile TOX_ENV default (py37 was never even in the CI matrix)
  • Add 3.12, 3.13, 3.14 to the CI matrix and envlist
  • Only install python3.X-distutils for < 3.12 (distutils was removed from the stdlib in 3.12, the apt package doesn't exist for newer versions)
  • Replace distutils.util.strtobool in ciqueue/_pytest/test_queue.py with an inline helper with identical semantics (the distutils import broke test collection on 3.12+)
  • Declare python_requires='>=3.10' in setup.py

3.10 is kept for now despite its Oct 2026 EOL being close; dropping it can be a follow-up.

⚠️ Branch protection

If python-tests (3.8) / python-tests (3.9) are configured as required status checks, an admin needs to swap them for the new matrix entries when this merges, otherwise PRs will wait forever on 'expected' checks.

Testing

virtualenv 21.5.0 (2026-06-13) dropped support for creating Python 3.8
environments, which broke the python-tests (3.8) CI job for every PR:
tox now fails with 'could not find python interpreter with spec(s): py38'
even though the interpreter is installed.

Rather than pinning an old virtualenv, drop EOL versions and test what
users actually run:

- Drop 3.8 (EOL 2024-10, broken in CI) and 3.9 (EOL 2025-10, next to be
  dropped by the toolchain) from the CI matrix
- Remove vestigial py37/py38/py39 from the tox envlist and Makefile
- Add 3.12, 3.13 and 3.14 to the CI matrix and envlist
- Only install python3.X-distutils for < 3.12 (removed from the stdlib)
- Declare python_requires>=3.10 in setup.py

Assisted-By: devx/bbf3c269-bbaa-4af2-81fc-4b93ae41af0a
distutils was removed from the stdlib in Python 3.12, so importing it
broke test collection on the new 3.12-3.14 CI jobs. Inline the tiny
strtobool helper with identical semantics.

Assisted-By: devx/bbf3c269-bbaa-4af2-81fc-4b93ae41af0a
@bitwise-aiden
bitwise-aiden requested a review from ianks July 29, 2026 17:45
@bitwise-aiden
bitwise-aiden merged commit 9264089 into main Jul 30, 2026
34 checks passed
@bitwise-aiden
bitwise-aiden deleted the update-python-ci-matrix branch July 30, 2026 00:55
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.

2 participants