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 d5393321..68e50352 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,7 +14,7 @@ // view latest version https://raw.githubusercontent.com/aws/aws-cli/v2/CHANGELOG.rst "version": "2.32.6" }, - "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, @@ -28,22 +28,22 @@ "-AmazonWebServices.aws-toolkit-vscode", // the AWS CLI feature installs this automatically, but it's causing problems in VS Code // 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 @@ -68,5 +68,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): 5e192817 # spellchecker:disable-line + // Devcontainer context hash (do not manually edit this, it's managed by a pre-commit hook): b4b25459 # spellchecker:disable-line } diff --git a/.devcontainer/install-ci-tooling.py b/.devcontainer/install-ci-tooling.py index abefa49d..033e95cf 100644 --- a/.devcontainer/install-ci-tooling.py +++ b/.devcontainer/install-ci-tooling.py @@ -5,7 +5,7 @@ import subprocess import sys -UV_VERSION = "0.9.26" +UV_VERSION = "0.10.4" COPIER_VERSION = "9.11.2" COPIER_TEMPLATE_EXTENSIONS_VERSION = "0.3.3" PRE_COMMIT_VERSION = "4.5.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/workflows/ci.yaml b/.github/workflows/ci.yaml index 4ff1dcb1..267e791b 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -170,6 +170,11 @@ jobs: permissions: {} 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" 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.yaml b/copier.yaml index 47585f52..0cecdd75 100644 --- a/copier.yaml +++ b/copier.yaml @@ -24,7 +24,7 @@ install_claude_cli: python_version: type: str help: What version of Python? - default: "3.13.2" + default: "3.13.9" python_ci_versions: type: str @@ -32,7 +32,7 @@ python_ci_versions: multiselect: true choices: - "3.12.7" - - "3.13.2" + - "3.13.9" - "3.14.0" ssh_port_number: @@ -78,6 +78,17 @@ template_might_want_to_use_python_asyncio: default: no when: "{{ template_uses_python }}" +_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 + _min_copier_version: "9.4" diff --git a/extensions/context.py b/extensions/context.py index 121ac1e4..b54e0c41 100644 --- a/extensions/context.py +++ b/extensions/context.py @@ -11,83 +11,84 @@ class ContextUpdater(ContextHook): @override def hook(self, context: dict[Any, Any]) -> dict[Any, Any]: # These are duplicated in the install-ci-tooling.py script in this repository - context["uv_version"] = "0.9.26" + context["uv_version"] = "0.10.4" context["pre_commit_version"] = "4.5.1" # These also in pyproject.toml - context["copier_version"] = "==9.11.2" + context["copier_version"] = "==9.11.3" context["copier_template_extensions_version"] = "==0.3.3" ####### - context["pnpm_version"] = "10.28.1" + context["pnpm_version"] = "10.30.0" # These are duplicated in the pyproject.toml of this repository 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["ty_version"] = ">=0.0.17" ####### 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" ####### # These are duplicated in the CI files for this repository - 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_linux_runner"] = "ubuntu-24.04" @@ -115,10 +116,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" # 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["py313_version"] = "3.13.9" context["py314_version"] = "3.14.0" ####### # Kludge to allow for the same docker-compose file in child and grandchild templates diff --git a/pyproject.toml b/pyproject.toml index 22b438bd..150ac046 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,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/devcontainer.json.jinja-base b/template/.devcontainer/devcontainer.json.jinja-base index 42b0f760..a5135692 100644 --- a/template/.devcontainer/devcontainer.json.jinja-base +++ b/template/.devcontainer/devcontainer.json.jinja-base @@ -14,17 +14,18 @@ // 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 %}", "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": { @@ -34,18 +35,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", @@ -59,7 +60,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/workflows/ci.yaml.jinja-base b/template/.github/workflows/ci.yaml.jinja-base index 72274550..8ab08290 100644 --- a/template/.github/workflows/ci.yaml.jinja-base +++ b/template/.github/workflows/ci.yaml.jinja-base @@ -149,9 +149,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/template/copier.yml.jinja-base b/template/copier.yml.jinja-base index ecae1578..09782b60 100644 --- a/template/copier.yml.jinja-base +++ b/template/copier.yml.jinja-base @@ -146,6 +146,16 @@ aws_region_for_stack: # Questions specific to this template +_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/template/extensions/context.py.jinja-base b/template/extensions/context.py.jinja-base index 79eeb964..68c4eb0d 100644 --- a/template/extensions/context.py.jinja-base +++ b/template/extensions/context.py.jinja-base @@ -48,6 +48,7 @@ class ContextUpdater(ContextHook): context["pytest_recording_version"] = "{{ pytest_recording_version }}" context["pytest_asyncio_version"] = "{{ pytest_asyncio_version }}" context["pytest_reserial_version"] = "{{ pytest_reserial_version }}" + context["python_faker_version"] = "{{ python_faker_version }}" context["default_node_version"] = "{{ default_node_version }}" context["nuxt_ui_version"] = "{{ nuxt_ui_version }}" diff --git a/tests/copier_data/data1.yaml b/tests/copier_data/data1.yaml index 1294dfe9..11f86dc1 100644 --- a/tests/copier_data/data1.yaml +++ b/tests/copier_data/data1.yaml @@ -3,7 +3,7 @@ description: Doing amazing things install_claude_cli: true ssh_port_number: 12345 python_ci_versions: - - 3.13.2 + - 3.13.9 template_uses_python: true template_uses_pulumi: true repo_org_name: theGreatestOrg diff --git a/tests/copier_data/data2.yaml b/tests/copier_data/data2.yaml index 3821467e..f9b7dcea 100644 --- a/tests/copier_data/data2.yaml +++ b/tests/copier_data/data2.yaml @@ -4,7 +4,7 @@ install_claude_cli: false ssh_port_number: 54321 python_ci_versions: - "3.12.7" - - "3.13.2" + - "3.13.9" - "3.14.0" template_uses_python: true template_uses_pulumi: false diff --git a/uv.lock b/uv.lock index f3fd24cf..62d494a1 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.17" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/c3/41ae6346443eedb65b96761abfab890a48ce2aa5a8a27af69c5c5d99064d/ty-0.0.17.tar.gz", hash = "sha256:847ed6c120913e280bf9b54d8eaa7a1049708acb8824ad234e71498e8ad09f97", size = 5167209, upload-time = "2026-02-13T13:26:36.835Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/01/0ef15c22a1c54b0f728ceff3f62d478dbf8b0dcf8ff7b80b954f79584f3e/ty-0.0.17-py3-none-linux_armv6l.whl", hash = "sha256:64a9a16555cc8867d35c2647c2f1afbd3cae55f68fd95283a574d1bb04fe93e0", size = 10192793, upload-time = "2026-02-13T13:27:13.943Z" }, + { url = "https://files.pythonhosted.org/packages/0f/2c/f4c322d9cded56edc016b1092c14b95cf58c8a33b4787316ea752bb9418e/ty-0.0.17-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:eb2dbd8acd5c5a55f4af0d479523e7c7265a88542efe73ed3d696eb1ba7b6454", size = 10051977, upload-time = "2026-02-13T13:26:57.741Z" }, + { url = "https://files.pythonhosted.org/packages/4c/a5/43746c1ff81e784f5fc303afc61fe5bcd85d0fcf3ef65cb2cef78c7486c7/ty-0.0.17-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f18f5fd927bc628deb9ea2df40f06b5f79c5ccf355db732025a3e8e7152801f6", size = 9564639, upload-time = "2026-02-13T13:26:42.781Z" }, + { url = "https://files.pythonhosted.org/packages/d6/b8/280b04e14a9c0474af574f929fba2398b5e1c123c1e7735893b4cd73d13c/ty-0.0.17-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5383814d1d7a5cc53b3b07661856bab04bb2aac7a677c8d33c55169acdaa83df", size = 10061204, upload-time = "2026-02-13T13:27:00.152Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d7/493e1607d8dfe48288d8a768a2adc38ee27ef50e57f0af41ff273987cda0/ty-0.0.17-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c20423b8744b484f93e7bf2ef8a9724bca2657873593f9f41d08bd9f83444c9", size = 10013116, upload-time = "2026-02-13T13:26:34.543Z" }, + { url = "https://files.pythonhosted.org/packages/80/ef/22f3ed401520afac90dbdf1f9b8b7755d85b0d5c35c1cb35cf5bd11b59c2/ty-0.0.17-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6f5b1aba97db9af86517b911674b02f5bc310750485dc47603a105bd0e83ddd", size = 10533623, upload-time = "2026-02-13T13:26:31.449Z" }, + { url = "https://files.pythonhosted.org/packages/75/ce/744b15279a11ac7138832e3a55595706b4a8a209c9f878e3ab8e571d9032/ty-0.0.17-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:488bce1a9bea80b851a97cd34c4d2ffcd69593d6c3f54a72ae02e5c6e47f3d0c", size = 11069750, upload-time = "2026-02-13T13:26:48.638Z" }, + { url = "https://files.pythonhosted.org/packages/f2/be/1133c91f15a0e00d466c24f80df486d630d95d1b2af63296941f7473812f/ty-0.0.17-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8df66b91ec84239420985ec215e7f7549bfda2ac036a3b3c065f119d1c06825a", size = 10870862, upload-time = "2026-02-13T13:26:54.715Z" }, + { url = "https://files.pythonhosted.org/packages/3e/4a/a2ed209ef215b62b2d3246e07e833081e07d913adf7e0448fc204be443d6/ty-0.0.17-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:002139e807c53002790dfefe6e2f45ab0e04012e76db3d7c8286f96ec121af8f", size = 10628118, upload-time = "2026-02-13T13:26:45.439Z" }, + { url = "https://files.pythonhosted.org/packages/b3/0c/87476004cb5228e9719b98afffad82c3ef1f84334bde8527bcacba7b18cb/ty-0.0.17-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6c4e01f05ce82e5d489ab3900ca0899a56c4ccb52659453780c83e5b19e2b64c", size = 10038185, upload-time = "2026-02-13T13:27:02.693Z" }, + { url = "https://files.pythonhosted.org/packages/46/4b/98f0b3ba9aef53c1f0305519536967a4aa793a69ed72677b0a625c5313ac/ty-0.0.17-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:2b226dd1e99c0d2152d218c7e440150d1a47ce3c431871f0efa073bbf899e881", size = 10047644, upload-time = "2026-02-13T13:27:05.474Z" }, + { url = "https://files.pythonhosted.org/packages/93/e0/06737bb80aa1a9103b8651d2eb691a7e53f1ed54111152be25f4a02745db/ty-0.0.17-py3-none-musllinux_1_2_i686.whl", hash = "sha256:8b11f1da7859e0ad69e84b3c5ef9a7b055ceed376a432fad44231bdfc48061c2", size = 10231140, upload-time = "2026-02-13T13:27:10.844Z" }, + { url = "https://files.pythonhosted.org/packages/7c/79/e2a606bd8852383ba9abfdd578f4a227bd18504145381a10a5f886b4e751/ty-0.0.17-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c04e196809ff570559054d3e011425fd7c04161529eb551b3625654e5f2434cb", size = 10718344, upload-time = "2026-02-13T13:26:51.66Z" }, + { url = "https://files.pythonhosted.org/packages/c5/2d/2663984ac11de6d78f74432b8b14ba64d170b45194312852b7543cf7fd56/ty-0.0.17-py3-none-win32.whl", hash = "sha256:305b6ed150b2740d00a817b193373d21f0767e10f94ac47abfc3b2e5a5aec809", size = 9672932, upload-time = "2026-02-13T13:27:08.522Z" }, + { url = "https://files.pythonhosted.org/packages/de/b5/39be78f30b31ee9f5a585969930c7248354db90494ff5e3d0756560fb731/ty-0.0.17-py3-none-win_amd64.whl", hash = "sha256:531828267527aee7a63e972f54e5eee21d9281b72baf18e5c2850c6b862add83", size = 10542138, upload-time = "2026-02-13T13:27:17.084Z" }, + { url = "https://files.pythonhosted.org/packages/40/b7/f875c729c5d0079640c75bad2c7e5d43edc90f16ba242f28a11966df8f65/ty-0.0.17-py3-none-win_arm64.whl", hash = "sha256:de9810234c0c8d75073457e10a84825b9cd72e6629826b7f01c7a0b266ae25b1", size = 10023068, upload-time = "2026-02-13T13:26:39.637Z" }, ] [[package]]