Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ branch = True
omit =
# omit anything supplied by vendors
*/vendor_files/*
# omit any auto-generated API client code
*/generated/open_api/*
Comment on lines +6 to +7
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Unrelated but reasonable change.

This coverage exclusion for auto-generated OpenAPI client code is sensible but appears unrelated to the stated PR objective of adding Python 3.14 support. Consider separating unrelated changes into their own PRs for clearer history and easier review.

🤖 Prompt for AI Agents
In .coveragerc around lines 6 to 7, the addition of the coverage exclusion
pattern "*/generated/open_api/*" is unrelated to the Python 3.14 support PR;
revert this change from the current branch and create a separate PR that
documents and justifies excluding auto-generated OpenAPI client code (or
conversely, move only the Python 3.14 changes into this PR and leave the
.coveragerc change for its own commit/PR) so the history and review remain
focused and atomic.


[report]
# Regexes for lines to exclude from consideration
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,5 +61,5 @@
"initializeCommand": "sh .devcontainer/initialize-command.sh",
"onCreateCommand": "sh .devcontainer/on-create-command.sh",
"postStartCommand": "sh .devcontainer/post-start-command.sh"
// Devcontainer context hash (do not manually edit this, it's managed by a pre-commit hook): 53d51a57 # spellchecker:disable-line
// Devcontainer context hash (do not manually edit this, it's managed by a pre-commit hook): 43411b4a # spellchecker:disable-line
}
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@
[![Checked with pyright](https://microsoft.github.io/pyright/img/pyright_badge.svg)](https://microsoft.github.io/pyright/)
[![Actions status](https://github.com/LabAutomationAndScreening/copier-base-template/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/LabAutomationAndScreening/copier-base-template/actions)
[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Containers&message=Open&color=blue)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/LabAutomationAndScreening/copier-base-template)
[![OpenIssues](http://isitmaintained.com/badge/open/LabAutomationAndScreening/copier-base-template.svg)](http://isitmaintained.com/project/LabAutomationAndScreening/copier-base-template)
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Unrelated documentation enhancement.

Similar to the template README, this badge addition is unrelated to Python 3.14 support.

🤖 Prompt for AI Agents
In README.md around line 7, the added open-issues badge is an unrelated
documentation change for this branch (which is meant to focus on Python 3.14
support); remove the badge line from this commit/PR so the diff only contains
Python-3.14-related changes (either revert that line, move the badge addition to
a separate documentation-only branch/PR, or create a separate commit that is
omitted from this review).


# Instantiating a new repository using this template
1. Use the file `.devcontainer/devcontainer-to-instantiate-template.json` to create a devcontainer (or just use the default Codespace devcontainer)
1. Inside that devcontainer, run `python .devcontainer/install-ci-tooling.py` to install necessary tooling to instantiate the template (you can copy/paste the script from this repo...and you can paste it in the root of the repo if you want)
1. Delete all files currently in the repository. Optional...but makes it easiest to avoid git conflicts.
1. Run copier to instantiate the template: `copier copy --trust gh:LabAutomationAndScreening/copier-base-template.git .`
1. Run `python .devcontainer/manual-setup-deps.py --only-create-lock --allow-uv-to-install-python` to generate the lock file(s)
1. Run `python .devcontainer/manual-setup-deps.py --only-create-lock --allow-uv-to-install-python --skip-updating-devcontainer-hash` to generate the lock file(s)
1. Stage all files to prepare for commit (`git add .`)
1. Run `python3 .github/workflows/hash_git_files.py . --for-devcontainer-config-update` to update the hash for your devcontainer file
1. Commit the changes (optional)
1. Commit the changes (optional). Ensure to stage the modified `.devcontainer/devcontainer.json` file: `git add .devcontainer/devcontainer.json`
Comment on lines +14 to +17
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Improved workflow instructions.

These updates to the instantiation workflow are helpful but unrelated to the PR's stated objective of adding Python 3.14 support. The instructions themselves look correct and improve the user experience.

🧰 Tools
🪛 LanguageTool

[uncategorized] ~16-~16: The official name of this software platform is spelled with a capital “H”.
Context: ...prepare for commit (git add .) 1. Run `python3 .github/workflows/hash_git_files.py . --for-dev...

(GITHUB)

🤖 Prompt for AI Agents
In README.md around lines 14 to 17, the added instantiation workflow
instructions are correct but unrelated to the PR objective (adding Python 3.14);
remove them from this PR by moving the changes into a separate commit/PR (or
revert them here and re-apply in a focused PR), then update this branch to only
include Python 3.14-related edits so the current PR stays focused.

1. Rebuild your new devcontainer

If you are running into issues with the SSH port, confirm the randomly chosen port is not in the excluded ranges on your computer. On Windows you can run this in an elevated command prompt to check `netsh interface ipv4 show excludedportrange protocol=tcp`
1 change: 1 addition & 0 deletions copier.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ python_ci_versions:
choices:
- "3.12.7"
- "3.13.2"
- "3.14.0"

ssh_port_number:
type: int
Expand Down
5 changes: 3 additions & 2 deletions extensions/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ def hook(self, context: dict[Any, Any]) -> dict[Any, Any]:
context["copier_version"] = "9.10.3"
context["copier_template_extensions_version"] = "0.3.3"
#######
context["pnpm_version"] = "10.20.0"
context["pnpm_version"] = "10.21.0"
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify that pnpm version 10.21.0 exists.

The version bump looks reasonable.


🌐 Web query:

Does pnpm version 10.21.0 exist?

💡 Result:

Short answer: Not as an official pnpm release — the official GitHub releases and npm registry show up to v10.20.x, while Chocolatey lists a pnpm 10.21.0 package published Nov 10, 2025 (likely a repackaged build). See: GitHub releases (latest v10.20.0). [1] npm package page (latest shown v10.15.1 at time of crawl). [2] Chocolatey package page (pnpm 10.21.0 listed 2025-11-10). [3]

Sources:
[1] https://github.com/pnpm/pnpm/releases
[2] https://www.npmjs.com/package/pnpm?activeTab=versions
[3] https://community.chocolatey.org/packages/pnpm


Revert pnpm version to 10.20.0 — v10.21.0 does not exist as an official release.

pnpm v10.21.0 is not an official GitHub release, with official releases only going up to v10.20.x. v10.21.0 only appears on Chocolatey as a repackaged build published Nov 10, 2025. Use the latest official version v10.20.0 instead.

🤖 Prompt for AI Agents
In extensions/context.py around line 20, the pnpm_version was set to "10.21.0"
but that release does not exist officially; change the value back to the latest
official release "10.20.0" (i.e., replace "10.21.0" with "10.20.0") and,
optionally, add a short inline comment noting why we pin to 10.20.0 to avoid
referencing non-official repackaged builds.

# These are duplicated in the pyproject.toml of this repository
context["pyright_version"] = "1.1.407"
context["pytest_version"] = "8.4.2"
context["pytest_version"] = "9.0.0"
context["pytest_randomly_version"] = "4.0.1"
context["pytest_cov_version"] = "7.0.0"
#######
Expand Down Expand Up @@ -109,6 +109,7 @@ def hook(self, context: dict[Any, Any]) -> dict[Any, Any]:
# These also in the tests/data.yml files in this repository and in copier.yaml
context["py312_version"] = "3.12.7" # ReadTheDocs does not yet support 3.12.8
context["py313_version"] = "3.13.2"
context["py314_version"] = "3.14.0"
#######
# Kludge to allow for the same docker-compose file in child and grandchild templates
context["aws_region_for_stack"] = "us-east-1"
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12.7"
dependencies = [
"pytest>=8.4.2",
"pytest>=9.0.0",
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Verify pytest 9.0.0 compatibility with Python 3.14.

The major version bump from pytest 8.4.2 to 9.0.0 should be verified for Python 3.14 compatibility and to ensure it's a stable release suitable for production use.


🌐 Web query:

What is the latest stable version of pytest and does pytest 9.0.0 support Python 3.14?

💡 Result:

Latest stable pytest (as of Nov 10, 2025) is 8.4.2. [1][2]

There is no official pytest 9.0.0 release on the project GitHub/PyPI as of this date, so you cannot rely on a published "pytest 9.0.0" compatibility claim. pytest 8.4.2 includes fixes for Python 3.14-related issues (so pytest works with Python 3.14 in current releases), but there is no released pytest 9.0.0 to confirm separate support. [2][3]

Sources:

  • PyPI pytest release page (shows 8.4.2). [1]
  • pytest GitHub releases / 8.4.2 changelog (notes fixes for Python 3.14). [2]
  • pytest docs — Python version support / compatibility policy. [3]

Revert pytest requirement to 8.4.2 — version 9.0.0 does not exist.

The latest stable version of pytest (as of Nov 10, 2025) is 8.4.2, and there is no official pytest 9.0.0 release. Specifying pytest>=9.0.0 will cause installation failures since the dependency cannot be resolved. Change line 8 to "pytest>=8.4.2" or "pytest==8.4.2" depending on your versioning strategy. pytest 8.4.2 includes fixes for Python 3.14, so it fully supports Python 3.14 compatibility.

🤖 Prompt for AI Agents
In pyproject.toml around line 8, the pytest requirement is incorrectly set to
"pytest>=9.0.0" (which does not exist) causing install failures; change that
entry to a valid release such as "pytest>=8.4.2" or pin to "pytest==8.4.2"
depending on whether you want a minimum or exact version, then run a dependency
install to verify resolution.

"pytest-cov>=7.0.0",
"pytest-randomly>=4.0.1",
"pyright[nodejs]>=1.1.407",
Expand Down
2 changes: 1 addition & 1 deletion template/README.md.jinja-base
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
[![Copier](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/copier-org/copier/master/img/badge/badge-black.json)](https://github.com/copier-org/copier)
[![Actions status](https://www.github.com/{% endraw %}{{ repo_org_name }}/{{ repo_name }}{% raw %}/actions/workflows/ci.yaml/badge.svg?branch=main)](https://www.github.com/{% endraw %}{{ repo_org_name }}/{{ repo_name }}{% raw %}/actions)
[![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Containers&message=Open&color=blue)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://www.github.com/{% endraw %}{{ repo_org_name }}/{{ repo_name }}{% raw %})

[![OpenIssues](http://isitmaintained.com/badge/open/{% endraw %}{{ repo_org_name }}/{{ repo_name }}{% raw %}.svg)](http://isitmaintained.com/project/{% endraw %}{{ repo_org_name }}/{{ repo_name }}{% raw %})
Copy link

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Unrelated documentation enhancement.

The OpenIssues badge addition is a useful documentation improvement but is unrelated to the PR's Python 3.14 support objective. Consider grouping related changes together in future PRs.

🤖 Prompt for AI Agents
In template/README.md.jinja-base around line 5, the OpenIssues badge change is
unrelated to the Python 3.14 support PR; revert or remove this badge addition
from this branch and either place it in a separate commit/PR or keep it out of
this change set so the current PR remains focused on Python 3.14 support.


# Usage
To create a new repository using this template:
Expand Down
3 changes: 2 additions & 1 deletion template/copier.yml.jinja-base
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ python_ci_versions:
multiselect: true
choices:
- "{{ py312_version }}"
- "{{ py313_version }}"{% endif %}{% raw %}
- "{{ py313_version }}"
- "{{ py314_version }}"{% endif %}{% raw %}

{% endraw %}{% if template_uses_python %}{% raw %}
aws_identity_center_id:
Expand Down
2 changes: 1 addition & 1 deletion template/extensions/context.py.jinja-base
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ class ContextUpdater(ContextHook):
context["gha_linux_runner"] = "{{ gha_linux_runner }}"
context["gha_windows_runner"] = "{{ gha_windows_runner }}"

context["py311_version"] = "{{ py311_version }}"
context["py312_version"] = "{{ py312_version }}"
context["py313_version"] = "{{ py313_version }}"
context["py314_version"] = "{{ py314_version }}"

context["debian_release_name"] = "{{ debian_release_name }}"
context["alpine_image_version"] = "{{ alpine_image_version }}"
Expand Down
1 change: 1 addition & 0 deletions tests/copier_data/data2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ ssh_port_number: 54321
python_ci_versions:
- "3.12.7"
- "3.13.2"
- "3.14.0"
template_uses_python: true
template_uses_pulumi: false
repo_org_name: Initech
Expand Down
8 changes: 4 additions & 4 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading