这是indexloc提供的服务,不要输入任何密码
Skip to content

Conversation

@derks
Copy link
Member

@derks derks commented Nov 3, 2025

Resolves Issue #764.

Summary by CodeRabbit

  • Chores

    • Updated minimum Python version requirement from 3.8 to 3.9
    • Added testing and support for Python 3.10 and 3.14
    • Removed Python 3.8 support (end of life)
  • Documentation

    • Updated version requirements and testing documentation

@derks derks added this to the 3.0.16 Stable milestone Nov 3, 2025
@coderabbitai
Copy link

coderabbitai bot commented Nov 3, 2025

Walkthrough

This PR updates Python version support across the project by dropping support for Python 3.8 (now EOL), making Python 3.9 the minimum version, and adding support for Python 3.14. Changes include updating CI workflows, Docker images, development tooling configurations, dependency specifications, and documentation.

Changes

Cohort / File(s) Summary
CI/CD & Build Orchestration
.github/workflows/build_and_test.yml, Makefile, docker-compose.yml, scripts/cli-smoke-test.sh
Removed Python 3.8 test target across build matrix and orchestration files; added Python 3.14 support. Updated docker-compose to remove cement-py38 service and add cement-py313.
Docker Base Images
Dockerfile, docker/Dockerfile.dev, docker/Dockerfile.dev-py313, docker/Dockerfile.dev-py314
Bumped base images from python:3.13-alpine to python:3.14-alpine; transitioned Dockerfile.dev-py313 from RC to stable tag; recreated Dockerfile.dev-py314 for Python 3.14 support with updated COPY paths.
Project Configuration
pyproject.toml, devbox.json
Updated minimum Python requirement from 3.8 to 3.9; bumped Ruff and MyPy target versions to py39 and 3.9 respectively; updated devbox Python version to 3.14.
Documentation
README.md, CHANGELOG.md
Updated Python version references from 3.8+ to 3.9+; revised Docker testing examples to show py39, py310, py313 containers; added dev entries documenting Python 3.14 default and Python 3.8 EOL removal.
Source Code
cement/ext/ext_plugin.py
Removed unused top-level importlib import while retaining functionality through submodule imports.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

  • The changes follow a consistent pattern of version updates and removals applied across multiple files
  • Most modifications are straightforward configuration and documentation updates
  • The import removal in cement/ext/ext_plugin.py is a simple cleanup with no behavior impact
  • Docker and CI configuration updates are mechanical and follow established patterns

Possibly related PRs

Poem

🐰 Hop along with Python so bright,
We've cast off 3.8's fading light,
Now 3.14 leads the way,
3.9's the minimum today!
Our garden grows with versions new,
Where fresh support pulls workflows through!

Pre-merge checks and finishing touches

✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The PR title "feat(dev): Python 3.14 default development target, drop 3.8 support" directly and comprehensively summarizes the primary changes in the changeset. The title accurately reflects the dual main objectives: establishing Python 3.14 as the default development environment and removing Python 3.8 support. This is evident across the modified files including CI workflows, Dockerfiles, configuration files (pyproject.toml, devbox.json), and testing scripts. The title uses proper conventional commit formatting, is concise, specific with version numbers, and is not misleading or off-topic.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/python-3.14

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
README.md (1)

93-114: Fix minor documentation formatting issues.

