Skip to content

✨ feat: support Python 3.15 and 3.15t, drop Python 3.10 - #103

Merged
SigureMo merged 2 commits into
ShigureLab:mainfrom
ShigureNyako:session/sess_dev_neko_upgrade_shigurelab_python_lib_starter_python_sup
Sep 28, 2026
Merged

SigureMo merged 2 commits into
ShigureLab:mainfrom
ShigureNyako:session/sess_dev_neko_upgrade_shigurelab_python_lib_starter_python_sup

Conversation

@ShigureNyako

@ShigureNyako ShigureNyako commented Sep 28, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Raise the template's minimum Python version to 3.11 and align its classifiers, Ruff target and lockfile. Preserve support and CI coverage for 3.11–3.14.
  • Add Python 3.15 and free-threaded 3.15t to the regular unit-test matrix, including prereleases. Both use the normal dependency installation and complete test suite, without skips or allowed failures.
  • Bind uv to each unit-test matrix interpreter so the 3.15t job uses the free-threaded interpreter rather than falling back to a regular build.
  • Regenerate the lockfile without upgrading dependencies; this only removes the now-unused Python 3.10 backports. The template has no runtime dependencies or Pydantic gate.

Validation

Locally on macOS arm64:

  • UV_PYTHON=<version> UV_LOCKED=true just ci-install ci-test: passed on 3.11.16, 3.12.14, 3.13.15, 3.14.7, 3.15.0rc2 and 3.15.0rc2 free-threaded (1 test each).
  • Minimum-version just ci-lint ci-fmt-check: passed.
  • sdist/wheel builds on all six interpreters: passed; inspected wheel metadata for Requires-Python: >=3.11 and the updated classifiers.
  • Clean wheel installations and both moelib --version / python -m moelib --version on 3.11, 3.15 and 3.15t: passed. Verified the GIL remains disabled after imports on 3.15t.
  • uv lock --check, workflow formatting and git diff --check: passed.

Review follow-up

In cad2244, removed the extra README paragraph, runtime-assertion step, lint job environment overrides and CI lock-policy change. Only the unit-test interpreter selection remains, to ensure 3.15t actually runs free-threaded Python.

All seven checks pass on cad2244: unit tests, Python 3.11–3.15 and 3.15t and lint/format. The 3.15t job log confirms the free-threaded interpreter and the complete passing test suite.

Repository settings

Rechecked after review: the repository ruleset now requires the 3.11–3.15 and 3.15t unit-test checks, with no obsolete 3.10 requirement. No repository settings were changed by this PR.

@SigureMo please review when convenient.

Comment thread README.md Outdated
Comment thread .github/workflows/unit-test.yml Outdated
Comment thread .github/workflows/lint-and-fmt.yml Outdated
Comment on lines +19 to +21
env:
UV_PYTHON: ${{ matrix.python-version }}
UV_LOCKED: 'true'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

说明必要性

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

这两项对 lint job 并非必需:setup-python 已将普通 3.11 放到 PATH 首位;UV_LOCKED 是额外的 CI 策略,不是版本兼容修复。已在 cad2244 删除 lint 的整个 env,并删除 unit-test 的 UV_LOCKED。仅在 unit-test 保留 UV_PYTHON 来显式选择 3.15t:本地将 free-threaded 解释器目录放到 PATH 首位后,未指定版本的 uv venv 仍选择 3.14;设置 UV_PYTHON=3.15t 才选择 free-threaded 解释器。

@SigureMo SigureMo changed the title ✨ feat: Support Python 3.15 and 3.15t, drop Python 3.10 ✨ feat: support Python 3.15 and 3.15t, drop Python 3.10 Sep 28, 2026

@SigureMo SigureMo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTMeow 🐾

@SigureMo
SigureMo merged commit 4c4adb2 into ShigureLab:main Sep 28, 2026
7 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