mirror of
https://github.com/astral-sh/setup-uv.git
synced 2026-08-25 19:43:50 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
19b4d1e990 | ||
|
|
7211c71869 | ||
|
|
5ec49509d7 | ||
|
|
92a7c9ffa6 | ||
|
|
51a7fe0131 | ||
|
|
42bafdadf9 | ||
|
|
b555614122 | ||
|
|
a1e5847df3 | ||
|
|
20cfd1bf94 | ||
|
|
d73a0cab66 | ||
|
|
ae3b92d1bd | ||
|
|
ae62891fec | ||
|
|
f9cdb47d48 | ||
|
|
4f6036f71c | ||
|
|
8d6402c9b7 | ||
|
|
46f427bd47 | ||
|
|
8ed89c5114 | ||
|
|
8473c7fea4 | ||
|
|
18d451d679 | ||
|
|
f45168497b | ||
|
|
b68407c192 | ||
|
|
696e4e1bf2 | ||
|
|
7cd5f7fd2e | ||
|
|
d64009a7c5 | ||
|
|
7e7e21ddc3 | ||
|
|
094aa226ed | ||
|
|
d269b9917d | ||
|
|
c6081965dd |
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: dependabot-pr-rollup
|
name: dependabot-pr-rollup
|
||||||
description: Find open Dependabot PRs for the current GitHub repo, compare each PR head to its base branch, replay only the net dependency changes in a fresh worktree and branch, run npm validation, and optionally commit, push, and open a PR. Use when you want to batch or manually replicate active Dependabot updates.
|
description: Find open Dependabot PRs for the current GitHub repo, compare each PR head to its base branch, replay only the net dependency changes in a fresh worktree and branch, run npm validation, then commit, push, and open a pull request labeled dependencies. Use when you want to batch or manually replicate active Dependabot updates.
|
||||||
license: MIT
|
license: MIT
|
||||||
compatibility: Requires git, git worktree, gh CLI auth, npm, and a GitHub repo with an origin remote.
|
compatibility: Requires git, git worktree, gh CLI auth, npm, and a GitHub repo with an origin remote.
|
||||||
---
|
---
|
||||||
@@ -13,7 +13,7 @@ Use this skill when the user wants to:
|
|||||||
- find all open Dependabot PRs in the current repo
|
- find all open Dependabot PRs in the current repo
|
||||||
- reproduce their net effect in one local branch
|
- reproduce their net effect in one local branch
|
||||||
- validate the result with the repo's standard npm checks
|
- validate the result with the repo's standard npm checks
|
||||||
- optionally commit, push, and open a PR
|
- commit and push the validated changes, then open a PR labeled `dependencies`
|
||||||
|
|
||||||
## Workflow
|
## Workflow
|
||||||
|
|
||||||
@@ -28,7 +28,8 @@ Use this skill when the user wants to:
|
|||||||
- Use `npm install ... --ignore-scripts` for direct dependency changes so `package-lock.json` stays in sync.
|
- Use `npm install ... --ignore-scripts` for direct dependency changes so `package-lock.json` stays in sync.
|
||||||
- When updating `@biomejs/biome`, also update the Biome schema URL version in `biome.json` to match the installed Biome version.
|
- When updating `@biomejs/biome`, also update the Biome schema URL version in `biome.json` to match the installed Biome version.
|
||||||
7. Run `npm run all`.
|
7. Run `npm run all`.
|
||||||
8. If requested, commit the changed source, lockfile, and generated artifacts, then push and open a PR.
|
8. Commit the changed source, lockfile, and generated artifacts, then push the branch.
|
||||||
|
9. Always open a pull request for the rollup and add the `dependencies` label to it. Pass `--label dependencies` to `gh pr create`, or add the label immediately afterward with `gh pr edit --add-label dependencies`.
|
||||||
|
|
||||||
## Repo-specific notes
|
## Repo-specific notes
|
||||||
|
|
||||||
@@ -46,4 +47,5 @@ Always report:
|
|||||||
- new worktree path
|
- new worktree path
|
||||||
- files changed
|
- files changed
|
||||||
- `npm run all` result
|
- `npm run all` result
|
||||||
- if applicable, commit SHA and PR URL
|
- commit SHA and PR URL
|
||||||
|
- confirmation that the PR has the `dependencies` label
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
* text=auto eol=lf
|
* text=auto eol=lf
|
||||||
dist/** -diff linguist-generated=true
|
dist/** -diff linguist-generated=true
|
||||||
|
src/download/checksum/known-checksums.json linguist-generated=true
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ self-hosted-runner:
|
|||||||
# Empty array means no configuration variable is allowed.
|
# Empty array means no configuration variable is allowed.
|
||||||
config-variables: null
|
config-variables: null
|
||||||
paths:
|
paths:
|
||||||
|
.github/workflows/**/*.{yml,yaml}:
|
||||||
|
ignore:
|
||||||
|
- 'specifying action "\$/" in invalid format because ref is missing'
|
||||||
|
- 'reusable workflow call "\$/.+" at "uses" is not following the format'
|
||||||
.github/workflows/test.yml:
|
.github/workflows/test.yml:
|
||||||
ignore:
|
ignore:
|
||||||
- 'invalid runner name.+'
|
- 'invalid runner name.+'
|
||||||
|
|||||||
@@ -5,11 +5,11 @@ updates:
|
|||||||
schedule:
|
schedule:
|
||||||
interval: daily
|
interval: daily
|
||||||
cooldown:
|
cooldown:
|
||||||
default-days: 7
|
default-days: 30
|
||||||
|
|
||||||
- package-ecosystem: npm
|
- package-ecosystem: npm
|
||||||
directory: /
|
directory: /
|
||||||
schedule:
|
schedule:
|
||||||
interval: daily
|
interval: daily
|
||||||
cooldown:
|
cooldown:
|
||||||
default-days: 7
|
default-days: 30
|
||||||
|
|||||||
@@ -41,13 +41,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
|
uses: github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
source-root: src
|
source-root: src
|
||||||
@@ -59,7 +59,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
|
uses: github/codeql-action/autobuild@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 https://git.io/JvXDl
|
# 📚 https://git.io/JvXDl
|
||||||
@@ -73,4 +73,4 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@99df26d4f13ea111d4ec1a7dddef6063f76b97e9 # v4.37.0
|
uses: github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ jobs:
|
|||||||
pull-requests: read
|
pull-requests: read
|
||||||
steps:
|
steps:
|
||||||
- name: 🚀 Run Release Drafter
|
- name: 🚀 Run Release Drafter
|
||||||
uses: release-drafter/release-drafter@4d75298e00d9e34c483e5ff8c68d0ea1c1940c1e # v7.5.1
|
uses: release-drafter/release-drafter@34d80673e067bdc0c24568d3af899c216adcfaa9 # v7.7.0
|
||||||
with:
|
with:
|
||||||
commitish: ${{ github.sha }}
|
commitish: ${{ github.sha }}
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ jobs:
|
|||||||
name: Update docs
|
name: Update docs
|
||||||
needs:
|
needs:
|
||||||
- release
|
- release
|
||||||
uses: ./.github/workflows/update-docs.yml
|
uses: $/.github/workflows/update-docs.yml
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|||||||
+111
-123
@@ -21,13 +21,13 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
security-events: write # for zizmor
|
security-events: write # for zizmor
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Actionlint
|
- name: Actionlint
|
||||||
uses: eifinger/actionlint-action@1fc89649be682d16ec5cf65ea16e269eb88d3982 # v1.10.2
|
uses: eifinger/actionlint-action@1fc89649be682d16ec5cf65ea16e269eb88d3982 # v1.10.2
|
||||||
- name: Run zizmor
|
- name: Run zizmor
|
||||||
uses: zizmorcore/zizmor-action@192e21d79ab29983730a13d1382995c2307fbcaa # v0.5.7
|
uses: zizmorcore/zizmor-action@3dc1ecc9bcb9e94e9b2c709687979e1298497054 # v0.6.2
|
||||||
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||||
with:
|
with:
|
||||||
node-version-file: .nvmrc
|
node-version-file: .nvmrc
|
||||||
@@ -51,12 +51,12 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install latest version
|
- name: Install latest version
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
- run: uv sync
|
- run: uv sync
|
||||||
working-directory: __tests__/fixtures/uv-project
|
working-directory: __tests__/fixtures/uv-project
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -76,12 +76,12 @@ jobs:
|
|||||||
test-uv-no-modify-path:
|
test-uv-no-modify-path:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install with UV_NO_MODIFY_PATH set
|
- name: Install with UV_NO_MODIFY_PATH set
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
env:
|
env:
|
||||||
UV_NO_MODIFY_PATH: 1
|
UV_NO_MODIFY_PATH: 1
|
||||||
- run: |
|
- run: |
|
||||||
@@ -125,12 +125,12 @@ jobs:
|
|||||||
expected-version: "0.1.0"
|
expected-version: "0.1.0"
|
||||||
resolution-strategy: "lowest"
|
resolution-strategy: "lowest"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install version ${{ matrix.input.version-input }} with strategy ${{ matrix.input.resolution-strategy || 'highest' }}
|
- name: Install version ${{ matrix.input.version-input }} with strategy ${{ matrix.input.resolution-strategy || 'highest' }}
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
version: ${{ matrix.input.version-input }}
|
version: ${{ matrix.input.version-input }}
|
||||||
resolution-strategy: ${{ matrix.input.resolution-strategy || 'highest' }}
|
resolution-strategy: ${{ matrix.input.resolution-strategy || 'highest' }}
|
||||||
@@ -154,11 +154,8 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
version-input: ["latest", ">=0.8"]
|
version-input: ["latest", ">=0.8"]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Install version ${{ matrix.version-input }}
|
- name: Install version ${{ matrix.version-input }}
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
version: ${{ matrix.version-input }}
|
version: ${{ matrix.version-input }}
|
||||||
- name: Latest version gets installed
|
- name: Latest version gets installed
|
||||||
@@ -194,11 +191,11 @@ jobs:
|
|||||||
- working-directory: "__tests__/fixtures/uv-toml-project"
|
- working-directory: "__tests__/fixtures/uv-toml-project"
|
||||||
expected-version: "0.5.15"
|
expected-version: "0.5.15"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install version from ${{ matrix.input.working-directory }}
|
- name: Install version from ${{ matrix.input.working-directory }}
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
working-directory: ${{ matrix.input.working-directory }}
|
working-directory: ${{ matrix.input.working-directory }}
|
||||||
- name: Correct version gets installed
|
- name: Correct version gets installed
|
||||||
@@ -220,11 +217,11 @@ jobs:
|
|||||||
- version-file: "__tests__/fixtures/.tool-versions"
|
- version-file: "__tests__/fixtures/.tool-versions"
|
||||||
expected-version: "0.5.15"
|
expected-version: "0.5.15"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install version from ${{ matrix.input.version-file }}
|
- name: Install version from ${{ matrix.input.version-file }}
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
version-file: ${{ matrix.input.version-file }}
|
version-file: ${{ matrix.input.version-file }}
|
||||||
- name: Correct version gets installed
|
- name: Correct version gets installed
|
||||||
@@ -234,15 +231,40 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
test-tool-versions-python-version:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
- name: Install versions from .tool-versions
|
||||||
|
id: setup-uv
|
||||||
|
uses: $/
|
||||||
|
with:
|
||||||
|
version-file: "__tests__/fixtures/.tool-versions"
|
||||||
|
- name: Verify Python version from .tool-versions
|
||||||
|
run: |
|
||||||
|
if [ "$UV_PYTHON" != "3.13.1t" ]; then
|
||||||
|
echo "Wrong UV_PYTHON: $UV_PYTHON"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ "$PYTHON_VERSION" != "3.13.1t" ]; then
|
||||||
|
echo "Wrong python-version output: $PYTHON_VERSION"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shell: bash
|
||||||
|
env:
|
||||||
|
PYTHON_VERSION: ${{ steps.setup-uv.outputs.python-version }}
|
||||||
|
|
||||||
test-malformed-pyproject-file-fallback:
|
test-malformed-pyproject-file-fallback:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install using malformed pyproject.toml
|
- name: Install using malformed pyproject.toml
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
working-directory: "__tests__/fixtures/malformed-pyproject-toml-project"
|
working-directory: "__tests__/fixtures/malformed-pyproject-toml-project"
|
||||||
- run: uv --help
|
- run: uv --help
|
||||||
@@ -257,11 +279,11 @@ jobs:
|
|||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
checksum: "a70cbfbf3bb5c08b2f84963b4f12c94e08fbb2468ba418a3bfe1066fbe9e7218"
|
checksum: "a70cbfbf3bb5c08b2f84963b4f12c94e08fbb2468ba418a3bfe1066fbe9e7218"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Checksum matches expected
|
- name: Checksum matches expected
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
version: "0.3.2"
|
version: "0.3.2"
|
||||||
checksum: ${{ matrix.inputs.checksum }}
|
checksum: ${{ matrix.inputs.checksum }}
|
||||||
@@ -271,11 +293,11 @@ jobs:
|
|||||||
test-with-explicit-token:
|
test-with-explicit-token:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install default version
|
- name: Install default version
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- run: uv sync
|
- run: uv sync
|
||||||
@@ -284,12 +306,9 @@ jobs:
|
|||||||
test-uvx:
|
test-uvx:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Install default version
|
- name: Install default version
|
||||||
uses: ./
|
uses: $/
|
||||||
- run: uvx ruff --version
|
- run: uvx ruff@0.14.10 --version
|
||||||
|
|
||||||
test-tool-install:
|
test-tool-install:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
@@ -297,12 +316,9 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Install default version
|
- name: Install default version
|
||||||
uses: ./
|
uses: $/
|
||||||
- run: uv tool install ruff
|
- run: uv tool install ruff==0.14.10
|
||||||
- run: ruff --version
|
- run: ruff --version
|
||||||
|
|
||||||
test-python-version:
|
test-python-version:
|
||||||
@@ -311,12 +327,12 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install latest version
|
- name: Install latest version
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
python-version: 3.13.1t
|
python-version: 3.13.1t
|
||||||
- name: Verify UV_PYTHON is set to correct version
|
- name: Verify UV_PYTHON is set to correct version
|
||||||
@@ -343,12 +359,9 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Install latest version
|
- name: Install latest version
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
python-version: 3.13.1t
|
python-version: 3.13.1t
|
||||||
activate-environment: true
|
activate-environment: true
|
||||||
@@ -382,12 +395,9 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Install latest version
|
- name: Install latest version
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
python-version: 3.13.1t
|
python-version: 3.13.1t
|
||||||
activate-environment: true
|
activate-environment: true
|
||||||
@@ -433,9 +443,6 @@ jobs:
|
|||||||
test-activate-environment-no-project:
|
test-activate-environment-no-project:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Create incompatible pyproject.toml
|
- name: Create incompatible pyproject.toml
|
||||||
run: |
|
run: |
|
||||||
cat > pyproject.toml <<'EOF'
|
cat > pyproject.toml <<'EOF'
|
||||||
@@ -451,7 +458,7 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
- name: Install latest version with no-project
|
- name: Install latest version with no-project
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
python-version: 3.13.1t
|
python-version: 3.13.1t
|
||||||
activate-environment: true
|
activate-environment: true
|
||||||
@@ -477,11 +484,11 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container: debian:unstable
|
container: debian:unstable
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install latest version
|
- name: Install latest version
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
- run: uv sync
|
- run: uv sync
|
||||||
@@ -489,14 +496,14 @@ jobs:
|
|||||||
|
|
||||||
test-musl:
|
test-musl:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container: alpine
|
container: alpine@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b # 3.24.1
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install latest version
|
- name: Install latest version
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
- name: Verify cache key contains alpine
|
- name: Verify cache key contains alpine
|
||||||
@@ -530,12 +537,9 @@ jobs:
|
|||||||
- os: windows-2025
|
- os: windows-2025
|
||||||
expected-os: "windows-2025"
|
expected-os: "windows-2025"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Setup uv
|
- name: Setup uv
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
- name: Verify cache key contains OS version
|
- name: Verify cache key contains OS version
|
||||||
@@ -556,11 +560,11 @@ jobs:
|
|||||||
enable-cache: ["true", "false", "auto"]
|
enable-cache: ["true", "false", "auto"]
|
||||||
os: ["ubuntu-latest", "windows-latest"]
|
os: ["ubuntu-latest", "windows-latest"]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Setup with cache
|
- name: Setup with cache
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: ${{ matrix.enable-cache }}
|
enable-cache: ${{ matrix.enable-cache }}
|
||||||
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-${{ matrix.os }}-${{ matrix.enable-cache }}
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-${{ matrix.os }}-${{ matrix.enable-cache }}
|
||||||
@@ -575,12 +579,12 @@ jobs:
|
|||||||
os: ["ubuntu-latest", "windows-latest"]
|
os: ["ubuntu-latest", "windows-latest"]
|
||||||
needs: test-setup-cache
|
needs: test-setup-cache
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Restore with cache
|
- name: Restore with cache
|
||||||
id: restore
|
id: restore
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: ${{ matrix.enable-cache }}
|
enable-cache: ${{ matrix.enable-cache }}
|
||||||
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-${{ matrix.os }}-${{ matrix.enable-cache }}
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-${{ matrix.os }}-${{ matrix.enable-cache }}
|
||||||
@@ -609,11 +613,11 @@ jobs:
|
|||||||
test-setup-cache-requirements-txt:
|
test-setup-cache-requirements-txt:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Setup with cache
|
- name: Setup with cache
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-requirements-txt
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-requirements-txt
|
||||||
@@ -625,12 +629,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: test-setup-cache-requirements-txt
|
needs: test-setup-cache-requirements-txt
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Restore with cache
|
- name: Restore with cache
|
||||||
id: restore
|
id: restore
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-requirements-txt
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-requirements-txt
|
||||||
@@ -649,11 +653,11 @@ jobs:
|
|||||||
test-setup-cache-dependency-glob:
|
test-setup-cache-dependency-glob:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Setup with cache
|
- name: Setup with cache
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-dependency-glob: |
|
cache-dependency-glob: |
|
||||||
@@ -666,7 +670,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: test-setup-cache-dependency-glob
|
needs: test-setup-cache-dependency-glob
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Change pyproject.toml
|
- name: Change pyproject.toml
|
||||||
@@ -675,7 +679,7 @@ jobs:
|
|||||||
echo 'dev-dependencies = []' >> __tests__/fixtures/uv-project/pyproject.toml
|
echo 'dev-dependencies = []' >> __tests__/fixtures/uv-project/pyproject.toml
|
||||||
- name: Restore with cache
|
- name: Restore with cache
|
||||||
id: restore
|
id: restore
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-dependency-glob: |
|
cache-dependency-glob: |
|
||||||
@@ -694,11 +698,11 @@ jobs:
|
|||||||
test-setup-cache-save-cache-false:
|
test-setup-cache-save-cache-false:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Setup with cache
|
- name: Setup with cache
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
save-cache: false
|
save-cache: false
|
||||||
@@ -710,12 +714,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: test-setup-cache-save-cache-false
|
needs: test-setup-cache-save-cache-false
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Restore with cache
|
- name: Restore with cache
|
||||||
id: restore
|
id: restore
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-save-cache-false
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-save-cache-false
|
||||||
@@ -730,11 +734,11 @@ jobs:
|
|||||||
test-setup-cache-restore-cache-false:
|
test-setup-cache-restore-cache-false:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Setup with cache
|
- name: Setup with cache
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-restore-cache-false
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-restore-cache-false
|
||||||
@@ -745,12 +749,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: test-setup-cache-restore-cache-false
|
needs: test-setup-cache-restore-cache-false
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Restore with cache
|
- name: Restore with cache
|
||||||
id: restore
|
id: restore
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
restore-cache: false
|
restore-cache: false
|
||||||
@@ -773,11 +777,8 @@ jobs:
|
|||||||
expected-cache-dir: "D:\\a\\_temp\\setup-uv-cache"
|
expected-cache-dir: "D:\\a\\_temp\\setup-uv-cache"
|
||||||
runs-on: ${{ matrix.inputs.os }}
|
runs-on: ${{ matrix.inputs.os }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Setup with cache
|
- name: Setup with cache
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-cache-local
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-cache-local
|
||||||
@@ -791,11 +792,8 @@ jobs:
|
|||||||
test-cache-local-cache-disabled:
|
test-cache-local-cache-disabled:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Setup without cache
|
- name: Setup without cache
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: false
|
enable-cache: false
|
||||||
|
|
||||||
@@ -810,11 +808,8 @@ jobs:
|
|||||||
test-cache-local-cache-disabled-but-explicit-path:
|
test-cache-local-cache-disabled-but-explicit-path:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Setup without cache
|
- name: Setup without cache
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: false
|
enable-cache: false
|
||||||
cache-local-path: /tmp/uv-cache-disabled
|
cache-local-path: /tmp/uv-cache-disabled
|
||||||
@@ -830,13 +825,13 @@ jobs:
|
|||||||
test-no-python-version:
|
test-no-python-version:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Fake pyproject.toml at root
|
- name: Fake pyproject.toml at root
|
||||||
run: cp __tests__/fixtures/old-python-constraint-project/pyproject.toml pyproject.toml
|
run: cp __tests__/fixtures/old-python-constraint-project/pyproject.toml pyproject.toml
|
||||||
- name: Setup with cache
|
- name: Setup with cache
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
- run: uv sync
|
- run: uv sync
|
||||||
@@ -845,11 +840,11 @@ jobs:
|
|||||||
test-custom-manifest-file:
|
test-custom-manifest-file:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install from custom manifest file
|
- name: Install from custom manifest file
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
manifest-file: "https://raw.githubusercontent.com/astral-sh/setup-uv/${{ github.ref }}/__tests__/download/custom-manifest.ndjson"
|
manifest-file: "https://raw.githubusercontent.com/astral-sh/setup-uv/${{ github.ref }}/__tests__/download/custom-manifest.ndjson"
|
||||||
- run: uv sync
|
- run: uv sync
|
||||||
@@ -864,12 +859,9 @@ jobs:
|
|||||||
test-download-from-astral-mirror-false:
|
test-download-from-astral-mirror-false:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Install with download-from-astral-mirror disabled
|
- name: Install with download-from-astral-mirror disabled
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
download-from-astral-mirror: false
|
download-from-astral-mirror: false
|
||||||
- name: Verify uv is installed
|
- name: Verify uv is installed
|
||||||
@@ -878,14 +870,11 @@ jobs:
|
|||||||
test-absolute-path:
|
test-absolute-path:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Create requirements.txt
|
- name: Create requirements.txt
|
||||||
run: echo "uv==0.6.17" > /tmp/setup-uv-requirements.txt
|
run: echo "uv==0.6.17" > /tmp/setup-uv-requirements.txt
|
||||||
- name: Install from requirements file
|
- name: Install from requirements file
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
version-file: "/tmp/setup-uv-requirements.txt"
|
version-file: "/tmp/setup-uv-requirements.txt"
|
||||||
- name: Correct version gets installed
|
- name: Correct version gets installed
|
||||||
@@ -898,16 +887,13 @@ jobs:
|
|||||||
test-relative-path:
|
test-relative-path:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: mkdir
|
- name: mkdir
|
||||||
run: mkdir -p /tmp/setup-uv-test-relative-path
|
run: mkdir -p /tmp/setup-uv-test-relative-path
|
||||||
- name: Create requirements.txt
|
- name: Create requirements.txt
|
||||||
run: echo "uv==0.6.17" > /tmp/setup-uv-test-relative-path/setup-uv-requirements.txt
|
run: echo "uv==0.6.17" > /tmp/setup-uv-test-relative-path/setup-uv-requirements.txt
|
||||||
- name: Install from requirements file
|
- name: Install from requirements file
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
version-file: "./setup-uv-requirements.txt"
|
version-file: "./setup-uv-requirements.txt"
|
||||||
working-directory: "/tmp/setup-uv-test-relative-path"
|
working-directory: "/tmp/setup-uv-test-relative-path"
|
||||||
@@ -922,11 +908,11 @@ jobs:
|
|||||||
test-cache-prune-force:
|
test-cache-prune-force:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Setup uv
|
- name: Setup uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-cache-prune-force
|
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-cache-prune-force
|
||||||
- name: Create long running python script
|
- name: Create long running python script
|
||||||
@@ -939,7 +925,7 @@ jobs:
|
|||||||
test-cache-dir-from-file:
|
test-cache-dir-from-file:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Verify uv cache dir is not populated
|
- name: Verify uv cache dir is not populated
|
||||||
@@ -949,7 +935,7 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
- name: Setup uv
|
- name: Setup uv
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
working-directory: __tests__/fixtures/cache-dir-defined-project
|
working-directory: __tests__/fixtures/cache-dir-defined-project
|
||||||
- run: uv sync
|
- run: uv sync
|
||||||
@@ -966,11 +952,11 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
UV_PYTHON_INSTALL_DIR: /tmp/missing-uv-python
|
UV_PYTHON_INSTALL_DIR: /tmp/missing-uv-python
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Setup uv with cache and python cache enabled
|
- name: Setup uv with cache and python cache enabled
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-python: true
|
cache-python: true
|
||||||
@@ -987,7 +973,7 @@ jobs:
|
|||||||
test-cache-python-installs:
|
test-cache-python-installs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Verify Python install dir is not populated
|
- name: Verify Python install dir is not populated
|
||||||
@@ -997,7 +983,7 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
- name: Setup uv with cache
|
- name: Setup uv with cache
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-python: true
|
cache-python: true
|
||||||
@@ -1014,7 +1000,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: test-cache-python-installs
|
needs: test-cache-python-installs
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Verify Python install dir does not exist
|
- name: Verify Python install dir does not exist
|
||||||
@@ -1025,7 +1011,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
- name: Restore with cache
|
- name: Restore with cache
|
||||||
id: restore
|
id: restore
|
||||||
uses: ./
|
uses: $/
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-python: true
|
cache-python: true
|
||||||
@@ -1056,12 +1042,9 @@ jobs:
|
|||||||
expected-python-dir: "D:\\a\\_temp\\uv-python-dir"
|
expected-python-dir: "D:\\a\\_temp\\uv-python-dir"
|
||||||
runs-on: ${{ matrix.inputs.os }}
|
runs-on: ${{ matrix.inputs.os }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
||||||
with:
|
|
||||||
persist-credentials: false
|
|
||||||
- name: Install latest version
|
- name: Install latest version
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: ./
|
uses: $/
|
||||||
- name: Check Python dir is expected dir
|
- name: Check Python dir is expected dir
|
||||||
run: |
|
run: |
|
||||||
if [ "$UV_PYTHON_INSTALL_DIR" != "${{ matrix.inputs.expected-python-dir }}" ]; then
|
if [ "$UV_PYTHON_INSTALL_DIR" != "${{ matrix.inputs.expected-python-dir }}" ]; then
|
||||||
@@ -1072,25 +1055,29 @@ jobs:
|
|||||||
- name: Install python works
|
- name: Install python works
|
||||||
run: uv python install
|
run: uv python install
|
||||||
|
|
||||||
test-act:
|
test-workflow-run:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install act
|
- name: Install act
|
||||||
run: gh extension install https://github.com/nektos/gh-act
|
run: gh extension install https://github.com/nektos/gh-act
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
- name: Run test-uvx with act
|
- name: Verify workflow_run disables automatic caching with act
|
||||||
run: gh act -j test-uvx -P ubuntu-latest=catthehacker/ubuntu:act-latest
|
run: |
|
||||||
|
gh act workflow_run \
|
||||||
|
-W __tests__/workflows/workflow-run.yml \
|
||||||
|
-P ubuntu-latest=catthehacker/ubuntu:act-latest \
|
||||||
|
--env RUNNER_ENVIRONMENT=github-hosted
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
|
|
||||||
validate-typings:
|
validate-typings:
|
||||||
runs-on: "ubuntu-latest"
|
runs-on: "ubuntu-latest"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Validate typings
|
- name: Validate typings
|
||||||
@@ -1107,6 +1094,7 @@ jobs:
|
|||||||
- test-from-working-directory-version
|
- test-from-working-directory-version
|
||||||
- test-malformed-pyproject-file-fallback
|
- test-malformed-pyproject-file-fallback
|
||||||
- test-version-file-version
|
- test-version-file-version
|
||||||
|
- test-tool-versions-python-version
|
||||||
- test-checksum
|
- test-checksum
|
||||||
- test-with-explicit-token
|
- test-with-explicit-token
|
||||||
- test-uvx
|
- test-uvx
|
||||||
@@ -1142,7 +1130,7 @@ jobs:
|
|||||||
- test-cache-python-installs
|
- test-cache-python-installs
|
||||||
- test-restore-python-installs
|
- test-restore-python-installs
|
||||||
- test-python-install-dir
|
- test-python-install-dir
|
||||||
- test-act
|
- test-workflow-run
|
||||||
- validate-typings
|
- validate-typings
|
||||||
if: always()
|
if: always()
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: true
|
persist-credentials: true
|
||||||
@@ -60,20 +60,8 @@ jobs:
|
|||||||
else
|
else
|
||||||
echo "changes-exist=false" >> "$GITHUB_OUTPUT"
|
echo "changes-exist=false" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
fi
|
||||||
- name: Commit and push changes
|
|
||||||
if: ${{ steps.changes-exist.outputs.changes-exist == 'true' }}
|
|
||||||
id: commit-and-push
|
|
||||||
continue-on-error: true
|
|
||||||
run: |
|
|
||||||
git config user.name "$GITHUB_ACTOR"
|
|
||||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
|
||||||
git add .
|
|
||||||
git commit -m "docs: update version references to $NEW_VERSION"
|
|
||||||
git push origin HEAD:refs/heads/main
|
|
||||||
env:
|
|
||||||
NEW_VERSION: ${{ steps.tag-info.outputs.tag }}
|
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
if: ${{ steps.changes-exist.outputs.changes-exist == 'true' && steps.commit-and-push.outcome != 'success' }}
|
if: ${{ steps.changes-exist.outputs.changes-exist == 'true' }}
|
||||||
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
|
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
|
||||||
with:
|
with:
|
||||||
commit-message: "docs: update version references to ${{ steps.tag-info.outputs.tag }}"
|
commit-message: "docs: update version references to ${{ steps.tag-info.outputs.tag }}"
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: true
|
persist-credentials: true
|
||||||
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
id: update-known-checksums
|
id: update-known-checksums
|
||||||
run:
|
run:
|
||||||
node dist/update-known-checksums/index.cjs
|
node dist/update-known-checksums/index.cjs
|
||||||
src/download/checksum/known-checksums.ts
|
src/download/checksum/known-checksums.json
|
||||||
- name: Check for changes
|
- name: Check for changes
|
||||||
id: changes-exist
|
id: changes-exist
|
||||||
run: |
|
run: |
|
||||||
@@ -39,21 +39,8 @@ jobs:
|
|||||||
- name: Compile changes
|
- name: Compile changes
|
||||||
if: ${{ steps.changes-exist.outputs.changes-exist == 'true' }}
|
if: ${{ steps.changes-exist.outputs.changes-exist == 'true' }}
|
||||||
run: npm ci --ignore-scripts && npm run all
|
run: npm ci --ignore-scripts && npm run all
|
||||||
- name: Commit and push changes
|
|
||||||
if: ${{ steps.changes-exist.outputs.changes-exist == 'true' }}
|
|
||||||
id: commit-and-push
|
|
||||||
continue-on-error: true
|
|
||||||
run: |
|
|
||||||
git config user.name "$GITHUB_ACTOR"
|
|
||||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
|
||||||
git add .
|
|
||||||
git commit -m "chore: update known checksums for $LATEST_VERSION"
|
|
||||||
git push origin HEAD:refs/heads/main
|
|
||||||
env:
|
|
||||||
LATEST_VERSION: ${{ steps.update-known-checksums.outputs.latest-version }}
|
|
||||||
|
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
if: ${{ steps.changes-exist.outputs.changes-exist == 'true' && steps.commit-and-push.outcome != 'success' }}
|
if: ${{ steps.changes-exist.outputs.changes-exist == 'true' }}
|
||||||
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
|
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
|
||||||
with:
|
with:
|
||||||
commit-message: "chore: update known checksums"
|
commit-message: "chore: update known checksums"
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Set up your GitHub Actions workflow with a specific version of [uv](https://docs
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install the latest version of uv
|
- name: Install the latest version of uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
```
|
```
|
||||||
|
|
||||||
If you do not specify a version, this action will look for a [required-version](https://docs.astral.sh/uv/reference/settings/#required-version)
|
If you do not specify a version, this action will look for a [required-version](https://docs.astral.sh/uv/reference/settings/#required-version)
|
||||||
@@ -42,18 +42,18 @@ Have a look under [Advanced Configuration](#advanced-configuration) for detailed
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install uv with all available options
|
- name: Install uv with all available options
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
# The version of uv to install (default: searches for version in config files, then latest)
|
# The version of uv to install, e.g., "0.5.0", "latest", or "latest-known" (default: searches for version in config files, then latest)
|
||||||
version: ""
|
version: ""
|
||||||
|
|
||||||
# Path to a file containing the version of uv to install, e.g., uv.toml, pyproject.toml, .tool-versions, requirements.txt or uv.lock (default: searches uv.toml then pyproject.toml)
|
# Path to a file containing the version of uv to install, e.g., uv.toml, pyproject.toml, .tool-versions, requirements.txt or uv.lock. A selected .tool-versions file can also provide the Python version (default: searches uv.toml then pyproject.toml)
|
||||||
version-file: ""
|
version-file: ""
|
||||||
|
|
||||||
# Resolution strategy when resolving version ranges: 'highest' or 'lowest'
|
# Resolution strategy when resolving version ranges: 'highest' or 'lowest'
|
||||||
resolution-strategy: "highest"
|
resolution-strategy: "highest"
|
||||||
|
|
||||||
# The version of Python to set UV_PYTHON to
|
# The version of Python to set UV_PYTHON to (overrides the Python version from .tool-versions)
|
||||||
python-version: ""
|
python-version: ""
|
||||||
|
|
||||||
# Use uv venv to activate a venv ready to be used by later steps
|
# Use uv venv to activate a venv ready to be used by later steps
|
||||||
@@ -74,7 +74,7 @@ Have a look under [Advanced Configuration](#advanced-configuration) for detailed
|
|||||||
# Used when downloading uv from GitHub releases
|
# Used when downloading uv from GitHub releases
|
||||||
github-token: ${{ github.token }}
|
github-token: ${{ github.token }}
|
||||||
|
|
||||||
# Enable uploading of the uv cache: true, false, or auto (enabled on GitHub-hosted runners, disabled on self-hosted runners)
|
# Enable the GitHub Actions cache for uv: true, false, or auto (enabled on GitHub-hosted runners except for release, tag push, pull_request_target, and workflow_run events; disabled on self-hosted runners)
|
||||||
enable-cache: "auto"
|
enable-cache: "auto"
|
||||||
|
|
||||||
# Glob pattern to match files relative to the repository root to control the cache
|
# Glob pattern to match files relative to the repository root to control the cache
|
||||||
@@ -144,11 +144,30 @@ Have a look under [Advanced Configuration](#advanced-configuration) for detailed
|
|||||||
|
|
||||||
You can use the input `python-version` to set the environment variable `UV_PYTHON` for the rest of your workflow
|
You can use the input `python-version` to set the environment variable `UV_PYTHON` for the rest of your workflow
|
||||||
|
|
||||||
This will override any python version specifications in `pyproject.toml` and `.python-version`
|
This will override any python version specifications in `pyproject.toml`, `.python-version`, and
|
||||||
|
an explicitly selected `.tool-versions` file.
|
||||||
|
|
||||||
|
When `version-file` points to `.tool-versions`, its `python` entry is used if neither
|
||||||
|
`python-version` nor `UV_PYTHON` is set:
|
||||||
|
|
||||||
|
```text
|
||||||
|
uv 0.12.3
|
||||||
|
python 3.13
|
||||||
|
```
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
|
with:
|
||||||
|
version-file: ".tool-versions"
|
||||||
|
```
|
||||||
|
|
||||||
|
Only a single Python version is supported. Filesystem paths are not supported for uv or Python.
|
||||||
|
Multiple Python fallback versions and the asdf `ref:`, `path:`, and `system` forms are ignored with
|
||||||
|
a warning.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install the latest version of uv and set the python version to 3.13t
|
- name: Install the latest version of uv and set the python version to 3.13t
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
python-version: 3.13t
|
python-version: 3.13t
|
||||||
- run: uv pip install --python=3.13t pip
|
- run: uv pip install --python=3.13t pip
|
||||||
@@ -166,7 +185,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- name: Install the latest version of uv and set the python version
|
- name: Install the latest version of uv and set the python version
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
- name: Test with python ${{ matrix.python-version }}
|
- name: Test with python ${{ matrix.python-version }}
|
||||||
@@ -183,7 +202,7 @@ It also controls where [the venv gets created](#activate-environment), unless `v
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install uv based on the config files in the working-directory
|
- name: Install uv based on the config files in the working-directory
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
working-directory: my/subproject/dir
|
working-directory: my/subproject/dir
|
||||||
```
|
```
|
||||||
@@ -225,7 +244,7 @@ For example:
|
|||||||
- name: Checkout the repository
|
- name: Checkout the repository
|
||||||
uses: actions/checkout@main
|
uses: actions/checkout@main
|
||||||
- name: Install the latest version of uv
|
- name: Install the latest version of uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
- name: Test
|
- name: Test
|
||||||
@@ -237,7 +256,7 @@ To install a specific version of Python, use
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install the latest version of uv
|
- name: Install the latest version of uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
- name: Install Python 3.12
|
- name: Install Python 3.12
|
||||||
@@ -256,7 +275,7 @@ output:
|
|||||||
uses: actions/checkout@main
|
uses: actions/checkout@main
|
||||||
- name: Install the default version of uv
|
- name: Install the default version of uv
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
- name: Print the installed version
|
- name: Print the installed version
|
||||||
run: echo "Installed uv version is ${{ steps.setup-uv.outputs.uv-version }}"
|
run: echo "Installed uv version is ${{ steps.setup-uv.outputs.uv-version }}"
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -40,9 +40,9 @@ it.each<KnownVersionFixture>([
|
|||||||
known: false,
|
known: false,
|
||||||
version: "0.0.15",
|
version: "0.0.15",
|
||||||
},
|
},
|
||||||
])("isknownVersion should return $known for version $version", ({
|
])(
|
||||||
version,
|
"isknownVersion should return $known for version $version",
|
||||||
known,
|
({ version, known }) => {
|
||||||
}) => {
|
expect(isknownVersion(version)).toBe(known);
|
||||||
expect(isknownVersion(version)).toBe(known);
|
},
|
||||||
});
|
);
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
import { expect, it, jest } from "@jest/globals";
|
||||||
|
|
||||||
|
jest.unstable_mockModule(
|
||||||
|
"../../../src/download/checksum/known-checksums",
|
||||||
|
() => ({
|
||||||
|
KNOWN_CHECKSUMS: {
|
||||||
|
"aarch64-apple-darwin-1.9.0": "checksum",
|
||||||
|
"x86_64-unknown-linux-gnu-1.8.0": "checksum",
|
||||||
|
"x86_64-unknown-linux-gnu-1.10.0": "checksum",
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
const { getLatestKnownVersion } = await import(
|
||||||
|
"../../../src/download/checksum/known-version"
|
||||||
|
);
|
||||||
|
|
||||||
|
it("returns the highest version with a built-in checksum", () => {
|
||||||
|
expect(getLatestKnownVersion()).toBe("1.10.0");
|
||||||
|
});
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import { promises as fs } from "node:fs";
|
||||||
|
import os from "node:os";
|
||||||
|
import path from "node:path";
|
||||||
|
import { expect, test } from "@jest/globals";
|
||||||
|
import { updateChecksums } from "../../../src/download/checksum/update-known-checksums";
|
||||||
|
|
||||||
|
test("serializes checksum entries as JSON data", async () => {
|
||||||
|
const tempDirectory = await fs.mkdtemp(
|
||||||
|
path.join(os.tmpdir(), "setup-uv-checksums-test-"),
|
||||||
|
);
|
||||||
|
const outputPath = path.join(tempDirectory, "known-checksums.json");
|
||||||
|
const key = 'platform-1.0.0"\n};\nglobalThis.compromised = true;';
|
||||||
|
const checksum = 'checksum"\\\nvalue';
|
||||||
|
|
||||||
|
try {
|
||||||
|
await updateChecksums(outputPath, [
|
||||||
|
{ checksum, key },
|
||||||
|
{ checksum: "duplicate", key },
|
||||||
|
]);
|
||||||
|
|
||||||
|
const content = await fs.readFile(outputPath, "utf8");
|
||||||
|
expect(JSON.parse(content)).toEqual({ [key]: checksum });
|
||||||
|
expect(content.endsWith("\n")).toBe(true);
|
||||||
|
} finally {
|
||||||
|
await fs.rm(tempDirectory, { force: true, recursive: true });
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -55,6 +55,12 @@ jest.unstable_mockModule("../../src/download/checksum/checksum", () => ({
|
|||||||
validateChecksum: mockValidateChecksum,
|
validateChecksum: mockValidateChecksum,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
const mockGetLatestKnownVersion = jest.fn(() => "0.9.25");
|
||||||
|
|
||||||
|
jest.unstable_mockModule("../../src/download/checksum/known-version", () => ({
|
||||||
|
getLatestKnownVersion: mockGetLatestKnownVersion,
|
||||||
|
}));
|
||||||
|
|
||||||
const { downloadVersion, resolveVersion, rewriteToMirror } = await import(
|
const { downloadVersion, resolveVersion, rewriteToMirror } = await import(
|
||||||
"../../src/download/download-version"
|
"../../src/download/download-version"
|
||||||
);
|
);
|
||||||
@@ -72,6 +78,7 @@ describe("download-version", () => {
|
|||||||
mockGetFirstMatchingVersion.mockReset();
|
mockGetFirstMatchingVersion.mockReset();
|
||||||
mockGetArtifact.mockReset();
|
mockGetArtifact.mockReset();
|
||||||
mockValidateChecksum.mockReset();
|
mockValidateChecksum.mockReset();
|
||||||
|
mockGetLatestKnownVersion.mockClear();
|
||||||
|
|
||||||
mockDownloadTool.mockResolvedValue("/tmp/downloaded");
|
mockDownloadTool.mockResolvedValue("/tmp/downloaded");
|
||||||
mockExtractTar.mockResolvedValue("/tmp/extracted");
|
mockExtractTar.mockResolvedValue("/tmp/extracted");
|
||||||
@@ -90,6 +97,16 @@ describe("download-version", () => {
|
|||||||
expect(mockGetLatestVersion).toHaveBeenCalledWith(undefined);
|
expect(mockGetLatestVersion).toHaveBeenCalledWith(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("resolves latest-known without reading the manifest", async () => {
|
||||||
|
const version = await resolveVersion("latest-known", undefined);
|
||||||
|
|
||||||
|
expect(version).toBe("0.9.25");
|
||||||
|
expect(mockGetLatestKnownVersion).toHaveBeenCalledTimes(1);
|
||||||
|
expect(mockGetLatestVersion).not.toHaveBeenCalled();
|
||||||
|
expect(mockGetAllVersions).not.toHaveBeenCalled();
|
||||||
|
expect(mockGetFirstMatchingVersion).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
it("stops at the first matching version in the default manifest", async () => {
|
it("stops at the first matching version in the default manifest", async () => {
|
||||||
mockGetFirstMatchingVersion.mockImplementation(
|
mockGetFirstMatchingVersion.mockImplementation(
|
||||||
(predicate: (version: string) => boolean) =>
|
(predicate: (version: string) => boolean) =>
|
||||||
|
|||||||
@@ -1,4 +1,11 @@
|
|||||||
import { beforeEach, describe, expect, it, jest } from "@jest/globals";
|
import {
|
||||||
|
afterEach,
|
||||||
|
beforeEach,
|
||||||
|
describe,
|
||||||
|
expect,
|
||||||
|
it,
|
||||||
|
jest,
|
||||||
|
} from "@jest/globals";
|
||||||
|
|
||||||
// biome-ignore lint/suspicious/noExplicitAny: Mock requires flexible typing in tests.
|
// biome-ignore lint/suspicious/noExplicitAny: Mock requires flexible typing in tests.
|
||||||
const mockFetch = jest.fn<any>();
|
const mockFetch = jest.fn<any>();
|
||||||
@@ -13,6 +20,7 @@ jest.unstable_mockModule("../../src/utils/fetch", () => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
const {
|
const {
|
||||||
|
MANIFEST_FETCH_ATTEMPTS,
|
||||||
clearManifestCache,
|
clearManifestCache,
|
||||||
fetchManifest,
|
fetchManifest,
|
||||||
getAllVersions,
|
getAllVersions,
|
||||||
@@ -73,6 +81,10 @@ describe("manifest", () => {
|
|||||||
mockFetch.mockReset();
|
mockFetch.mockReset();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
jest.useRealTimers();
|
||||||
|
});
|
||||||
|
|
||||||
describe("fetchManifest", () => {
|
describe("fetchManifest", () => {
|
||||||
it("fetches and parses manifest data", async () => {
|
it("fetches and parses manifest data", async () => {
|
||||||
mockFetch.mockResolvedValue(
|
mockFetch.mockResolvedValue(
|
||||||
@@ -86,6 +98,34 @@ describe("manifest", () => {
|
|||||||
expect(versions[1]?.version).toBe("0.9.25");
|
expect(versions[1]?.version).toBe("0.9.25");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("retries network failures", async () => {
|
||||||
|
jest.useFakeTimers();
|
||||||
|
mockFetch
|
||||||
|
.mockRejectedValueOnce(new Error("request timed out"))
|
||||||
|
.mockResolvedValueOnce(
|
||||||
|
createMockResponse(true, 200, "OK", sampleManifestResponse),
|
||||||
|
);
|
||||||
|
|
||||||
|
const result = fetchManifest();
|
||||||
|
await jest.runAllTimersAsync();
|
||||||
|
|
||||||
|
await expect(result).resolves.toHaveLength(2);
|
||||||
|
expect(mockFetch).toHaveBeenCalledTimes(2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("stops after the configured number of network failures", async () => {
|
||||||
|
jest.useFakeTimers();
|
||||||
|
mockFetch.mockRejectedValue(new Error("request timed out"));
|
||||||
|
|
||||||
|
const result = expect(fetchManifest()).rejects.toThrow(
|
||||||
|
"request timed out",
|
||||||
|
);
|
||||||
|
await jest.runAllTimersAsync();
|
||||||
|
|
||||||
|
await result;
|
||||||
|
expect(mockFetch).toHaveBeenCalledTimes(MANIFEST_FETCH_ATTEMPTS);
|
||||||
|
});
|
||||||
|
|
||||||
it("throws on a failed fetch", async () => {
|
it("throws on a failed fetch", async () => {
|
||||||
mockFetch.mockResolvedValue(
|
mockFetch.mockResolvedValue(
|
||||||
createMockResponse(false, 500, "Internal Server Error", ""),
|
createMockResponse(false, 500, "Internal Server Error", ""),
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
uv 0.5.15
|
uv 0.5.15
|
||||||
|
python 3.13.1t
|
||||||
|
|||||||
@@ -12,10 +12,13 @@ import {
|
|||||||
|
|
||||||
let mockInputs: Record<string, string> = {};
|
let mockInputs: Record<string, string> = {};
|
||||||
const tempDirs: string[] = [];
|
const tempDirs: string[] = [];
|
||||||
|
const ORIGINAL_GITHUB_EVENT_NAME = process.env.GITHUB_EVENT_NAME;
|
||||||
|
const ORIGINAL_GITHUB_REF = process.env.GITHUB_REF;
|
||||||
const ORIGINAL_HOME = process.env.HOME;
|
const ORIGINAL_HOME = process.env.HOME;
|
||||||
const ORIGINAL_RUNNER_ENVIRONMENT = process.env.RUNNER_ENVIRONMENT;
|
const ORIGINAL_RUNNER_ENVIRONMENT = process.env.RUNNER_ENVIRONMENT;
|
||||||
const ORIGINAL_RUNNER_TEMP = process.env.RUNNER_TEMP;
|
const ORIGINAL_RUNNER_TEMP = process.env.RUNNER_TEMP;
|
||||||
const ORIGINAL_UV_CACHE_DIR = process.env.UV_CACHE_DIR;
|
const ORIGINAL_UV_CACHE_DIR = process.env.UV_CACHE_DIR;
|
||||||
|
const ORIGINAL_UV_PYTHON = process.env.UV_PYTHON;
|
||||||
const ORIGINAL_UV_PYTHON_INSTALL_DIR = process.env.UV_PYTHON_INSTALL_DIR;
|
const ORIGINAL_UV_PYTHON_INSTALL_DIR = process.env.UV_PYTHON_INSTALL_DIR;
|
||||||
|
|
||||||
const mockDebug = jest.fn();
|
const mockDebug = jest.fn();
|
||||||
@@ -52,10 +55,13 @@ function createTempProject(files: Record<string, string> = {}): string {
|
|||||||
function resetEnvironment(): void {
|
function resetEnvironment(): void {
|
||||||
jest.clearAllMocks();
|
jest.clearAllMocks();
|
||||||
mockInputs = {};
|
mockInputs = {};
|
||||||
|
delete process.env.GITHUB_EVENT_NAME;
|
||||||
|
delete process.env.GITHUB_REF;
|
||||||
process.env.HOME = "/home/testuser";
|
process.env.HOME = "/home/testuser";
|
||||||
delete process.env.RUNNER_ENVIRONMENT;
|
delete process.env.RUNNER_ENVIRONMENT;
|
||||||
delete process.env.RUNNER_TEMP;
|
delete process.env.RUNNER_TEMP;
|
||||||
delete process.env.UV_CACHE_DIR;
|
delete process.env.UV_CACHE_DIR;
|
||||||
|
delete process.env.UV_PYTHON;
|
||||||
delete process.env.UV_PYTHON_INSTALL_DIR;
|
delete process.env.UV_PYTHON_INSTALL_DIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,10 +70,13 @@ function restoreEnvironment(): void {
|
|||||||
fs.rmSync(dir, { force: true, recursive: true });
|
fs.rmSync(dir, { force: true, recursive: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
process.env.GITHUB_EVENT_NAME = ORIGINAL_GITHUB_EVENT_NAME;
|
||||||
|
process.env.GITHUB_REF = ORIGINAL_GITHUB_REF;
|
||||||
process.env.HOME = ORIGINAL_HOME;
|
process.env.HOME = ORIGINAL_HOME;
|
||||||
process.env.RUNNER_ENVIRONMENT = ORIGINAL_RUNNER_ENVIRONMENT;
|
process.env.RUNNER_ENVIRONMENT = ORIGINAL_RUNNER_ENVIRONMENT;
|
||||||
process.env.RUNNER_TEMP = ORIGINAL_RUNNER_TEMP;
|
process.env.RUNNER_TEMP = ORIGINAL_RUNNER_TEMP;
|
||||||
process.env.UV_CACHE_DIR = ORIGINAL_UV_CACHE_DIR;
|
process.env.UV_CACHE_DIR = ORIGINAL_UV_CACHE_DIR;
|
||||||
|
process.env.UV_PYTHON = ORIGINAL_UV_PYTHON;
|
||||||
process.env.UV_PYTHON_INSTALL_DIR = ORIGINAL_UV_PYTHON_INSTALL_DIR;
|
process.env.UV_PYTHON_INSTALL_DIR = ORIGINAL_UV_PYTHON_INSTALL_DIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,6 +103,109 @@ describe("loadInputs", () => {
|
|||||||
expect(inputs.resolutionStrategy).toBe("highest");
|
expect(inputs.resolutionStrategy).toBe("highest");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("uses the Python version from an explicitly selected .tool-versions file", () => {
|
||||||
|
mockInputs["working-directory"] = createTempProject({
|
||||||
|
".tool-versions": "uv 0.12.3\npython 3.13.1t\n",
|
||||||
|
});
|
||||||
|
mockInputs["version-file"] = ".tool-versions";
|
||||||
|
|
||||||
|
const inputs = loadInputs();
|
||||||
|
|
||||||
|
expect(inputs.pythonVersion).toBe("3.13.1t");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("prefers the python-version input over .tool-versions", () => {
|
||||||
|
mockInputs["working-directory"] = createTempProject({
|
||||||
|
".tool-versions": "uv 0.12.3\npython 3.13\n",
|
||||||
|
});
|
||||||
|
mockInputs["version-file"] = ".tool-versions";
|
||||||
|
mockInputs["python-version"] = "3.12";
|
||||||
|
|
||||||
|
const inputs = loadInputs();
|
||||||
|
|
||||||
|
expect(inputs.pythonVersion).toBe("3.12");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("preserves UV_PYTHON instead of overriding it from .tool-versions", () => {
|
||||||
|
mockInputs["working-directory"] = createTempProject({
|
||||||
|
".tool-versions": "uv 0.12.3\npython 3.13\n",
|
||||||
|
});
|
||||||
|
mockInputs["version-file"] = ".tool-versions";
|
||||||
|
process.env.UV_PYTHON = "3.11";
|
||||||
|
|
||||||
|
const inputs = loadInputs();
|
||||||
|
|
||||||
|
expect(inputs.pythonVersion).toBe("");
|
||||||
|
expect(process.env.UV_PYTHON).toBe("3.11");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("does not discover .tool-versions from the working directory", () => {
|
||||||
|
mockInputs["working-directory"] = createTempProject({
|
||||||
|
".tool-versions": "uv 0.12.3\npython 3.13\n",
|
||||||
|
});
|
||||||
|
|
||||||
|
const inputs = loadInputs();
|
||||||
|
|
||||||
|
expect(inputs.pythonVersion).toBe("");
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each(["pull_request_target", "workflow_run", "release"])(
|
||||||
|
"disables automatic caching for the %s event",
|
||||||
|
(eventName) => {
|
||||||
|
mockInputs["working-directory"] = "/workspace";
|
||||||
|
mockInputs["enable-cache"] = "auto";
|
||||||
|
process.env.RUNNER_ENVIRONMENT = "github-hosted";
|
||||||
|
process.env.RUNNER_TEMP = "/runner-temp";
|
||||||
|
process.env.GITHUB_EVENT_NAME = eventName;
|
||||||
|
|
||||||
|
const inputs = loadInputs();
|
||||||
|
|
||||||
|
expect(inputs.enableCache).toBe(false);
|
||||||
|
expect(mockInfo).toHaveBeenCalledWith(
|
||||||
|
`Caching is disabled for the ${eventName} event`,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
it("disables automatic caching for tag pushes", () => {
|
||||||
|
mockInputs["working-directory"] = "/workspace";
|
||||||
|
mockInputs["enable-cache"] = "auto";
|
||||||
|
process.env.RUNNER_ENVIRONMENT = "github-hosted";
|
||||||
|
process.env.RUNNER_TEMP = "/runner-temp";
|
||||||
|
process.env.GITHUB_EVENT_NAME = "push";
|
||||||
|
process.env.GITHUB_REF = "refs/tags/v1.0.0";
|
||||||
|
|
||||||
|
const inputs = loadInputs();
|
||||||
|
|
||||||
|
expect(inputs.enableCache).toBe(false);
|
||||||
|
expect(mockInfo).toHaveBeenCalledWith("Caching is disabled for tag pushes");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("enables automatic caching for branch pushes", () => {
|
||||||
|
mockInputs["working-directory"] = "/workspace";
|
||||||
|
mockInputs["enable-cache"] = "auto";
|
||||||
|
process.env.RUNNER_ENVIRONMENT = "github-hosted";
|
||||||
|
process.env.RUNNER_TEMP = "/runner-temp";
|
||||||
|
process.env.GITHUB_EVENT_NAME = "push";
|
||||||
|
process.env.GITHUB_REF = "refs/heads/main";
|
||||||
|
|
||||||
|
const inputs = loadInputs();
|
||||||
|
|
||||||
|
expect(inputs.enableCache).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("honors explicitly enabled caching for sensitive events", () => {
|
||||||
|
mockInputs["working-directory"] = "/workspace";
|
||||||
|
mockInputs["enable-cache"] = "true";
|
||||||
|
process.env.RUNNER_ENVIRONMENT = "github-hosted";
|
||||||
|
process.env.RUNNER_TEMP = "/runner-temp";
|
||||||
|
process.env.GITHUB_EVENT_NAME = "release";
|
||||||
|
|
||||||
|
const inputs = loadInputs();
|
||||||
|
|
||||||
|
expect(inputs.enableCache).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
it("uses cache-dir from pyproject.toml when present", () => {
|
it("uses cache-dir from pyproject.toml when present", () => {
|
||||||
mockInputs["working-directory"] = createTempProject({
|
mockInputs["working-directory"] = createTempProject({
|
||||||
"pyproject.toml": `[project]
|
"pyproject.toml": `[project]
|
||||||
|
|||||||
@@ -15,15 +15,18 @@ test("ignores dependencies starting with uv", async () => {
|
|||||||
test.each([
|
test.each([
|
||||||
["without space before marker", "uv==0.11.20; sys_platform != 'emscripten'"],
|
["without space before marker", "uv==0.11.20; sys_platform != 'emscripten'"],
|
||||||
["with space before marker", "uv==0.11.20 ; sys_platform != 'emscripten'"],
|
["with space before marker", "uv==0.11.20 ; sys_platform != 'emscripten'"],
|
||||||
])("strips PEP 508 markers from pyproject dependency groups %s", (_, dependency) => {
|
])(
|
||||||
const parsedVersion = getUvVersionFromPyprojectContent(`[dependency-groups]
|
"strips PEP 508 markers from pyproject dependency groups %s",
|
||||||
|
(_, dependency) => {
|
||||||
|
const parsedVersion = getUvVersionFromPyprojectContent(`[dependency-groups]
|
||||||
test = [
|
test = [
|
||||||
"${dependency}",
|
"${dependency}",
|
||||||
]
|
]
|
||||||
`);
|
`);
|
||||||
|
|
||||||
expect(parsedVersion).toBe("==0.11.20");
|
expect(parsedVersion).toBe("==0.11.20");
|
||||||
});
|
},
|
||||||
|
);
|
||||||
|
|
||||||
test("strips PEP 508 markers from requirements dependencies", () => {
|
test("strips PEP 508 markers from requirements dependencies", () => {
|
||||||
const parsedVersion = getUvVersionFromRequirementsText(
|
const parsedVersion = getUvVersionFromRequirementsText(
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ async function getVersionFromToolVersions(filePath: string) {
|
|||||||
return getUvVersionFromToolVersions(filePath);
|
return getUvVersionFromToolVersions(filePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getPythonVersionFromToolVersions(filePath: string) {
|
||||||
|
const module = await import("../../src/version/tool-versions-file");
|
||||||
|
return module.getPythonVersionFromToolVersions(filePath);
|
||||||
|
}
|
||||||
|
|
||||||
describe("getUvVersionFromToolVersions", () => {
|
describe("getUvVersionFromToolVersions", () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
jest.resetModules();
|
jest.resetModules();
|
||||||
@@ -61,8 +66,8 @@ describe("getUvVersionFromToolVersions", () => {
|
|||||||
expect(result).toBe("0.3.0");
|
expect(result).toBe("0.3.0");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should skip commented lines", async () => {
|
it("should skip comments", async () => {
|
||||||
const fileContent = "# uv 0.1.0\npython 3.11.0\nuv 0.2.0";
|
const fileContent = "# uv 0.1.0\npython 3.11.0\nuv 0.2.0 # inline comment";
|
||||||
mockReadFileSync.mockReturnValue(fileContent);
|
mockReadFileSync.mockReturnValue(fileContent);
|
||||||
|
|
||||||
const result = await getVersionFromToolVersions(".tool-versions");
|
const result = await getVersionFromToolVersions(".tool-versions");
|
||||||
@@ -108,6 +113,20 @@ describe("getUvVersionFromToolVersions", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it.each(["/my/python/exploit", "my/exploited/uv", "C:\\exploited\\uv"])(
|
||||||
|
"should warn and return undefined for path %s",
|
||||||
|
async (version) => {
|
||||||
|
mockReadFileSync.mockReturnValue(`uv ${version}`);
|
||||||
|
|
||||||
|
const result = await getVersionFromToolVersions(".tool-versions");
|
||||||
|
|
||||||
|
expect(result).toBeUndefined();
|
||||||
|
expect(mockWarning).toHaveBeenCalledWith(
|
||||||
|
`The uv version ${version} in .tool-versions is not supported. Paths are not allowed.`,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
it("should handle file path with .tool-versions extension", async () => {
|
it("should handle file path with .tool-versions extension", async () => {
|
||||||
const fileContent = "uv 0.1.0";
|
const fileContent = "uv 0.1.0";
|
||||||
mockReadFileSync.mockReturnValue(fileContent);
|
mockReadFileSync.mockReturnValue(fileContent);
|
||||||
@@ -121,3 +140,72 @@ describe("getUvVersionFromToolVersions", () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("getPythonVersionFromToolVersions", () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.resetModules();
|
||||||
|
jest.clearAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return version for a valid Python entry", async () => {
|
||||||
|
mockReadFileSync.mockReturnValue(
|
||||||
|
"nodejs 24.0.0\r\npython v3.13.1t # use free-threaded Python\r\nuv 0.12.3",
|
||||||
|
);
|
||||||
|
|
||||||
|
const result = await getPythonVersionFromToolVersions(".tool-versions");
|
||||||
|
|
||||||
|
expect(result).toBe("3.13.1t");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return the first matching Python version", async () => {
|
||||||
|
mockReadFileSync.mockReturnValue("python 3.12\npython 3.13");
|
||||||
|
|
||||||
|
const result = await getPythonVersionFromToolVersions(".tool-versions");
|
||||||
|
|
||||||
|
expect(result).toBe("3.12");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return undefined when no Python entry is found", async () => {
|
||||||
|
mockReadFileSync.mockReturnValue("uv 0.12.3\nnodejs 24.0.0");
|
||||||
|
|
||||||
|
const result = await getPythonVersionFromToolVersions(".tool-versions");
|
||||||
|
|
||||||
|
expect(result).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should warn and return undefined for multiple Python versions", async () => {
|
||||||
|
mockReadFileSync.mockReturnValue("python 3.13 3.12 system");
|
||||||
|
|
||||||
|
const result = await getPythonVersionFromToolVersions(".tool-versions");
|
||||||
|
|
||||||
|
expect(result).toBeUndefined();
|
||||||
|
expect(mockWarning).toHaveBeenCalledWith(
|
||||||
|
"Multiple Python versions in .tool-versions are not supported. The Python entry will be ignored.",
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
"ref:main",
|
||||||
|
"path:~/src/python",
|
||||||
|
"system",
|
||||||
|
"/my/python/exploit",
|
||||||
|
"my/exploited/python",
|
||||||
|
"C:\\exploited\\python",
|
||||||
|
])("should warn and return undefined for %s", async (version) => {
|
||||||
|
mockReadFileSync.mockReturnValue(`python ${version}`);
|
||||||
|
|
||||||
|
const result = await getPythonVersionFromToolVersions(".tool-versions");
|
||||||
|
|
||||||
|
expect(result).toBeUndefined();
|
||||||
|
expect(mockWarning).toHaveBeenCalledWith(
|
||||||
|
`The Python version ${version} in .tool-versions is not supported. The Python entry will be ignored.`,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should return undefined for non-.tool-versions files", async () => {
|
||||||
|
const result = await getPythonVersionFromToolVersions(".python-version");
|
||||||
|
|
||||||
|
expect(result).toBeUndefined();
|
||||||
|
expect(mockReadFileSync).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
name: "test workflow_run caching"
|
||||||
|
|
||||||
|
on: # zizmor: ignore[dangerous-triggers] this workflow is a test fixture executed by act only
|
||||||
|
workflow_run:
|
||||||
|
workflows:
|
||||||
|
- test
|
||||||
|
types:
|
||||||
|
- completed
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-cache-disabled:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
- name: Setup uv with automatic caching
|
||||||
|
id: setup-uv
|
||||||
|
uses: ./
|
||||||
|
- name: Verify automatic caching is disabled
|
||||||
|
env:
|
||||||
|
CACHE_KEY: ${{ steps.setup-uv.outputs.cache-key }}
|
||||||
|
run: |
|
||||||
|
if [ "$GITHUB_EVENT_NAME" != "workflow_run" ]; then
|
||||||
|
echo "Expected workflow_run event, got: $GITHUB_EVENT_NAME"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ "$RUNNER_ENVIRONMENT" != "github-hosted" ]; then
|
||||||
|
echo "Expected a simulated GitHub-hosted runner, got: $RUNNER_ENVIRONMENT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ -n "$CACHE_KEY" ]; then
|
||||||
|
echo "Cache key should not be set for a workflow_run event: $CACHE_KEY"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ -n "$UV_CACHE_DIR" ]; then
|
||||||
|
echo "UV_CACHE_DIR should not be set for a workflow_run event: $UV_CACHE_DIR"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
+4
-4
@@ -4,13 +4,13 @@ description:
|
|||||||
author: "astral-sh"
|
author: "astral-sh"
|
||||||
inputs:
|
inputs:
|
||||||
version:
|
version:
|
||||||
description: "The version of uv to install e.g., `0.5.0` Defaults to the version in pyproject.toml or 'latest'."
|
description: "The version of uv to install, e.g., `0.5.0`, `latest`, or `latest-known`. Defaults to the version in pyproject.toml or `latest`."
|
||||||
default: ""
|
default: ""
|
||||||
version-file:
|
version-file:
|
||||||
description: "Path to a file containing the version of uv to install, e.g., uv.toml, pyproject.toml, .tool-versions, requirements.txt or uv.lock. Defaults to searching for uv.toml and if not found pyproject.toml."
|
description: "Path to a file containing the version of uv to install, e.g., uv.toml, pyproject.toml, .tool-versions, requirements.txt or uv.lock. A selected .tool-versions file can also provide the Python version. Defaults to searching for uv.toml and if not found pyproject.toml."
|
||||||
default: ""
|
default: ""
|
||||||
python-version:
|
python-version:
|
||||||
description: "The version of Python to set UV_PYTHON to"
|
description: "The version of Python to set UV_PYTHON to. Overrides the Python version from .tool-versions."
|
||||||
required: false
|
required: false
|
||||||
activate-environment:
|
activate-environment:
|
||||||
description: "Use uv venv to activate a venv ready to be used by later steps. "
|
description: "Use uv venv to activate a venv ready to be used by later steps. "
|
||||||
@@ -33,7 +33,7 @@ inputs:
|
|||||||
required: false
|
required: false
|
||||||
default: ${{ github.token }}
|
default: ${{ github.token }}
|
||||||
enable-cache:
|
enable-cache:
|
||||||
description: "Enable uploading of the uv cache"
|
description: "Enable the GitHub Actions cache for uv. 'auto' enables caching on GitHub-hosted runners except for release, tag push, pull_request_target, and workflow_run events."
|
||||||
default: "auto"
|
default: "auto"
|
||||||
cache-dependency-glob:
|
cache-dependency-glob:
|
||||||
description:
|
description:
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://biomejs.dev/schemas/2.5.1/schema.json",
|
"$schema": "https://biomejs.dev/schemas/2.5.7/schema.json",
|
||||||
"assist": {
|
"assist": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"source": {
|
"source": {
|
||||||
|
|||||||
+2439
-467
File diff suppressed because it is too large
Load Diff
+5701
-2019
File diff suppressed because it is too large
Load Diff
+2188
-531
File diff suppressed because it is too large
Load Diff
@@ -6,16 +6,29 @@ This document covers advanced options for configuring which version of uv to ins
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install the latest version of uv
|
- name: Install the latest version of uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
version: "latest"
|
version: "latest"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Install the latest version with a checksum verified by this action
|
||||||
|
|
||||||
|
Use `latest-known` to install the newest uv version whose checksums were bundled with the version of setup-uv used by your workflow. Version resolution is performed locally without fetching the latest release, so updating setup-uv also updates the version selected by `latest-known`.
|
||||||
|
|
||||||
|
When `manifest-file` is set, `latest-known` still selects a version from setup-uv's bundled checksum table, but the artifact and checksum come from the custom manifest.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- name: Install the latest version of uv known to setup-uv
|
||||||
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
|
with:
|
||||||
|
version: "latest-known"
|
||||||
|
```
|
||||||
|
|
||||||
## Install a specific version
|
## Install a specific version
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install a specific version of uv
|
- name: Install a specific version of uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
version: "0.4.4"
|
version: "0.4.4"
|
||||||
```
|
```
|
||||||
@@ -28,21 +41,21 @@ to install the latest version that satisfies the range.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install a semver range of uv
|
- name: Install a semver range of uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
version: ">=0.4.0"
|
version: ">=0.4.0"
|
||||||
```
|
```
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Pinning a minor version of uv
|
- name: Pinning a minor version of uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
version: "0.4.x"
|
version: "0.4.x"
|
||||||
```
|
```
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install a pep440-specifier-satisfying version of uv
|
- name: Install a pep440-specifier-satisfying version of uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
version: ">=0.4.25,<0.5"
|
version: ">=0.4.25,<0.5"
|
||||||
```
|
```
|
||||||
@@ -54,7 +67,7 @@ You can change this behavior using the `resolution-strategy` input:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install the lowest compatible version of uv
|
- name: Install the lowest compatible version of uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
version: ">=0.4.0"
|
version: ">=0.4.0"
|
||||||
resolution-strategy: "lowest"
|
resolution-strategy: "lowest"
|
||||||
@@ -72,11 +85,14 @@ You can use the `version-file` input to specify a file that contains the version
|
|||||||
This can either be a `pyproject.toml` or `uv.toml` file which defines a `required-version` or
|
This can either be a `pyproject.toml` or `uv.toml` file which defines a `required-version` or
|
||||||
uv defined as a dependency in `pyproject.toml` or `requirements.txt`.
|
uv defined as a dependency in `pyproject.toml` or `requirements.txt`.
|
||||||
|
|
||||||
[asdf](https://asdf-vm.com/) `.tool-versions` is also supported, but without the `ref` syntax.
|
[asdf](https://asdf-vm.com/) `.tool-versions` is also supported for selecting uv. If neither
|
||||||
|
`python-version` nor `UV_PYTHON` is set, the `python` entry from the selected file is also exported
|
||||||
|
as `UV_PYTHON`. Only a single Python version is supported; multiple fallback versions and the asdf
|
||||||
|
`ref:`, `path:`, and `system` forms are ignored with a warning.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install uv based on the version defined in pyproject.toml
|
- name: Install uv based on the version defined in pyproject.toml
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
version-file: "pyproject.toml"
|
version-file: "pyproject.toml"
|
||||||
```
|
```
|
||||||
@@ -87,7 +103,7 @@ silently picking up a newer uv until the lockfile is updated.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install uv based on the version locked in uv.lock
|
- name: Install uv based on the version locked in uv.lock
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
version-file: "uv.lock"
|
version-file: "uv.lock"
|
||||||
```
|
```
|
||||||
|
|||||||
+16
-13
@@ -23,7 +23,7 @@ The computed cache key is available as the `cache-key` output:
|
|||||||
```yaml
|
```yaml
|
||||||
- name: Setup uv
|
- name: Setup uv
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
- name: Print cache key
|
- name: Print cache key
|
||||||
@@ -38,7 +38,10 @@ The computed cache key is available as the `cache-key` output:
|
|||||||
|
|
||||||
If you enable caching, the [uv cache](https://docs.astral.sh/uv/concepts/cache/) will be uploaded to
|
If you enable caching, the [uv cache](https://docs.astral.sh/uv/concepts/cache/) will be uploaded to
|
||||||
the GitHub Actions cache. This can speed up runs that reuse the cache by several minutes.
|
the GitHub Actions cache. This can speed up runs that reuse the cache by several minutes.
|
||||||
Caching is enabled by default on GitHub-hosted runners.
|
With the default `enable-cache: auto`, caching is enabled on GitHub-hosted runners except for
|
||||||
|
`release`, tag push, `pull_request_target`, and `workflow_run` events. Caching is disabled for these
|
||||||
|
events to prevent insecure or release-sensitive jobs from restoring potentially poisoned caches.
|
||||||
|
Set `enable-cache: true` to explicitly enable caching for any event.
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
>
|
>
|
||||||
@@ -50,7 +53,7 @@ You can optionally define a custom cache key suffix.
|
|||||||
```yaml
|
```yaml
|
||||||
- name: Enable caching and define a custom cache key suffix
|
- name: Enable caching and define a custom cache key suffix
|
||||||
id: setup-uv
|
id: setup-uv
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-suffix: "optional-suffix"
|
cache-suffix: "optional-suffix"
|
||||||
@@ -89,7 +92,7 @@ changes. If you use relative paths, they are relative to the working directory.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Define a cache dependency glob
|
- name: Define a cache dependency glob
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-dependency-glob: "**/pyproject.toml"
|
cache-dependency-glob: "**/pyproject.toml"
|
||||||
@@ -97,7 +100,7 @@ changes. If you use relative paths, they are relative to the working directory.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Define a list of cache dependency globs
|
- name: Define a list of cache dependency globs
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-dependency-glob: |
|
cache-dependency-glob: |
|
||||||
@@ -107,7 +110,7 @@ changes. If you use relative paths, they are relative to the working directory.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Define an absolute cache dependency glob
|
- name: Define an absolute cache dependency glob
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-dependency-glob: "/tmp/my-folder/requirements*.txt"
|
cache-dependency-glob: "/tmp/my-folder/requirements*.txt"
|
||||||
@@ -115,7 +118,7 @@ changes. If you use relative paths, they are relative to the working directory.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Never invalidate the cache
|
- name: Never invalidate the cache
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-dependency-glob: ""
|
cache-dependency-glob: ""
|
||||||
@@ -128,7 +131,7 @@ By default, the cache will be restored.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Don't restore an existing cache
|
- name: Don't restore an existing cache
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
restore-cache: false
|
restore-cache: false
|
||||||
@@ -142,7 +145,7 @@ By default, the cache will be saved.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Don't save the cache after the run
|
- name: Don't save the cache after the run
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
save-cache: false
|
save-cache: false
|
||||||
@@ -168,7 +171,7 @@ It defaults to `setup-uv-cache` in the `TMP` dir, `D:\a\_temp\setup-uv-cache` on
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Define a custom uv cache path
|
- name: Define a custom uv cache path
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
cache-local-path: "/path/to/cache"
|
cache-local-path: "/path/to/cache"
|
||||||
```
|
```
|
||||||
@@ -185,7 +188,7 @@ If you want to prune the cache before saving it, enable cache pruning with the `
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Prune the cache before saving it
|
- name: Prune the cache before saving it
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
prune-cache: true
|
prune-cache: true
|
||||||
@@ -204,7 +207,7 @@ To force managed Python installs, set `UV_PYTHON_PREFERENCE=only-managed`.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Cache Python installs
|
- name: Cache Python installs
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
cache-python: true
|
cache-python: true
|
||||||
@@ -222,7 +225,7 @@ If you want to ignore this, set the `ignore-nothing-to-cache` input to `true`.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Ignore nothing to cache
|
- name: Ignore nothing to cache
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
ignore-nothing-to-cache: true
|
ignore-nothing-to-cache: true
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ are automatically verified by this action. The sha256 hashes can be found on the
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install a specific version and validate the checksum
|
- name: Install a specific version and validate the checksum
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
version: "0.3.1"
|
version: "0.3.1"
|
||||||
checksum: "e11b01402ab645392c7ad6044db63d37e4fd1e745e015306993b07695ea5f9f8"
|
checksum: "e11b01402ab645392c7ad6044db63d37e4fd1e745e015306993b07695ea5f9f8"
|
||||||
@@ -39,7 +39,7 @@ The `archive_format` field is currently ignored.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Use a custom manifest file
|
- name: Use a custom manifest file
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
manifest-file: "https://example.com/my-custom-manifest.ndjson"
|
manifest-file: "https://example.com/my-custom-manifest.ndjson"
|
||||||
```
|
```
|
||||||
@@ -58,7 +58,7 @@ You can disable this by setting the `add-problem-matchers` input to `false`.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install the latest version of uv without problem matchers
|
- name: Install the latest version of uv without problem matchers
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
add-problem-matchers: false
|
add-problem-matchers: false
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ This allows directly using it in later steps:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install the latest version of uv and activate the environment
|
- name: Install the latest version of uv and activate the environment
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
activate-environment: true
|
activate-environment: true
|
||||||
- run: uv pip install pip
|
- run: uv pip install pip
|
||||||
@@ -20,7 +20,7 @@ By default, the venv is created at `.venv` inside the `working-directory`.
|
|||||||
You can customize the venv location with `venv-path`, for example to place it in the runner temp directory:
|
You can customize the venv location with `venv-path`, for example to place it in the runner temp directory:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
- uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
activate-environment: true
|
activate-environment: true
|
||||||
venv-path: ${{ runner.temp }}/custom-venv
|
venv-path: ${{ runner.temp }}/custom-venv
|
||||||
@@ -51,7 +51,7 @@ are not sufficient, you can provide a custom GitHub token with the necessary per
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install the latest version of uv with a custom GitHub token
|
- name: Install the latest version of uv with a custom GitHub token
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
|
github-token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
|
||||||
```
|
```
|
||||||
@@ -69,7 +69,7 @@ input:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install the latest version of uv with a custom tool dir
|
- name: Install the latest version of uv with a custom tool dir
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
tool-dir: "/path/to/tool/dir"
|
tool-dir: "/path/to/tool/dir"
|
||||||
```
|
```
|
||||||
@@ -88,7 +88,7 @@ If you want to change this behaviour (especially on self-hosted runners) you can
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Install the latest version of uv with a custom tool bin dir
|
- name: Install the latest version of uv with a custom tool bin dir
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
tool-bin-dir: "/path/to/tool-bin/dir"
|
tool-bin-dir: "/path/to/tool-bin/dir"
|
||||||
```
|
```
|
||||||
@@ -105,7 +105,7 @@ This action supports expanding the `~` character to the user's home directory fo
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Expand the tilde character
|
- name: Expand the tilde character
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
cache-local-path: "~/path/to/cache"
|
cache-local-path: "~/path/to/cache"
|
||||||
tool-dir: "~/path/to/tool/dir"
|
tool-dir: "~/path/to/tool/dir"
|
||||||
@@ -122,7 +122,7 @@ If you want to ignore this, set the `ignore-empty-workdir` input to `true`.
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Ignore empty workdir
|
- name: Ignore empty workdir
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
ignore-empty-workdir: true
|
ignore-empty-workdir: true
|
||||||
```
|
```
|
||||||
@@ -131,7 +131,7 @@ If you want to ignore this, set the `ignore-empty-workdir` input to `true`.
|
|||||||
|
|
||||||
This action sets several environment variables that influence uv's behavior and can be used by subsequent steps:
|
This action sets several environment variables that influence uv's behavior and can be used by subsequent steps:
|
||||||
|
|
||||||
- `UV_PYTHON`: Set when `python-version` input is specified. Controls which Python version uv uses.
|
- `UV_PYTHON`: Set when `python-version` is specified or the selected `.tool-versions` file contains a supported `python` entry. Controls which Python version uv uses.
|
||||||
- `UV_CACHE_DIR`: Set when caching is enabled (unless already configured in uv config files). Controls where uv stores its cache.
|
- `UV_CACHE_DIR`: Set when caching is enabled (unless already configured in uv config files). Controls where uv stores its cache.
|
||||||
- `UV_TOOL_DIR`: Set when `tool-dir` input is specified. Controls where uv installs tool environments.
|
- `UV_TOOL_DIR`: Set when `tool-dir` input is specified. Controls where uv installs tool environments.
|
||||||
- `UV_TOOL_BIN_DIR`: Set when `tool-bin-dir` input is specified. Controls where uv installs tool binaries.
|
- `UV_TOOL_BIN_DIR`: Set when `tool-bin-dir` input is specified. Controls where uv installs tool binaries.
|
||||||
@@ -142,10 +142,11 @@ This action sets several environment variables that influence uv's behavior and
|
|||||||
|
|
||||||
- `UV_NO_MODIFY_PATH`: If set, prevents the action from modifying PATH. Cannot be used with `activate-environment`.
|
- `UV_NO_MODIFY_PATH`: If set, prevents the action from modifying PATH. Cannot be used with `activate-environment`.
|
||||||
- `UV_CACHE_DIR`: If already set, the action will respect it instead of setting its own cache directory.
|
- `UV_CACHE_DIR`: If already set, the action will respect it instead of setting its own cache directory.
|
||||||
|
- `UV_PYTHON`: If already set and `python-version` is not specified, the action will respect it instead of using the `python` entry from `.tool-versions`.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Example using environment variables
|
- name: Example using environment variables
|
||||||
uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
|
uses: astral-sh/setup-uv@20cfd1bf945f4377ade1205e4dbc17946fc9a30d # v10.0.1
|
||||||
with:
|
with:
|
||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
tool-dir: "/custom/tool/dir"
|
tool-dir: "/custom/tool/dir"
|
||||||
|
|||||||
Generated
+203
-122
@@ -9,33 +9,36 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/cache": "^6.1.0",
|
"@actions/cache": "^6.2.0",
|
||||||
"@actions/core": "^3.0.0",
|
"@actions/core": "^3.0.0",
|
||||||
"@actions/exec": "^3.0.0",
|
"@actions/exec": "^3.0.0",
|
||||||
"@actions/glob": "^0.6.1",
|
"@actions/glob": "^0.7.0",
|
||||||
"@actions/io": "^3.0.2",
|
"@actions/io": "^3.0.2",
|
||||||
"@actions/tool-cache": "^4.0.0",
|
"@actions/tool-cache": "^4.0.0",
|
||||||
"@renovatebot/pep440": "^5.0.0",
|
"@renovatebot/pep440": "^5.0.0",
|
||||||
"smol-toml": "^1.7.0",
|
"smol-toml": "^1.7.1",
|
||||||
"undici": "^8.3.0"
|
"undici": "^8.10.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "^2.5.1",
|
"@biomejs/biome": "^2.5.7",
|
||||||
"@types/js-yaml": "^4.0.9",
|
"@types/js-yaml": "^4.0.9",
|
||||||
"@types/node": "^26.1.1",
|
"@types/node": "^26.1.2",
|
||||||
"@types/semver": "^7.7.1",
|
"@types/semver": "^7.8.0",
|
||||||
"@vercel/ncc": "^0.44.1",
|
"@vercel/ncc": "^0.44.1",
|
||||||
"esbuild": "^0.28.1",
|
"esbuild": "^0.28.1",
|
||||||
"jest": "^30.4.2",
|
"jest": "^30.4.2",
|
||||||
"js-yaml": "^5.2.1",
|
"js-yaml": "^5.2.3",
|
||||||
"ts-jest": "^29.4.11",
|
"ts-jest": "^29.4.11",
|
||||||
"typescript": "^6.0.3"
|
"typescript": "^6.0.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"npm": ">=11.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@actions/cache": {
|
"node_modules/@actions/cache": {
|
||||||
"version": "6.1.0",
|
"version": "6.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-6.2.0.tgz",
|
||||||
"integrity": "sha512-LVqybSbzhBp2uAETOQ3HnVjXA4AcjavgMH+LCr+cjgO+PZfciv/1QAgoW+esXBaAhvDid+vXeV70GGJpAh4V5Q==",
|
"integrity": "sha512-Nv0xWRmbxfDbAn/70flO/F6tj2Nv4XTYMAsQHiDFSojCDfso/Zni+fRKa14ToI9hnmOW/rQcY1WYb6wsM7Pgwg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^3.0.1",
|
"@actions/core": "^3.0.1",
|
||||||
@@ -49,6 +52,16 @@
|
|||||||
"semver": "^7.7.4"
|
"semver": "^7.7.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@actions/cache/node_modules/@actions/glob": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/core": "^3.0.0",
|
||||||
|
"minimatch": "^3.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@actions/cache/node_modules/semver": {
|
"node_modules/@actions/cache/node_modules/semver": {
|
||||||
"version": "7.7.4",
|
"version": "7.7.4",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
|
||||||
@@ -81,13 +94,49 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@actions/glob": {
|
"node_modules/@actions/glob": {
|
||||||
"version": "0.6.1",
|
"version": "0.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.7.0.tgz",
|
||||||
"integrity": "sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw==",
|
"integrity": "sha512-+7s3wM+cXapDLmLL1NVWHawqcJOZzXZy2df/VhNn8DnZtS/x83iTCKaUn9F0llur4h3CII0AilvKKH4CMPL8Gw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^3.0.0",
|
"@actions/core": "^3.0.0",
|
||||||
"minimatch": "^3.0.4"
|
"minimatch": "^10.2.5"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@actions/glob/node_modules/balanced-match": {
|
||||||
|
"version": "4.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
|
||||||
|
"integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": "18 || 20 || >=22"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@actions/glob/node_modules/brace-expansion": {
|
||||||
|
"version": "5.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
|
||||||
|
"integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"balanced-match": "^4.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "20 || >=22"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@actions/glob/node_modules/minimatch": {
|
||||||
|
"version": "10.2.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
|
||||||
|
"integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
|
||||||
|
"license": "BlueOak-1.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"brace-expansion": "^5.0.8"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": "18 || 20 || >=22"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@actions/http-client": {
|
"node_modules/@actions/http-client": {
|
||||||
@@ -863,9 +912,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/biome": {
|
"node_modules/@biomejs/biome": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.5.7.tgz",
|
||||||
"integrity": "sha512-IXWLCxKmae+rI7LOHS1B3EbVisQ6GRAWbhN9msa6KjNCyFWrvKZWR4oUdinaNssrV852OrSHuSPa95h1GPJc7Q==",
|
"integrity": "sha512-zr8K/DcY5tYsQOQwqMJ0AWElo6QgmgNI7idXgXLhevVszlt8RGVpesEJPqx3ThazLaOwjJ5Y8fz3BtH5fGZNsw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT OR Apache-2.0",
|
"license": "MIT OR Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
@@ -879,20 +928,20 @@
|
|||||||
"url": "https://opencollective.com/biome"
|
"url": "https://opencollective.com/biome"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@biomejs/cli-darwin-arm64": "2.5.1",
|
"@biomejs/cli-darwin-arm64": "2.5.7",
|
||||||
"@biomejs/cli-darwin-x64": "2.5.1",
|
"@biomejs/cli-darwin-x64": "2.5.7",
|
||||||
"@biomejs/cli-linux-arm64": "2.5.1",
|
"@biomejs/cli-linux-arm64": "2.5.7",
|
||||||
"@biomejs/cli-linux-arm64-musl": "2.5.1",
|
"@biomejs/cli-linux-arm64-musl": "2.5.7",
|
||||||
"@biomejs/cli-linux-x64": "2.5.1",
|
"@biomejs/cli-linux-x64": "2.5.7",
|
||||||
"@biomejs/cli-linux-x64-musl": "2.5.1",
|
"@biomejs/cli-linux-x64-musl": "2.5.7",
|
||||||
"@biomejs/cli-win32-arm64": "2.5.1",
|
"@biomejs/cli-win32-arm64": "2.5.7",
|
||||||
"@biomejs/cli-win32-x64": "2.5.1"
|
"@biomejs/cli-win32-x64": "2.5.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-darwin-arm64": {
|
"node_modules/@biomejs/cli-darwin-arm64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.5.7.tgz",
|
||||||
"integrity": "sha512-npqDzvqv7vFaWRiNN1Te71siRgPaqS9MpqgYCdP/CrUbkJ7ApezaeaKjueKHRN/JH/6lRjJQAHi8acQDCAz22w==",
|
"integrity": "sha512-vxo/Ls3/PYdQWyLhYYcgMOCzQypAjcY+iihS8M0wW03l16TCLW4zqZzGo75gm1VdCMj38hTVZ31KBWrZ4G9dJw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -907,9 +956,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-darwin-x64": {
|
"node_modules/@biomejs/cli-darwin-x64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.5.7.tgz",
|
||||||
"integrity": "sha512-RgwTqPAM8g2tn1j+b5oRjF/DbSBX8a4gwojtuG9XuhfK7GgomvZ9+T+tqjXiVbjLEeGJOoL6VEk8mvRTVeSybw==",
|
"integrity": "sha512-Cd3Ga61amT/Yl/0x8elP5hhGYaFy4bw6WuysTgf7oo8TA5tJ5A1k+DkVoJ2BHbTVil51gTX9VPzArnrlLJ3Kyg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -924,9 +973,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-arm64": {
|
"node_modules/@biomejs/cli-linux-arm64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.5.7.tgz",
|
||||||
"integrity": "sha512-yhV35CzZh38VyMvTEXi3JTjxZBs++oCKK9KG8vB6VI5+uvQvZNR3BFWEKKzuOmx9DJJj7sQpZ4LQJcmbGTs3+Q==",
|
"integrity": "sha512-rR2QE0yF2GYSuYuKIa7pKvODGJqnOH+2eDREAM8wV+mWKSkMQKdAp4zXEZfTaxY8PMoNONnpgSWcBCyLDPDOKg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -941,9 +990,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-arm64-musl": {
|
"node_modules/@biomejs/cli-linux-arm64-musl": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.7.tgz",
|
||||||
"integrity": "sha512-WMcvMLgByyTqVxGlq918NBBYliq9FRR9GAQVETHb+VjGVqXCZFfHlZHC1FX4ibuYY/Hg6TJE3rHU0xVrdJXNRw==",
|
"integrity": "sha512-xPI5yB6XlpDbNkS+bm1t42olw5c4l3UrlOmLg7KtLJvjvkNF/1V4tnUgfkylGIeb3u/T+BzMGYqgQhzjAoJzuQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -958,9 +1007,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-x64": {
|
"node_modules/@biomejs/cli-linux-x64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.5.7.tgz",
|
||||||
"integrity": "sha512-J/7uHSX7NfoYDI7HijAkd8lnQIOrRb2W7j3X+tw4R+N5ExvXGsyXFiGdQcfcxfOmNQmZVSQOCDk757fwpzqQcg==",
|
"integrity": "sha512-FQgqJhscrqJUFptGaRSUJWlXAExwWcDwLuK49dvKfkQ1bB5SEEyFssnsxQY83Xm6jR0EbbX3+8+D5bfvYqUG2Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -975,9 +1024,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-linux-x64-musl": {
|
"node_modules/@biomejs/cli-linux-x64-musl": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.7.tgz",
|
||||||
"integrity": "sha512-ANTowtlLmPYm5yeMckWY8Xzb9Ix+JJP3tgHR/n6xRj1VWyIzzWtfRfih9hv9VmClwadpBvZduISZIbBsIlYG3A==",
|
"integrity": "sha512-rE5VZi+qtmPgQH+l7jVxYoZ18b/TiHEhulhMpjmCZH1PltSbjRcxNWywC3HZ9tYottG7ORkeTtoscBilKSBm0g==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -992,9 +1041,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-win32-arm64": {
|
"node_modules/@biomejs/cli-win32-arm64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.5.7.tgz",
|
||||||
"integrity": "sha512-zgXnKNgWPC4iPF7Y1lR3STUeCUuZRpD6IiOrC7TZTlh0Lx6FiVUT05myuMQHQ9D+1cc7uyMldi4forE6lp0ivQ==",
|
"integrity": "sha512-Oq4x0CCwP4jirrcTywXs5kOGZ4v5vuEP+gWrbtjApOA2CL9F3F9GlIdQIci8AKSCa/zURanMRpX/4wQ7Am6hHg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1009,9 +1058,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@biomejs/cli-win32-x64": {
|
"node_modules/@biomejs/cli-win32-x64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.5.7.tgz",
|
||||||
"integrity": "sha512-6uxpR9hvaglANkZemeSiN/FhYgkGasrEGn267eXIWvjrjJ2LhDlk251IhjVJq6MXzkV2/bcXwLwSroLyPtqRZg==",
|
"integrity": "sha512-V+0wu/nrj2S+MhP4EQ0uHNolP0IALEsz45pg0WoKkHfDeh0+ItHwP/p7bX5RPoMOl9NkpHYWdYPhIcy2mACHvQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -2145,9 +2194,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "26.1.1",
|
"version": "26.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz",
|
||||||
"integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==",
|
"integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -2155,9 +2204,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/semver": {
|
"node_modules/@types/semver": {
|
||||||
"version": "7.7.1",
|
"version": "7.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz",
|
||||||
"integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
|
"integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -4365,9 +4414,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/js-yaml": {
|
"node_modules/js-yaml": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.3.tgz",
|
||||||
"integrity": "sha512-zfLtNfQqxVqq3uaTqSkh4x4hZw3KHobGUA0fJUj4wawW8bsQLTVqpHdXSIzidh7o+4lEW36tANuAGdaFx6Zgnw==",
|
"integrity": "sha512-n+mUVyUX5bVv7G/G2zyIHOhdxfuU1dY2NOFzTQUWiMUbFss8b57NFlgCCaggU78wSw5KVS9cllzeLyzyR+n5nw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -4994,9 +5043,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/smol-toml": {
|
"node_modules/smol-toml": {
|
||||||
"version": "1.7.0",
|
"version": "1.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz",
|
||||||
"integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ==",
|
"integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ==",
|
||||||
"license": "BSD-3-Clause",
|
"license": "BSD-3-Clause",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 18"
|
"node": ">= 18"
|
||||||
@@ -5436,9 +5485,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/undici": {
|
"node_modules/undici": {
|
||||||
"version": "8.3.0",
|
"version": "8.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/undici/-/undici-8.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/undici/-/undici-8.10.0.tgz",
|
||||||
"integrity": "sha512-TkUDgb6tl7KOGZ+7e8E3d2FYgUQgF6z5YypqjWmixVQSQERFcVrVg0ySADm2LVLRh5ljAaHTCR5Fmz3Q34rB7Q==",
|
"integrity": "sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=22.19.0"
|
"node": ">=22.19.0"
|
||||||
@@ -5789,9 +5838,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/cache": {
|
"@actions/cache": {
|
||||||
"version": "6.1.0",
|
"version": "6.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-6.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/cache/-/cache-6.2.0.tgz",
|
||||||
"integrity": "sha512-LVqybSbzhBp2uAETOQ3HnVjXA4AcjavgMH+LCr+cjgO+PZfciv/1QAgoW+esXBaAhvDid+vXeV70GGJpAh4V5Q==",
|
"integrity": "sha512-Nv0xWRmbxfDbAn/70flO/F6tj2Nv4XTYMAsQHiDFSojCDfso/Zni+fRKa14ToI9hnmOW/rQcY1WYb6wsM7Pgwg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@actions/core": "^3.0.1",
|
"@actions/core": "^3.0.1",
|
||||||
"@actions/exec": "^3.0.0",
|
"@actions/exec": "^3.0.0",
|
||||||
@@ -5804,6 +5853,15 @@
|
|||||||
"semver": "^7.7.4"
|
"semver": "^7.7.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@actions/glob": {
|
||||||
|
"version": "0.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.6.1.tgz",
|
||||||
|
"integrity": "sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw==",
|
||||||
|
"requires": {
|
||||||
|
"@actions/core": "^3.0.0",
|
||||||
|
"minimatch": "^3.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "7.7.4",
|
"version": "7.7.4",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
|
||||||
@@ -5829,12 +5887,35 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@actions/glob": {
|
"@actions/glob": {
|
||||||
"version": "0.6.1",
|
"version": "0.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/@actions/glob/-/glob-0.7.0.tgz",
|
||||||
"integrity": "sha512-K4+2Ac5ILcf2ySdJCha+Pop9NcKjxqCL4xL4zI50dgB2PbXgC0+AcP011xfH4Of6b4QEJJg8dyZYv7zl4byTsw==",
|
"integrity": "sha512-+7s3wM+cXapDLmLL1NVWHawqcJOZzXZy2df/VhNn8DnZtS/x83iTCKaUn9F0llur4h3CII0AilvKKH4CMPL8Gw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@actions/core": "^3.0.0",
|
"@actions/core": "^3.0.0",
|
||||||
"minimatch": "^3.0.4"
|
"minimatch": "^10.2.5"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"balanced-match": {
|
||||||
|
"version": "4.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
|
||||||
|
"integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="
|
||||||
|
},
|
||||||
|
"brace-expansion": {
|
||||||
|
"version": "5.0.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
|
||||||
|
"integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
|
||||||
|
"requires": {
|
||||||
|
"balanced-match": "^4.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minimatch": {
|
||||||
|
"version": "10.2.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
|
||||||
|
"integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
|
||||||
|
"requires": {
|
||||||
|
"brace-expansion": "^5.0.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@actions/http-client": {
|
"@actions/http-client": {
|
||||||
@@ -6377,74 +6458,74 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@biomejs/biome": {
|
"@biomejs/biome": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.5.7.tgz",
|
||||||
"integrity": "sha512-IXWLCxKmae+rI7LOHS1B3EbVisQ6GRAWbhN9msa6KjNCyFWrvKZWR4oUdinaNssrV852OrSHuSPa95h1GPJc7Q==",
|
"integrity": "sha512-zr8K/DcY5tYsQOQwqMJ0AWElo6QgmgNI7idXgXLhevVszlt8RGVpesEJPqx3ThazLaOwjJ5Y8fz3BtH5fGZNsw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@biomejs/cli-darwin-arm64": "2.5.1",
|
"@biomejs/cli-darwin-arm64": "2.5.7",
|
||||||
"@biomejs/cli-darwin-x64": "2.5.1",
|
"@biomejs/cli-darwin-x64": "2.5.7",
|
||||||
"@biomejs/cli-linux-arm64": "2.5.1",
|
"@biomejs/cli-linux-arm64": "2.5.7",
|
||||||
"@biomejs/cli-linux-arm64-musl": "2.5.1",
|
"@biomejs/cli-linux-arm64-musl": "2.5.7",
|
||||||
"@biomejs/cli-linux-x64": "2.5.1",
|
"@biomejs/cli-linux-x64": "2.5.7",
|
||||||
"@biomejs/cli-linux-x64-musl": "2.5.1",
|
"@biomejs/cli-linux-x64-musl": "2.5.7",
|
||||||
"@biomejs/cli-win32-arm64": "2.5.1",
|
"@biomejs/cli-win32-arm64": "2.5.7",
|
||||||
"@biomejs/cli-win32-x64": "2.5.1"
|
"@biomejs/cli-win32-x64": "2.5.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@biomejs/cli-darwin-arm64": {
|
"@biomejs/cli-darwin-arm64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.5.7.tgz",
|
||||||
"integrity": "sha512-npqDzvqv7vFaWRiNN1Te71siRgPaqS9MpqgYCdP/CrUbkJ7ApezaeaKjueKHRN/JH/6lRjJQAHi8acQDCAz22w==",
|
"integrity": "sha512-vxo/Ls3/PYdQWyLhYYcgMOCzQypAjcY+iihS8M0wW03l16TCLW4zqZzGo75gm1VdCMj38hTVZ31KBWrZ4G9dJw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"@biomejs/cli-darwin-x64": {
|
"@biomejs/cli-darwin-x64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.5.7.tgz",
|
||||||
"integrity": "sha512-RgwTqPAM8g2tn1j+b5oRjF/DbSBX8a4gwojtuG9XuhfK7GgomvZ9+T+tqjXiVbjLEeGJOoL6VEk8mvRTVeSybw==",
|
"integrity": "sha512-Cd3Ga61amT/Yl/0x8elP5hhGYaFy4bw6WuysTgf7oo8TA5tJ5A1k+DkVoJ2BHbTVil51gTX9VPzArnrlLJ3Kyg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"@biomejs/cli-linux-arm64": {
|
"@biomejs/cli-linux-arm64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.5.7.tgz",
|
||||||
"integrity": "sha512-yhV35CzZh38VyMvTEXi3JTjxZBs++oCKK9KG8vB6VI5+uvQvZNR3BFWEKKzuOmx9DJJj7sQpZ4LQJcmbGTs3+Q==",
|
"integrity": "sha512-rR2QE0yF2GYSuYuKIa7pKvODGJqnOH+2eDREAM8wV+mWKSkMQKdAp4zXEZfTaxY8PMoNONnpgSWcBCyLDPDOKg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"@biomejs/cli-linux-arm64-musl": {
|
"@biomejs/cli-linux-arm64-musl": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.5.7.tgz",
|
||||||
"integrity": "sha512-WMcvMLgByyTqVxGlq918NBBYliq9FRR9GAQVETHb+VjGVqXCZFfHlZHC1FX4ibuYY/Hg6TJE3rHU0xVrdJXNRw==",
|
"integrity": "sha512-xPI5yB6XlpDbNkS+bm1t42olw5c4l3UrlOmLg7KtLJvjvkNF/1V4tnUgfkylGIeb3u/T+BzMGYqgQhzjAoJzuQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"@biomejs/cli-linux-x64": {
|
"@biomejs/cli-linux-x64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.5.7.tgz",
|
||||||
"integrity": "sha512-J/7uHSX7NfoYDI7HijAkd8lnQIOrRb2W7j3X+tw4R+N5ExvXGsyXFiGdQcfcxfOmNQmZVSQOCDk757fwpzqQcg==",
|
"integrity": "sha512-FQgqJhscrqJUFptGaRSUJWlXAExwWcDwLuK49dvKfkQ1bB5SEEyFssnsxQY83Xm6jR0EbbX3+8+D5bfvYqUG2Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"@biomejs/cli-linux-x64-musl": {
|
"@biomejs/cli-linux-x64-musl": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.5.7.tgz",
|
||||||
"integrity": "sha512-ANTowtlLmPYm5yeMckWY8Xzb9Ix+JJP3tgHR/n6xRj1VWyIzzWtfRfih9hv9VmClwadpBvZduISZIbBsIlYG3A==",
|
"integrity": "sha512-rE5VZi+qtmPgQH+l7jVxYoZ18b/TiHEhulhMpjmCZH1PltSbjRcxNWywC3HZ9tYottG7ORkeTtoscBilKSBm0g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"@biomejs/cli-win32-arm64": {
|
"@biomejs/cli-win32-arm64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.5.7.tgz",
|
||||||
"integrity": "sha512-zgXnKNgWPC4iPF7Y1lR3STUeCUuZRpD6IiOrC7TZTlh0Lx6FiVUT05myuMQHQ9D+1cc7uyMldi4forE6lp0ivQ==",
|
"integrity": "sha512-Oq4x0CCwP4jirrcTywXs5kOGZ4v5vuEP+gWrbtjApOA2CL9F3F9GlIdQIci8AKSCa/zURanMRpX/4wQ7Am6hHg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"@biomejs/cli-win32-x64": {
|
"@biomejs/cli-win32-x64": {
|
||||||
"version": "2.5.1",
|
"version": "2.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.5.7.tgz",
|
||||||
"integrity": "sha512-6uxpR9hvaglANkZemeSiN/FhYgkGasrEGn267eXIWvjrjJ2LhDlk251IhjVJq6MXzkV2/bcXwLwSroLyPtqRZg==",
|
"integrity": "sha512-V+0wu/nrj2S+MhP4EQ0uHNolP0IALEsz45pg0WoKkHfDeh0+ItHwP/p7bX5RPoMOl9NkpHYWdYPhIcy2mACHvQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
@@ -7153,18 +7234,18 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "26.1.1",
|
"version": "26.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz",
|
||||||
"integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==",
|
"integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"undici-types": "~8.3.0"
|
"undici-types": "~8.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/semver": {
|
"@types/semver": {
|
||||||
"version": "7.7.1",
|
"version": "7.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.8.0.tgz",
|
||||||
"integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==",
|
"integrity": "sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/stack-utils": {
|
"@types/stack-utils": {
|
||||||
@@ -8627,9 +8708,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"js-yaml": {
|
"js-yaml": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-5.2.3.tgz",
|
||||||
"integrity": "sha512-zfLtNfQqxVqq3uaTqSkh4x4hZw3KHobGUA0fJUj4wawW8bsQLTVqpHdXSIzidh7o+4lEW36tANuAGdaFx6Zgnw==",
|
"integrity": "sha512-n+mUVyUX5bVv7G/G2zyIHOhdxfuU1dY2NOFzTQUWiMUbFss8b57NFlgCCaggU78wSw5KVS9cllzeLyzyR+n5nw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"argparse": "^2.0.1"
|
"argparse": "^2.0.1"
|
||||||
@@ -9035,9 +9116,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"smol-toml": {
|
"smol-toml": {
|
||||||
"version": "1.7.0",
|
"version": "1.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.7.1.tgz",
|
||||||
"integrity": "sha512-aqVvWoyO21L23mb+drl4RmMXbf6N7FdHjAhTRA9ZBL7apWBgfWC16KjrASI+1p9GAroljyMHj6fK67i0UiTNvQ=="
|
"integrity": "sha512-PPlsspAZ4jbMBu5DMFhfUGDQLu/vrL4SyBROVS37x8ynnVmFIs1VPBz1Co8Xks3TvpIaZXmU85y4DrQ+UyVFoQ=="
|
||||||
},
|
},
|
||||||
"source-map": {
|
"source-map": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
@@ -9303,9 +9384,9 @@
|
|||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"undici": {
|
"undici": {
|
||||||
"version": "8.3.0",
|
"version": "8.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/undici/-/undici-8.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/undici/-/undici-8.10.0.tgz",
|
||||||
"integrity": "sha512-TkUDgb6tl7KOGZ+7e8E3d2FYgUQgF6z5YypqjWmixVQSQERFcVrVg0ySADm2LVLRh5ljAaHTCR5Fmz3Q34rB7Q=="
|
"integrity": "sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ=="
|
||||||
},
|
},
|
||||||
"undici-types": {
|
"undici-types": {
|
||||||
"version": "8.3.0",
|
"version": "8.3.0",
|
||||||
|
|||||||
+19
-9
@@ -5,6 +5,16 @@
|
|||||||
"type": "module",
|
"type": "module",
|
||||||
"description": "Set up your GitHub Actions workflow with a specific version of uv",
|
"description": "Set up your GitHub Actions workflow with a specific version of uv",
|
||||||
"main": "dist/setup/index.cjs",
|
"main": "dist/setup/index.cjs",
|
||||||
|
"engines": {
|
||||||
|
"npm": ">=11.10.0"
|
||||||
|
},
|
||||||
|
"devEngines": {
|
||||||
|
"packageManager": {
|
||||||
|
"name": "npm",
|
||||||
|
"version": ">=11.10.0",
|
||||||
|
"onFail": "error"
|
||||||
|
}
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc --noEmit",
|
"build": "tsc --noEmit",
|
||||||
"check": "biome check --write",
|
"check": "biome check --write",
|
||||||
@@ -12,7 +22,7 @@
|
|||||||
"test:unit": "node --experimental-vm-modules ./node_modules/jest/bin/jest.js",
|
"test:unit": "node --experimental-vm-modules ./node_modules/jest/bin/jest.js",
|
||||||
"test": "npm run build && npm run test:unit",
|
"test": "npm run build && npm run test:unit",
|
||||||
"act": "act pull_request -W .github/workflows/test.yml --container-architecture linux/amd64 -s GITHUB_TOKEN=\"$(gh auth token)\"",
|
"act": "act pull_request -W .github/workflows/test.yml --container-architecture linux/amd64 -s GITHUB_TOKEN=\"$(gh auth token)\"",
|
||||||
"update-known-checksums": "RUNNER_TEMP=known_versions node dist/update-known-checksums/index.cjs src/download/checksum/known-checksums.ts",
|
"update-known-checksums": "RUNNER_TEMP=known_versions node dist/update-known-checksums/index.cjs src/download/checksum/known-checksums.json",
|
||||||
"all": "npm run build && npm run check && npm run package && npm run test:unit"
|
"all": "npm run build && npm run check && npm run package && npm run test:unit"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -28,25 +38,25 @@
|
|||||||
"author": "@eifinger",
|
"author": "@eifinger",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/cache": "^6.1.0",
|
"@actions/cache": "^6.2.0",
|
||||||
"@actions/core": "^3.0.0",
|
"@actions/core": "^3.0.0",
|
||||||
"@actions/exec": "^3.0.0",
|
"@actions/exec": "^3.0.0",
|
||||||
"@actions/glob": "^0.6.1",
|
"@actions/glob": "^0.7.0",
|
||||||
"@actions/io": "^3.0.2",
|
"@actions/io": "^3.0.2",
|
||||||
"@actions/tool-cache": "^4.0.0",
|
"@actions/tool-cache": "^4.0.0",
|
||||||
"@renovatebot/pep440": "^5.0.0",
|
"@renovatebot/pep440": "^5.0.0",
|
||||||
"smol-toml": "^1.7.0",
|
"smol-toml": "^1.7.1",
|
||||||
"undici": "^8.3.0"
|
"undici": "^8.10.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "^2.5.1",
|
"@biomejs/biome": "^2.5.7",
|
||||||
"@types/js-yaml": "^4.0.9",
|
"@types/js-yaml": "^4.0.9",
|
||||||
"@types/node": "^26.1.1",
|
"@types/node": "^26.1.2",
|
||||||
"@types/semver": "^7.7.1",
|
"@types/semver": "^7.8.0",
|
||||||
"@vercel/ncc": "^0.44.1",
|
"@vercel/ncc": "^0.44.1",
|
||||||
"esbuild": "^0.28.1",
|
"esbuild": "^0.28.1",
|
||||||
"jest": "^30.4.2",
|
"jest": "^30.4.2",
|
||||||
"js-yaml": "^5.2.1",
|
"js-yaml": "^5.2.3",
|
||||||
"ts-jest": "^29.4.11",
|
"ts-jest": "^29.4.11",
|
||||||
"typescript": "^6.0.3"
|
"typescript": "^6.0.3"
|
||||||
}
|
}
|
||||||
|
|||||||
+5164
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,23 @@
|
|||||||
|
import * as semver from "semver";
|
||||||
|
import { KNOWN_CHECKSUMS } from "./known-checksums";
|
||||||
|
|
||||||
|
const VERSION_IN_CHECKSUM_KEY_PATTERN =
|
||||||
|
/-(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/;
|
||||||
|
|
||||||
|
export function getLatestKnownVersion(): string {
|
||||||
|
const versions = new Set<string>();
|
||||||
|
|
||||||
|
for (const key of Object.keys(KNOWN_CHECKSUMS)) {
|
||||||
|
const version = key.match(VERSION_IN_CHECKSUM_KEY_PATTERN)?.[1];
|
||||||
|
if (version !== undefined) {
|
||||||
|
versions.add(version);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const latestVersion = [...versions].sort(semver.rcompare)[0];
|
||||||
|
if (!latestVersion) {
|
||||||
|
throw new Error("Could not determine latest known version from checksums.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return latestVersion;
|
||||||
|
}
|
||||||
@@ -19,16 +19,7 @@ export async function updateChecksums(
|
|||||||
deduplicatedEntries.set(entry.key, entry.checksum);
|
deduplicatedEntries.set(entry.key, entry.checksum);
|
||||||
}
|
}
|
||||||
|
|
||||||
const body = [...deduplicatedEntries.entries()]
|
const content = `${JSON.stringify(Object.fromEntries(deduplicatedEntries), null, 2)}\n`;
|
||||||
.map(([key, checksum]) => ` "${key}":\n "${checksum}"`)
|
|
||||||
.join(",\n");
|
|
||||||
|
|
||||||
const content =
|
|
||||||
"// AUTOGENERATED_DO_NOT_EDIT\n" +
|
|
||||||
"export const KNOWN_CHECKSUMS: { [key: string]: string } = {\n" +
|
|
||||||
body +
|
|
||||||
(body === "" ? "" : ",\n") +
|
|
||||||
"};\n";
|
|
||||||
|
|
||||||
await fs.writeFile(filePath, content);
|
await fs.writeFile(filePath, content);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ interface CachedManifest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const cachedManifestData = new Map<string, CachedManifest>();
|
const cachedManifestData = new Map<string, CachedManifest>();
|
||||||
|
export const MANIFEST_FETCH_ATTEMPTS = 3;
|
||||||
|
|
||||||
export async function fetchManifest(
|
export async function fetchManifest(
|
||||||
manifestUrl: string = VERSIONS_MANIFEST_URL,
|
manifestUrl: string = VERSIONS_MANIFEST_URL,
|
||||||
@@ -166,8 +167,26 @@ export function clearManifestCache(manifestUrl?: string): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function fetchManifestResponse(manifestUrl: string) {
|
async function fetchManifestResponse(manifestUrl: string) {
|
||||||
log.info(`Fetching manifest data from ${manifestUrl} ...`);
|
let response: Awaited<ReturnType<typeof fetch>> | undefined;
|
||||||
const response = await fetch(manifestUrl, {});
|
for (let attempt = 1; attempt <= MANIFEST_FETCH_ATTEMPTS; attempt++) {
|
||||||
|
log.info(`Fetching manifest data from ${manifestUrl} ...`);
|
||||||
|
try {
|
||||||
|
response = await fetch(manifestUrl, {});
|
||||||
|
break;
|
||||||
|
} catch (error) {
|
||||||
|
if (attempt >= MANIFEST_FETCH_ATTEMPTS) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
const delayMs = 1_000 * 2 ** (attempt - 1);
|
||||||
|
log.info(`Manifest fetch failed; retrying in ${delayMs}ms ...`);
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (response === undefined) {
|
||||||
|
throw new Error("Manifest fetch attempts exhausted.");
|
||||||
|
}
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Failed to fetch manifest data: ${response.status} ${response.statusText}`,
|
`Failed to fetch manifest data: ${response.status} ${response.statusText}`,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as core from "@actions/core";
|
import * as core from "@actions/core";
|
||||||
import * as semver from "semver";
|
import * as semver from "semver";
|
||||||
import { KNOWN_CHECKSUMS } from "./download/checksum/known-checksums";
|
import { getLatestKnownVersion } from "./download/checksum/known-version";
|
||||||
import {
|
import {
|
||||||
type ChecksumEntry,
|
type ChecksumEntry,
|
||||||
updateChecksums,
|
updateChecksums,
|
||||||
@@ -12,9 +12,6 @@ import {
|
|||||||
} from "./download/manifest";
|
} from "./download/manifest";
|
||||||
import * as log from "./utils/logging";
|
import * as log from "./utils/logging";
|
||||||
|
|
||||||
const VERSION_IN_CHECKSUM_KEY_PATTERN =
|
|
||||||
/-(\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?)$/;
|
|
||||||
|
|
||||||
async function run(): Promise<void> {
|
async function run(): Promise<void> {
|
||||||
const checksumFilePath = process.argv.slice(2)[0];
|
const checksumFilePath = process.argv.slice(2)[0];
|
||||||
if (!checksumFilePath) {
|
if (!checksumFilePath) {
|
||||||
@@ -24,7 +21,7 @@ async function run(): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const latestVersion = await getLatestVersion();
|
const latestVersion = await getLatestVersion();
|
||||||
const latestKnownVersion = getLatestKnownVersionFromChecksums();
|
const latestKnownVersion = getLatestKnownVersion();
|
||||||
|
|
||||||
if (semver.lte(latestVersion, latestKnownVersion)) {
|
if (semver.lte(latestVersion, latestKnownVersion)) {
|
||||||
log.info(
|
log.info(
|
||||||
@@ -40,28 +37,6 @@ async function run(): Promise<void> {
|
|||||||
core.setOutput("latest-version", latestVersion);
|
core.setOutput("latest-version", latestVersion);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getLatestKnownVersionFromChecksums(): string {
|
|
||||||
const versions = new Set<string>();
|
|
||||||
|
|
||||||
for (const key of Object.keys(KNOWN_CHECKSUMS)) {
|
|
||||||
const version = extractVersionFromChecksumKey(key);
|
|
||||||
if (version !== undefined) {
|
|
||||||
versions.add(version);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const latestVersion = [...versions].sort(semver.rcompare)[0];
|
|
||||||
if (!latestVersion) {
|
|
||||||
throw new Error("Could not determine latest known version from checksums.");
|
|
||||||
}
|
|
||||||
|
|
||||||
return latestVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
function extractVersionFromChecksumKey(key: string): string | undefined {
|
|
||||||
return key.match(VERSION_IN_CHECKSUM_KEY_PATTERN)?.[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
function extractChecksumsFromManifest(
|
function extractChecksumsFromManifest(
|
||||||
versions: ManifestVersion[],
|
versions: ManifestVersion[],
|
||||||
): ChecksumEntry[] {
|
): ChecksumEntry[] {
|
||||||
|
|||||||
+46
-2
@@ -1,5 +1,7 @@
|
|||||||
|
import fs from "node:fs";
|
||||||
import path from "node:path";
|
import path from "node:path";
|
||||||
import * as core from "@actions/core";
|
import * as core from "@actions/core";
|
||||||
|
import { getPythonVersionFromToolVersions } from "../version/tool-versions-file";
|
||||||
import { getConfigValueFromTomlFile } from "./config-file";
|
import { getConfigValueFromTomlFile } from "./config-file";
|
||||||
import * as log from "./logging";
|
import * as log from "./logging";
|
||||||
|
|
||||||
@@ -51,7 +53,7 @@ export function loadInputs(): SetupInputs {
|
|||||||
const workingDirectory = core.getInput("working-directory");
|
const workingDirectory = core.getInput("working-directory");
|
||||||
const version = core.getInput("version");
|
const version = core.getInput("version");
|
||||||
const versionFile = getVersionFile(workingDirectory);
|
const versionFile = getVersionFile(workingDirectory);
|
||||||
const pythonVersion = core.getInput("python-version");
|
const pythonVersion = getPythonVersion(versionFile);
|
||||||
const activateEnvironment = core.getBooleanInput("activate-environment");
|
const activateEnvironment = core.getBooleanInput("activate-environment");
|
||||||
const noProject = core.getBooleanInput("no-project");
|
const noProject = core.getBooleanInput("no-project");
|
||||||
const venvPath = getVenvPath(workingDirectory, activateEnvironment);
|
const venvPath = getVenvPath(workingDirectory, activateEnvironment);
|
||||||
@@ -122,6 +124,28 @@ function getVersionFile(workingDirectory: string): string {
|
|||||||
return versionFileInput;
|
return versionFileInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getPythonVersion(versionFile: string): string {
|
||||||
|
const pythonVersionInput = core.getInput("python-version");
|
||||||
|
if (pythonVersionInput !== "") {
|
||||||
|
return pythonVersionInput;
|
||||||
|
}
|
||||||
|
if (process.env.UV_PYTHON !== undefined && process.env.UV_PYTHON !== "") {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (versionFile === "" || !fs.existsSync(versionFile)) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return getPythonVersionFromToolVersions(versionFile) ?? "";
|
||||||
|
} catch (err) {
|
||||||
|
log.warning(
|
||||||
|
`Error while parsing Python version from ${versionFile}: ${(err as Error).message}`,
|
||||||
|
);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function getVenvPath(
|
function getVenvPath(
|
||||||
workingDirectory: string,
|
workingDirectory: string,
|
||||||
activateEnvironment: boolean,
|
activateEnvironment: boolean,
|
||||||
@@ -140,7 +164,27 @@ function getVenvPath(
|
|||||||
function getEnableCache(): boolean {
|
function getEnableCache(): boolean {
|
||||||
const enableCacheInput = core.getInput("enable-cache");
|
const enableCacheInput = core.getInput("enable-cache");
|
||||||
if (enableCacheInput === "auto") {
|
if (enableCacheInput === "auto") {
|
||||||
return process.env.RUNNER_ENVIRONMENT === "github-hosted";
|
if (process.env.RUNNER_ENVIRONMENT !== "github-hosted") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const eventName = process.env.GITHUB_EVENT_NAME;
|
||||||
|
const isTagPush =
|
||||||
|
eventName === "push" && process.env.GITHUB_REF?.startsWith("refs/tags/");
|
||||||
|
if (isTagPush) {
|
||||||
|
log.info("Caching is disabled for tag pushes");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
eventName === "pull_request_target" ||
|
||||||
|
eventName === "workflow_run" ||
|
||||||
|
eventName === "release"
|
||||||
|
) {
|
||||||
|
log.info(`Caching is disabled for the ${eventName} event`);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return enableCacheInput === "true";
|
return enableCacheInput === "true";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import * as core from "@actions/core";
|
|||||||
import * as tc from "@actions/tool-cache";
|
import * as tc from "@actions/tool-cache";
|
||||||
import * as pep440 from "@renovatebot/pep440";
|
import * as pep440 from "@renovatebot/pep440";
|
||||||
import * as semver from "semver";
|
import * as semver from "semver";
|
||||||
|
import { getLatestKnownVersion } from "../download/checksum/known-version";
|
||||||
import {
|
import {
|
||||||
getAllVersions,
|
getAllVersions,
|
||||||
getFirstMatchingVersion,
|
getFirstMatchingVersion,
|
||||||
@@ -143,6 +144,10 @@ export async function resolveVersion(
|
|||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
core.debug(`Resolving version: ${versionInput}`);
|
core.debug(`Resolving version: ${versionInput}`);
|
||||||
|
|
||||||
|
if (versionInput.trim() === "latest-known") {
|
||||||
|
return getLatestKnownVersion();
|
||||||
|
}
|
||||||
|
|
||||||
const context: ConcreteVersionResolutionContext = {
|
const context: ConcreteVersionResolutionContext = {
|
||||||
manifestUrl,
|
manifestUrl,
|
||||||
parsedSpecifier: parseVersionSpecifier(versionInput),
|
parsedSpecifier: parseVersionSpecifier(versionInput),
|
||||||
|
|||||||
@@ -4,28 +4,83 @@ import * as core from "@actions/core";
|
|||||||
export function getUvVersionFromToolVersions(
|
export function getUvVersionFromToolVersions(
|
||||||
filePath: string,
|
filePath: string,
|
||||||
): string | undefined {
|
): string | undefined {
|
||||||
|
const versions = getToolVersions(filePath, "uv");
|
||||||
|
if (versions === undefined || versions.length !== 1) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const version = stripVersionPrefix(versions[0]);
|
||||||
|
if (isPath(version)) {
|
||||||
|
core.warning(
|
||||||
|
`The uv version ${versions[0]} in .tool-versions is not supported. Paths are not allowed.`,
|
||||||
|
);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
if (version.startsWith("ref")) {
|
||||||
|
core.warning(
|
||||||
|
"The ref syntax of .tool-versions is not supported. Please use a released version instead.",
|
||||||
|
);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPythonVersionFromToolVersions(
|
||||||
|
filePath: string,
|
||||||
|
): string | undefined {
|
||||||
|
const versions = getToolVersions(filePath, "python");
|
||||||
|
if (versions === undefined || versions.length === 0) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
if (versions.length > 1) {
|
||||||
|
core.warning(
|
||||||
|
"Multiple Python versions in .tool-versions are not supported. The Python entry will be ignored.",
|
||||||
|
);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const version = stripVersionPrefix(versions[0]);
|
||||||
|
if (
|
||||||
|
version === "system" ||
|
||||||
|
version.startsWith("ref:") ||
|
||||||
|
version.startsWith("path:") ||
|
||||||
|
isPath(version)
|
||||||
|
) {
|
||||||
|
core.warning(
|
||||||
|
`The Python version ${versions[0]} in .tool-versions is not supported. The Python entry will be ignored.`,
|
||||||
|
);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getToolVersions(
|
||||||
|
filePath: string,
|
||||||
|
toolName: string,
|
||||||
|
): string[] | undefined {
|
||||||
if (!filePath.endsWith(".tool-versions")) {
|
if (!filePath.endsWith(".tool-versions")) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
const fileContents = fs.readFileSync(filePath, "utf8");
|
const fileContents = fs.readFileSync(filePath, "utf8");
|
||||||
const lines = fileContents.split("\n");
|
|
||||||
|
|
||||||
for (const line of lines) {
|
for (const line of fileContents.split("\n")) {
|
||||||
// Skip commented lines
|
const content = line.split("#", 1)[0].trim();
|
||||||
if (line.trim().startsWith("#")) {
|
if (content === "") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const match = line.match(/^\s*uv\s*v?\s*(?<version>[^\s]+)\s*$/);
|
|
||||||
if (match) {
|
const [tool, ...versions] = content.split(/\s+/);
|
||||||
const matchedVersion = match.groups?.version.trim();
|
if (tool === toolName) {
|
||||||
if (matchedVersion?.startsWith("ref")) {
|
return versions;
|
||||||
core.warning(
|
|
||||||
"The ref syntax of .tool-versions is not supported. Please use a released version instead.",
|
|
||||||
);
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
return matchedVersion;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function stripVersionPrefix(version: string): string {
|
||||||
|
return version.startsWith("v") ? version.slice(1) : version;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isPath(version: string): boolean {
|
||||||
|
return version.includes("/") || version.includes("\\");
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
"module": "esnext",
|
"module": "esnext",
|
||||||
"moduleResolution": "bundler",
|
"moduleResolution": "bundler",
|
||||||
"noImplicitAny": true,
|
"noImplicitAny": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"target": "ES2022"
|
"target": "ES2022"
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user