From 0fd0d2fb1b3fbfd53165b3ba089281478a081cd7 Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Mon, 9 Mar 2026 14:31:51 +0100 Subject: [PATCH 1/7] add support for py314, remove py39 --- copier.yml | 5 ----- template/pixi.toml.jinja | 26 +++++++++++++------------- template/pyproject.toml.jinja | 12 ++++++------ 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/copier.yml b/copier.yml index df8fb2cf..152e952f 100644 --- a/copier.yml +++ b/copier.yml @@ -53,11 +53,6 @@ minimal_python_version: - py313 default: py39 -minimal_python_version_sortable: - type: str - default: "{{ minimal_python_version.replace('py39', 'py309') }}" - when: false - use_devcontainer: type: bool help: Should this project use a devcontainer for development? diff --git a/template/pixi.toml.jinja b/template/pixi.toml.jinja index c53e1704..ab84e133 100644 --- a/template/pixi.toml.jinja +++ b/template/pixi.toml.jinja @@ -42,35 +42,35 @@ zizmor = "*" pre-commit-install = "pre-commit install" pre-commit-run = "pre-commit run -a" -{% if minimal_python_version_sortable <= "py309" %}[feature.py39.dependencies] -python = "3.9.*" -{% endif %}{% if minimal_python_version_sortable <= "py310" %}[feature.py310.dependencies] +{% if minimal_python_version <= "py310" %}[feature.py310.dependencies] python = "3.10.*" -{% endif %}{% if minimal_python_version_sortable <= "py311" %}[feature.py311.dependencies] +{% endif %}{% if minimal_python_version <= "py311" %}[feature.py311.dependencies] python = "3.11.*" -{% endif %}{% if minimal_python_version_sortable <= "py312" %}[feature.py312.dependencies] +{% endif %}{% if minimal_python_version <= "py312" %}[feature.py312.dependencies] python = "3.12.*" -{% endif %}{% if minimal_python_version_sortable <= "py313" %}[feature.py313.dependencies] +{% endif %}{% if minimal_python_version <= "py313" %}[feature.py313.dependencies] python = "3.13.*" +{% endif %}{% if minimal_python_version <= "py314" %}[feature.py313.dependencies] +python = "3.14.*" {%- endif %} [environments] default = ["test"] -{%- if minimal_python_version_sortable <= "py309" %} -py39 = ["py39", "test"] -{%- endif %} -{%- if minimal_python_version_sortable <= "py310" %} +{%- if minimal_python_version <= "py310" %} py310 = ["py310", "test"] {%- endif %} -{%- if minimal_python_version_sortable <= "py311" %} +{%- if minimal_python_version <= "py311" %} py311 = ["py311", "test"] {%- endif %} -{%- if minimal_python_version_sortable <= "py312" %} +{%- if minimal_python_version <= "py312" %} py312 = ["py312", "test"] {%- endif %} -{%- if minimal_python_version_sortable <= "py313" %} +{%- if minimal_python_version <= "py313" %} py313 = ["py313", "test"] {%- endif %} +{%- if minimal_python_version <= "py314" %} +py314 = ["py314", "test"] +{%- endif %} {%- if build_docs %} docs = ["docs"] {%- endif %} diff --git a/template/pyproject.toml.jinja b/template/pyproject.toml.jinja index e03b8ce0..ec7364a3 100644 --- a/template/pyproject.toml.jinja +++ b/template/pyproject.toml.jinja @@ -11,19 +11,19 @@ authors = [{ name = "{{ author_name }}", email = "{{ author_email }}" }] dynamic = ["version"] classifiers = [ "Programming Language :: Python :: 3", -{%- if minimal_python_version_sortable <= "py309" %} - "Programming Language :: Python :: 3.9", -{%- endif %} -{%- if minimal_python_version_sortable <= "py310" %} +{%- if minimal_python_version <= "py310" %} "Programming Language :: Python :: 3.10", {%- endif %} -{%- if minimal_python_version_sortable <= "py311" %} +{%- if minimal_python_version <= "py311" %} "Programming Language :: Python :: 3.11", {%- endif %} -{%- if minimal_python_version_sortable <= "py312" %} +{%- if minimal_python_version <= "py312" %} "Programming Language :: Python :: 3.12", {%- endif %} +{%- if minimal_python_version <= "py313" %} "Programming Language :: Python :: 3.13", +{%- endif %} + "Programming Language :: Python :: 3.14", ] requires-python = ">={{ minimal_python_version.replace('py3', '3.') }}" readme = "README.md" From 96a8e51e6a5d94a3571a25fe9cefc526647f0bb5 Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Mon, 9 Mar 2026 14:33:03 +0100 Subject: [PATCH 2/7] fix --- .github/workflows/ci-copier.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-copier.yml b/.github/workflows/ci-copier.yml index b4743877..6f3ff5da 100644 --- a/.github/workflows/ci-copier.yml +++ b/.github/workflows/ci-copier.yml @@ -42,7 +42,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - minimal-python-version: [py39, py311, py313] + minimal-python-version: [py310, py311, py314] steps: - name: Checkout branch uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 From 284b7cf863fcc08599037ad61fd2109fb49eca8e Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Mon, 9 Mar 2026 14:51:59 +0100 Subject: [PATCH 3/7] finalize --- .github/workflows/ci-copier.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/ci-copier.yml b/.github/workflows/ci-copier.yml index d3742f25..dcbfe843 100644 --- a/.github/workflows/ci-copier.yml +++ b/.github/workflows/ci-copier.yml @@ -126,3 +126,20 @@ jobs: do curl -Ls --header "$AUTH" --request POST "$GITHUB_API_URL/repos/${GITHUB_REPOSITORY}/actions/runs/$line/cancel" > /dev/null done + + finalize: + name: Test CI of generated package (all) + timeout-minutes: 5 + runs-on: ubuntu-latest + needs: test-generated-package-ci + if: always() && !cancelled() + steps: + - if: needs.test-generated-package-ci.result == 'success' + name: All tests passed + run: echo All tests passed + + - if: needs.test-generated-package-ci.result != 'success' + name: Some tests failed + run: | + echo Some tests failed + exit 1 From 76e125c81c715da07c4fc4f07c375c81ccbdf071 Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Mon, 9 Mar 2026 14:53:22 +0100 Subject: [PATCH 4/7] fix --- template/pixi.toml.jinja | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/pixi.toml.jinja b/template/pixi.toml.jinja index b1be3ef3..34081260 100644 --- a/template/pixi.toml.jinja +++ b/template/pixi.toml.jinja @@ -50,7 +50,7 @@ python = "3.11.*" python = "3.12.*" {% endif %}{% if minimal_python_version <= "py313" %}[feature.py313.dependencies] python = "3.13.*" -{% endif %}{% if minimal_python_version <= "py314" %}[feature.py313.dependencies] +{% endif %}{% if minimal_python_version <= "py314" %}[feature.py314.dependencies] python = "3.14.*" {%- endif %} From 071ae0ed0bcc257f5902f5559c4ada3b7fb335af Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Mon, 9 Mar 2026 14:53:54 +0100 Subject: [PATCH 5/7] fix --- tests/test_template.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_template.py b/tests/test_template.py index 4e876d8f..cb7f3782 100644 --- a/tests/test_template.py +++ b/tests/test_template.py @@ -47,11 +47,11 @@ def test_add_autobump_workflow(generate_project, add_autobump_workflow): @pytest.mark.parametrize( - "minimal_python_version", ["py39", "py310", "py311", "py312", "py313"] + "minimal_python_version", ["py310", "py311", "py312", "py313", "py314"] ) def test_minimal_python_version(generate_project, minimal_python_version: str): minimal_python_version_str = minimal_python_version.replace("py3", "3.") - all_supported_python_versions = ["3.9", "3.10", "3.11", "3.12", "3.13"] + all_supported_python_versions = ["3.10", "3.11", "3.12", "3.13", "3.14"] all_supported_python_envs = [ f"py{version.replace('.', '')}" for version in all_supported_python_versions ] From 52a2ee798c77580cb5764e88aa09ed2132dbecbc Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Mon, 9 Mar 2026 14:55:41 +0100 Subject: [PATCH 6/7] fix --- copier.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/copier.yml b/copier.yml index 152e952f..467decaa 100644 --- a/copier.yml +++ b/copier.yml @@ -46,12 +46,12 @@ minimal_python_version: type: str help: What is the minimal Python version you want to support? choices: - - py39 - py310 - py311 - py312 - py313 - default: py39 + - py314 + default: py310 use_devcontainer: type: bool From 712f6a10e28161a948a7f79c1e0dd591251ebb66 Mon Sep 17 00:00:00 2001 From: Pavel Zwerschke Date: Mon, 9 Mar 2026 14:56:38 +0100 Subject: [PATCH 7/7] fix --- template/.github/workflows/ci.yml.jinja | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template/.github/workflows/ci.yml.jinja b/template/.github/workflows/ci.yml.jinja index a9591f5a..fd66ce5a 100644 --- a/template/.github/workflows/ci.yml.jinja +++ b/template/.github/workflows/ci.yml.jinja @@ -36,7 +36,7 @@ jobs: strategy: fail-fast: false matrix: -{%- set python_versions = ["py39", "py310", "py311", "py312", "py313"] %} +{%- set python_versions = ["py310", "py311", "py312", "py313", "py314"] %} {%- set minimal_version_index = python_versions.index(minimal_python_version) %} environment: {%- for python_version in python_versions[minimal_version_index:] %}