Two static analysis issues need correction:

  1. Line 95: Add a period after "etc" → "etc.)"
  2. Line 97: Add language specifier to the fenced code block (e.g., ```bash)

Apply this diff:

-The latest stable version of Python 3 is the default, and target version accessible as the `cement` container within Docker Compose.  For testing against alternative versions of python, additional containers are created (ex: `cement-py39`, `cement-py310`, etc). You can access these containers via:
+The latest stable version of Python 3 is the default, and target version accessible as the `cement` container within Docker Compose.  For testing against alternative versions of python, additional containers are created (ex: `cement-py39`, `cement-py310`, etc.). You can access these containers via:
 
-```
+```bash
 $ docker-compose ps
🧹 Nitpick comments (1)
docker/Dockerfile.dev-py314 (1)

25-26: Minor: COPY paths use ./docker/ prefix while docker/Dockerfile.dev uses docker/.

Both syntaxes are valid and functionally equivalent. For consistency across similar Dockerfiles, consider standardizing whether to use the ./ prefix. The ./ prefix is more explicit and robust, so consider adopting it uniformly if standardizing.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7c347ab and dad85d2.

⛔ Files ignored due to path filters (2)
  • devbox.lock is excluded by !**/*.lock
  • pdm.lock is excluded by !**/*.lock
📒 Files selected for processing (13)
  • .github/workflows/build_and_test.yml (1 hunks)
  • CHANGELOG.md (1 hunks)
  • Dockerfile (1 hunks)
  • Makefile (1 hunks)
  • README.md (2 hunks)
  • cement/ext/ext_plugin.py (0 hunks)
  • devbox.json (1 hunks)
  • docker-compose.yml (2 hunks)
  • docker/Dockerfile.dev (1 hunks)
  • docker/Dockerfile.dev-py313 (1 hunks)
  • docker/Dockerfile.dev-py314 (2 hunks)
  • pyproject.toml (3 hunks)
  • scripts/cli-smoke-test.sh (1 hunks)
💤 Files with no reviewable changes (1)
  • cement/ext/ext_plugin.py
🧰 Additional context used
🪛 LanguageTool
README.md

[style] ~95-~95: In American English, abbreviations like “etc.” require a period.
Context: ...ted (ex: cement-py39, cement-py310, etc). You can access these containers via: ...

(ETC_PERIOD)

🪛 markdownlint-cli2 (0.18.1)
README.md

97-97: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: test
🔇 Additional comments (12)
CHANGELOG.md (1)

15-16: Changelog entries accurately document the version migration.

The refactoring entries clearly communicate the breaking changes. The [dev] tags appropriately categorize these as infrastructure updates.

scripts/cli-smoke-test.sh (1)

5-5: PYTHON_VERSIONS list correctly updated.

The smoke test now covers Python 3.9 through 3.14, correctly excluding EOL 3.8 and including the new 3.14 development target.

docker/Dockerfile.dev (1)

1-1: Docker development image properly upgraded to Python 3.14.

Base image and prompt identifier are consistent and correct.

Also applies to: 3-3

Dockerfile (1)

1-1: Production Docker image upgraded to Python 3.14-alpine.

The base image is updated consistently with the development target. Consider verifying that Python 3.14 is stable and production-ready for your deployment scenario.

devbox.json (1)

4-4: Devbox configuration correctly updated to Python 3.14.

Development environment now targets the new default Python version.

pyproject.toml (1)

19-19: Python version constraints synchronized and correctly updated.

requires-python, ruff target-version, and mypy python_version are all aligned to the new minimum of Python 3.9. This ensures consistent behavior across package installation, code compliance checks, and type validation.

Also applies to: 72-72, 110-110

.github/workflows/build_and_test.yml (1)

68-68: CI test matrix comprehensively covers all supported Python versions.

The matrix spans Python 3.9 through 3.14 with PyPy3.10, providing good coverage across the supported version range. The removal of Python 3.8 and addition of 3.10 and 3.14 align with the package requirements and development target.

README.md (2)

45-45: ✓ Documentation update accurate.

The version requirement correctly reflects the new minimum Python support.


101-105: ✓ Docker container table aligns with docker-compose configuration.

The container list (py39, py310, py311, py312, py313) correctly reflects the services defined in docker-compose.yml.

docker/Dockerfile.dev-py313 (1)

1-1: ✓ Appropriate base image stabilization.

Updating from python:3.13-rc-alpine to python:3.13-alpine ensures the container uses the stable release rather than a release candidate. This is a good practice for reproducible builds.

Makefile (1)

3-11: ✓ Dev setup target correctly updated.

The dev target appropriately replaces the removed py38 container with py313, maintaining consistency with the docker-compose configuration and ensuring all Python version containers are initialized during development setup.

docker-compose.yml (1)

62-62: ✓ Docker Compose services properly updated.

The removal of cement-py38 and addition of cement-py313 follow the established service pattern and correctly reference the corresponding Dockerfile. The new service maintains consistency with other version-specific containers.

Also applies to: 84-89

@derks derks merged commit 3527ade into main Nov 3, 2025
14 checks passed
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