diff --git a/.copier-answers.yml b/.copier-answers.yml index df2051da..0d351f97 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier -_commit: v0.0.73 +_commit: v0.0.74 _src_path: gh:LabAutomationAndScreening/copier-base-template.git description: Copier template for creating Python libraries and executables python_ci_versions: diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index aa7845c8..2f3c5514 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -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): a57008fa # spellchecker:disable-line + // Devcontainer context hash (do not manually edit this, it's managed by a pre-commit hook): 735908f4 # spellchecker:disable-line } diff --git a/.devcontainer/install-ci-tooling.py b/.devcontainer/install-ci-tooling.py index da4fb03e..e0239278 100644 --- a/.devcontainer/install-ci-tooling.py +++ b/.devcontainer/install-ci-tooling.py @@ -7,7 +7,7 @@ import tempfile from pathlib import Path -UV_VERSION = "0.8.19" +UV_VERSION = "0.8.22" PNPM_VERSION = "10.17.1" COPIER_VERSION = "9.10.2" COPIER_TEMPLATE_EXTENSIONS_VERSION = "0.3.3" diff --git a/.github/workflows/get-values.yaml b/.github/workflows/get-values.yaml index 5c6efe98..8bdc51df 100644 --- a/.github/workflows/get-values.yaml +++ b/.github/workflows/get-values.yaml @@ -25,7 +25,10 @@ jobs: pr-short-num: ${{ steps.find-pr-num.outputs.number }} steps: - name: Display full GitHub context - run: echo '${{ toJSON(github) }}' + run: | + jq . <<'JSON' + ${{ toJSON(github) }} + JSON - name: Checkout code uses: actions/checkout@v5.0.0 diff --git a/extensions/context.py b/extensions/context.py index 2026e84b..5caa5108 100644 --- a/extensions/context.py +++ b/extensions/context.py @@ -10,7 +10,7 @@ class ContextUpdater(ContextHook): @override def hook(self, context: dict[Any, Any]) -> dict[Any, Any]: - context["uv_version"] = "0.8.19" + context["uv_version"] = "0.8.22" context["pnpm_version"] = "10.17.1" context["pre_commit_version"] = "4.3.0" context["pyright_version"] = "1.1.405" @@ -26,38 +26,38 @@ def hook(self, context: dict[Any, Any]) -> dict[Any, Any]: context["pulumi_command_version"] = "1.1.0" context["pulumi_github_version"] = "6.7.3" context["pulumi_okta_version"] = "5.2.0" - context["boto3_version"] = "1.40.30" + context["boto3_version"] = "1.40.41" context["ephemeral_pulumi_deploy_version"] = "0.0.5" context["pydantic_version"] = "2.11.7" context["pyinstaller_version"] = "6.16.0" context["setuptools_version"] = "80.7.1" context["strawberry_graphql_version"] = "0.282.0" - context["fastapi_version"] = "0.117.1" + context["fastapi_version"] = "0.118.0" context["fastapi_offline_version"] = "1.7.4" - context["uvicorn_version"] = "0.36.0" + context["uvicorn_version"] = "0.37.0" context["lab_auto_pulumi_version"] = "0.1.16" context["ariadne_codegen_version"] = "0.15.2" context["pytest_mock_version"] = "3.15.0" context["uuid_utils_version"] = "0.11.0" context["node_version"] = "24.7.0" - context["nuxt_ui_version"] = "^3.3.3" + context["nuxt_ui_version"] = "^4.0.0" context["nuxt_version"] = "^4.1.0" context["nuxt_icon_version"] = "^2.0.0" context["typescript_version"] = "^5.8.2" context["playwright_version"] = "^1.55.0" context["vue_version"] = "^3.5.21" - context["vue_tsc_version"] = "^3.0.6" + context["vue_tsc_version"] = "^3.1.0" context["vue_devtools_api_version"] = "^8.0.0" context["vue_router_version"] = "^4.5.1" context["dotenv_cli_version"] = "^10.0.0" context["faker_version"] = "^10.0.0" context["vitest_version"] = "^3.2.4" - context["eslint_version"] = "^9.35.0" + context["eslint_version"] = "^9.36.0" context["nuxt_eslint_version"] = "^1.9.0" context["zod_version"] = "^4.1.5" context["zod_from_json_schema_version"] = "^0.5.0" - context["types_node_version"] = "^24.5.1" + context["types_node_version"] = "^24.6.0" context["nuxt_apollo_version"] = "5.0.0-alpha.15" context["graphql_codegen_cli_version"] = "^6.0.0" context["graphql_codegen_typescript_version"] = "^5.0.0" diff --git a/ruff-test.toml b/ruff-test.toml index 9a4cfa16..9994e410 100644 --- a/ruff-test.toml +++ b/ruff-test.toml @@ -15,5 +15,9 @@ ignore = [ "TRY003", # tests dont need to create a custom exception classes, generally you want to throw an AssertionError with a message anyway ] +unfixable = [ + "SIM117", # pytest.raises context managers should generally be separate from others so they can be very specific about where the error is being raised from, so don't autofix this +] + [lint.flake8-pytest-style] raises-require-match-for = ["*"] # ensures we always have a match for our raises statements so that we validate tests fail for the right reason diff --git a/ruff.toml b/ruff.toml index 2123a309..eb1c0874 100644 --- a/ruff.toml +++ b/ruff.toml @@ -69,10 +69,10 @@ ignore = [ # Allow fix for all enabled rules (when `--fix`) is provided. fixable = ["ALL"] unfixable = [ - "T201", "T203", # don't automatically delete print statements, just warn about them - "RUF100", # don't automatically remove unnecessary suppressions, because that can leave behind a now-stale comment about why the suppression was originally added - "FURB136", "PLR1730", # don't automatically replace if statements with min/max functions. Sometimes the if statement is more readable or better for code coverage checking - ] + "T201", "T203", # don't automatically delete print statements, just warn about them + "RUF100", # don't automatically remove unnecessary suppressions, because that can leave behind a now-stale comment about why the suppression was originally added + "FURB136", "PLR1730", # don't automatically replace if statements with min/max functions. Sometimes the if statement is more readable or better for code coverage checking +] # Allow unused variables if it's an underscore or double underscore. dummy-variable-rgx = "^_$|^__$" @@ -87,7 +87,7 @@ dummy-variable-rgx = "^_$|^__$" force-single-line = true [lint.flake8-builtins] -builtins-ignorelist = ["id"] # We use the id() builtin little enough that it's okay to shadow it +builtins-ignorelist = ["id"] # We use the id() builtin rarely enough that it's okay to shadow it [lint.flake8-annotations] mypy-init-return = true # we don't care about annotating all __init__ methods as returning None diff --git a/template/.github/workflows/get-values.yaml b/template/.github/workflows/get-values.yaml index 5c6efe98..8bdc51df 100644 --- a/template/.github/workflows/get-values.yaml +++ b/template/.github/workflows/get-values.yaml @@ -25,7 +25,10 @@ jobs: pr-short-num: ${{ steps.find-pr-num.outputs.number }} steps: - name: Display full GitHub context - run: echo '${{ toJSON(github) }}' + run: | + jq . <<'JSON' + ${{ toJSON(github) }} + JSON - name: Checkout code uses: actions/checkout@v5.0.0 diff --git a/template/ruff-test.toml b/template/ruff-test.toml index 9a4cfa16..9994e410 100644 --- a/template/ruff-test.toml +++ b/template/ruff-test.toml @@ -15,5 +15,9 @@ ignore = [ "TRY003", # tests dont need to create a custom exception classes, generally you want to throw an AssertionError with a message anyway ] +unfixable = [ + "SIM117", # pytest.raises context managers should generally be separate from others so they can be very specific about where the error is being raised from, so don't autofix this +] + [lint.flake8-pytest-style] raises-require-match-for = ["*"] # ensures we always have a match for our raises statements so that we validate tests fail for the right reason diff --git a/template/ruff.toml b/template/ruff.toml index 2123a309..eb1c0874 100644 --- a/template/ruff.toml +++ b/template/ruff.toml @@ -69,10 +69,10 @@ ignore = [ # Allow fix for all enabled rules (when `--fix`) is provided. fixable = ["ALL"] unfixable = [ - "T201", "T203", # don't automatically delete print statements, just warn about them - "RUF100", # don't automatically remove unnecessary suppressions, because that can leave behind a now-stale comment about why the suppression was originally added - "FURB136", "PLR1730", # don't automatically replace if statements with min/max functions. Sometimes the if statement is more readable or better for code coverage checking - ] + "T201", "T203", # don't automatically delete print statements, just warn about them + "RUF100", # don't automatically remove unnecessary suppressions, because that can leave behind a now-stale comment about why the suppression was originally added + "FURB136", "PLR1730", # don't automatically replace if statements with min/max functions. Sometimes the if statement is more readable or better for code coverage checking +] # Allow unused variables if it's an underscore or double underscore. dummy-variable-rgx = "^_$|^__$" @@ -87,7 +87,7 @@ dummy-variable-rgx = "^_$|^__$" force-single-line = true [lint.flake8-builtins] -builtins-ignorelist = ["id"] # We use the id() builtin little enough that it's okay to shadow it +builtins-ignorelist = ["id"] # We use the id() builtin rarely enough that it's okay to shadow it [lint.flake8-annotations] mypy-init-return = true # we don't care about annotating all __init__ methods as returning None