Skip to content

Conversation

@vertti
Copy link
Collaborator

@vertti vertti commented Oct 26, 2025

Summary

Separate minimal test dependencies from development tools to enable supporting Python 3.9+ users while using modern dev tools that may drop support for older Python versions.

Changes

Dependency Groups

  • test: Minimal deps for running tests (pytest, pandas, polars) - must support Python 3.9+
  • dev: Linting, formatting, coverage, docs tools - can require latest Python

CI Workflow

Split monolithic build job into focused jobs:

  • test: Runs on Python 3.9-3.14 with --group test only
  • lint: Runs on Python 3.13 with --group test --group dev
  • coverage: Runs on Python 3.13 with --group test --group dev

Python 3.14 Support

Added Python 3.14 to test matrix and package classifiers.

Validation

Upgraded coverage from 7.10.6 to 7.11.0+ (requires Python 3.10+) with environment marker. This demonstrates that:

  • Dev tools can be upgraded freely
  • Python 3.9 tests still work (don't use dev group)
  • Python 3.13 coverage job uses latest coverage

Benefits

When dev tools drop Python 3.9 support in future releases:

  • Just update version constraints in dev group
  • Test jobs on Python 3.9 remain unaffected
  • Lint/coverage jobs get latest tools on Python 3.13
  • Library users on Python 3.9 are still supported

Separate minimal test dependencies from development tools to allow
supporting Python 3.9+ users while using modern dev tools that may
drop support for older Python versions.

- test: minimal deps for running tests (pytest, pandas, polars)
- dev: linting, formatting, coverage tools (ruff, pyrefly, coverage)
Separate testing, linting, and coverage into independent jobs:
- test: runs on Python 3.9-3.13 with minimal test dependencies
- lint: runs on Python 3.13 only with dev tools
- coverage: runs on Python 3.13 only with dev tools

This allows dev tools to drop support for older Python versions
without breaking library compatibility testing on those versions.
Add Python 3.14 to test matrix and package classifiers to ensure
forward compatibility with the upcoming Python release.
Demonstrates that the new dependency split works correctly:
- coverage 7.11.0+ requires Python 3.10+
- Environment marker ensures it only installs on Python 3.10+
- Python 3.9 test jobs will skip coverage (they only use test group)
- Python 3.13 coverage job will use latest coverage

This validates that dev tools can freely upgrade without breaking
Python 3.9 library support.
Rename workflow to 'CI' and add descriptive job names:
- 'CI / Python 3.9' instead of 'test / test (3.9)'
- 'CI / Lint & Type Check' instead of 'test / lint'
- 'CI / Code Coverage' instead of 'test / coverage'
- 'CI / Optional Dependencies (Python 3.9)' etc.
- 'CI / Isolation both (Python 3.9)' etc.

Makes GitHub PR checks much more readable for reviewers.
@vertti vertti merged commit be19eae into ThoughtWorksInc:master Oct 26, 2025
18 checks passed
@vertti vertti deleted the split-dev-dependencies branch October 26, 2025 12:04
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