From 71630fa1cf9f0cf3afbec31b61a7cf0f6b3bdb28 Mon Sep 17 00:00:00 2001 From: Eli Fine Date: Wed, 25 Feb 2026 22:20:23 +0000 Subject: [PATCH 1/2] ci --- .copier-answers.yml | 4 +- .devcontainer/Dockerfile | 5 +- .devcontainer/devcontainer.json | 16 ++--- .devcontainer/install-ci-tooling.py | 6 +- .../update-devcontainer-hash/action.yml | 2 +- .github/pull_request_template.md | 12 ++-- .../build-docker-image.yaml | 2 +- .github/workflows/ci.yaml | 13 ++-- .github/workflows/get-values.yaml | 2 +- .github/workflows/pre-commit.yaml | 4 +- .gitignore | 2 +- .pre-commit-config.yaml | 8 +-- copier.yml | 12 +++- extensions/context.py | 67 ++++++++++--------- pyproject.toml | 4 +- ruff.toml | 2 +- template/.devcontainer/Dockerfile | 5 +- .../.devcontainer/devcontainer.json.jinja | 27 +++++--- .../update-devcontainer-hash/action.yml | 2 +- template/.github/pull_request_template.md | 12 ++-- template/.github/workflows/ci.yaml.jinja | 18 ++--- template/.github/workflows/get-values.yaml | 2 +- template/.github/workflows/pre-commit.yaml | 4 +- template/.gitignore | 2 +- template/.pre-commit-config.yaml | 8 +-- template/ruff.toml | 2 +- uv.lock | 50 +++++++------- 27 files changed, 159 insertions(+), 134 deletions(-) diff --git a/.copier-answers.yml b/.copier-answers.yml index 7c504b91..af1dc531 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,11 +1,11 @@ # Changes here will be overwritten by Copier -_commit: v0.0.94 +_commit: v0.0.97 _src_path: gh:LabAutomationAndScreening/copier-base-template.git description: Copier template for creating Python libraries and executables install_claude_cli: false python_ci_versions: - 3.12.7 -- 3.13.2 +- 3.13.9 python_version: 3.12.7 repo_name: copier-python-package-template repo_org_name: LabAutomationAndScreening diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 70842f4a..a5b54ae3 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,12 +1,13 @@ # base image tags available at https://mcr.microsoft.com/v2/devcontainers/universal/tags/list # added the platform flag to override any local settings since this image is only compatible with linux/amd64. since this image is only x64 compatible, suppressing the hadolint rule # hadolint ignore=DL3029 -FROM --platform=linux/amd64 mcr.microsoft.com/devcontainers/universal:5.1.1-noble +FROM --platform=linux/amd64 mcr.microsoft.com/devcontainers/universal:5.1.4-noble SHELL ["/bin/bash", "-o", "pipefail", "-c"] # temporary hack until yarn updates its GPG key -RUN rm /etc/apt/sources.list.d/yarn.list || true +RUN rm /etc/apt/sources.list.d/yarn.list || true && \ + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn-archive-keyring.gpg > /dev/null RUN apt-get update -y && apt-get install -y \ "bash-completion=$(apt-cache madison bash-completion | awk '{print $3}' | grep '^1:2.11' | head -n 1)" --no-install-recommends \ diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f7645f17..011961f8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,7 +3,7 @@ "service": "devcontainer", "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", "features": { - "ghcr.io/devcontainers/features/python:1.7.1": { + "ghcr.io/devcontainers/features/python:1.8.0": { // https://github.com/devcontainers/features/blob/main/src/python/devcontainer-feature.json "version": "3.12.7", "installTools": false, @@ -16,24 +16,24 @@ "extensions": [ // basic tooling // "eamodio.gitlens@15.5.1", - "coderabbit.coderabbit-vscode@0.16.6", + "coderabbit.coderabbit-vscode@0.17.0", "ms-vscode.live-server@0.5.2025051301", "MS-vsliveshare.vsliveshare@1.0.5905", "github.copilot@1.388.0", - "github.copilot-chat@0.36.2026010502", + "github.copilot-chat@0.38.2026022001", // Python - "ms-python.python@2025.21.2026010501", - "ms-python.vscode-pylance@2025.10.100", + "ms-python.python@2026.2.2026021801", + "ms-python.vscode-pylance@2026.1.1", "ms-vscode-remote.remote-containers@0.414.0", - "charliermarsh.ruff@2025.32.0", + "charliermarsh.ruff@2026.36.0", // Misc file formats "bierner.markdown-mermaid@1.29.0", "samuelcolvin.jinjahtml@0.20.0", "tamasfe.even-better-toml@0.19.2", "emilast.LogFileHighlighter@3.3.3", - "esbenp.prettier-vscode@11.0.2" + "esbenp.prettier-vscode@12.3.0" ], "settings": { "editor.accessibilitySupport": "off", // turn off sounds @@ -58,5 +58,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): 69bb472f # spellchecker:disable-line + // Devcontainer context hash (do not manually edit this, it's managed by a pre-commit hook): 91027588 # spellchecker:disable-line } diff --git a/.devcontainer/install-ci-tooling.py b/.devcontainer/install-ci-tooling.py index 5d6a223e..a2e1bbec 100644 --- a/.devcontainer/install-ci-tooling.py +++ b/.devcontainer/install-ci-tooling.py @@ -7,9 +7,9 @@ import tempfile from pathlib import Path -UV_VERSION = "0.9.26" -PNPM_VERSION = "10.28.1" -COPIER_VERSION = "==9.11.2" +UV_VERSION = "0.10.4" +PNPM_VERSION = "10.30.0" +COPIER_VERSION = "==9.11.3" COPIER_TEMPLATE_EXTENSIONS_VERSION = "==0.3.3" PRE_COMMIT_VERSION = "4.5.1" GITHUB_WINDOWS_RUNNER_BIN_PATH = r"C:\Users\runneradmin\.local\bin" diff --git a/.github/actions/update-devcontainer-hash/action.yml b/.github/actions/update-devcontainer-hash/action.yml index 148062b4..e4cee89b 100644 --- a/.github/actions/update-devcontainer-hash/action.yml +++ b/.github/actions/update-devcontainer-hash/action.yml @@ -24,7 +24,7 @@ runs: shell: bash - name: Checkout code - uses: actions/checkout@v6.0.1 + uses: actions/checkout@v6.0.2 with: persist-credentials: true fetch-depth: 1 diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0d27aced..2081e6ae 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,21 +1,21 @@ - ## Link to Issue or Message thread +## Link to Issue or Message thread - ## Why is this change necessary? +## Why is this change necessary? - ## How does this change address the issue? +## How does this change address the issue? - ## What side effects does this change have? +## What side effects does this change have? - ## How is this change tested? +## How is this change tested? - ## Other +## Other diff --git a/.github/reusable_workflows/build-docker-image.yaml b/.github/reusable_workflows/build-docker-image.yaml index cd44408a..ba003d74 100644 --- a/.github/reusable_workflows/build-docker-image.yaml +++ b/.github/reusable_workflows/build-docker-image.yaml @@ -66,7 +66,7 @@ jobs: shell: bash - name: Checkout code - uses: actions/checkout@v6.0.1 + uses: actions/checkout@v6.0.2 with: persist-credentials: false diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fa80fe8a..f3c9c0a4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -40,7 +40,7 @@ jobs: - 3.12.7 - - 3.13.2 + - 3.13.9 copier: [ '--data-file tests/copier_data/data1.yaml', @@ -56,7 +56,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v6.0.1 + uses: actions/checkout@v6.0.2 with: persist-credentials: false @@ -151,9 +151,14 @@ jobs: if: always() steps: - name: fail if prior job failure - if: needs.lint-matrix.result != 'success' run: | - exit 1 + success_pattern="^(skipped|success)$" # these are the possibilities: https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#needs-context + + if [[ ! "${{ needs.lint-matrix.result }}" =~ $success_pattern ]]; then + echo "❌ One or more jobs did not finish with skipped or success" + exit 1 + fi + echo "✅ All jobs finished with skipped or success" - name: Mark updated dependabot hash commit as succeeded if: needs.get-values.outputs.dependabot-commit-created == 'true' env: diff --git a/.github/workflows/get-values.yaml b/.github/workflows/get-values.yaml index 0be45c49..4d6086ba 100644 --- a/.github/workflows/get-values.yaml +++ b/.github/workflows/get-values.yaml @@ -35,7 +35,7 @@ jobs: JSON - name: Checkout code - uses: actions/checkout@v6.0.1 + uses: actions/checkout@v6.0.2 with: persist-credentials: false diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index 50295750..90f6ceae 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -33,14 +33,14 @@ jobs: steps: - name: Checkout code during push if: ${{ github.event_name == 'push' }} - uses: actions/checkout@v6.0.1 + uses: actions/checkout@v6.0.2 with: ref: ${{ github.ref_name }} # explicitly get the head of the branch, which will include any new commits pushed if this is a dependabot branch persist-credentials: false - name: Checkout code not during push if: ${{ github.event_name != 'push' }} - uses: actions/checkout@v6.0.1 + uses: actions/checkout@v6.0.2 with: persist-credentials: false diff --git a/.gitignore b/.gitignore index 72004381..efe2fb8c 100644 --- a/.gitignore +++ b/.gitignore @@ -73,8 +73,8 @@ dist # Logs *.log +*.log.* **/logs/log*.txt -**/logs/*.log.* # macOS dev cleanliness **/.DS_Store diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e0dbbb7f..5b009afa 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -42,7 +42,7 @@ repos: # Reformatting (should generally come before any file format or other checks, because reformatting can change things) - repo: https://github.com/crate-ci/typos - rev: b31d3aa6e8e43e6a9cf7a1d137baf189dec0922b # frozen: v1 + rev: e1f6f6eaedd8587fa3c76ec20e7cbaa8f7132b2d # frozen: v1 hooks: - id: typos exclude: | @@ -108,7 +108,7 @@ repos: )$ - repo: https://github.com/rbubley/mirrors-prettier - rev: 14abee445aea04b39069c19b4bd54efff6775819 # frozen: v3.7.4 + rev: c2bc67fe8f8f549cc489e00ba8b45aa18ee713b1 # frozen: v3.8.1 hooks: - id: prettier # TODO: get template YAML and MD files more in line with prettier expectations so we can start using prettier on those too @@ -195,7 +195,7 @@ repos: - id: check-case-conflict - repo: https://github.com/python-jsonschema/check-jsonschema - rev: b035497fb64e3f9faa91e833331688cc185891e6 # frozen: 0.36.0 + rev: ec368acd16deee9c560c105ab6d27db4ee19a5ec # frozen: 0.36.2 hooks: - id: check-github-workflows @@ -249,7 +249,7 @@ repos: description: Runs hadolint to lint Dockerfiles - repo: https://github.com/astral-sh/ruff-pre-commit - rev: 5ba58aca0bd5bc7c0e1c0fc45af2e88d6a2bde83 # frozen: v0.14.10 + rev: 0839f92796ae388643a08a21640a029b322be5c2 # frozen: v0.15.2 hooks: - id: ruff name: ruff-src diff --git a/copier.yml b/copier.yml index 33d14b15..49f6ebb9 100644 --- a/copier.yml +++ b/copier.yml @@ -76,7 +76,7 @@ python_ci_versions: multiselect: true choices: - "3.12.7" - - "3.13.2" + - "3.13.9" - "3.14.0" @@ -143,6 +143,16 @@ use_codecov: help: Upload code coverage results to CodeCov? default: no +_tasks: + - command: | + if [ -f ruff.toml ]; then + echo "Updating ruff target-version from python_version..." + py_major_minor="$(printf '%s' '{{ python_version }}' | cut -d. -f1,2)" + py_tag="py$(printf '%s' "$py_major_minor" | tr -d '.')" + sed -i -E 's/^target-version = "py[0-9]+"/target-version = "'"$py_tag"'"/' ruff.toml + else + echo "ruff.toml not found; skipping Ruff target-version update." + fi # Additional Settings _min_copier_version: "9.4" diff --git a/extensions/context.py b/extensions/context.py index c01dd319..d2654c2d 100644 --- a/extensions/context.py +++ b/extensions/context.py @@ -10,78 +10,79 @@ class ContextUpdater(ContextHook): @override def hook(self, context: dict[Any, Any]) -> dict[Any, Any]: - context["uv_version"] = "0.9.26" - context["pnpm_version"] = "10.28.1" + context["uv_version"] = "0.10.4" + context["pnpm_version"] = "10.30.0" context["pre_commit_version"] = "4.5.1" context["pyright_version"] = ">=1.1.408" context["pytest_version"] = ">=9.0.2" context["pytest_randomly_version"] = ">=4.0.1" context["pytest_cov_version"] = ">=7.0.0" - context["ty_version"] = ">=0.0.13" - context["copier_version"] = "==9.11.2" + context["ty_version"] = ">=0.0.17" + context["copier_version"] = "==9.11.3" context["copier_template_extensions_version"] = "==0.3.3" context["sphinx_version"] = "9.0.4" - context["pulumi_version"] = ">=3.214.1" - context["pulumi_aws_version"] = ">=7.15.0" - context["pulumi_aws_native_version"] = ">=1.47.0" + context["pulumi_version"] = ">=3.223.0" + context["pulumi_aws_version"] = ">=7.20.0" + context["pulumi_aws_native_version"] = ">=1.54.0" context["pulumi_command_version"] = ">=1.1.3" - context["pulumi_github_version"] = ">=6.10.0" - context["pulumi_okta_version"] = ">=6.2.0" - context["boto3_version"] = ">=1.42.11" + context["pulumi_github_version"] = ">=6.12.1" + context["pulumi_okta_version"] = ">=6.2.3" + context["boto3_version"] = ">=1.42.53" context["ephemeral_pulumi_deploy_version"] = ">=0.0.6" context["pydantic_version"] = ">=2.12.5" - context["pyinstaller_version"] = ">=6.17.0" + context["pyinstaller_version"] = ">=6.19.0" context["setuptools_version"] = "80.7.1" - context["strawberry_graphql_version"] = ">=0.289.2" - context["fastapi_version"] = ">=0.128.0" + context["strawberry_graphql_version"] = ">=0.298.0" + context["fastapi_version"] = ">=0.129.0" context["fastapi_offline_version"] = ">=1.7.4" - context["uvicorn_version"] = ">=0.40.0" + context["uvicorn_version"] = ">=0.41.0" context["lab_auto_pulumi_version"] = ">=0.1.18" context["ariadne_codegen_version"] = ">=0.17.0" context["pytest_mock_version"] = ">=3.15.1" context["uuid_utils_version"] = ">=0.14.0" - context["syrupy_version"] = ">=5.0.0" + context["syrupy_version"] = ">=5.1.0" context["structlog_version"] = ">=25.5.0" - context["httpx_version"] = "0.28.1" + context["httpx_version"] = ">=0.28.1" context["python_kiota_bundle_version"] = ">=1.9.8" context["vcrpy_version"] = ">=8.1.1" context["pytest_recording_version"] = ">=0.13.4" context["pytest_asyncio_version"] = ">=1.3.0" context["pytest_reserial_version"] = ">=0.6.0" + context["python_faker_version"] = ">=40.4.0" context["default_node_version"] = "24.11.1" - context["nuxt_ui_version"] = "^4.3.0" - context["nuxt_version"] = "^4.2.2" - context["nuxt_icon_version"] = "^2.1.1" + context["nuxt_ui_version"] = "^4.4.0" + context["nuxt_version"] = "^4.3.1" + context["nuxt_icon_version"] = "^2.2.1" context["typescript_version"] = "^5.9.3" - context["playwright_version"] = "^1.57.0" - context["vue_version"] = "^3.5.26" - context["vue_tsc_version"] = "^3.2.1" + context["playwright_version"] = "^1.58.2" + context["vue_version"] = "^3.5.28" + context["vue_tsc_version"] = "^3.2.4" context["vue_devtools_api_version"] = "^8.0.0" - context["vue_router_version"] = "^4.6.4" + context["vue_router_version"] = "^5.0.3" context["dotenv_cli_version"] = "^11.0.0" - context["faker_version"] = "^10.2.0" + context["faker_version"] = "^10.3.0" context["vitest_version"] = "^3.2.4" context["eslint_version"] = "~9.38.0" - context["nuxt_eslint_version"] = "^1.12.1" - context["zod_version"] = "^4.3.5" + context["nuxt_eslint_version"] = "^1.15.1" + context["zod_version"] = "^4.3.6" context["zod_from_json_schema_version"] = "^0.5.1" context["nuxt_apollo_version"] = "5.0.0-alpha.15" context["graphql_codegen_cli_version"] = "^6.1.0" context["graphql_codegen_typescript_version"] = "^5.0.7" context["graphql_tools_mock_version"] = "^9.1.0" - context["tailwindcss_version"] = "^4.1.11" + context["tailwindcss_version"] = "^4.2.0" context["iconify_vue_version"] = "^5.0.0" context["iconify_json_lucide_version"] = "^1.2.71" - context["nuxt_fonts_version"] = "^0.12.1" + context["nuxt_fonts_version"] = "^0.14.0" context["nuxtjs_color_mode_version"] = "^3.5.2" context["vue_test_utils_version"] = "^2.4.6" context["nuxt_test_utils_version"] = "3.19.1" - context["vue_eslint_parser_version"] = "^10.1.3" - context["happy_dom_version"] = "^20.0.11" + context["vue_eslint_parser_version"] = "^10.4.0" + context["happy_dom_version"] = "^20.6.3" context["node_kiota_bundle_version"] = "1.0.0-preview.99" - context["gha_checkout"] = "v6.0.1" + context["gha_checkout"] = "v6.0.2" context["gha_setup_python"] = "v6.2.0" context["gha_cache"] = "v5.0.2" context["gha_upload_artifact"] = "v6.0.0" @@ -108,10 +109,10 @@ def hook(self, context: dict[Any, Any]) -> dict[Any, Any]: context["alpine_image_version"] = "3.23" context["nginx_image_version"] = "1.29.4" - context["kiota_cli_version"] = "1.29.0" + context["kiota_cli_version"] = "1.30.0" context["py312_version"] = "3.12.7" - context["py313_version"] = "3.13.2" + context["py313_version"] = "3.13.9" context["py314_version"] = "3.14.0" # Kludge to be able to help symlinked jinja files in the child and grandchild templates diff --git a/pyproject.toml b/pyproject.toml index 85362486..f6c895e8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ dependencies = [ "pytest-cov>=7.0.0", "pytest-randomly>=4.0.1", "pyright[nodejs]>=1.1.408", - "ty>=0.0.13", - "copier==9.11.2", + "ty>=0.0.17", + "copier==9.11.3", "copier-template-extensions==0.3.3" ] diff --git a/ruff.toml b/ruff.toml index eb1c0874..aee17c32 100644 --- a/ruff.toml +++ b/ruff.toml @@ -32,7 +32,7 @@ exclude = [ line-length = 120 indent-width = 4 -target-version = "py312" # TODO: dynamically update this with a copier Task +target-version = "py312" [lint] select = ["ALL"] diff --git a/template/.devcontainer/Dockerfile b/template/.devcontainer/Dockerfile index 70842f4a..a5b54ae3 100644 --- a/template/.devcontainer/Dockerfile +++ b/template/.devcontainer/Dockerfile @@ -1,12 +1,13 @@ # base image tags available at https://mcr.microsoft.com/v2/devcontainers/universal/tags/list # added the platform flag to override any local settings since this image is only compatible with linux/amd64. since this image is only x64 compatible, suppressing the hadolint rule # hadolint ignore=DL3029 -FROM --platform=linux/amd64 mcr.microsoft.com/devcontainers/universal:5.1.1-noble +FROM --platform=linux/amd64 mcr.microsoft.com/devcontainers/universal:5.1.4-noble SHELL ["/bin/bash", "-o", "pipefail", "-c"] # temporary hack until yarn updates its GPG key -RUN rm /etc/apt/sources.list.d/yarn.list || true +RUN rm /etc/apt/sources.list.d/yarn.list || true && \ + curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn-archive-keyring.gpg > /dev/null RUN apt-get update -y && apt-get install -y \ "bash-completion=$(apt-cache madison bash-completion | awk '{print $3}' | grep '^1:2.11' | head -n 1)" --no-install-recommends \ diff --git a/template/.devcontainer/devcontainer.json.jinja b/template/.devcontainer/devcontainer.json.jinja index 7db172da..042810a6 100644 --- a/template/.devcontainer/devcontainer.json.jinja +++ b/template/.devcontainer/devcontainer.json.jinja @@ -3,23 +3,30 @@ "service": "devcontainer", "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", "features": {{% endraw %}{% if is_child_of_copier_base_template is not defined %}{% raw %} + "ghcr.io/devcontainers/features/git-lfs:1.2.5": { + // we are not using git-lfs right now, but its a transitive dep elsewhere. We want to configure auto pull to off since the feature will by default also try to install the git hook + // and it breaks creation of the devcontainer since pre-commit hooks are already in place. Probably a better way to fix this but until we use git-lfs we can leave it like this. + // https://github.com/devcontainers/features/blob/main/src/git-lfs/README.md + "autoPull": false + }, "ghcr.io/devcontainers/features/aws-cli:1.1.2": { // https://github.com/devcontainers/features/blob/main/src/aws-cli/devcontainer-feature.json // view latest version https://raw.githubusercontent.com/aws/aws-cli/v2/CHANGELOG.rst "version": "2.32.6", },{% endraw %}{% endif %}{% raw %} - "ghcr.io/devcontainers/features/python:1.7.1": { + "ghcr.io/devcontainers/features/python:1.8.0": { // https://github.com/devcontainers/features/blob/main/src/python/devcontainer-feature.json "version": "{% endraw %}{{ python_version }}{% raw %}",{% endraw %}{% if is_frozen_executable %}{% raw %} "enableShared": true,{% endraw %}{% endif %}{% raw %} "installTools": false, "optimize": true }{% endraw %}{% if is_child_of_copier_base_template is not defined and template_uses_javascript is defined and template_uses_javascript is sameas(true) %}{% raw %}, - "ghcr.io/devcontainers/features/node:1.6.3": { - // https://github.com/devcontainers/features/tree/main/src/node + "ghcr.io/devcontainers/features/node:1.7.1": { + // https://github.com/devcontainers/features/blob/main/src/node/devcontainer-feature.json "version": "{% endraw %}{{ node_version }}{% raw %}", "pnpmVersion": "{% endraw %}{{ pnpm_version }}{% raw %}" }{% endraw %}{% endif %}{% raw %}{% endraw %}{% if install_claude_cli %}{% raw %}, + // https://github.com/anthropics/devcontainer-features/blob/main/src/claude-code/devcontainer-feature.json "ghcr.io/anthropics/devcontainer-features/claude-code:1.0.5": {}{% endraw %}{% endif %}{% raw %} }, "customizations": { @@ -29,18 +36,18 @@ "-AmazonWebServices.aws-toolkit-vscode", // the AWS CLI feature installs this automatically, but it's causing problems in VS Code{% endraw %}{% endif %}{% raw %} // basic tooling // "eamodio.gitlens@15.5.1", - "coderabbit.coderabbit-vscode@0.16.6", + "coderabbit.coderabbit-vscode@0.17.0", "ms-vscode.live-server@0.5.2025051301", "MS-vsliveshare.vsliveshare@1.0.5905", "github.copilot@1.388.0", - "github.copilot-chat@0.36.2026010502",{% endraw %}{% if install_claude_cli %}{% raw %} - "anthropic.claude-code@2.0.75",{% endraw %}{% endif %}{% raw %} + "github.copilot-chat@0.38.2026022001",{% endraw %}{% if install_claude_cli %}{% raw %} + "anthropic.claude-code@2.1.49",{% endraw %}{% endif %}{% raw %} // Python - "ms-python.python@2025.21.2026010501", - "ms-python.vscode-pylance@2025.10.100", + "ms-python.python@2026.2.2026021801", + "ms-python.vscode-pylance@2026.1.1", "ms-vscode-remote.remote-containers@0.414.0", - "charliermarsh.ruff@2025.32.0", + "charliermarsh.ruff@2026.36.0", {% endraw %}{% if is_child_of_copier_base_template is not defined and template_uses_vuejs is defined and template_uses_vuejs is sameas(true) %}{% raw %} // VueJS "vue.volar@3.2.1", @@ -54,7 +61,7 @@ "samuelcolvin.jinjahtml@0.20.0", "tamasfe.even-better-toml@0.19.2", "emilast.LogFileHighlighter@3.3.3", - "esbenp.prettier-vscode@11.0.2" + "esbenp.prettier-vscode@12.3.0" ], "settings": { "editor.accessibilitySupport": "off", // turn off sounds diff --git a/template/.github/actions/update-devcontainer-hash/action.yml b/template/.github/actions/update-devcontainer-hash/action.yml index 148062b4..e4cee89b 100644 --- a/template/.github/actions/update-devcontainer-hash/action.yml +++ b/template/.github/actions/update-devcontainer-hash/action.yml @@ -24,7 +24,7 @@ runs: shell: bash - name: Checkout code - uses: actions/checkout@v6.0.1 + uses: actions/checkout@v6.0.2 with: persist-credentials: true fetch-depth: 1 diff --git a/template/.github/pull_request_template.md b/template/.github/pull_request_template.md index 0d27aced..2081e6ae 100644 --- a/template/.github/pull_request_template.md +++ b/template/.github/pull_request_template.md @@ -1,21 +1,21 @@ - ## Link to Issue or Message thread +## Link to Issue or Message thread - ## Why is this change necessary? +## Why is this change necessary? - ## How does this change address the issue? +## How does this change address the issue? - ## What side effects does this change have? +## What side effects does this change have? - ## How is this change tested? +## How is this change tested? - ## Other +## Other diff --git a/template/.github/workflows/ci.yaml.jinja b/template/.github/workflows/ci.yaml.jinja index e721260f..16409429 100644 --- a/template/.github/workflows/ci.yaml.jinja +++ b/template/.github/workflows/ci.yaml.jinja @@ -166,17 +166,17 @@ jobs: steps: - name: fail if prior job failure run: | - failure_pattern="^(failure|cancelled)$" - - if [[ "${{ needs.get-values.result }}" =~ $failure_pattern ]] || - [[ "${{ needs.lint.result }}" =~ $failure_pattern ]] ||{% endraw %}{% if create_docs %}{% raw %} - [[ "${{ needs.build-docs.result }}" =~ $failure_pattern ]] ||{% endraw %}{% endif %}{% raw %}{% endraw %}{% if is_frozen_executable %}{% raw %} - [[ "${{ needs.executable.result }}" =~ $failure_pattern ]] ||{% endraw %}{% endif %}{% raw %} - [[ "${{ needs.test.result }}" =~ $failure_pattern ]]; then - echo "❌ One or more jobs failed or were cancelled" + success_pattern="^(skipped|success)$" # these are the possibilities: https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#needs-context + + if [[ ! "${{ needs.get-values.result }}" =~ $success_pattern ]] || + [[ ! "${{ needs.lint.result }}" =~ $success_pattern ]] ||{% endraw %}{% if create_docs %}{% raw %} + [[ ! "${{ needs.build-docs.result }}" =~ $success_pattern ]] ||{% endraw %}{% endif %}{% raw %}{% endraw %}{% if is_frozen_executable %}{% raw %} + [[ ! "${{ needs.executable.result }}" =~ $success_pattern ]] ||{% endraw %}{% endif %}{% raw %} + [[ ! "${{ needs.test.result }}" =~ $success_pattern ]]; then + echo "❌ One or more jobs did not finish with skipped or success" exit 1 fi - echo "✅ All jobs completed successfully or were skipped" + echo "✅ All jobs finished with skipped or success" - name: Mark updated Dependabot commit of devcontainer hash as succeeded if: needs.get-values.outputs.dependabot-commit-created == 'true' env: diff --git a/template/.github/workflows/get-values.yaml b/template/.github/workflows/get-values.yaml index 0be45c49..4d6086ba 100644 --- a/template/.github/workflows/get-values.yaml +++ b/template/.github/workflows/get-values.yaml @@ -35,7 +35,7 @@ jobs: JSON - name: Checkout code - uses: actions/checkout@v6.0.1 + uses: actions/checkout@v6.0.2 with: persist-credentials: false diff --git a/template/.github/workflows/pre-commit.yaml b/template/.github/workflows/pre-commit.yaml index 50295750..90f6ceae 100644 --- a/template/.github/workflows/pre-commit.yaml +++ b/template/.github/workflows/pre-commit.yaml @@ -33,14 +33,14 @@ jobs: steps: - name: Checkout code during push if: ${{ github.event_name == 'push' }} - uses: actions/checkout@v6.0.1 + uses: actions/checkout@v6.0.2 with: ref: ${{ github.ref_name }} # explicitly get the head of the branch, which will include any new commits pushed if this is a dependabot branch persist-credentials: false - name: Checkout code not during push if: ${{ github.event_name != 'push' }} - uses: actions/checkout@v6.0.1 + uses: actions/checkout@v6.0.2 with: persist-credentials: false diff --git a/template/.gitignore b/template/.gitignore index 72004381..efe2fb8c 100644 --- a/template/.gitignore +++ b/template/.gitignore @@ -73,8 +73,8 @@ dist # Logs *.log +*.log.* **/logs/log*.txt -**/logs/*.log.* # macOS dev cleanliness **/.DS_Store diff --git a/template/.pre-commit-config.yaml b/template/.pre-commit-config.yaml index e0dbbb7f..5b009afa 100644 --- a/template/.pre-commit-config.yaml +++ b/template/.pre-commit-config.yaml @@ -42,7 +42,7 @@ repos: # Reformatting (should generally come before any file format or other checks, because reformatting can change things) - repo: https://github.com/crate-ci/typos - rev: b31d3aa6e8e43e6a9cf7a1d137baf189dec0922b # frozen: v1 + rev: e1f6f6eaedd8587fa3c76ec20e7cbaa8f7132b2d # frozen: v1 hooks: - id: typos exclude: | @@ -108,7 +108,7 @@ repos: )$ - repo: https://github.com/rbubley/mirrors-prettier - rev: 14abee445aea04b39069c19b4bd54efff6775819 # frozen: v3.7.4 + rev: c2bc67fe8f8f549cc489e00ba8b45aa18ee713b1 # frozen: v3.8.1 hooks: - id: prettier # TODO: get template YAML and MD files more in line with prettier expectations so we can start using prettier on those too @@ -195,7 +195,7 @@ repos: - id: check-case-conflict - repo: https://github.com/python-jsonschema/check-jsonschema - rev: b035497fb64e3f9faa91e833331688cc185891e6 # frozen: 0.36.0 + rev: ec368acd16deee9c560c105ab6d27db4ee19a5ec # frozen: 0.36.2 hooks: - id: check-github-workflows @@ -249,7 +249,7 @@ repos: description: Runs hadolint to lint Dockerfiles - repo: https://github.com/astral-sh/ruff-pre-commit - rev: 5ba58aca0bd5bc7c0e1c0fc45af2e88d6a2bde83 # frozen: v0.14.10 + rev: 0839f92796ae388643a08a21640a029b322be5c2 # frozen: v0.15.2 hooks: - id: ruff name: ruff-src diff --git a/template/ruff.toml b/template/ruff.toml index eb1c0874..aee17c32 100644 --- a/template/ruff.toml +++ b/template/ruff.toml @@ -32,7 +32,7 @@ exclude = [ line-length = 120 indent-width = 4 -target-version = "py312" # TODO: dynamically update this with a copier Task +target-version = "py312" [lint] select = ["ALL"] diff --git a/uv.lock b/uv.lock index 9630f24c..e5f5c7dc 100644 --- a/uv.lock +++ b/uv.lock @@ -22,7 +22,7 @@ wheels = [ [[package]] name = "copier" -version = "9.11.2" +version = "9.11.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama" }, @@ -39,9 +39,9 @@ dependencies = [ { name = "pyyaml" }, { name = "questionary" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/cb/ab/dc4349bdde6850cf81e28e72d921b542346d0c96af835493a21ef0c6d512/copier-9.11.2.tar.gz", hash = "sha256:0e27c45db99f68e0e761e4a088d09cc1de78a67be5d32fb8041d466a54cce364", size = 593108, upload-time = "2026-01-20T10:12:23.081Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/be/35bb44c0c7c278bd9144f5934aa10a2d532cedea4e16494c6552aa7132e1/copier-9.11.3.tar.gz", hash = "sha256:f4da98c7f3dd2243480433541b3b4d9daa788bce13b7b6d43c0c6d84bd50e889", size = 610458, upload-time = "2026-01-23T17:19:11.561Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/fe/75192a53862a756e85d775428bac3d4a9c35157deb84a5db09a70a23998c/copier-9.11.2-py3-none-any.whl", hash = "sha256:ae860df9e954e04e8b5d0b79711dceb3b5e0c304490fcae224adb68d56963e5a", size = 56698, upload-time = "2026-01-20T10:12:21.286Z" }, + { url = "https://files.pythonhosted.org/packages/b8/01/74922a1c552137c05a41fee0c61153753dddc9117d19c7c5902c146c25ab/copier-9.11.3-py3-none-any.whl", hash = "sha256:ab4bc7e2944edc030b4c14ec84fffd6bf810b9b8fd56938e8ccbab1b169ea6ca", size = 56905, upload-time = "2026-01-23T17:19:09.999Z" }, ] [[package]] @@ -60,13 +60,13 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "copier", specifier = "==9.11.2" }, + { name = "copier", specifier = "==9.11.3" }, { name = "copier-template-extensions", specifier = "==0.3.3" }, { name = "pyright", extras = ["nodejs"], specifier = ">=1.1.408" }, { name = "pytest", specifier = ">=9.0.2" }, { name = "pytest-cov", specifier = ">=7.0.0" }, { name = "pytest-randomly", specifier = ">=4.0.1" }, - { name = "ty", specifier = ">=0.0.13" }, + { name = "ty", specifier = ">=0.0.17" }, ] [[package]] @@ -497,26 +497,26 @@ wheels = [ [[package]] name = "ty" -version = "0.0.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/dc/b607f00916f5a7c52860b84a66dc17bc6988e8445e96b1d6e175a3837397/ty-0.0.13.tar.gz", hash = "sha256:7a1d135a400ca076407ea30012d1f75419634160ed3b9cad96607bf2956b23b3", size = 4999183, upload-time = "2026-01-21T13:21:16.133Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/df/3632f1918f4c0a33184f107efc5d436ab6da147fd3d3b94b3af6461efbf4/ty-0.0.13-py3-none-linux_armv6l.whl", hash = "sha256:1b2b8e02697c3a94c722957d712a0615bcc317c9b9497be116ef746615d892f2", size = 9993501, upload-time = "2026-01-21T13:21:26.628Z" }, - { url = "https://files.pythonhosted.org/packages/92/87/6a473ced5ac280c6ce5b1627c71a8a695c64481b99aabc798718376a441e/ty-0.0.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f15cdb8e233e2b5adfce673bb21f4c5e8eaf3334842f7eea3c70ac6fda8c1de5", size = 9860986, upload-time = "2026-01-21T13:21:24.425Z" }, - { url = "https://files.pythonhosted.org/packages/5d/9b/d89ae375cf0a7cd9360e1164ce017f8c753759be63b6a11ed4c944abe8c6/ty-0.0.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:0819e89ac9f0d8af7a062837ce197f0461fee2fc14fd07e2c368780d3a397b73", size = 9350748, upload-time = "2026-01-21T13:21:28.502Z" }, - { url = "https://files.pythonhosted.org/packages/a8/a6/9ad58518056fab344b20c0bb2c1911936ebe195318e8acc3bc45ac1c6b6b/ty-0.0.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de79f481084b7cc7a202ba0d7a75e10970d10ffa4f025b23f2e6b7324b74886", size = 9849884, upload-time = "2026-01-21T13:21:21.886Z" }, - { url = "https://files.pythonhosted.org/packages/b1/c3/8add69095fa179f523d9e9afcc15a00818af0a37f2b237a9b59bc0046c34/ty-0.0.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4fb2154cff7c6e95d46bfaba283c60642616f20d73e5f96d0c89c269f3e1bcec", size = 9822975, upload-time = "2026-01-21T13:21:14.292Z" }, - { url = "https://files.pythonhosted.org/packages/a4/05/4c0927c68a0a6d43fb02f3f0b6c19c64e3461dc8ed6c404dde0efb8058f7/ty-0.0.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00be58d89337c27968a20d58ca553458608c5b634170e2bec82824c2e4cf4d96", size = 10294045, upload-time = "2026-01-21T13:21:30.505Z" }, - { url = "https://files.pythonhosted.org/packages/b4/86/6dc190838aba967557fe0bfd494c595d00b5081315a98aaf60c0e632aaeb/ty-0.0.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72435eade1fa58c6218abb4340f43a6c3ff856ae2dc5722a247d3a6dd32e9737", size = 10916460, upload-time = "2026-01-21T13:21:07.788Z" }, - { url = "https://files.pythonhosted.org/packages/04/40/9ead96b7c122e1109dfcd11671184c3506996bf6a649306ec427e81d9544/ty-0.0.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:77a548742ee8f621d718159e7027c3b555051d096a49bb580249a6c5fc86c271", size = 10597154, upload-time = "2026-01-21T13:21:18.064Z" }, - { url = "https://files.pythonhosted.org/packages/aa/7d/e832a2c081d2be845dc6972d0c7998914d168ccbc0b9c86794419ab7376e/ty-0.0.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da067c57c289b7cf914669704b552b6207c2cc7f50da4118c3e12388642e6b3f", size = 10410710, upload-time = "2026-01-21T13:21:12.388Z" }, - { url = "https://files.pythonhosted.org/packages/31/e3/898be3a96237a32f05c4c29b43594dc3b46e0eedfe8243058e46153b324f/ty-0.0.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d1b50a01fffa140417fca5a24b658fbe0734074a095d5b6f0552484724474343", size = 9826299, upload-time = "2026-01-21T13:21:00.845Z" }, - { url = "https://files.pythonhosted.org/packages/bb/eb/db2d852ce0ed742505ff18ee10d7d252f3acfd6fc60eca7e9c7a0288a6d8/ty-0.0.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0f33c46f52e5e9378378eca0d8059f026f3c8073ace02f7f2e8d079ddfe5207e", size = 9831610, upload-time = "2026-01-21T13:21:05.842Z" }, - { url = "https://files.pythonhosted.org/packages/9e/61/149f59c8abaddcbcbb0bd13b89c7741ae1c637823c5cf92ed2c644fcadef/ty-0.0.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:168eda24d9a0b202cf3758c2962cc295878842042b7eca9ed2965259f59ce9f2", size = 9978885, upload-time = "2026-01-21T13:21:10.306Z" }, - { url = "https://files.pythonhosted.org/packages/a0/cd/026d4e4af60a80918a8d73d2c42b8262dd43ab2fa7b28d9743004cb88d57/ty-0.0.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d4917678b95dc8cb399cc459fab568ba8d5f0f33b7a94bf840d9733043c43f29", size = 10506453, upload-time = "2026-01-21T13:20:56.633Z" }, - { url = "https://files.pythonhosted.org/packages/63/06/8932833a4eca2df49c997a29afb26721612de8078ae79074c8fe87e17516/ty-0.0.13-py3-none-win32.whl", hash = "sha256:c1f2ec40daa405508b053e5b8e440fbae5fdb85c69c9ab0ee078f8bc00eeec3d", size = 9433482, upload-time = "2026-01-21T13:20:58.717Z" }, - { url = "https://files.pythonhosted.org/packages/aa/fd/e8d972d1a69df25c2cecb20ea50e49ad5f27a06f55f1f5f399a563e71645/ty-0.0.13-py3-none-win_amd64.whl", hash = "sha256:8b7b1ab9f187affbceff89d51076038363b14113be29bda2ddfa17116de1d476", size = 10319156, upload-time = "2026-01-21T13:21:03.266Z" }, - { url = "https://files.pythonhosted.org/packages/2d/c2/05fdd64ac003a560d4fbd1faa7d9a31d75df8f901675e5bed1ee2ceeff87/ty-0.0.13-py3-none-win_arm64.whl", hash = "sha256:1c9630333497c77bb9bcabba42971b96ee1f36c601dd3dcac66b4134f9fa38f0", size = 9808316, upload-time = "2026-01-21T13:20:54.053Z" }, +version = "0.0.18" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/74/15/9682700d8d60fdca7afa4febc83a2354b29cdcd56e66e19c92b521db3b39/ty-0.0.18.tar.gz", hash = "sha256:04ab7c3db5dcbcdac6ce62e48940d3a0124f377c05499d3f3e004e264ae94b83", size = 5214774, upload-time = "2026-02-20T21:51:31.173Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/d8/920460d4c22ea68fcdeb0b2fb53ea2aeb9c6d7875bde9278d84f2ac767b6/ty-0.0.18-py3-none-linux_armv6l.whl", hash = "sha256:4e5e91b0a79857316ef893c5068afc4b9872f9d257627d9bc8ac4d2715750d88", size = 10280825, upload-time = "2026-02-20T21:51:25.03Z" }, + { url = "https://files.pythonhosted.org/packages/83/56/62587de582d3d20d78fcdddd0594a73822ac5a399a12ef512085eb7a4de6/ty-0.0.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ee0e578b3f8416e2d5416da9553b78fd33857868aa1384cb7fefeceee5ff102d", size = 10118324, upload-time = "2026-02-20T21:51:22.27Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2d/dbdace8d432a0755a7417f659bfd5b8a4261938ecbdfd7b42f4c454f5aa9/ty-0.0.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3f7a0487d36b939546a91d141f7fc3dbea32fab4982f618d5b04dc9d5b6da21e", size = 9605861, upload-time = "2026-02-20T21:51:16.066Z" }, + { url = "https://files.pythonhosted.org/packages/6b/d9/de11c0280f778d5fc571393aada7fe9b8bc1dd6a738f2e2c45702b8b3150/ty-0.0.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5e2fa8d45f57ca487a470e4bf66319c09b561150e98ae2a6b1a97ef04c1a4eb", size = 10092701, upload-time = "2026-02-20T21:51:26.862Z" }, + { url = "https://files.pythonhosted.org/packages/0f/94/068d4d591d791041732171e7b63c37a54494b2e7d28e88d2167eaa9ad875/ty-0.0.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d75652e9e937f7044b1aca16091193e7ef11dac1c7ec952b7fb8292b7ba1f5f2", size = 10109203, upload-time = "2026-02-20T21:51:11.59Z" }, + { url = "https://files.pythonhosted.org/packages/34/e4/526a4aa56dc0ca2569aaa16880a1ab105c3b416dd70e87e25a05688999f3/ty-0.0.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:563c868edceb8f6ddd5e91113c17d3676b028f0ed380bdb3829b06d9beb90e58", size = 10614200, upload-time = "2026-02-20T21:51:20.298Z" }, + { url = "https://files.pythonhosted.org/packages/fd/3d/b68ab20a34122a395880922587fbfc3adf090d22e0fb546d4d20fe8c2621/ty-0.0.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:502e2a1f948bec563a0454fc25b074bf5cf041744adba8794d024277e151d3b0", size = 11153232, upload-time = "2026-02-20T21:51:14.121Z" }, + { url = "https://files.pythonhosted.org/packages/68/ea/678243c042343fcda7e6af36036c18676c355878dcdcd517639586d2cf9e/ty-0.0.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc881dea97021a3aa29134a476937fd8054775c4177d01b94db27fcfb7aab65b", size = 10832934, upload-time = "2026-02-20T21:51:32.92Z" }, + { url = "https://files.pythonhosted.org/packages/d8/bd/7f8d647cef8b7b346c0163230a37e903c7461c7248574840b977045c77df/ty-0.0.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:421fcc3bc64cab56f48edb863c7c1c43649ec4d78ff71a1acb5366ad723b6021", size = 10700888, upload-time = "2026-02-20T21:51:09.673Z" }, + { url = "https://files.pythonhosted.org/packages/6e/06/cb3620dc48c5d335ba7876edfef636b2f4498eff4a262ff90033b9e88408/ty-0.0.18-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0fe5038a7136a0e638a2fb1ad06e3d3c4045314c6ba165c9c303b9aeb4623d6c", size = 10078965, upload-time = "2026-02-20T21:51:07.678Z" }, + { url = "https://files.pythonhosted.org/packages/60/27/c77a5a84533fa3b685d592de7b4b108eb1f38851c40fac4e79cc56ec7350/ty-0.0.18-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d123600a52372677613a719bbb780adeb9b68f47fb5f25acb09171de390e0035", size = 10134659, upload-time = "2026-02-20T21:51:18.311Z" }, + { url = "https://files.pythonhosted.org/packages/43/6e/60af6b88c73469e628ba5253a296da6984e0aa746206f3034c31f1a04ed1/ty-0.0.18-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bb4bc11d32a1bf96a829bf6b9696545a30a196ac77bbc07cc8d3dfee35e03723", size = 10297494, upload-time = "2026-02-20T21:51:39.631Z" }, + { url = "https://files.pythonhosted.org/packages/33/90/612dc0b68224c723faed6adac2bd3f930a750685db76dfe17e6b9e534a83/ty-0.0.18-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:dda2efbf374ba4cd704053d04e32f2f784e85c2ddc2400006b0f96f5f7e4b667", size = 10791944, upload-time = "2026-02-20T21:51:37.13Z" }, + { url = "https://files.pythonhosted.org/packages/0d/da/f4ada0fd08a9e4138fe3fd2bcd3797753593f423f19b1634a814b9b2a401/ty-0.0.18-py3-none-win32.whl", hash = "sha256:c5768607c94977dacddc2f459ace6a11a408a0f57888dd59abb62d28d4fee4f7", size = 9677964, upload-time = "2026-02-20T21:51:42.039Z" }, + { url = "https://files.pythonhosted.org/packages/5e/fa/090ed9746e5c59fc26d8f5f96dc8441825171f1f47752f1778dad690b08b/ty-0.0.18-py3-none-win_amd64.whl", hash = "sha256:b78d0fa1103d36fc2fce92f2092adace52a74654ab7884d54cdaec8eb5016a4d", size = 10636576, upload-time = "2026-02-20T21:51:29.159Z" }, + { url = "https://files.pythonhosted.org/packages/92/4f/5dd60904c8105cda4d0be34d3a446c180933c76b84ae0742e58f02133713/ty-0.0.18-py3-none-win_arm64.whl", hash = "sha256:01770c3c82137c6b216aa3251478f0b197e181054ee92243772de553d3586398", size = 10095449, upload-time = "2026-02-20T21:51:34.914Z" }, ] [[package]] From 213fb8c8c4524db5615a26d76e96c5d8e709f82b Mon Sep 17 00:00:00 2001 From: Eli Fine Date: Wed, 25 Feb 2026 22:24:04 +0000 Subject: [PATCH 2/2] test --- tests/copier_data/data2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/copier_data/data2.yaml b/tests/copier_data/data2.yaml index fbcf50a6..0c034698 100644 --- a/tests/copier_data/data2.yaml +++ b/tests/copier_data/data2.yaml @@ -26,7 +26,7 @@ aws_region_for_stack: us-west-1 # Data added based on the specifics of this template python_ci_versions: - "3.12.7" - - "3.13.2" + - "3.13.9" - "3.14.0" package_name: the-amazing-library primary_author: John Williams