Skip to content
This repository was archived by the owner on Jul 5, 2026. It is now read-only.

Update to support Python 3.10–3.14 and to fully drop Python 3.9 across packaging, CI, tooling, and docs - #145

Open
swimmwatch wants to merge 4 commits into
devfrom
feature/add-support-314
Open

Update to support Python 3.10–3.14 and to fully drop Python 3.9 across packaging, CI, tooling, and docs#145
swimmwatch wants to merge 4 commits into
devfrom
feature/add-support-314

Conversation

@swimmwatch

Copy link
Copy Markdown
Owner

Description

  • Updated the project’s supported Python versions to 3.10–3.14 (inclusive).
  • Removed Python 3.9 support declarations where applicable and added Python 3.14 to CI test and lint matrices.
  • Adjusted GitHub Actions workflows to stop running against Python 3.9 and to include Python 3.14.
  • Updated the release workflow .github/workflows/release.yml to use Python 3.14 for the build/publish job (instead of 3.13).

Related Issue

N/A

Motivation and Context

  • Align the library’s version support policy with current Python releases by dropping EOL Python 3.9 and adding Python 3.14.
  • Ensure CI coverage and release packaging compatibility for Python 3.14 across supported environments.

How Has This Been Tested (if appropriate)?

  • CI workflow updates only: executed via GitHub Actions matrices for linting and tests on Python 3.10, 3.11, 3.12, 3.13, and 3.14.

@swimmwatch
swimmwatch requested a review from Copilot January 9, 2026 15:59
@swimmwatch swimmwatch self-assigned this Jan 9, 2026
@swimmwatch swimmwatch added the enhancement New feature or request label Jan 9, 2026
@swimmwatch
swimmwatch changed the base branch from master to dev January 9, 2026 15:59

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request updates the project to support Python 3.10–3.14 while dropping support for Python 3.9. The changes ensure that packaging metadata, CI workflows, development tooling, and documentation all reflect the new supported Python version range.

Key changes:

  • Updated Python version constraints from ^3.9 to ^3.10 in dependencies
  • Added Python 3.14 and removed Python 3.9 from CI test matrices and linting workflows
  • Updated Poetry version from 1.8.5 to 2.2.1 across all GitHub Actions workflows
  • Adjusted formatter configurations to target Python 3.10+ and bumped project version to 1.1.1

Reviewed changes

Copilot reviewed 7 out of 8 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
pyproject.toml Updated Python version classifiers, dependency constraints, dev dependencies, and isort configuration; bumped version to 1.1.1
poetry.lock Refreshed lock file with updated dependency versions and removed Python 3.9-specific packages
formatters-cfg.toml Updated Black and isort target versions from py39 to py310 minimum
README.md Added explicit documentation of supported Python versions (3.10–3.14)
Makefile Modified poetry lock command and fixed actionlint docker volume mount
.github/workflows/release.yml Updated Poetry version to 2.2.1 and added Python 3.14 for build/publish job
.github/workflows/python-check.yml Updated Python version matrix to 3.10–3.14, Poetry version to 2.2.1, and coverage upload condition
.github/workflows/docs.yml Updated Poetry version to 2.2.1

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread pyproject.toml Outdated
flake8-isort = "^6.1.1"
flake8-string-format = "^0.3.0"
flake8-rst-docstrings = "^0.3.0"
flake8-bugbear = "^24.12.12"

Copilot AI Jan 9, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The dev dependency "flake8-string-format" has been removed from pyproject.toml but there's no mention of this in the PR description. If this removal is intentional as part of dropping Python 3.9, it should be documented. If this was an accidental removal, it should be restored.

Suggested change
flake8-bugbear = "^24.12.12"
flake8-bugbear = "^24.12.12"
flake8-string-format = "^0.3.0"

Copilot uses AI. Check for mistakes.
Comment thread pyproject.toml Outdated
[tool.poetry.group.dev.dependencies]
mypy = "^1.14.0"
black = ">=24.10,<26.0"
black = "^24.10.0"

Copilot AI Jan 9, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Black has been downgraded from version 25.11.0 to 24.10.0. This is unusual in a PR that's updating to support newer Python versions, as newer versions of Black typically have better support for newer Python features. The downgrade may prevent proper formatting of Python 3.14-specific syntax. Consider using the latest version of Black that supports Python 3.14.

Suggested change
black = "^24.10.0"
black = "^25.11.0"

Copilot uses AI. Check for mistakes.
Comment thread pyproject.toml
black = "^24.10.0"
flake8 = "^7.1.1"
isort = ">=5.13.2,<7.0.0"
isort = "^5.13.2"

Copilot AI Jan 9, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The isort dependency has been downgraded from version 6.0.1 to 5.13.2. This downgrade is inconsistent with the goal of supporting Python 3.14, as newer versions of isort typically have better support for newer Python syntax and features. Consider using a version of isort that fully supports Python 3.14.

Suggested change
isort = "^5.13.2"
isort = "^6.0.1"

Copilot uses AI. Check for mistakes.
Comment thread pyproject.toml Outdated
flake8-pyproject = "^1.2.3"
jinja2 = "^3.1.5"
pytest-asyncio = ">=0.25,<0.27"
pytest-asyncio = "^0.25.0"

Copilot AI Jan 9, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pytest-asyncio dependency has been downgraded from version 0.26.0 to 0.25.3. When adding support for Python 3.14, it's generally better to use newer versions of testing dependencies that may have fixes or improvements for newer Python versions. Verify that version 0.25.3 is compatible with Python 3.14.

Suggested change
pytest-asyncio = "^0.25.0"
pytest-asyncio = "^0.26.0"

Copilot uses AI. Check for mistakes.
Comment thread pyproject.toml Outdated
lazydocs = "^0.4.8"
pydocstyle = "^6.3.0"
pytest-cov = ">=6,<8"
pytest-cov = "^6.0.0"

Copilot AI Jan 9, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pytest-cov dependency has been downgraded from version 7.0.0 to 6.3.0. When adding support for Python 3.14, using the latest version of test coverage tools is recommended to ensure compatibility with newer Python versions and to benefit from any bug fixes or improvements.

Suggested change
pytest-cov = "^6.0.0"
pytest-cov = "^7.0.0"

Copilot uses AI. Check for mistakes.
Comment thread formatters-cfg.toml
[tool.black]
line-length = 120
target-version = ["py39", "py310", "py311", "py312"]
target-version = ["py310", "py311", "py312", "py313"]

Copilot AI Jan 9, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Black target version list is missing "py314". Since this PR adds support for Python 3.14 and removes 3.9, the target version should include py314 to ensure Black formats code compatible with Python 3.14.

Suggested change
target-version = ["py310", "py311", "py312", "py313"]
target-version = ["py310", "py311", "py312", "py313", "py314"]

Copilot uses AI. Check for mistakes.
Comment thread Makefile

lock:
poetry lock --no-update
poetry lock

Copilot AI Jan 9, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The poetry lock command has been changed from "poetry lock --no-update" to "poetry lock". This will update all dependencies to their latest compatible versions on every lock, which may not be the intended behavior. The --no-update flag is typically used to refresh the lock file without updating dependency versions. If the intention is to only refresh the lock file metadata without updating versions, the --no-update flag should be retained.

Suggested change
poetry lock
poetry lock --no-update

Copilot uses AI. Check for mistakes.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants