From d5c31332b5b8ab08d5810dc4335fee763cfd9840 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 21 May 2026 13:05:30 -0500 Subject: [PATCH 1/3] Switch CI to astral-managed Python via setup-uv Replace actions/setup-python with astral-sh/setup-uv so every job uses the python-build-standalone interpreter astral ships, which bakes in the PEP 744 tail call interpreter on 3.14. setup-uv handles both installing uv and provisioning the requested Python version, so the venv bootstrap uses 'uv venv' instead of 'python -m venv' and there is no longer a separate uv install step on cache miss. Bumps CACHE_VERSION so the old setup-python venv caches are invalidated; the venv symlinks would otherwise point at the absent hostedtoolcache interpreter. --- .github/workflows/ci.yaml | 80 ++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 47 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5af5842cad6c7..b3ed1ff64f6cc 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -37,7 +37,7 @@ on: type: boolean env: - CACHE_VERSION: 3 + CACHE_VERSION: 4 MYPY_CACHE_VERSION: 1 HA_SHORT_VERSION: "2026.6" ADDITIONAL_PYTHON_VERSIONS: "[]" @@ -89,6 +89,7 @@ jobs: mariadb_groups: ${{ steps.info.outputs.mariadb_groups }} postgresql_groups: ${{ steps.info.outputs.postgresql_groups }} python_versions: ${{ steps.info.outputs.python_versions }} + default_python: ${{ steps.info.outputs.default_python }} test_full_suite: ${{ steps.info.outputs.test_full_suite }} test_group_count: ${{ steps.info.outputs.test_group_count }} test_groups: ${{ steps.info.outputs.test_groups }} @@ -235,6 +236,8 @@ jobs: echo "postgresql_groups=${postgresql_groups}" >> $GITHUB_OUTPUT echo "python_versions: ${all_python_versions}" echo "python_versions=${all_python_versions}" >> $GITHUB_OUTPUT + echo "default_python: ${default_python}" + echo "default_python=${default_python}" >> $GITHUB_OUTPUT echo "test_full_suite: ${test_full_suite}" echo "test_full_suite=${test_full_suite}" >> $GITHUB_OUTPUT echo "integrations_glob: ${integrations_glob}" @@ -344,12 +347,16 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - name: Set up Python ${{ matrix.python-version }} + - name: Read uv version from requirements.txt + id: read-uv-version + run: | + echo "version=$(grep '^uv==' requirements.txt | cut -d'=' -f3)" >> "$GITHUB_OUTPUT" + - name: Set up uv and Python ${{ matrix.python-version }} id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ steps.read-uv-version.outputs.version }} python-version: ${{ matrix.python-version }} - check-latest: true - name: Restore base Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -397,21 +404,13 @@ jobs: libudev-dev version: ${{ env.APT_CACHE_VERSION }} execute_install_scripts: true - - name: Read uv version from requirements.txt - if: steps.cache-venv.outputs.cache-hit != 'true' - id: read-uv-version - run: | - echo "version=$(grep '^uv==' requirements.txt | cut -d'=' -f3)" >> "$GITHUB_OUTPUT" - - name: Set up uv - if: steps.cache-venv.outputs.cache-hit != 'true' - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 - with: - version: ${{ steps.read-uv-version.outputs.version }} - name: Create Python virtual environment if: steps.cache-venv.outputs.cache-hit != 'true' id: create-venv + env: + PYTHON_VERSION: ${{ steps.python.outputs.python-version }} run: | - python -m venv venv + uv venv venv --python "${PYTHON_VERSION}" . venv/bin/activate python --version uv pip install -U "pip>=25.2" @@ -420,7 +419,6 @@ jobs: uv pip install -e . --config-settings editable_mode=compat - name: Dump pip freeze run: | - python -m venv venv . venv/bin/activate python --version uv pip freeze >> pip_freeze.txt @@ -481,10 +479,9 @@ jobs: version: ${{ env.APT_CACHE_VERSION }} - name: Set up Python id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: - python-version-file: ".python-version" - check-latest: true + python-version: ${{ needs.info.outputs.default_python }} - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -518,10 +515,9 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: - python-version-file: ".python-version" - check-latest: true + python-version: ${{ needs.info.outputs.default_python }} - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -554,10 +550,9 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: - python-version-file: ".python-version" - check-latest: true + python-version: ${{ needs.info.outputs.default_python }} - name: Run gen_copilot_instructions.py run: | python -m script.gen_copilot_instructions validate @@ -609,10 +604,9 @@ jobs: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: python-version: ${{ matrix.python-version }} - check-latest: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -660,10 +654,9 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: - python-version-file: ".python-version" - check-latest: true + python-version: ${{ needs.info.outputs.default_python }} - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -713,10 +706,9 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: - python-version-file: ".python-version" - check-latest: true + python-version: ${{ needs.info.outputs.default_python }} - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -764,10 +756,9 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: - python-version-file: ".python-version" - check-latest: true + python-version: ${{ needs.info.outputs.default_python }} - name: Generate partial mypy restore key id: generate-mypy-key run: | @@ -841,10 +832,9 @@ jobs: execute_install_scripts: true - name: Set up Python id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: - python-version-file: ".python-version" - check-latest: true + python-version: ${{ needs.info.outputs.default_python }} - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -906,10 +896,9 @@ jobs: execute_install_scripts: true - name: Set up Python ${{ matrix.python-version }} id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: python-version: ${{ matrix.python-version }} - check-latest: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -1048,10 +1037,9 @@ jobs: execute_install_scripts: true - name: Set up Python ${{ matrix.python-version }} id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: python-version: ${{ matrix.python-version }} - check-latest: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -1204,10 +1192,9 @@ jobs: version: ${{ env.APT_CACHE_VERSION }} - name: Set up Python ${{ matrix.python-version }} id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: python-version: ${{ matrix.python-version }} - check-latest: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -1372,10 +1359,9 @@ jobs: execute_install_scripts: true - name: Set up Python ${{ matrix.python-version }} id: python - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: python-version: ${{ matrix.python-version }} - check-latest: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 From 31271876bf818d08bd4b64b21b1ac39cb5ced337 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 21 May 2026 13:08:57 -0500 Subject: [PATCH 2/3] Pin uv version in every setup-uv call to skip manifest fetch Mirrors esphome/esphome#16534. Without an explicit version, setup-uv fetches uv.ndjson from raw.githubusercontent.com on every cache miss, which periodically times out and fails the job. Expose the uv version from requirements.txt via the info job and pass it to every setup-uv call. Also set ignore-nothing-to-cache: true so jobs that do not touch uv (e.g. gen-copilot-instructions) no longer fail on the post-step cache save. --- .github/workflows/ci.yaml | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b3ed1ff64f6cc..b38da6cef6bf2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -90,6 +90,7 @@ jobs: postgresql_groups: ${{ steps.info.outputs.postgresql_groups }} python_versions: ${{ steps.info.outputs.python_versions }} default_python: ${{ steps.info.outputs.default_python }} + uv_version: ${{ steps.info.outputs.uv_version }} test_full_suite: ${{ steps.info.outputs.test_full_suite }} test_group_count: ${{ steps.info.outputs.test_group_count }} test_groups: ${{ steps.info.outputs.test_groups }} @@ -238,6 +239,9 @@ jobs: echo "python_versions=${all_python_versions}" >> $GITHUB_OUTPUT echo "default_python: ${default_python}" echo "default_python=${default_python}" >> $GITHUB_OUTPUT + uv_version=$(grep '^uv==' requirements.txt | cut -d'=' -f3) + echo "uv_version: ${uv_version}" + echo "uv_version=${uv_version}" >> $GITHUB_OUTPUT echo "test_full_suite: ${test_full_suite}" echo "test_full_suite=${test_full_suite}" >> $GITHUB_OUTPUT echo "integrations_glob: ${integrations_glob}" @@ -347,16 +351,15 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - name: Read uv version from requirements.txt - id: read-uv-version - run: | - echo "version=$(grep '^uv==' requirements.txt | cut -d'=' -f3)" >> "$GITHUB_OUTPUT" - name: Set up uv and Python ${{ matrix.python-version }} id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: - version: ${{ steps.read-uv-version.outputs.version }} + # Pin uv version so setup-uv does not fetch the manifest + # from raw.githubusercontent.com on every cache miss. + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} + ignore-nothing-to-cache: true - name: Restore base Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -481,7 +484,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} + ignore-nothing-to-cache: true - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -517,7 +522,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} + ignore-nothing-to-cache: true - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -552,7 +559,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} + ignore-nothing-to-cache: true - name: Run gen_copilot_instructions.py run: | python -m script.gen_copilot_instructions validate @@ -606,7 +615,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} + ignore-nothing-to-cache: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -656,7 +667,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} + ignore-nothing-to-cache: true - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -708,7 +721,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} + ignore-nothing-to-cache: true - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -758,7 +773,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} + ignore-nothing-to-cache: true - name: Generate partial mypy restore key id: generate-mypy-key run: | @@ -834,7 +851,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} + ignore-nothing-to-cache: true - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -898,7 +917,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} + ignore-nothing-to-cache: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -1039,7 +1060,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} + ignore-nothing-to-cache: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -1194,7 +1217,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} + ignore-nothing-to-cache: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -1361,7 +1386,9 @@ jobs: id: python uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 with: + version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} + ignore-nothing-to-cache: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 From dbc0dc1ea6cd5fc42bf4b45b25083055a66c46bd Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 21 May 2026 13:16:39 -0500 Subject: [PATCH 3/3] Install Python eagerly via setup-uv-python composite setup-uv only sets UV_PYTHON, it does not actually fetch the interpreter; uv installs it lazily on the first 'uv venv' or 'uv pip install'. When the venv cache hits, no uv command runs, so the cached venv's bin/python3 symlink points at an interpreter that was never installed in this job and the next step that activates the venv aborts with 'broken symlink'. Extract setup-uv plus an explicit 'uv python install' into the .github/actions/setup-uv-python composite action so every job that restores the venv ends up with a real Python at the expected path. Enable cache-python in the wrapper so subsequent jobs reuse astral's download instead of refetching it. --- .github/actions/setup-uv-python/action.yml | 42 ++++++++++++++ .github/workflows/ci.yaml | 67 +++++++++------------- 2 files changed, 68 insertions(+), 41 deletions(-) create mode 100644 .github/actions/setup-uv-python/action.yml diff --git a/.github/actions/setup-uv-python/action.yml b/.github/actions/setup-uv-python/action.yml new file mode 100644 index 0000000000000..f079e43eed54e --- /dev/null +++ b/.github/actions/setup-uv-python/action.yml @@ -0,0 +1,42 @@ +name: Set up uv and managed Python +description: >- + Pins uv (avoids the raw.githubusercontent.com manifest fetch on cache miss) + and proactively installs the requested Python so cached venvs created with + `uv venv` resolve their interpreter symlinks in jobs that only restore the + venv. setup-uv alone only sets UV_PYTHON, it does not actually fetch the + interpreter until uv first uses it, so jobs that just activate the venv + blow up with broken symlinks on cache hit. + +inputs: + python-version: + description: The Python version uv should install and use. + required: true + uv-version: + description: The uv version setup-uv should install. + required: true + +outputs: + python-version: + description: The Python version uv reports as installed. + value: ${{ steps.uv.outputs.python-version }} + +runs: + using: composite + steps: + - name: Set up uv + id: uv + uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + with: + version: ${{ inputs.uv-version }} + python-version: ${{ inputs.python-version }} + # Persist astral's managed Python across jobs so 'uv venv' below is + # fast on the second job onwards. + cache-python: true + # Lint-only and codegen jobs touch no Python deps, so the post-step + # cache save would otherwise abort the job. + ignore-nothing-to-cache: true + - name: Install Python interpreter + shell: bash + env: + PYTHON_VERSION: ${{ inputs.python-version }} + run: uv python install "${PYTHON_VERSION}" diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b38da6cef6bf2..b21a0a46e3ca4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -353,13 +353,10 @@ jobs: persist-credentials: false - name: Set up uv and Python ${{ matrix.python-version }} id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - # Pin uv version so setup-uv does not fetch the manifest - # from raw.githubusercontent.com on every cache miss. - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} - ignore-nothing-to-cache: true - name: Restore base Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -482,11 +479,10 @@ jobs: version: ${{ env.APT_CACHE_VERSION }} - name: Set up Python id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} - ignore-nothing-to-cache: true - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -520,11 +516,10 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} - ignore-nothing-to-cache: true - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -557,11 +552,10 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} - ignore-nothing-to-cache: true - name: Run gen_copilot_instructions.py run: | python -m script.gen_copilot_instructions validate @@ -613,11 +607,10 @@ jobs: persist-credentials: false - name: Set up Python ${{ matrix.python-version }} id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} - ignore-nothing-to-cache: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -665,11 +658,10 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} - ignore-nothing-to-cache: true - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -719,11 +711,10 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} - ignore-nothing-to-cache: true - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -771,11 +762,10 @@ jobs: persist-credentials: false - name: Set up Python id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} - ignore-nothing-to-cache: true - name: Generate partial mypy restore key id: generate-mypy-key run: | @@ -849,11 +839,10 @@ jobs: execute_install_scripts: true - name: Set up Python id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ needs.info.outputs.default_python }} - ignore-nothing-to-cache: true - name: Restore full Python virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -915,11 +904,10 @@ jobs: execute_install_scripts: true - name: Set up Python ${{ matrix.python-version }} id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} - ignore-nothing-to-cache: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -1058,11 +1046,10 @@ jobs: execute_install_scripts: true - name: Set up Python ${{ matrix.python-version }} id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} - ignore-nothing-to-cache: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -1215,11 +1202,10 @@ jobs: version: ${{ env.APT_CACHE_VERSION }} - name: Set up Python ${{ matrix.python-version }} id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} - ignore-nothing-to-cache: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 @@ -1384,11 +1370,10 @@ jobs: execute_install_scripts: true - name: Set up Python ${{ matrix.python-version }} id: python - uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0 + uses: ./.github/actions/setup-uv-python with: - version: ${{ needs.info.outputs.uv_version }} + uv-version: ${{ needs.info.outputs.uv_version }} python-version: ${{ matrix.python-version }} - ignore-nothing-to-cache: true - name: Restore full Python ${{ matrix.python-version }} virtual environment id: cache-venv uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5