From eeb24f6a64da869c8e71950be5d3636d1796b7ee Mon Sep 17 00:00:00 2001
From: Nyako Shigure
Date: Mon, 28 Sep 2026 23:16:59 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20feat:=20Support=20Python=203.15?=
=?UTF-8?q?=20and=203.15t,=20drop=20Python=203.10?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/lint-and-fmt.yml | 5 ++++-
.github/workflows/unit-test.yml | 20 +++++++++++++++++++-
README.md | 4 ++++
pyproject.toml | 6 +++---
uv.lock | 22 +---------------------
5 files changed, 31 insertions(+), 26 deletions(-)
diff --git a/.github/workflows/lint-and-fmt.yml b/.github/workflows/lint-and-fmt.yml
index 3565163..c9a3f8b 100644
--- a/.github/workflows/lint-and-fmt.yml
+++ b/.github/workflows/lint-and-fmt.yml
@@ -13,9 +13,12 @@ jobs:
strategy:
matrix:
# Only run linter and formatter on minimum supported Python version
- python-version: ['3.10']
+ python-version: ['3.11']
architecture: ['x64']
name: lint and fmt - Python ${{ matrix.python-version }} on ${{ matrix.architecture }}
+ env:
+ UV_PYTHON: ${{ matrix.python-version }}
+ UV_LOCKED: 'true'
steps:
- name: Checkout
uses: actions/checkout@v7
diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml
index 7a339cd..5f6df82 100644
--- a/.github/workflows/unit-test.yml
+++ b/.github/workflows/unit-test.yml
@@ -12,9 +12,12 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- python-version: ['3.10', '3.11', '3.12', '3.13', '3.14']
+ python-version: ['3.11', '3.12', '3.13', '3.14', '3.15', '3.15t']
architecture: ['x64']
name: unittest - Python ${{ matrix.python-version }} on ${{ matrix.architecture }}
+ env:
+ UV_PYTHON: ${{ matrix.python-version }}
+ UV_LOCKED: 'true'
steps:
- name: Checkout
uses: actions/checkout@v7
@@ -38,6 +41,21 @@ jobs:
run: |
just ci-install
+ - name: Verify Python runtime
+ run: |
+ uv run python - <<'PY'
+ import os
+ import sys
+ import sysconfig
+
+ requested = os.environ["UV_PYTHON"]
+ assert f"{sys.version_info.major}.{sys.version_info.minor}" == requested.removesuffix("t")
+ if requested.endswith("t"):
+ assert sysconfig.get_config_var("Py_GIL_DISABLED") == 1
+ assert not sys._is_gil_enabled()
+ print(sys.version)
+ PY
+
- name: unit test
run: |
just ci-test
diff --git a/README.md b/README.md
index 357ae2d..a8fdfc4 100644
--- a/README.md
+++ b/README.md
@@ -14,3 +14,7 @@ Just a template for quickly creating a python library.
Before the work starts, replace the `moelib` with the name of your library.
+
+The template requires Python 3.11 or newer. CI tests Python 3.11–3.15, including
+prereleases of Python 3.15 and its free-threaded build (`3.15t`), using the same
+locked dependencies and test suite.
diff --git a/pyproject.toml b/pyproject.toml
index bfb8d57..5715fd5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -3,7 +3,7 @@ name = "moelib"
version = "0.1.0"
description = ""
readme = "README.md"
-requires-python = ">=3.10"
+requires-python = ">=3.11"
dependencies = []
authors = [{ name = "Nyakku Shigure", email = "sigure.qaq@gmail.com" }]
keywords = []
@@ -14,11 +14,11 @@ classifiers = [
"Typing :: Typed",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
+ "Programming Language :: Python :: 3.15",
"Programming Language :: Python :: Implementation :: CPython",
]
@@ -41,7 +41,7 @@ dev = [
[tool.ruff]
line-length = 120
-target-version = "py310"
+target-version = "py311"
[tool.ruff.lint]
select = [
diff --git a/uv.lock b/uv.lock
index d9160b0..4845322 100644
--- a/uv.lock
+++ b/uv.lock
@@ -1,6 +1,6 @@
version = 1
revision = 3
-requires-python = ">=3.10"
+requires-python = ">=3.11"
[[package]]
name = "colorama"
@@ -11,15 +11,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
]
-[[package]]
-name = "exceptiongroup"
-version = "1.2.2"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883, upload-time = "2024-07-12T22:26:00.161Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453, upload-time = "2024-07-12T22:25:58.476Z" },
-]
-
[[package]]
name = "iniconfig"
version = "2.0.0"
@@ -85,12 +76,10 @@ version = "9.1.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
- { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
{ name = "iniconfig" },
{ name = "packaging" },
{ name = "pluggy" },
{ name = "pygments" },
- { name = "tomli", marker = "python_full_version < '3.11'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/e4/47/b9efed96c114afcfa3c9d3fe98a76a1d14c74a9e266d397cf6eb64be5e01/pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313", size = 1636369, upload-time = "2026-06-19T10:58:32.857Z" }
wheels = [
@@ -135,15 +124,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/8b/4b/51327018d056f0dad2c2238f26d1fb0f53707a9d91b75dea6d1b3039f136/ruff-0.16.7-py3-none-win_arm64.whl", hash = "sha256:aab7f39e2c9df6c596216070f98eef1207b94f8516cca20c808826974971855b", size = 10412401, upload-time = "2026-09-10T18:04:04.098Z" },
]
-[[package]]
-name = "tomli"
-version = "2.0.2"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/35/b9/de2a5c0144d7d75a57ff355c0c24054f965b2dc3036456ae03a51ea6264b/tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed", size = 16096, upload-time = "2024-10-02T10:46:13.208Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/cf/db/ce8eda256fa131af12e0a76d481711abe4681b6923c27efb9a255c9e4594/tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38", size = 13237, upload-time = "2024-10-02T10:46:11.806Z" },
-]
-
[[package]]
name = "ty"
version = "0.0.80"
From cad224422edf50c4eb34e2b926a1d4f0dc4cd1c2 Mon Sep 17 00:00:00 2001
From: Nyako Shigure
Date: Mon, 28 Sep 2026 23:56:52 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20ci:=20keep=20the=20Pyt?=
=?UTF-8?q?hon=20support=20update=20minimal?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.github/workflows/lint-and-fmt.yml | 3 ---
.github/workflows/unit-test.yml | 16 ----------------
README.md | 4 ----
3 files changed, 23 deletions(-)
diff --git a/.github/workflows/lint-and-fmt.yml b/.github/workflows/lint-and-fmt.yml
index c9a3f8b..4e6b0b3 100644
--- a/.github/workflows/lint-and-fmt.yml
+++ b/.github/workflows/lint-and-fmt.yml
@@ -16,9 +16,6 @@ jobs:
python-version: ['3.11']
architecture: ['x64']
name: lint and fmt - Python ${{ matrix.python-version }} on ${{ matrix.architecture }}
- env:
- UV_PYTHON: ${{ matrix.python-version }}
- UV_LOCKED: 'true'
steps:
- name: Checkout
uses: actions/checkout@v7
diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml
index 5f6df82..03fe4f8 100644
--- a/.github/workflows/unit-test.yml
+++ b/.github/workflows/unit-test.yml
@@ -17,7 +17,6 @@ jobs:
name: unittest - Python ${{ matrix.python-version }} on ${{ matrix.architecture }}
env:
UV_PYTHON: ${{ matrix.python-version }}
- UV_LOCKED: 'true'
steps:
- name: Checkout
uses: actions/checkout@v7
@@ -41,21 +40,6 @@ jobs:
run: |
just ci-install
- - name: Verify Python runtime
- run: |
- uv run python - <<'PY'
- import os
- import sys
- import sysconfig
-
- requested = os.environ["UV_PYTHON"]
- assert f"{sys.version_info.major}.{sys.version_info.minor}" == requested.removesuffix("t")
- if requested.endswith("t"):
- assert sysconfig.get_config_var("Py_GIL_DISABLED") == 1
- assert not sys._is_gil_enabled()
- print(sys.version)
- PY
-
- name: unit test
run: |
just ci-test
diff --git a/README.md b/README.md
index a8fdfc4..357ae2d 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,3 @@ Just a template for quickly creating a python library.
Before the work starts, replace the `moelib` with the name of your library.
-
-The template requires Python 3.11 or newer. CI tests Python 3.11–3.15, including
-prereleases of Python 3.15 and its free-threaded build (`3.15t`), using the same
-locked dependencies and test suite.