From 6fcc2cc903666ea49ae5999605aa9625764c2502 Mon Sep 17 00:00:00 2001 From: Eli Fine Date: Wed, 26 Nov 2025 17:59:13 +0000 Subject: [PATCH 1/3] copier --- .copier-answers.yml | 2 +- .devcontainer/devcontainer.json | 6 +-- .devcontainer/install-ci-tooling.py | 8 ++-- .../build-docker-image.yaml | 3 +- .github/workflows/ci.yaml | 4 +- .github/workflows/get-values.yaml | 1 + .github/workflows/pre-commit.yaml | 3 +- .github/workflows/tag-on-merge.yaml | 1 + README.md | 2 +- extensions/context.py | 38 +++++++++++-------- pyproject.toml | 4 +- template/.coveragerc | 3 ++ .../.devcontainer/devcontainer.json.jinja | 4 +- template/.github/workflows/get-values.yaml | 1 + template/.github/workflows/pre-commit.yaml | 3 +- uv.lock | 16 ++++---- 16 files changed, 58 insertions(+), 41 deletions(-) diff --git a/.copier-answers.yml b/.copier-answers.yml index 9966b69d..ba57bf3d 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier -_commit: v0.0.83 +_commit: v0.0.85 _src_path: gh:LabAutomationAndScreening/copier-base-template.git description: Copier template for creating Python libraries and executables install_claude_cli: false diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d511a985..0438d274 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -21,11 +21,11 @@ "extensions": [ // basic tooling // "eamodio.gitlens@15.5.1", - "coderabbit.coderabbit-vscode@0.15.2", + "coderabbit.coderabbit-vscode@0.16.0", "ms-vscode.live-server@0.5.2025051301", "MS-vsliveshare.vsliveshare@1.0.5905", "github.copilot@1.388.0", - "github.copilot-chat@0.33.2025102701", + "github.copilot-chat@0.34.2025112401", // Python "ms-python.python@2025.17.2025100201", @@ -63,5 +63,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): a69fbb56 # spellchecker:disable-line + // Devcontainer context hash (do not manually edit this, it's managed by a pre-commit hook): eeccb984 # spellchecker:disable-line } diff --git a/.devcontainer/install-ci-tooling.py b/.devcontainer/install-ci-tooling.py index b18ddded..006ffe97 100644 --- a/.devcontainer/install-ci-tooling.py +++ b/.devcontainer/install-ci-tooling.py @@ -7,11 +7,11 @@ import tempfile from pathlib import Path -UV_VERSION = "0.9.7" -PNPM_VERSION = "10.21.0" -COPIER_VERSION = "9.10.3" +UV_VERSION = "0.9.11" +PNPM_VERSION = "10.23.0" +COPIER_VERSION = "9.11.0" COPIER_TEMPLATE_EXTENSIONS_VERSION = "0.3.3" -PRE_COMMIT_VERSION = "4.3.0" +PRE_COMMIT_VERSION = "4.5.0" GITHUB_WINDOWS_RUNNER_BIN_PATH = r"C:\Users\runneradmin\.local\bin" INSTALL_SSM_PLUGIN_BY_DEFAULT = False parser = argparse.ArgumentParser(description="Install CI tooling for the repo") diff --git a/.github/reusable_workflows/build-docker-image.yaml b/.github/reusable_workflows/build-docker-image.yaml index cb73dbd3..50fafeb5 100644 --- a/.github/reusable_workflows/build-docker-image.yaml +++ b/.github/reusable_workflows/build-docker-image.yaml @@ -43,6 +43,7 @@ permissions: jobs: build-image: name: Build Docker Image + timeout-minutes: 15 runs-on: ubuntu-24.04 outputs: artifact-name: ${{ steps.calculate-build-context-hash.outputs.image_name_no_slashes }} @@ -94,7 +95,7 @@ jobs: uses: ben-z/gh-action-mutex@1ebad517141198e08d47cf72f3c0975316620a65 # v1.0.0-alpha.10 with: branch: mutex-${{ inputs.repository }}-${{ inputs.image_name }} - timeout-minutes: 30 # this is the amount of time this action will wait to attempt to acquire the mutex lock before failing, e.g. if other jobs are queued up in front of it + timeout-minutes: 8 # this is the amount of time this action will wait to attempt to acquire the mutex lock before failing, e.g. if other jobs are queued up in front of it - name: Test if docker image exists if: ${{ inputs.push-role-name != 'no-push' }} diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0c92e04b..59811b57 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -46,6 +46,7 @@ jobs: '--data-file tests/copier_data/data3.yaml', ] runs-on: ${{ matrix.os }} + timeout-minutes: 8 env: UV_PYTHON: ${{ matrix.python-version }} permissions: @@ -107,7 +108,7 @@ jobs: uses: ben-z/gh-action-mutex@1ebad517141198e08d47cf72f3c0975316620a65 # v1.0.0-alpha.10 with: branch: mutex-venv-${{ matrix.os }}-${{ matrix.python-version }} - timeout-minutes: 30 # this is the amount of time this action will wait to attempt to acquire the mutex lock before failing, e.g. if other jobs are queued up in front of it + timeout-minutes: 8 # this is the amount of time this action will wait to attempt to acquire the mutex lock before failing, e.g. if other jobs are queued up in front of it - name: Cache Pre-commit hooks uses: actions/cache@v4.2.4 @@ -133,6 +134,7 @@ jobs: required-check: runs-on: ubuntu-24.04 + timeout-minutes: 2 needs: [ lint-matrix, get-values ] permissions: statuses: write # needed for updating status on Dependabot PRs diff --git a/.github/workflows/get-values.yaml b/.github/workflows/get-values.yaml index 8bdc51df..c7126d34 100644 --- a/.github/workflows/get-values.yaml +++ b/.github/workflows/get-values.yaml @@ -19,6 +19,7 @@ permissions: jobs: get-values: runs-on: ubuntu-24.04 + timeout-minutes: 2 outputs: new-dependabot-sha: ${{ steps.update-hash.outputs.new-sha }} dependabot-commit-created: ${{ steps.update-hash.outputs.commit-created }} diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index 6f09c74e..6d6cf4ca 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -28,6 +28,7 @@ permissions: jobs: pre-commit: runs-on: ubuntu-24.04 + timeout-minutes: 8 name: Pre-commit steps: - name: Checkout code during push @@ -55,7 +56,7 @@ jobs: uses: ben-z/gh-action-mutex@1ebad517141198e08d47cf72f3c0975316620a65 # v1.0.0-alpha.10 with: branch: mutex-venv-ubuntu-24.04-py${{ inputs.python-version }}-nodejs-${{ inputs.node-version }} - timeout-minutes: 30 # this is the amount of time this action will wait to attempt to acquire the mutex lock before failing, e.g. if other jobs are queued up in front of it + timeout-minutes: 8 # this is the amount of time this action will wait to attempt to acquire the mutex lock before failing, e.g. if other jobs are queued up in front of it - name: Cache Pre-commit hooks uses: actions/cache@v4.2.4 diff --git a/.github/workflows/tag-on-merge.yaml b/.github/workflows/tag-on-merge.yaml index 2f91c730..3c208ca7 100644 --- a/.github/workflows/tag-on-merge.yaml +++ b/.github/workflows/tag-on-merge.yaml @@ -10,6 +10,7 @@ jobs: create-tag: if: github.event.pull_request.merged == true runs-on: ubuntu-24.04 + timeout-minutes: 2 permissions: contents: write steps: diff --git a/README.md b/README.md index 10fc79c2..f5e55a91 100644 --- a/README.md +++ b/README.md @@ -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/LabAutomationAndScreening/copier-python-package-template/actions/workflows/ci.yaml/badge.svg?branch=main)](https://www.github.com/LabAutomationAndScreening/copier-python-package-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://www.github.com/LabAutomationAndScreening/copier-python-package-template) -[![OpenIssues](http://isitmaintained.com/badge/open/LabAutomationAndScreening/copier-python-package-template.svg)](http://isitmaintained.com/project/LabAutomationAndScreening/copier-python-package-template) +[![OpenIssues](https://isitmaintained.com/badge/open/LabAutomationAndScreening/copier-python-package-template.svg)](https://isitmaintained.com/project/LabAutomationAndScreening/copier-python-package-template) # Usage To create a new repository using this template: diff --git a/extensions/context.py b/extensions/context.py index b01b2c40..8a38b56b 100644 --- a/extensions/context.py +++ b/extensions/context.py @@ -10,28 +10,28 @@ class ContextUpdater(ContextHook): @override def hook(self, context: dict[Any, Any]) -> dict[Any, Any]: - context["uv_version"] = "0.9.7" - context["pnpm_version"] = "10.21.0" - context["pre_commit_version"] = "4.3.0" + context["uv_version"] = "0.9.11" + context["pnpm_version"] = "10.23.0" + context["pre_commit_version"] = "4.5.0" context["pyright_version"] = "1.1.407" - context["pytest_version"] = "9.0.0" + context["pytest_version"] = "9.0.1" context["pytest_randomly_version"] = "4.0.1" context["pytest_cov_version"] = "7.0.0" - context["copier_version"] = "9.10.3" + context["copier_version"] = "9.11.0" context["copier_template_extensions_version"] = "0.3.3" context["sphinx_version"] = "8.1.3" - context["pulumi_version"] = "3.206.0" - context["pulumi_aws_version"] = "7.11.0" + context["pulumi_version"] = "3.208.0" + context["pulumi_aws_version"] = "7.12.0" context["pulumi_aws_native_version"] = "1.38.0" context["pulumi_command_version"] = "1.1.3" context["pulumi_github_version"] = "6.8.0" context["pulumi_okta_version"] = "6.1.0" - context["boto3_version"] = "1.40.57" + context["boto3_version"] = "1.41.2" context["ephemeral_pulumi_deploy_version"] = "0.0.5" - context["pydantic_version"] = "2.12.3" + context["pydantic_version"] = "2.12.4" context["pyinstaller_version"] = "6.16.0" context["setuptools_version"] = "80.7.1" - context["strawberry_graphql_version"] = "0.284.1" + context["strawberry_graphql_version"] = "0.287.0" context["fastapi_version"] = "0.121.0" context["fastapi_offline_version"] = "1.7.4" context["uvicorn_version"] = "0.38.0" @@ -45,7 +45,7 @@ def hook(self, context: dict[Any, Any]) -> dict[Any, Any]: context["python_kiota_bundle_version"] = "1.9.7" context["node_version"] = "24.7.0" - context["nuxt_ui_version"] = "^4.1.0" + context["nuxt_ui_version"] = "^4.2.1" context["nuxt_version"] = "^4.2.0" context["nuxt_icon_version"] = "^2.1.0" context["typescript_version"] = "^5.9.3" @@ -61,7 +61,7 @@ def hook(self, context: dict[Any, Any]) -> dict[Any, Any]: context["nuxt_eslint_version"] = "^1.10.0" context["zod_version"] = "^4.1.12" context["zod_from_json_schema_version"] = "^0.5.1" - context["types_node_version"] = "^24.10.0" + context["types_node_version"] = "^24.10.1" 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" @@ -95,15 +95,21 @@ def hook(self, context: dict[Any, Any]) -> dict[Any, Any]: context["gha_sleep"] = "v2.0.3" context["gha_linux_runner"] = "ubuntu-24.04" context["gha_windows_runner"] = "windows-2025" - - context["py312_version"] = "3.12.7" - context["py313_version"] = "3.13.2" - context["py314_version"] = "3.14.0" + context["gha_short_timeout_minutes"] = "2" + context["gha_medium_timeout_minutes"] = "8" + context["gha_long_timeout_minutes"] = "15" + context["gha_xlong_timeout_minutes"] = "45" context["debian_release_name"] = "bookworm" context["alpine_image_version"] = "3.22" context["nginx_image_version"] = "1.29.1" + context["kiota_cli_version"] = "1.29.0" + + context["py312_version"] = "3.12.7" + context["py313_version"] = "3.13.2" + context["py314_version"] = "3.14.0" + # Kludge to be able to help symlinked jinja files in the child and grandchild templates context["template_uses_vuejs"] = False context["template_uses_javascript"] = False diff --git a/pyproject.toml b/pyproject.toml index 09d772f6..c538181d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,11 +6,11 @@ readme = "README.md" requires-python = ">=3.12.7" dependencies = [ # Managed by upstream template - "pytest>=9.0.0", + "pytest>=9.0.1", "pytest-cov>=7.0.0", "pytest-randomly>=4.0.1", "pyright[nodejs]>=1.1.407", - "copier>=9.10.3", + "copier>=9.11.0", "copier-template-extensions>=0.3.3" # Specific to this template diff --git a/template/.coveragerc b/template/.coveragerc index 7ee237b3..5f9051a8 100644 --- a/template/.coveragerc +++ b/template/.coveragerc @@ -5,6 +5,9 @@ omit = */vendor_files/* # omit any auto-generated API client code */generated/open_api/* + # omit CircuitPython firmware + */firmware/code.py + */firmware/boot.py [report] # Regexes for lines to exclude from consideration diff --git a/template/.devcontainer/devcontainer.json.jinja b/template/.devcontainer/devcontainer.json.jinja index 5d5b73f3..33839d91 100644 --- a/template/.devcontainer/devcontainer.json.jinja +++ b/template/.devcontainer/devcontainer.json.jinja @@ -28,11 +28,11 @@ "extensions": [ // basic tooling // "eamodio.gitlens@15.5.1", - "coderabbit.coderabbit-vscode@0.15.2", + "coderabbit.coderabbit-vscode@0.16.0", "ms-vscode.live-server@0.5.2025051301", "MS-vsliveshare.vsliveshare@1.0.5905", "github.copilot@1.388.0", - "github.copilot-chat@0.33.2025102701",{% endraw %}{% if install_claude_cli %}{% raw %} + "github.copilot-chat@0.34.2025112401",{% endraw %}{% if install_claude_cli %}{% raw %} "anthropic.claude-code@2.0.27",{% endraw %}{% endif %}{% raw %} // Python diff --git a/template/.github/workflows/get-values.yaml b/template/.github/workflows/get-values.yaml index 8bdc51df..c7126d34 100644 --- a/template/.github/workflows/get-values.yaml +++ b/template/.github/workflows/get-values.yaml @@ -19,6 +19,7 @@ permissions: jobs: get-values: runs-on: ubuntu-24.04 + timeout-minutes: 2 outputs: new-dependabot-sha: ${{ steps.update-hash.outputs.new-sha }} dependabot-commit-created: ${{ steps.update-hash.outputs.commit-created }} diff --git a/template/.github/workflows/pre-commit.yaml b/template/.github/workflows/pre-commit.yaml index 6f09c74e..6d6cf4ca 100644 --- a/template/.github/workflows/pre-commit.yaml +++ b/template/.github/workflows/pre-commit.yaml @@ -28,6 +28,7 @@ permissions: jobs: pre-commit: runs-on: ubuntu-24.04 + timeout-minutes: 8 name: Pre-commit steps: - name: Checkout code during push @@ -55,7 +56,7 @@ jobs: uses: ben-z/gh-action-mutex@1ebad517141198e08d47cf72f3c0975316620a65 # v1.0.0-alpha.10 with: branch: mutex-venv-ubuntu-24.04-py${{ inputs.python-version }}-nodejs-${{ inputs.node-version }} - timeout-minutes: 30 # this is the amount of time this action will wait to attempt to acquire the mutex lock before failing, e.g. if other jobs are queued up in front of it + timeout-minutes: 8 # this is the amount of time this action will wait to attempt to acquire the mutex lock before failing, e.g. if other jobs are queued up in front of it - name: Cache Pre-commit hooks uses: actions/cache@v4.2.4 diff --git a/uv.lock b/uv.lock index 2171ebb8..c2e6c865 100644 --- a/uv.lock +++ b/uv.lock @@ -22,7 +22,7 @@ wheels = [ [[package]] name = "copier" -version = "9.10.3" +version = "9.11.0" 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/82/c6/1f61fe2b011347c0b9d7637d02ef3dc1c2874640a4fd5fb059ea8b5493f2/copier-9.10.3.tar.gz", hash = "sha256:6e965d8f719678ee3bc5e611ef0d1b182d6b01a3d5385a5f1ba43aaade51caf7", size = 598697, upload-time = "2025-10-17T18:26:04.217Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/61/226642b1efad2a39008ee5b913cd82a6f22a564b652e8f0645488a27a2e2/copier-9.11.0.tar.gz", hash = "sha256:e73d6989fa140b621a5c571984c46122704086a9caa84a6e07699a5234d297ab", size = 592030, upload-time = "2025-11-20T21:08:01.419Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/f2/58ee35dbd55d0ffa13197365ec4725c36da2f7ec72eaa1dd154bfbd2676e/copier-9.10.3-py3-none-any.whl", hash = "sha256:7165239566f68e9e36c148f71e0552bf1e4911eef96bfa7cf33e6a0dbfed3c96", size = 56186, upload-time = "2025-10-17T18:26:02.856Z" }, + { url = "https://files.pythonhosted.org/packages/cc/ee/657b24e9b2406f572db273e943237c39c86da7d06ac7bc0686cacea1f59d/copier-9.11.0-py3-none-any.whl", hash = "sha256:628adac090f7b333bb64bf5cab03456b99971a77e4d5b2b979e30b8451cbda9d", size = 56432, upload-time = "2025-11-20T21:07:59.618Z" }, ] [[package]] @@ -59,10 +59,10 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "copier", specifier = ">=9.10.3" }, + { name = "copier", specifier = ">=9.11.0" }, { name = "copier-template-extensions", specifier = ">=0.3.3" }, { name = "pyright", extras = ["nodejs"], specifier = ">=1.1.407" }, - { name = "pytest", specifier = ">=9.0.0" }, + { name = "pytest", specifier = ">=9.0.1" }, { name = "pytest-cov", specifier = ">=7.0.0" }, { name = "pytest-randomly", specifier = ">=4.0.1" }, ] @@ -402,7 +402,7 @@ nodejs = [ [[package]] name = "pytest" -version = "9.0.0" +version = "9.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -411,9 +411,9 @@ dependencies = [ { name = "pluggy" }, { name = "pygments" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/da/1d/eb34f286b164c5e431a810a38697409cca1112cee04b287bb56ac486730b/pytest-9.0.0.tar.gz", hash = "sha256:8f44522eafe4137b0f35c9ce3072931a788a21ee40a2ed279e817d3cc16ed21e", size = 1562764, upload-time = "2025-11-08T17:25:33.34Z" } +sdist = { url = "https://files.pythonhosted.org/packages/07/56/f013048ac4bc4c1d9be45afd4ab209ea62822fb1598f40687e6bf45dcea4/pytest-9.0.1.tar.gz", hash = "sha256:3e9c069ea73583e255c3b21cf46b8d3c56f6e3a1a8f6da94ccb0fcf57b9d73c8", size = 1564125, upload-time = "2025-11-12T13:05:09.333Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/72/99/cafef234114a3b6d9f3aaed0723b437c40c57bdb7b3e4c3a575bc4890052/pytest-9.0.0-py3-none-any.whl", hash = "sha256:e5ccdf10b0bac554970ee88fc1a4ad0ee5d221f8ef22321f9b7e4584e19d7f96", size = 373364, upload-time = "2025-11-08T17:25:31.811Z" }, + { url = "https://files.pythonhosted.org/packages/0b/8b/6300fb80f858cda1c51ffa17075df5d846757081d11ab4aa35cef9e6258b/pytest-9.0.1-py3-none-any.whl", hash = "sha256:67be0030d194df2dfa7b556f2e56fb3c3315bd5c8822c6951162b92b32ce7dad", size = 373668, upload-time = "2025-11-12T13:05:07.379Z" }, ] [[package]] From 1afc9e528385827f1b5ad91b852ec8e87646ed25 Mon Sep 17 00:00:00 2001 From: Eli Fine Date: Wed, 26 Nov 2025 18:01:54 +0000 Subject: [PATCH 2/3] publish --- ...t is_frozen_executable %}publish.yaml{% endif %}.jinja | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/template/.github/workflows/{% if not is_frozen_executable %}publish.yaml{% endif %}.jinja b/template/.github/workflows/{% if not is_frozen_executable %}publish.yaml{% endif %}.jinja index 099c526d..690346c2 100644 --- a/template/.github/workflows/{% if not is_frozen_executable %}publish.yaml{% endif %}.jinja +++ b/template/.github/workflows/{% if not is_frozen_executable %}publish.yaml{% endif %}.jinja @@ -19,6 +19,7 @@ permissions: jobs: get-values: name: Get Values + timeout-minutes: {% endraw %}{{ gha_short_timeout_minutes }}{% raw %} runs-on: {% endraw %}{{ gha_linux_runner }}{% raw %} outputs: package-version: ${{ steps.extract-package-version.outputs.package_version }} @@ -62,6 +63,7 @@ jobs: JOB_MATCHING_DEV_ENV: true runs-on: ${{ matrix.os }} + timeout-minutes: {% endraw %}{{ gha_medium_timeout_minutes }}{% raw %} env: UV_PYTHON: ${{ matrix.python-version }} @@ -82,6 +84,7 @@ jobs: build: needs: [ test ] + timeout-minutes: {% endraw %}{{ gha_medium_timeout_minutes }}{% raw %} runs-on: {% endraw %}{{ gha_linux_runner }}{% raw %} steps: @@ -119,6 +122,7 @@ jobs: publish-to-staging: name: Publish Python distribution to Staging Package Registry + timeout-minutes: {% endraw %}{{ gha_medium_timeout_minutes }}{% raw %} needs: [ build ] runs-on: {% endraw %}{{ gha_linux_runner }}{% raw %} environment: @@ -156,6 +160,7 @@ jobs: install-from-staging: name: Install package from staging registry + timeout-minutes: {% endraw %}{{ gha_medium_timeout_minutes }}{% raw %} needs: [ publish-to-staging, get-values ] strategy: matrix: @@ -243,6 +248,7 @@ jobs: create-tag: name: Create the git tag if: ${{ fromJSON(github.event.inputs.publish_to_primary) }} + timeout-minutes: {% endraw %}{{ gha_medium_timeout_minutes }}{% raw %} needs: [ install-from-staging ] permissions: contents: write # needed to push the tag @@ -263,6 +269,7 @@ jobs: name: Publish Python distribution to Primary Package Registry if: ${{ fromJSON(github.event.inputs.publish_to_primary) }} needs: [ create-tag ] + timeout-minutes: {% endraw %}{{ gha_medium_timeout_minutes }}{% raw %} runs-on: {% endraw %}{{ gha_linux_runner }}{% raw %} environment: name: pypi @@ -313,6 +320,7 @@ jobs: JOB_MATCHING_DEV_ENV: true runs-on: ${{ matrix.os }} + timeout-minutes: {% endraw %}{{ gha_medium_timeout_minutes }}{% raw %} env: UV_PYTHON: ${{ matrix.python-version }} From f8815df5e2743855cf8bdf4893782f7edd128fcf Mon Sep 17 00:00:00 2001 From: Eli Fine Date: Wed, 26 Nov 2025 18:03:16 +0000 Subject: [PATCH 3/3] ci --- template/.github/workflows/ci.yaml.jinja | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/template/.github/workflows/ci.yaml.jinja b/template/.github/workflows/ci.yaml.jinja index 5f5df0ba..be48ba08 100644 --- a/template/.github/workflows/ci.yaml.jinja +++ b/template/.github/workflows/ci.yaml.jinja @@ -47,6 +47,7 @@ jobs: JOB_MATCHING_DEV_ENV: true runs-on: ${{ matrix.os }} + timeout-minutes: {% endraw %}{{ gha_medium_timeout_minutes }}{% raw %} env: UV_PYTHON: ${{ matrix.python-version }} steps: @@ -89,6 +90,7 @@ jobs: - {{ item }} {% endfor %}{% raw %} runs-on: ${{ matrix.os }} + timeout-minutes: {% endraw %}{{ gha_medium_timeout_minutes }}{% raw %} env: UV_PYTHON: ${{ matrix.python-version }} @@ -124,6 +126,7 @@ jobs: {% endfor %}{% raw %} runs-on: {% endraw %}{{ gha_linux_runner }}{% raw %} + timeout-minutes: {% endraw %}{{ gha_medium_timeout_minutes }}{% raw %} env: UV_PYTHON: ${{ matrix.python-version }} @@ -154,6 +157,7 @@ jobs: - build-docs{% endif %}{% if is_frozen_executable %} - executable{% endif %}{% raw %} if: always() + timeout-minutes: {% endraw %}{{ gha_short_timeout_minutes }}{% raw %} steps: - name: fail if prior job failure if: needs.test.result != 'success'{% endraw %}{% if create_docs %} || needs.build-docs.result != 'success'{% endif %}{% if is_frozen_executable %} || needs.executable.result != 'success'{% endif %}{% raw %}