Compare commits

..

2 Commits

Author SHA1 Message Date
Kevin Stillhammer
cd4ccfa557 Add FAQ on changed cache and cache upload behavior 2025-07-05 11:51:29 +02:00
Kevin Stillhammer
8021b967f0 Do not warn when version not in manifest-file
This will spam the GitHub summary with warnings as soon as a new version is released and no new setup-uv version containing this version in the distributed manifest-file is released
2025-06-25 09:21:00 +02:00
47 changed files with 17640 additions and 32976 deletions

8
.github/python.json vendored
View File

@@ -4,13 +4,13 @@
"owner": "python", "owner": "python",
"pattern": [ "pattern": [
{ {
"regexp": "^\\s*File\\s\\\"(.*)\\\",\\sline\\s(\\d+),\\sin\\s(.*)$",
"file": 1, "file": 1,
"line": 2, "line": 2
"regexp": "^\\s*File\\s\\\"(.*)\\\",\\sline\\s(\\d+),\\sin\\s(.*)$"
}, },
{ {
"message": 2, "regexp": "^\\s*raise\\s(.*)\\(\\'(.*)\\'\\)$",
"regexp": "^\\s*raise\\s(.*)\\(\\'(.*)\\'\\)$" "message": 2
} }
] ]
} }

View File

@@ -21,8 +21,6 @@ on:
branches: branches:
- main - main
permissions: {}
jobs: jobs:
analyze: analyze:
name: Analyze name: Analyze
@@ -41,13 +39,11 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 uses: actions/checkout@v4
with:
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@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 uses: github/codeql-action/init@v3
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
source-root: src source-root: src
@@ -59,7 +55,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@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 uses: github/codeql-action/autobuild@v3
# 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 +69,4 @@ jobs:
# make release # make release
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@192325c86100d080feab897ff886c34abd4c83a3 # v3.30.3 uses: github/codeql-action/analyze@v3

View File

@@ -8,8 +8,6 @@ on:
branches: branches:
- main - main
permissions: {}
jobs: jobs:
update_release_draft: update_release_draft:
name: ✏️ Draft release name: ✏️ Draft release
@@ -19,6 +17,6 @@ jobs:
pull-requests: read pull-requests: read
steps: steps:
- name: 🚀 Run Release Drafter - name: 🚀 Run Release Drafter
uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0 uses: release-drafter/release-drafter@v6.1.0
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -18,17 +18,11 @@ permissions:
jobs: jobs:
lint: lint:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
security-events: write # for zizmor
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Actionlint - name: Actionlint
uses: eifinger/actionlint-action@23c85443d840cd73bbecb9cddfc933cc21649a38 # v1.9.1 uses: eifinger/actionlint-action@23c85443d840cd73bbecb9cddfc933cc21649a38 # v1.9.1
- name: Run zizmor - uses: actions/setup-node@v4
uses: zizmorcore/zizmor-action@5ca5fc7a4779c5263a3ffa0e1f693009994446d1 # v0.1.2
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version: "20" node-version: "20"
- run: | - run: |
@@ -50,9 +44,7 @@ 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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install latest version - name: Install latest version
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -60,17 +52,9 @@ jobs:
working-directory: __tests__/fixtures/uv-project working-directory: __tests__/fixtures/uv-project
shell: bash shell: bash
- name: Check uv-path is set - name: Check uv-path is set
run: | run: ${{ steps.setup-uv.outputs.uv-path }} --version
"${UV_PATH}" --version
shell: bash
env:
UV_PATH: ${{ steps.setup-uv.outputs.uv-path }}
- name: Check uvx-path is set - name: Check uvx-path is set
run: | run: ${{ steps.setup-uv.outputs.uvx-path }} --version
"${UVX_PATH}" --version
shell: bash
env:
UVX_PATH: ${{ steps.setup-uv.outputs.uvx-path }}
test-specific-version: test-specific-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -78,9 +62,7 @@ jobs:
matrix: matrix:
uv-version: ["0.3.0", "0.3.2", "0.3", "0.3.x", ">=0.3.0"] uv-version: ["0.3.0", "0.3.2", "0.3", "0.3.x", ">=0.3.0"]
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install version ${{ matrix.uv-version }} - name: Install version ${{ matrix.uv-version }}
uses: ./ uses: ./
with: with:
@@ -94,9 +76,7 @@ jobs:
os: [ ubuntu-latest, selfhosted-ubuntu-arm64 ] os: [ ubuntu-latest, selfhosted-ubuntu-arm64 ]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install version 0.3 - name: Install version 0.3
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -119,9 +99,7 @@ jobs:
test-pep440-version: test-pep440-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install version 0.4.30 - name: Install version 0.4.30
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -137,9 +115,7 @@ jobs:
test-pyproject-file-version: test-pyproject-file-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install version 0.5.14 - name: Install version 0.5.14
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -155,9 +131,7 @@ jobs:
test-malformed-pyproject-file-fallback: test-malformed-pyproject-file-fallback:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install using malformed pyproject.toml - name: Install using malformed pyproject.toml
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -168,9 +142,7 @@ jobs:
test-uv-file-version: test-uv-file-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install version 0.5.15 - name: Install version 0.5.15
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -183,60 +155,6 @@ jobs:
exit 1 exit 1
fi fi
test-version-file-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Install from requirements file
id: setup-uv
uses: ./
with:
version-file: "__tests__/fixtures/uv-in-requirements-txt-project/requirements.txt"
- name: Correct version gets installed
run: |
if [ "$(uv --version)" != "uv 0.6.17" ]; then
echo "Wrong uv version: $(uv --version)"
exit 1
fi
test-version-file-hash-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Install from requirements file
id: setup-uv
uses: ./
with:
version-file: "__tests__/fixtures/uv-in-requirements-hash-txt-project/requirements.txt"
- name: Correct version gets installed
run: |
if [ "$(uv --version)" != "uv 0.8.3" ]; then
echo "Wrong uv version: $(uv --version)"
exit 1
fi
test-tool-versions-file-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Install from .tools-versions file
id: setup-uv
uses: ./
with:
version-file: "__tests__/fixtures/.tool-versions"
- name: Correct version gets installed
run: |
if [ "$(uv --version)" != "uv 0.5.15" ]; then
echo "Wrong uv version: $(uv --version)"
exit 1
fi
test-checksum: test-checksum:
runs-on: ${{ matrix.inputs.os }} runs-on: ${{ matrix.inputs.os }}
strategy: strategy:
@@ -247,9 +165,7 @@ jobs:
- os: macos-latest - os: macos-latest
checksum: "a70cbfbf3bb5c08b2f84963b4f12c94e08fbb2468ba418a3bfe1066fbe9e7218" checksum: "a70cbfbf3bb5c08b2f84963b4f12c94e08fbb2468ba418a3bfe1066fbe9e7218"
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Checksum matches expected - name: Checksum matches expected
uses: ./ uses: ./
with: with:
@@ -261,9 +177,7 @@ jobs:
test-with-explicit-token: test-with-explicit-token:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install default version - name: Install default version
uses: ./ uses: ./
with: with:
@@ -274,9 +188,7 @@ jobs:
test-uvx: test-uvx:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install default version - name: Install default version
uses: ./ uses: ./
- run: uvx ruff --version - run: uvx ruff --version
@@ -293,9 +205,7 @@ jobs:
windows-latest, windows-latest,
] ]
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install default version - name: Install default version
uses: ./ uses: ./
- run: uv tool install ruff - run: uv tool install ruff
@@ -304,9 +214,7 @@ jobs:
test-tilde-expansion-tool-dirs: test-tilde-expansion-tool-dirs:
runs-on: selfhosted-ubuntu-arm64 runs-on: selfhosted-ubuntu-arm64
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -329,9 +237,7 @@ jobs:
matrix: matrix:
os: [ubuntu-latest, macos-latest, windows-latest] os: [ubuntu-latest, macos-latest, windows-latest]
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install latest version - name: Install latest version
uses: ./ uses: ./
with: with:
@@ -352,9 +258,7 @@ jobs:
matrix: matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ] os: [ ubuntu-latest, macos-latest, windows-latest ]
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install latest version - name: Install latest version
uses: ./ uses: ./
with: with:
@@ -375,9 +279,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: alpine container: alpine
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install latest version - name: Install latest version
uses: ./ uses: ./
- run: uv sync - run: uv sync
@@ -390,9 +292,7 @@ jobs:
enable-cache: [ "true", "false", "auto" ] enable-cache: [ "true", "false", "auto" ]
os: [ "ubuntu-latest", "selfhosted-ubuntu-arm64", "windows-latest" ] os: [ "ubuntu-latest", "selfhosted-ubuntu-arm64", "windows-latest" ]
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -409,9 +309,7 @@ jobs:
os: [ "ubuntu-latest", "selfhosted-ubuntu-arm64", "windows-latest" ] os: [ "ubuntu-latest", "selfhosted-ubuntu-arm64", "windows-latest" ]
needs: test-setup-cache needs: test-setup-cache
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Restore with cache - name: Restore with cache
id: restore id: restore
uses: ./ uses: ./
@@ -443,9 +341,7 @@ jobs:
test-setup-cache-requirements-txt: test-setup-cache-requirements-txt:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -457,11 +353,9 @@ jobs:
working-directory: __tests__/fixtures/requirements-txt-project working-directory: __tests__/fixtures/requirements-txt-project
test-restore-cache-requirements-txt: test-restore-cache-requirements-txt:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: test-setup-cache-requirements-txt needs: test-setup-cache
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Restore with cache - name: Restore with cache
id: restore id: restore
uses: ./ uses: ./
@@ -483,9 +377,7 @@ jobs:
test-setup-cache-dependency-glob: test-setup-cache-dependency-glob:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -500,9 +392,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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Change pyproject.toml - name: Change pyproject.toml
run: | run: |
echo '[tool.uv]' >> __tests__/fixtures/uv-project/pyproject.toml echo '[tool.uv]' >> __tests__/fixtures/uv-project/pyproject.toml
@@ -525,78 +415,6 @@ jobs:
env: env:
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }} CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
test-setup-cache-save-cache-false:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Setup with cache
uses: ./
with:
enable-cache: true
save-cache: false
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-save-cache-false
- run: uv sync
working-directory: __tests__/fixtures/uv-project
shell: bash
test-restore-cache-save-cache-false:
runs-on: ubuntu-latest
needs: test-setup-cache-save-cache-false
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Restore with cache
id: restore
uses: ./
with:
enable-cache: true
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-save-cache-false
- name: Cache was not hit
run: |
if [ "$CACHE_HIT" == "true" ]; then
exit 1
fi
env:
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
test-setup-cache-restore-cache-false:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Setup with cache
uses: ./
with:
enable-cache: true
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-restore-cache-false
- run: uv sync
working-directory: __tests__/fixtures/uv-project
shell: bash
test-restore-cache-restore-cache-false:
runs-on: ubuntu-latest
needs: test-setup-cache-restore-cache-false
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Restore with cache
id: restore
uses: ./
with:
enable-cache: true
restore-cache: false
cache-suffix: ${{ github.run_id }}-${{ github.run_attempt }}-test-setup-cache-restore-cache-false
- name: Cache was not hit
run: |
if [ "$CACHE_HIT" == "true" ]; then
exit 1
fi
env:
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
test-cache-local: test-cache-local:
strategy: strategy:
matrix: matrix:
@@ -609,9 +427,7 @@ jobs:
expected-cache-dir: "/home/ubuntu/.cache/uv" expected-cache-dir: "/home/ubuntu/.cache/uv"
runs-on: ${{ matrix.inputs.os }} runs-on: ${{ matrix.inputs.os }}
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -626,9 +442,7 @@ jobs:
test-setup-cache-local: test-setup-cache-local:
runs-on: selfhosted-ubuntu-arm64 runs-on: selfhosted-ubuntu-arm64
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -641,9 +455,7 @@ jobs:
runs-on: selfhosted-ubuntu-arm64 runs-on: selfhosted-ubuntu-arm64
needs: test-setup-cache-local needs: test-setup-cache-local
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Restore with cache - name: Restore with cache
id: restore id: restore
uses: ./ uses: ./
@@ -664,9 +476,7 @@ jobs:
test-tilde-expansion-cache-local-path: test-tilde-expansion-cache-local-path:
runs-on: selfhosted-ubuntu-arm64 runs-on: selfhosted-ubuntu-arm64
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Create cache directory - name: Create cache directory
run: mkdir -p ~/uv-cache run: mkdir -p ~/uv-cache
shell: bash shell: bash
@@ -680,9 +490,7 @@ jobs:
test-tilde-expansion-cache-dependency-glob: test-tilde-expansion-cache-dependency-glob:
runs-on: selfhosted-ubuntu-arm64 runs-on: selfhosted-ubuntu-arm64
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Create cache directory - name: Create cache directory
run: mkdir -p ~/uv-cache run: mkdir -p ~/uv-cache
shell: bash shell: bash
@@ -715,9 +523,7 @@ jobs:
test-no-python-version: test-no-python-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
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
@@ -730,9 +536,7 @@ jobs:
test-custom-manifest-file: test-custom-manifest-file:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install from custom manifest file - name: Install from custom manifest file
uses: ./ uses: ./
with: with:
@@ -746,50 +550,6 @@ jobs:
exit 1 exit 1
fi fi
test-absolute-path:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: Create requirements.txt
run: echo "uv==0.6.17" > /tmp/setup-uv-requirements.txt
- name: Install from requirements file
id: setup-uv
uses: ./
with:
version-file: "/tmp/setup-uv-requirements.txt"
- name: Correct version gets installed
run: |
if [ "$(uv --version)" != "uv 0.6.17" ]; then
echo "Wrong uv version: $(uv --version)"
exit 1
fi
test-relative-path:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with:
persist-credentials: false
- name: mkdir
run: mkdir -p /tmp/setup-uv-test-relative-path
- name: Create requirements.txt
run: echo "uv==0.6.17" > /tmp/setup-uv-test-relative-path/setup-uv-requirements.txt
- name: Install from requirements file
id: setup-uv
uses: ./
with:
version-file: "./setup-uv-requirements.txt"
working-directory: "/tmp/setup-uv-test-relative-path"
cache-dependency-glob: "./setup-uv-requirements.txt"
- name: Correct version gets installed
run: |
if [ "$(uv --version)" != "uv 0.6.17" ]; then
echo "Wrong uv version: $(uv --version)"
exit 1
fi
all-tests-passed: all-tests-passed:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: needs:
@@ -801,9 +561,6 @@ jobs:
- test-pyproject-file-version - test-pyproject-file-version
- test-malformed-pyproject-file-fallback - test-malformed-pyproject-file-fallback
- test-uv-file-version - test-uv-file-version
- test-version-file-version
- test-version-file-hash-version
- test-tool-versions-file-version
- test-checksum - test-checksum
- test-with-explicit-token - test-with-explicit-token
- test-uvx - test-uvx
@@ -819,10 +576,6 @@ jobs:
- test-restore-cache-requirements-txt - test-restore-cache-requirements-txt
- test-setup-cache-dependency-glob - test-setup-cache-dependency-glob
- test-restore-cache-dependency-glob - test-restore-cache-dependency-glob
- test-setup-cache-save-cache-false
- test-restore-cache-save-cache-false
- test-setup-cache-restore-cache-false
- test-restore-cache-restore-cache-false
- test-setup-cache-local - test-setup-cache-local
- test-restore-cache-local - test-restore-cache-local
- test-tilde-expansion-cache-local-path - test-tilde-expansion-cache-local-path
@@ -830,8 +583,6 @@ jobs:
- cleanup-tilde-expansion-tests - cleanup-tilde-expansion-tests
- test-no-python-version - test-no-python-version
- test-custom-manifest-file - test-custom-manifest-file
- test-absolute-path
- test-relative-path
if: always() if: always()
steps: steps:
- name: All tests passed - name: All tests passed

View File

@@ -3,21 +3,16 @@ on:
workflow_dispatch: workflow_dispatch:
schedule: schedule:
- cron: "0 4 * * *" # Run every day at 4am UTC - cron: "0 4 * * *" # Run every day at 4am UTC
repository_dispatch:
types: [ pypi_release ]
permissions: {}
jobs: jobs:
build: build:
runs-on: ubuntu-24.04-arm runs-on: ubuntu-24.04-arm
permissions: permissions:
contents: write contents: write
pull-requests: write
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with: - uses: actions/setup-node@v4
persist-credentials: false
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0
with: with:
node-version: "20" node-version: "20"
- name: Update known versions - name: Update known versions
@@ -27,25 +22,18 @@ jobs:
src/download/checksum/known-checksums.ts src/download/checksum/known-checksums.ts
version-manifest.json version-manifest.json
${{ secrets.GITHUB_TOKEN }} ${{ secrets.GITHUB_TOKEN }}
- name: Check for changes - run: npm install && npm run all
id: changes_exist - name: Create Pull Request
run: | uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
git status --porcelain with:
if [ -n "$(git status --porcelain)" ]; then commit-message: "chore: update known versions"
echo "changes_exist=true" >> "$GITHUB_OUTPUT" title:
else "chore: update known versions for ${{
echo "changes_exist=false" >> "$GITHUB_OUTPUT" steps.update-known-versions.outputs.latest-version }}"
fi body:
- name: Compile changes "chore: update known versions for ${{
if: ${{ steps.changes_exist.outputs.changes_exist == 'true' }} steps.update-known-versions.outputs.latest-version }}"
run: npm ci && npm run all base: main
- name: Commit and push changes labels: "automated-pr,update-known-versions"
if: ${{ steps.changes_exist.outputs.changes_exist == 'true' }} branch: update-known-versions-pr
run: | delete-branch: true
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
git add .
git commit -m "chore: update known versions for $LATEST_VERSION"
git push origin HEAD:refs/heads/main
env:
LATEST_VERSION: ${{ steps.update-known-versions.outputs.latest-version }}

View File

@@ -8,8 +8,6 @@ on:
tags: tags:
- "v*.*.*" - "v*.*.*"
permissions: {}
jobs: jobs:
update_major_minor_tags: update_major_minor_tags:
name: Make sure major and minor tags are up to date on a patch release name: Make sure major and minor tags are up to date on a patch release
@@ -17,9 +15,7 @@ jobs:
permissions: permissions:
contents: write contents: write
steps: steps:
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - uses: actions/checkout@v4
with:
persist-credentials: true # needed for git push below
- name: Update Major Minor Tags - name: Update Major Minor Tags
run: | run: |
set -x set -x

View File

@@ -1,3 +0,0 @@
{
"recommendations": ["biomejs.biome"]
}

16
.vscode/settings.json vendored
View File

@@ -1,16 +0,0 @@
{
"editor.codeActionsOnSave": {
"source.action.useSortedAttributes.biome": "explicit",
"source.action.useSortedKeys.biome": "explicit",
"source.fixAll.biome": "explicit"
},
"editor.defaultFormatter": "biomejs.biome",
"editor.formatOnSave": true,
"explorer.excludeGitIgnore": false,
"search.defaultViewMode": "list",
"search.exclude": {
"**/node_modules": true
},
"typescript.enablePromptUseWorkspaceTsdk": true,
"typescript.tsdk": "node_modules/typescript/lib"
}

View File

@@ -15,15 +15,12 @@ Set up your GitHub Actions workflow with a specific version of [uv](https://docs
- [Install the latest version](#install-the-latest-version) - [Install the latest version](#install-the-latest-version)
- [Install a specific version](#install-a-specific-version) - [Install a specific version](#install-a-specific-version)
- [Install a version by supplying a semver range or pep440 specifier](#install-a-version-by-supplying-a-semver-range-or-pep440-specifier) - [Install a version by supplying a semver range or pep440 specifier](#install-a-version-by-supplying-a-semver-range-or-pep440-specifier)
- [Install a version defined in a requirements or config file](#install-a-version-defined-in-a-requirements-or-config-file)
- [Python version](#python-version) - [Python version](#python-version)
- [Activate environment](#activate-environment) - [Activate environment](#activate-environment)
- [Working directory](#working-directory) - [Working directory](#working-directory)
- [Validate checksum](#validate-checksum) - [Validate checksum](#validate-checksum)
- [Enable Caching](#enable-caching) - [Enable Caching](#enable-caching)
- [Cache dependency glob](#cache-dependency-glob) - [Cache dependency glob](#cache-dependency-glob)
- [Restore cache](#restore-cache)
- [Save cache](#save-cache)
- [Local cache path](#local-cache-path) - [Local cache path](#local-cache-path)
- [Disable cache pruning](#disable-cache-pruning) - [Disable cache pruning](#disable-cache-pruning)
- [Ignore nothing to cache](#ignore-nothing-to-cache) - [Ignore nothing to cache](#ignore-nothing-to-cache)
@@ -32,7 +29,6 @@ Set up your GitHub Actions workflow with a specific version of [uv](https://docs
- [UV_TOOL_BIN_DIR](#uv_tool_bin_dir) - [UV_TOOL_BIN_DIR](#uv_tool_bin_dir)
- [Tilde Expansion](#tilde-expansion) - [Tilde Expansion](#tilde-expansion)
- [Manifest file](#manifest-file) - [Manifest file](#manifest-file)
- [Add problem matchers](#add-problem-matchers)
- [How it works](#how-it-works) - [How it works](#how-it-works)
- [FAQ](#faq) - [FAQ](#faq)
@@ -96,21 +92,6 @@ to install the latest version that satisfies the range.
version: ">=0.4.25,<0.5" version: ">=0.4.25,<0.5"
``` ```
### Install a version defined in a requirements or config file
You can use the `version-file` input to specify a file that contains the version of uv to install.
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`.
[asdf](https://asdf-vm.com/) `.tool-versions` is also supported, but without the `ref` syntax.
```yaml
- name: Install uv based on the version defined in pyproject.toml
uses: astral-sh/setup-uv@v6
with:
version-file: "pyproject.toml"
```
### Python version ### Python version
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
@@ -198,10 +179,6 @@ are automatically verified by this action. The sha256 hashes can be found on the
### Enable caching ### Enable caching
> [!NOTE]
> The cache is pruned before it is uploaded to the GitHub Actions cache. This can lead to
> a small or empty cache. See [Disable cache pruning](#disable-cache-pruning) for more details.
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. Caching is enabled by default on GitHub-hosted runners.
@@ -286,33 +263,6 @@ changes. If you use relative paths, they are relative to the repository root.
cache-dependency-glob: "" cache-dependency-glob: ""
``` ```
#### Restore cache
Restoring an existing cache can be enabled or disabled with the `restore-cache` input.
By default, the cache will be restored.
```yaml
- name: Don't restore an existing cache
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
restore-cache: false
```
#### Save cache
You can also disable saving the cache after the run with the `save-cache` input.
This can be useful to save cache storage when you know you will not use the cache of the run again.
By default, the cache will be saved.
```yaml
- name: Don't save the cache after the run
uses: astral-sh/setup-uv@v6
with:
enable-cache: true
save-cache: false
```
### Local cache path ### Local cache path
This action controls where uv stores its cache on the runner's filesystem by setting `UV_CACHE_DIR`. This action controls where uv stores its cache on the runner's filesystem by setting `UV_CACHE_DIR`.
@@ -432,7 +382,6 @@ If you want to change this behaviour (especially on self-hosted runners) you can
This action supports expanding the `~` character to the user's home directory for the following inputs: This action supports expanding the `~` character to the user's home directory for the following inputs:
- `version-file`
- `cache-local-path` - `cache-local-path`
- `tool-dir` - `tool-dir`
- `tool-bin-dir` - `tool-bin-dir`
@@ -486,21 +435,6 @@ This is useful if you maintain your own uv builds or want to override the defaul
> This means the action will install the latest version available in the custom manifest file. > This means the action will install the latest version available in the custom manifest file.
> This is different from the default behavior of installing the latest version from the official uv releases. > This is different from the default behavior of installing the latest version from the official uv releases.
### Add problem matchers
This action automatically adds
[problem matchers](https://github.com/actions/toolkit/blob/main/docs/problem-matchers.md)
for python errors.
You can disable this by setting the `add-problem-matchers` input to `false`.
```yaml
- name: Install the latest version of uv without problem matchers
uses: astral-sh/setup-uv@v6
with:
add-problem-matchers: false
```
## How it works ## How it works
This action downloads uv from the uv repo's official This action downloads uv from the uv repo's official

View File

@@ -1,4 +1,4 @@
import { expect, it, test } from "@jest/globals"; import { expect, test, it } from "@jest/globals";
import { import {
isknownVersion, isknownVersion,
validateChecksum, validateChecksum,
@@ -22,12 +22,12 @@ type KnownVersionFixture = { version: string; known: boolean };
it.each<KnownVersionFixture>([ it.each<KnownVersionFixture>([
{ {
known: true,
version: "0.3.0", version: "0.3.0",
known: true,
}, },
{ {
known: false,
version: "0.0.15", version: "0.0.15",
known: false,
}, },
])( ])(
"isknownVersion should return $known for version $version", "isknownVersion should return $known for version $version",

View File

@@ -1,9 +1,9 @@
[ [
{ {
"arch": "x86_64", "version": "0.7.12-alpha.1",
"artifactName": "uv-x86_64-unknown-linux-gnu.tar.gz", "artifactName": "uv-x86_64-unknown-linux-gnu.tar.gz",
"downloadUrl": "https://release.pyx.dev/0.7.12-alpha.1/uv-x86_64-unknown-linux-gnu.tar.gz", "arch": "x86_64",
"platform": "unknown-linux-gnu", "platform": "unknown-linux-gnu",
"version": "0.7.12-alpha.1" "downloadUrl": "https://release.pyx.dev/0.7.12-alpha.1/uv-x86_64-unknown-linux-gnu.tar.gz"
} }
] ]

View File

@@ -1 +0,0 @@
uv 0.5.15

View File

@@ -1 +0,0 @@
print("Hello world")

View File

@@ -1,33 +0,0 @@
# This file was autogenerated by uv via the following command:
# uv pip compile --generate-hashes - -o ex-requirements.txt
click==8.2.1 \
--hash=sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202 \
--hash=sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b
# via uvicorn
h11==0.16.0 \
--hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \
--hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86
# via uvicorn
uv==0.8.3 \
--hash=sha256:1121ad1c9389b865d029385031d3fd7d90d343c92a2149a4d4aa20bf469cb27f \
--hash=sha256:17bcdb0615e37cc5f985f7d7546f755ac6343c1dc8bbe876c892437f14f8f904 \
--hash=sha256:2ccaae4c749126c99f6404d67a0ae1eae29cbafb05603d09094a775061fdf4e5 \
--hash=sha256:2e311c029bff2ca07c6ddf877ccc5935cabb78e09b94b53a849542665b6a6fa1 \
--hash=sha256:391c97577048a40fd8c85b370055df6420f26e81df7fa906f0e0ce1aa2af3527 \
--hash=sha256:3f904f574dc2d7aa1d96ddf2483480ecd121dc9d060108cadd8bff100b754b64 \
--hash=sha256:526f2c3bd6f311ce31f6f7b6b7d818b191f41e76bed3aaab671b716220c02d8f \
--hash=sha256:5313ee776ad65731ffa8ac585246f987d3a2bf72e6153c12add1fff22ad6e500 \
--hash=sha256:5843cc43bafad05cc710d8e31bd347ee37202462a63d32c30746e9df48cfbda2 \
--hash=sha256:76de331a07e5ae9b6490e70a9439a072b91b3167a5684510af10c2752c4ece9a \
--hash=sha256:8486f7576d15cc73509f93f47b3190f44701ea36839906369301b58c8604d5db \
--hash=sha256:8b16f1bddfdf8f7470924ab34a7b55e4c372d5340c7c1e47e7fc84a743dc541f \
--hash=sha256:966ec7d7f57521fef0fee685d71e183c9cafb358ddcfe27519dfeaf40550f247 \
--hash=sha256:989898caeb6e972979543b57547d1c28ab8af81ff8fc15921fd354c17d432749 \
--hash=sha256:9ce7981f4fbeecf93dc5cf0a5a7915e84956fd99ad3ac977c048fe0cfdb1a17e \
--hash=sha256:ad13453ab0a1dfa64a221aac8f52199efdcaa52c97134fffd7bcebed794a6f4b \
--hash=sha256:ae7efe91dcfc24126fa91e0fb69a1daf6c0e494a781ba192bb0cc62d7ab623ee \
--hash=sha256:daa6e0d657a94f20e962d4a03d833ef7af5c8e51b7c8a2d92ba6cf64a4c07ac1 \
--hash=sha256:f1eb7c896fc0d80ed534748aaf46697b6ebc8ce401f1c51666ce0b9923c3db9a
uvicorn==0.35.0 \
--hash=sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a \
--hash=sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01

View File

@@ -1 +0,0 @@
print("Hello world")

View File

@@ -1,2 +0,0 @@
uvicorn==0.35.0
uv==0.6.17

View File

@@ -1,86 +0,0 @@
jest.mock("@actions/core", () => {
return {
debug: jest.fn(),
getBooleanInput: jest.fn(
(name: string) => (mockInputs[name] ?? "") === "true",
),
getInput: jest.fn((name: string) => mockInputs[name] ?? ""),
};
});
import {
afterEach,
beforeEach,
describe,
expect,
it,
jest,
} from "@jest/globals";
// Will be mutated per test before (re-)importing the module under test
let mockInputs: Record<string, string> = {};
const ORIGINAL_HOME = process.env.HOME;
describe("cacheDependencyGlob", () => {
beforeEach(() => {
jest.resetModules();
mockInputs = {};
process.env.HOME = "/home/testuser";
});
afterEach(() => {
process.env.HOME = ORIGINAL_HOME;
});
it("returns empty string when input not provided", async () => {
mockInputs["working-directory"] = "/workspace";
const { cacheDependencyGlob } = await import("../../src/utils/inputs");
expect(cacheDependencyGlob).toBe("");
});
it("resolves a single relative path", async () => {
mockInputs["working-directory"] = "/workspace";
mockInputs["cache-dependency-glob"] = "requirements.txt";
const { cacheDependencyGlob } = await import("../../src/utils/inputs");
expect(cacheDependencyGlob).toBe("/workspace/requirements.txt");
});
it("strips leading ./ from relative path", async () => {
mockInputs["working-directory"] = "/workspace";
mockInputs["cache-dependency-glob"] = "./uv.lock";
const { cacheDependencyGlob } = await import("../../src/utils/inputs");
expect(cacheDependencyGlob).toBe("/workspace/uv.lock");
});
it("handles multiple lines, trimming whitespace, tilde expansion and absolute paths", async () => {
mockInputs["working-directory"] = "/workspace";
mockInputs["cache-dependency-glob"] =
" ~/.cache/file1\n ./rel/file2 \nfile3.txt";
const { cacheDependencyGlob } = await import("../../src/utils/inputs");
expect(cacheDependencyGlob).toBe(
[
"/home/testuser/.cache/file1", // expanded tilde, absolute path unchanged
"/workspace/rel/file2", // ./ stripped and resolved
"/workspace/file3.txt", // relative path resolved
].join("\n"),
);
});
it("keeps absolute path unchanged in multiline input", async () => {
mockInputs["working-directory"] = "/workspace";
mockInputs["cache-dependency-glob"] = "/abs/path.lock\nrelative.lock";
const { cacheDependencyGlob } = await import("../../src/utils/inputs");
expect(cacheDependencyGlob).toBe(
["/abs/path.lock", "/workspace/relative.lock"].join("\n"),
);
});
it("handles exclusions in relative paths correct", async () => {
mockInputs["working-directory"] = "/workspace";
mockInputs["cache-dependency-glob"] = "!/abs/path.lock\n!relative.lock";
const { cacheDependencyGlob } = await import("../../src/utils/inputs");
expect(cacheDependencyGlob).toBe(
["!/abs/path.lock", "!/workspace/relative.lock"].join("\n"),
);
});
});

View File

@@ -1,9 +0,0 @@
import { expect, test } from "@jest/globals";
import { getUvVersionFromFile } from "../../src/version/resolve";
test("ignores dependencies starting with uv", async () => {
const parsedVersion = getUvVersionFromFile(
"__tests__/fixtures/uv-in-requirements-txt-project/requirements.txt",
);
expect(parsedVersion).toBe("0.6.17");
});

View File

@@ -1,9 +0,0 @@
import { expect, test } from "@jest/globals";
import { getUvVersionFromFile } from "../../src/version/resolve";
test("ignores dependencies starting with uv", async () => {
const parsedVersion = getUvVersionFromFile(
"__tests__/fixtures/uv-in-requirements-hash-txt-project/requirements.txt",
);
expect(parsedVersion).toBe("0.8.3");
});

View File

@@ -1,115 +0,0 @@
jest.mock("node:fs");
jest.mock("@actions/core", () => ({
warning: jest.fn(),
}));
import fs from "node:fs";
import * as core from "@actions/core";
import { beforeEach, describe, expect, it, jest } from "@jest/globals";
import { getUvVersionFromToolVersions } from "../../src/version/tool-versions-file";
const mockedFs = fs as jest.Mocked<typeof fs>;
const mockedCore = core as jest.Mocked<typeof core>;
describe("getUvVersionFromToolVersions", () => {
beforeEach(() => {
jest.clearAllMocks();
});
it("should return undefined for non-.tool-versions files", () => {
const result = getUvVersionFromToolVersions("package.json");
expect(result).toBeUndefined();
expect(mockedFs.readFileSync).not.toHaveBeenCalled();
});
it("should return version for valid uv entry", () => {
const fileContent = "python 3.11.0\nuv 0.1.0\nnodejs 18.0.0";
mockedFs.readFileSync.mockReturnValue(fileContent);
const result = getUvVersionFromToolVersions(".tool-versions");
expect(result).toBe("0.1.0");
expect(mockedFs.readFileSync).toHaveBeenCalledWith(
".tool-versions",
"utf8",
);
});
it("should return version for uv entry with v prefix", () => {
const fileContent = "uv v0.2.0";
mockedFs.readFileSync.mockReturnValue(fileContent);
const result = getUvVersionFromToolVersions(".tool-versions");
expect(result).toBe("0.2.0");
});
it("should handle whitespace around uv entry", () => {
const fileContent = " uv 0.3.0 ";
mockedFs.readFileSync.mockReturnValue(fileContent);
const result = getUvVersionFromToolVersions(".tool-versions");
expect(result).toBe("0.3.0");
});
it("should skip commented lines", () => {
const fileContent = "# uv 0.1.0\npython 3.11.0\nuv 0.2.0";
mockedFs.readFileSync.mockReturnValue(fileContent);
const result = getUvVersionFromToolVersions(".tool-versions");
expect(result).toBe("0.2.0");
});
it("should return first matching uv version", () => {
const fileContent = "uv 0.1.0\npython 3.11.0\nuv 0.2.0";
mockedFs.readFileSync.mockReturnValue(fileContent);
const result = getUvVersionFromToolVersions(".tool-versions");
expect(result).toBe("0.1.0");
});
it("should return undefined when no uv entry found", () => {
const fileContent = "python 3.11.0\nnodejs 18.0.0";
mockedFs.readFileSync.mockReturnValue(fileContent);
const result = getUvVersionFromToolVersions(".tool-versions");
expect(result).toBeUndefined();
});
it("should return undefined for empty file", () => {
mockedFs.readFileSync.mockReturnValue("");
const result = getUvVersionFromToolVersions(".tool-versions");
expect(result).toBeUndefined();
});
it("should warn and return undefined for ref syntax", () => {
const fileContent = "uv ref:main";
mockedFs.readFileSync.mockReturnValue(fileContent);
const result = getUvVersionFromToolVersions(".tool-versions");
expect(result).toBeUndefined();
expect(mockedCore.warning).toHaveBeenCalledWith(
"The ref syntax of .tool-versions is not supported. Please use a released version instead.",
);
});
it("should handle file path with .tool-versions extension", () => {
const fileContent = "uv 0.1.0";
mockedFs.readFileSync.mockReturnValue(fileContent);
const result = getUvVersionFromToolVersions("path/to/.tool-versions");
expect(result).toBe("0.1.0");
expect(mockedFs.readFileSync).toHaveBeenCalledWith(
"path/to/.tool-versions",
"utf8",
);
});
});

View File

@@ -6,9 +6,6 @@ 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` Defaults to the version in pyproject.toml or 'latest'."
default: "" default: ""
version-file:
description: "Path to a file containing the version of uv to install. Defaults to searching for uv.toml and if not found pyproject.toml."
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"
required: false required: false
@@ -44,12 +41,6 @@ inputs:
**/*constraints*.in **/*constraints*.in
**/pyproject.toml **/pyproject.toml
**/uv.lock **/uv.lock
restore-cache:
description: "Whether to restore the cache if found."
default: "true"
save-cache:
description: "Whether to save the cache after the run."
default: "true"
cache-suffix: cache-suffix:
description: "Suffix for the cache key" description: "Suffix for the cache key"
required: false required: false
@@ -74,9 +65,6 @@ inputs:
manifest-file: manifest-file:
description: "URL to the manifest file containing available versions and download URLs." description: "URL to the manifest file containing available versions and download URLs."
required: false required: false
add-problem-matchers:
description: "Add problem matchers."
default: "true"
outputs: outputs:
uv-version: uv-version:
description: "The installed uv version. Useful when using latest." description: "The installed uv version. Useful when using latest."

View File

@@ -1,34 +1,20 @@
{ {
"$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", "$schema": "https://biomejs.dev/schemas/1.9.2/schema.json",
"assist": { "vcs": {
"actions": { "enabled": true,
"source": { "clientKind": "git",
"organizeImports": "on", "useIgnoreFile": false
"useSortedAttributes": "on",
"useSortedKeys": "on"
}
}
}, },
"files": { "files": {
"ignoreUnknown": false, "ignoreUnknown": false,
"includes": [ "ignore": ["dist", "lib", "node_modules"]
"**",
"!**/dist",
"!**/lib",
"!**/node_modules",
"!**/package*.json",
"!**/known-checksums.*"
]
}, },
"formatter": { "formatter": {
"enabled": true, "enabled": true,
"indentStyle": "space" "indentStyle": "space"
}, },
"javascript": { "organizeImports": {
"formatter": { "enabled": true
"quoteStyle": "double",
"trailingCommas": "all"
}
}, },
"linter": { "linter": {
"enabled": true, "enabled": true,
@@ -36,9 +22,10 @@
"recommended": true "recommended": true
} }
}, },
"vcs": { "javascript": {
"clientKind": "git", "formatter": {
"enabled": true, "quoteStyle": "double",
"useIgnoreFile": false "trailingCommas": "all"
}
} }
} }

1556
dist/save-cache/index.js generated vendored
View File

@@ -48,7 +48,6 @@ const cacheTwirpClient = __importStar(__nccwpck_require__(6819));
const config_1 = __nccwpck_require__(7606); const config_1 = __nccwpck_require__(7606);
const tar_1 = __nccwpck_require__(5321); const tar_1 = __nccwpck_require__(5321);
const constants_1 = __nccwpck_require__(8287); const constants_1 = __nccwpck_require__(8287);
const http_client_1 = __nccwpck_require__(4844);
class ValidationError extends Error { class ValidationError extends Error {
constructor(message) { constructor(message) {
super(message); super(message);
@@ -85,17 +84,7 @@ function checkKey(key) {
* @returns boolean return true if Actions cache service feature is available, otherwise false * @returns boolean return true if Actions cache service feature is available, otherwise false
*/ */
function isFeatureAvailable() { function isFeatureAvailable() {
const cacheServiceVersion = (0, config_1.getCacheServiceVersion)(); return !!process.env['ACTIONS_CACHE_URL'];
// Check availability based on cache service version
switch (cacheServiceVersion) {
case 'v2':
// For v2, we need ACTIONS_RESULTS_URL
return !!process.env['ACTIONS_RESULTS_URL'];
case 'v1':
default:
// For v1, we only need ACTIONS_CACHE_URL
return !!process.env['ACTIONS_CACHE_URL'];
}
} }
exports.isFeatureAvailable = isFeatureAvailable; exports.isFeatureAvailable = isFeatureAvailable;
/** /**
@@ -180,16 +169,8 @@ function restoreCacheV1(paths, primaryKey, restoreKeys, options, enableCrossOsAr
throw error; throw error;
} }
else { else {
// warn on cache restore failure and continue build // Supress all non-validation cache related errors because caching should be optional
// Log server errors (5xx) as errors, all other errors as warnings core.warning(`Failed to restore: ${error.message}`);
if (typedError instanceof http_client_1.HttpClientError &&
typeof typedError.statusCode === 'number' &&
typedError.statusCode >= 500) {
core.error(`Failed to restore: ${error.message}`);
}
else {
core.warning(`Failed to restore: ${error.message}`);
}
} }
} }
finally { finally {
@@ -242,13 +223,7 @@ function restoreCacheV2(paths, primaryKey, restoreKeys, options, enableCrossOsAr
core.debug(`Cache not found for version ${request.version} of keys: ${keys.join(', ')}`); core.debug(`Cache not found for version ${request.version} of keys: ${keys.join(', ')}`);
return undefined; return undefined;
} }
const isRestoreKeyMatch = request.key !== response.matchedKey; core.info(`Cache hit for: ${request.key}`);
if (isRestoreKeyMatch) {
core.info(`Cache hit for restore-key: ${response.matchedKey}`);
}
else {
core.info(`Cache hit for: ${response.matchedKey}`);
}
if (options === null || options === void 0 ? void 0 : options.lookupOnly) { if (options === null || options === void 0 ? void 0 : options.lookupOnly) {
core.info('Lookup only - skipping download'); core.info('Lookup only - skipping download');
return response.matchedKey; return response.matchedKey;
@@ -273,15 +248,7 @@ function restoreCacheV2(paths, primaryKey, restoreKeys, options, enableCrossOsAr
} }
else { else {
// Supress all non-validation cache related errors because caching should be optional // Supress all non-validation cache related errors because caching should be optional
// Log server errors (5xx) as errors, all other errors as warnings core.warning(`Failed to restore: ${error.message}`);
if (typedError instanceof http_client_1.HttpClientError &&
typeof typedError.statusCode === 'number' &&
typedError.statusCode >= 500) {
core.error(`Failed to restore: ${error.message}`);
}
else {
core.warning(`Failed to restore: ${error.message}`);
}
} }
} }
finally { finally {
@@ -384,15 +351,7 @@ function saveCacheV1(paths, key, options, enableCrossOsArchive = false) {
core.info(`Failed to save: ${typedError.message}`); core.info(`Failed to save: ${typedError.message}`);
} }
else { else {
// Log server errors (5xx) as errors, all other errors as warnings core.warning(`Failed to save: ${typedError.message}`);
if (typedError instanceof http_client_1.HttpClientError &&
typeof typedError.statusCode === 'number' &&
typedError.statusCode >= 500) {
core.error(`Failed to save: ${typedError.message}`);
}
else {
core.warning(`Failed to save: ${typedError.message}`);
}
} }
} }
finally { finally {
@@ -488,15 +447,7 @@ function saveCacheV2(paths, key, options, enableCrossOsArchive = false) {
core.info(`Failed to save: ${typedError.message}`); core.info(`Failed to save: ${typedError.message}`);
} }
else { else {
// Log server errors (5xx) as errors, all other errors as warnings core.warning(`Failed to save: ${typedError.message}`);
if (typedError instanceof http_client_1.HttpClientError &&
typeof typedError.statusCode === 'number' &&
typedError.statusCode >= 500) {
core.error(`Failed to save: ${typedError.message}`);
}
else {
core.warning(`Failed to save: ${typedError.message}`);
}
} }
} }
finally { finally {
@@ -2253,7 +2204,7 @@ const cacheUtils_1 = __nccwpck_require__(8299);
const auth_1 = __nccwpck_require__(4552); const auth_1 = __nccwpck_require__(4552);
const http_client_1 = __nccwpck_require__(4844); const http_client_1 = __nccwpck_require__(4844);
const cache_twirp_client_1 = __nccwpck_require__(1486); const cache_twirp_client_1 = __nccwpck_require__(1486);
const util_1 = __nccwpck_require__(5183); const util_1 = __nccwpck_require__(7564);
/** /**
* This class is a wrapper around the CacheServiceClientJSON class generated by Twirp. * This class is a wrapper around the CacheServiceClientJSON class generated by Twirp.
* *
@@ -2495,7 +2446,7 @@ exports.getUserAgentString = getUserAgentString;
/***/ }), /***/ }),
/***/ 5183: /***/ 7564:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
"use strict"; "use strict";
@@ -36748,9 +36699,6 @@ exports.userAgentPolicy = userAgentPolicy;
/***/ 172: /***/ 172:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var CombinedStream = __nccwpck_require__(5630); var CombinedStream = __nccwpck_require__(5630);
var util = __nccwpck_require__(9023); var util = __nccwpck_require__(9023);
var path = __nccwpck_require__(6928); var path = __nccwpck_require__(6928);
@@ -36759,20 +36707,23 @@ var https = __nccwpck_require__(5692);
var parseUrl = (__nccwpck_require__(7016).parse); var parseUrl = (__nccwpck_require__(7016).parse);
var fs = __nccwpck_require__(9896); var fs = __nccwpck_require__(9896);
var Stream = (__nccwpck_require__(2203).Stream); var Stream = (__nccwpck_require__(2203).Stream);
var crypto = __nccwpck_require__(6982);
var mime = __nccwpck_require__(4096); var mime = __nccwpck_require__(4096);
var asynckit = __nccwpck_require__(1324); var asynckit = __nccwpck_require__(1324);
var setToStringTag = __nccwpck_require__(8700);
var hasOwn = __nccwpck_require__(4076);
var populate = __nccwpck_require__(2209); var populate = __nccwpck_require__(2209);
// Public API
module.exports = FormData;
// make it a Stream
util.inherits(FormData, CombinedStream);
/** /**
* Create readable "multipart/form-data" streams. * Create readable "multipart/form-data" streams.
* Can be used to submit forms * Can be used to submit forms
* and file uploads to other web applications. * and file uploads to other web applications.
* *
* @constructor * @constructor
* @param {object} options - Properties to be added/overriden for FormData and CombinedStream * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream
*/ */
function FormData(options) { function FormData(options) {
if (!(this instanceof FormData)) { if (!(this instanceof FormData)) {
@@ -36785,39 +36736,35 @@ function FormData(options) {
CombinedStream.call(this); CombinedStream.call(this);
options = options || {}; // eslint-disable-line no-param-reassign options = options || {};
for (var option in options) { // eslint-disable-line no-restricted-syntax for (var option in options) {
this[option] = options[option]; this[option] = options[option];
} }
} }
// make it a Stream
util.inherits(FormData, CombinedStream);
FormData.LINE_BREAK = '\r\n'; FormData.LINE_BREAK = '\r\n';
FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';
FormData.prototype.append = function (field, value, options) { FormData.prototype.append = function(field, value, options) {
options = options || {}; // eslint-disable-line no-param-reassign
options = options || {};
// allow filename as single option // allow filename as single option
if (typeof options === 'string') { if (typeof options == 'string') {
options = { filename: options }; // eslint-disable-line no-param-reassign options = {filename: options};
} }
var append = CombinedStream.prototype.append.bind(this); var append = CombinedStream.prototype.append.bind(this);
// all that streamy business can't handle numbers // all that streamy business can't handle numbers
if (typeof value === 'number' || value == null) { if (typeof value == 'number') {
value = String(value); // eslint-disable-line no-param-reassign value = '' + value;
} }
// https://github.com/felixge/node-form-data/issues/38 // https://github.com/felixge/node-form-data/issues/38
if (Array.isArray(value)) { if (util.isArray(value)) {
/* // Please convert your array into string
* Please convert your array into string // the way web server expects it
* the way web server expects it
*/
this._error(new Error('Arrays are not supported.')); this._error(new Error('Arrays are not supported.'));
return; return;
} }
@@ -36833,17 +36780,15 @@ FormData.prototype.append = function (field, value, options) {
this._trackLength(header, value, options); this._trackLength(header, value, options);
}; };
FormData.prototype._trackLength = function (header, value, options) { FormData.prototype._trackLength = function(header, value, options) {
var valueLength = 0; var valueLength = 0;
/* // used w/ getLengthSync(), when length is known.
* used w/ getLengthSync(), when length is known. // e.g. for streaming directly from a remote server,
* e.g. for streaming directly from a remote server, // w/ a known file a size, and not wanting to wait for
* w/ a known file a size, and not wanting to wait for // incoming file to finish to get its size.
* incoming file to finish to get its size.
*/
if (options.knownLength != null) { if (options.knownLength != null) {
valueLength += Number(options.knownLength); valueLength += +options.knownLength;
} else if (Buffer.isBuffer(value)) { } else if (Buffer.isBuffer(value)) {
valueLength = value.length; valueLength = value.length;
} else if (typeof value === 'string') { } else if (typeof value === 'string') {
@@ -36853,10 +36798,12 @@ FormData.prototype._trackLength = function (header, value, options) {
this._valueLength += valueLength; this._valueLength += valueLength;
// @check why add CRLF? does this account for custom/multiple CRLFs? // @check why add CRLF? does this account for custom/multiple CRLFs?
this._overheadLength += Buffer.byteLength(header) + FormData.LINE_BREAK.length; this._overheadLength +=
Buffer.byteLength(header) +
FormData.LINE_BREAK.length;
// empty or either doesn't have path or not an http response or not a stream // empty or either doesn't have path or not an http response or not a stream
if (!value || (!value.path && !(value.readable && hasOwn(value, 'httpVersion')) && !(value instanceof Stream))) { if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {
return; return;
} }
@@ -36866,8 +36813,10 @@ FormData.prototype._trackLength = function (header, value, options) {
} }
}; };
FormData.prototype._lengthRetriever = function (value, callback) { FormData.prototype._lengthRetriever = function(value, callback) {
if (hasOwn(value, 'fd')) {
if (value.hasOwnProperty('fd')) {
// take read range into a account // take read range into a account
// `end` = Infinity > read file till the end // `end` = Infinity > read file till the end
// //
@@ -36876,52 +36825,54 @@ FormData.prototype._lengthRetriever = function (value, callback) {
// Fix it when node fixes it. // Fix it when node fixes it.
// https://github.com/joyent/node/issues/7819 // https://github.com/joyent/node/issues/7819
if (value.end != undefined && value.end != Infinity && value.start != undefined) { if (value.end != undefined && value.end != Infinity && value.start != undefined) {
// when end specified // when end specified
// no need to calculate range // no need to calculate range
// inclusive, starts with 0 // inclusive, starts with 0
callback(null, value.end + 1 - (value.start ? value.start : 0)); // eslint-disable-line callback-return callback(null, value.end + 1 - (value.start ? value.start : 0));
// not that fast snoopy // not that fast snoopy
} else { } else {
// still need to fetch file size from fs // still need to fetch file size from fs
fs.stat(value.path, function (err, stat) { fs.stat(value.path, function(err, stat) {
var fileSize;
if (err) { if (err) {
callback(err); callback(err);
return; return;
} }
// update final size based on the range options // update final size based on the range options
var fileSize = stat.size - (value.start ? value.start : 0); fileSize = stat.size - (value.start ? value.start : 0);
callback(null, fileSize); callback(null, fileSize);
}); });
} }
// or http response // or http response
} else if (hasOwn(value, 'httpVersion')) { } else if (value.hasOwnProperty('httpVersion')) {
callback(null, Number(value.headers['content-length'])); // eslint-disable-line callback-return callback(null, +value.headers['content-length']);
// or request stream http://github.com/mikeal/request // or request stream http://github.com/mikeal/request
} else if (hasOwn(value, 'httpModule')) { } else if (value.hasOwnProperty('httpModule')) {
// wait till response come back // wait till response come back
value.on('response', function (response) { value.on('response', function(response) {
value.pause(); value.pause();
callback(null, Number(response.headers['content-length'])); callback(null, +response.headers['content-length']);
}); });
value.resume(); value.resume();
// something else // something else
} else { } else {
callback('Unknown stream'); // eslint-disable-line callback-return callback('Unknown stream');
} }
}; };
FormData.prototype._multiPartHeader = function (field, value, options) { FormData.prototype._multiPartHeader = function(field, value, options) {
/* // custom header specified (as string)?
* custom header specified (as string)? // it becomes responsible for boundary
* it becomes responsible for boundary // (e.g. to handle extra CRLFs on .NET servers)
* (e.g. to handle extra CRLFs on .NET servers) if (typeof options.header == 'string') {
*/
if (typeof options.header === 'string') {
return options.header; return options.header;
} }
@@ -36929,7 +36880,7 @@ FormData.prototype._multiPartHeader = function (field, value, options) {
var contentType = this._getContentType(value, options); var contentType = this._getContentType(value, options);
var contents = ''; var contents = '';
var headers = { var headers = {
// add custom disposition as third element or keep it two elements if not // add custom disposition as third element or keep it two elements if not
'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []),
// if no content type. allow it to be empty array // if no content type. allow it to be empty array
@@ -36937,74 +36888,77 @@ FormData.prototype._multiPartHeader = function (field, value, options) {
}; };
// allow custom headers. // allow custom headers.
if (typeof options.header === 'object') { if (typeof options.header == 'object') {
populate(headers, options.header); populate(headers, options.header);
} }
var header; var header;
for (var prop in headers) { // eslint-disable-line no-restricted-syntax for (var prop in headers) {
if (hasOwn(headers, prop)) { if (!headers.hasOwnProperty(prop)) continue;
header = headers[prop]; header = headers[prop];
// skip nullish headers. // skip nullish headers.
if (header == null) { if (header == null) {
continue; // eslint-disable-line no-restricted-syntax, no-continue continue;
} }
// convert all headers to arrays. // convert all headers to arrays.
if (!Array.isArray(header)) { if (!Array.isArray(header)) {
header = [header]; header = [header];
} }
// add non-empty headers. // add non-empty headers.
if (header.length) { if (header.length) {
contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
}
} }
} }
return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
}; };
FormData.prototype._getContentDisposition = function (value, options) { // eslint-disable-line consistent-return FormData.prototype._getContentDisposition = function(value, options) {
var filename;
var filename
, contentDisposition
;
if (typeof options.filepath === 'string') { if (typeof options.filepath === 'string') {
// custom filepath for relative paths // custom filepath for relative paths
filename = path.normalize(options.filepath).replace(/\\/g, '/'); filename = path.normalize(options.filepath).replace(/\\/g, '/');
} else if (options.filename || (value && (value.name || value.path))) { } else if (options.filename || value.name || value.path) {
/* // custom filename take precedence
* custom filename take precedence // formidable and the browser add a name property
* formidable and the browser add a name property // fs- and request- streams have path property
* fs- and request- streams have path property filename = path.basename(options.filename || value.name || value.path);
*/ } else if (value.readable && value.hasOwnProperty('httpVersion')) {
filename = path.basename(options.filename || (value && (value.name || value.path)));
} else if (value && value.readable && hasOwn(value, 'httpVersion')) {
// or try http response // or try http response
filename = path.basename(value.client._httpMessage.path || ''); filename = path.basename(value.client._httpMessage.path || '');
} }
if (filename) { if (filename) {
return 'filename="' + filename + '"'; contentDisposition = 'filename="' + filename + '"';
} }
return contentDisposition;
}; };
FormData.prototype._getContentType = function (value, options) { FormData.prototype._getContentType = function(value, options) {
// use custom content-type above all // use custom content-type above all
var contentType = options.contentType; var contentType = options.contentType;
// or try `name` from formidable, browser // or try `name` from formidable, browser
if (!contentType && value && value.name) { if (!contentType && value.name) {
contentType = mime.lookup(value.name); contentType = mime.lookup(value.name);
} }
// or try `path` from fs-, request- streams // or try `path` from fs-, request- streams
if (!contentType && value && value.path) { if (!contentType && value.path) {
contentType = mime.lookup(value.path); contentType = mime.lookup(value.path);
} }
// or if it's http-reponse // or if it's http-reponse
if (!contentType && value && value.readable && hasOwn(value, 'httpVersion')) { if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {
contentType = value.headers['content-type']; contentType = value.headers['content-type'];
} }
@@ -37014,18 +36968,18 @@ FormData.prototype._getContentType = function (value, options) {
} }
// fallback to the default content type if `value` is not simple value // fallback to the default content type if `value` is not simple value
if (!contentType && value && typeof value === 'object') { if (!contentType && typeof value == 'object') {
contentType = FormData.DEFAULT_CONTENT_TYPE; contentType = FormData.DEFAULT_CONTENT_TYPE;
} }
return contentType; return contentType;
}; };
FormData.prototype._multiPartFooter = function () { FormData.prototype._multiPartFooter = function() {
return function (next) { return function(next) {
var footer = FormData.LINE_BREAK; var footer = FormData.LINE_BREAK;
var lastPart = this._streams.length === 0; var lastPart = (this._streams.length === 0);
if (lastPart) { if (lastPart) {
footer += this._lastBoundary(); footer += this._lastBoundary();
} }
@@ -37034,18 +36988,18 @@ FormData.prototype._multiPartFooter = function () {
}.bind(this); }.bind(this);
}; };
FormData.prototype._lastBoundary = function () { FormData.prototype._lastBoundary = function() {
return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;
}; };
FormData.prototype.getHeaders = function (userHeaders) { FormData.prototype.getHeaders = function(userHeaders) {
var header; var header;
var formHeaders = { var formHeaders = {
'content-type': 'multipart/form-data; boundary=' + this.getBoundary() 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()
}; };
for (header in userHeaders) { // eslint-disable-line no-restricted-syntax for (header in userHeaders) {
if (hasOwn(userHeaders, header)) { if (userHeaders.hasOwnProperty(header)) {
formHeaders[header.toLowerCase()] = userHeaders[header]; formHeaders[header.toLowerCase()] = userHeaders[header];
} }
} }
@@ -37053,14 +37007,11 @@ FormData.prototype.getHeaders = function (userHeaders) {
return formHeaders; return formHeaders;
}; };
FormData.prototype.setBoundary = function (boundary) { FormData.prototype.setBoundary = function(boundary) {
if (typeof boundary !== 'string') {
throw new TypeError('FormData boundary must be a string');
}
this._boundary = boundary; this._boundary = boundary;
}; };
FormData.prototype.getBoundary = function () { FormData.prototype.getBoundary = function() {
if (!this._boundary) { if (!this._boundary) {
this._generateBoundary(); this._generateBoundary();
} }
@@ -37068,55 +37019,60 @@ FormData.prototype.getBoundary = function () {
return this._boundary; return this._boundary;
}; };
FormData.prototype.getBuffer = function () { FormData.prototype.getBuffer = function() {
var dataBuffer = new Buffer.alloc(0); // eslint-disable-line new-cap var dataBuffer = new Buffer.alloc( 0 );
var boundary = this.getBoundary(); var boundary = this.getBoundary();
// Create the form content. Add Line breaks to the end of data. // Create the form content. Add Line breaks to the end of data.
for (var i = 0, len = this._streams.length; i < len; i++) { for (var i = 0, len = this._streams.length; i < len; i++) {
if (typeof this._streams[i] !== 'function') { if (typeof this._streams[i] !== 'function') {
// Add content to the buffer. // Add content to the buffer.
if (Buffer.isBuffer(this._streams[i])) { if(Buffer.isBuffer(this._streams[i])) {
dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]); dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);
} else { }else {
dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]); dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);
} }
// Add break after content. // Add break after content.
if (typeof this._streams[i] !== 'string' || this._streams[i].substring(2, boundary.length + 2) !== boundary) { if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {
dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData.LINE_BREAK)]); dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );
} }
} }
} }
// Add the footer and return the Buffer object. // Add the footer and return the Buffer object.
return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]); return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );
}; };
FormData.prototype._generateBoundary = function () { FormData.prototype._generateBoundary = function() {
// This generates a 50 character boundary similar to those used by Firefox. // This generates a 50 character boundary similar to those used by Firefox.
// They are optimized for boyer-moore parsing. // They are optimized for boyer-moore parsing.
this._boundary = '--------------------------' + crypto.randomBytes(12).toString('hex'); var boundary = '--------------------------';
for (var i = 0; i < 24; i++) {
boundary += Math.floor(Math.random() * 10).toString(16);
}
this._boundary = boundary;
}; };
// Note: getLengthSync DOESN'T calculate streams length // Note: getLengthSync DOESN'T calculate streams length
// As workaround one can calculate file size manually and add it as knownLength option // As workaround one can calculate file size manually
FormData.prototype.getLengthSync = function () { // and add it as knownLength option
FormData.prototype.getLengthSync = function() {
var knownLength = this._overheadLength + this._valueLength; var knownLength = this._overheadLength + this._valueLength;
// Don't get confused, there are 3 "internal" streams for each keyval pair so it basically checks if there is any value added to the form // Don't get confused, there are 3 "internal" streams for each keyval pair
// so it basically checks if there is any value added to the form
if (this._streams.length) { if (this._streams.length) {
knownLength += this._lastBoundary().length; knownLength += this._lastBoundary().length;
} }
// https://github.com/form-data/form-data/issues/40 // https://github.com/form-data/form-data/issues/40
if (!this.hasKnownLength()) { if (!this.hasKnownLength()) {
/* // Some async length retrievers are present
* Some async length retrievers are present // therefore synchronous length calculation is false.
* therefore synchronous length calculation is false. // Please use getLength(callback) to get proper length
* Please use getLength(callback) to get proper length
*/
this._error(new Error('Cannot calculate proper length in synchronous way.')); this._error(new Error('Cannot calculate proper length in synchronous way.'));
} }
@@ -37126,7 +37082,7 @@ FormData.prototype.getLengthSync = function () {
// Public API to check if length of added values is known // Public API to check if length of added values is known
// https://github.com/form-data/form-data/issues/196 // https://github.com/form-data/form-data/issues/196
// https://github.com/form-data/form-data/issues/262 // https://github.com/form-data/form-data/issues/262
FormData.prototype.hasKnownLength = function () { FormData.prototype.hasKnownLength = function() {
var hasKnownLength = true; var hasKnownLength = true;
if (this._valuesToMeasure.length) { if (this._valuesToMeasure.length) {
@@ -37136,7 +37092,7 @@ FormData.prototype.hasKnownLength = function () {
return hasKnownLength; return hasKnownLength;
}; };
FormData.prototype.getLength = function (cb) { FormData.prototype.getLength = function(cb) {
var knownLength = this._overheadLength + this._valueLength; var knownLength = this._overheadLength + this._valueLength;
if (this._streams.length) { if (this._streams.length) {
@@ -37148,13 +37104,13 @@ FormData.prototype.getLength = function (cb) {
return; return;
} }
asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function (err, values) { asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
if (err) { if (err) {
cb(err); cb(err);
return; return;
} }
values.forEach(function (length) { values.forEach(function(length) {
knownLength += length; knownLength += length;
}); });
@@ -37162,26 +37118,31 @@ FormData.prototype.getLength = function (cb) {
}); });
}; };
FormData.prototype.submit = function (params, cb) { FormData.prototype.submit = function(params, cb) {
var request; var request
var options; , options
var defaults = { method: 'post' }; , defaults = {method: 'post'}
;
// parse provided url if it's string or treat it as options object // parse provided url if it's string
if (typeof params === 'string') { // or treat it as options object
params = parseUrl(params); // eslint-disable-line no-param-reassign if (typeof params == 'string') {
/* eslint sort-keys: 0 */
params = parseUrl(params);
options = populate({ options = populate({
port: params.port, port: params.port,
path: params.pathname, path: params.pathname,
host: params.hostname, host: params.hostname,
protocol: params.protocol protocol: params.protocol
}, defaults); }, defaults);
} else { // use custom params
// use custom params
} else {
options = populate(params, defaults); options = populate(params, defaults);
// if no port provided use default one // if no port provided use default one
if (!options.port) { if (!options.port) {
options.port = options.protocol === 'https:' ? 443 : 80; options.port = options.protocol == 'https:' ? 443 : 80;
} }
} }
@@ -37189,14 +37150,14 @@ FormData.prototype.submit = function (params, cb) {
options.headers = this.getHeaders(params.headers); options.headers = this.getHeaders(params.headers);
// https if specified, fallback to http in any other case // https if specified, fallback to http in any other case
if (options.protocol === 'https:') { if (options.protocol == 'https:') {
request = https.request(options); request = https.request(options);
} else { } else {
request = http.request(options); request = http.request(options);
} }
// get content length and fire away // get content length and fire away
this.getLength(function (err, length) { this.getLength(function(err, length) {
if (err && err !== 'Unknown stream') { if (err && err !== 'Unknown stream') {
this._error(err); this._error(err);
return; return;
@@ -37215,7 +37176,7 @@ FormData.prototype.submit = function (params, cb) {
request.removeListener('error', callback); request.removeListener('error', callback);
request.removeListener('response', onResponse); request.removeListener('response', onResponse);
return cb.call(this, error, responce); // eslint-disable-line no-invalid-this return cb.call(this, error, responce);
}; };
onResponse = callback.bind(this, null); onResponse = callback.bind(this, null);
@@ -37228,7 +37189,7 @@ FormData.prototype.submit = function (params, cb) {
return request; return request;
}; };
FormData.prototype._error = function (err) { FormData.prototype._error = function(err) {
if (!this.error) { if (!this.error) {
this.error = err; this.error = err;
this.pause(); this.pause();
@@ -37239,10 +37200,6 @@ FormData.prototype._error = function (err) {
FormData.prototype.toString = function () { FormData.prototype.toString = function () {
return '[object FormData]'; return '[object FormData]';
}; };
setToStringTag(FormData, 'FormData');
// Public API
module.exports = FormData;
/***/ }), /***/ }),
@@ -37250,13 +37207,12 @@ module.exports = FormData;
/***/ 2209: /***/ 2209:
/***/ ((module) => { /***/ ((module) => {
"use strict";
// populates missing values // populates missing values
module.exports = function (dst, src) { module.exports = function(dst, src) {
Object.keys(src).forEach(function (prop) {
dst[prop] = dst[prop] || src[prop]; // eslint-disable-line no-param-reassign Object.keys(src).forEach(function(prop)
{
dst[prop] = dst[prop] || src[prop];
}); });
return dst; return dst;
@@ -71380,10 +71336,6 @@ class RpcOutputStreamController {
cmp: [], cmp: [],
}; };
this._closed = false; this._closed = false;
// --- RpcOutputStream async iterator API
// iterator state.
// is undefined when no iterator has been acquired yet.
this._itState = { q: [] };
} }
// --- RpcOutputStream callback API // --- RpcOutputStream callback API
onNext(callback) { onNext(callback) {
@@ -71483,6 +71435,10 @@ class RpcOutputStreamController {
* messages are queued. * messages are queued.
*/ */
[Symbol.asyncIterator]() { [Symbol.asyncIterator]() {
// init the iterator state, enabling pushIt()
if (!this._itState) {
this._itState = { q: [] };
}
// if we are closed, we are definitely not receiving any more messages. // if we are closed, we are definitely not receiving any more messages.
// but we can't let the iterator get stuck. we want to either: // but we can't let the iterator get stuck. we want to either:
// a) finish the new iterator immediately, because we are completed // a) finish the new iterator immediately, because we are completed
@@ -71515,6 +71471,8 @@ class RpcOutputStreamController {
// this either resolves a pending promise, or enqueues the result. // this either resolves a pending promise, or enqueues the result.
pushIt(result) { pushIt(result) {
let state = this._itState; let state = this._itState;
if (!state)
return;
// is the consumer waiting for us? // is the consumer waiting for us?
if (state.p) { if (state.p) {
// yes, consumer is waiting for this promise. // yes, consumer is waiting for this promise.
@@ -73426,7 +73384,6 @@ const reflection_equals_1 = __nccwpck_require__(4827);
const binary_writer_1 = __nccwpck_require__(3957); const binary_writer_1 = __nccwpck_require__(3957);
const binary_reader_1 = __nccwpck_require__(2889); const binary_reader_1 = __nccwpck_require__(2889);
const baseDescriptors = Object.getOwnPropertyDescriptors(Object.getPrototypeOf({})); const baseDescriptors = Object.getOwnPropertyDescriptors(Object.getPrototypeOf({}));
const messageTypeDescriptor = baseDescriptors[message_type_contract_1.MESSAGE_TYPE] = {};
/** /**
* This standard message type provides reflection-based * This standard message type provides reflection-based
* operations to work with a message. * operations to work with a message.
@@ -73437,8 +73394,7 @@ class MessageType {
this.typeName = name; this.typeName = name;
this.fields = fields.map(reflection_info_1.normalizeFieldInfo); this.fields = fields.map(reflection_info_1.normalizeFieldInfo);
this.options = options !== null && options !== void 0 ? options : {}; this.options = options !== null && options !== void 0 ? options : {};
messageTypeDescriptor.value = this; this.messagePrototype = Object.create(null, Object.assign(Object.assign({}, baseDescriptors), { [message_type_contract_1.MESSAGE_TYPE]: { value: this } }));
this.messagePrototype = Object.create(null, baseDescriptors);
this.refTypeCheck = new reflection_type_check_1.ReflectionTypeCheck(this); this.refTypeCheck = new reflection_type_check_1.ReflectionTypeCheck(this);
this.refJsonReader = new reflection_json_reader_1.ReflectionJsonReader(this); this.refJsonReader = new reflection_json_reader_1.ReflectionJsonReader(this);
this.refJsonWriter = new reflection_json_writer_1.ReflectionJsonWriter(this); this.refJsonWriter = new reflection_json_writer_1.ReflectionJsonWriter(this);
@@ -74955,16 +74911,12 @@ class ReflectionJsonReader {
target[localName] = field.T().internalJsonRead(jsonValue, options, target[localName]); target[localName] = field.T().internalJsonRead(jsonValue, options, target[localName]);
break; break;
case "enum": case "enum":
if (jsonValue === null)
continue;
let val = this.enum(field.T(), jsonValue, field.name, options.ignoreUnknownFields); let val = this.enum(field.T(), jsonValue, field.name, options.ignoreUnknownFields);
if (val === false) if (val === false)
continue; continue;
target[localName] = val; target[localName] = val;
break; break;
case "scalar": case "scalar":
if (jsonValue === null)
continue;
target[localName] = this.scalar(jsonValue, field.T, field.L, field.name); target[localName] = this.scalar(jsonValue, field.T, field.L, field.name);
break; break;
} }
@@ -76399,7 +76351,7 @@ function expand(str, isTop) {
var isOptions = m.body.indexOf(',') >= 0; var isOptions = m.body.indexOf(',') >= 0;
if (!isSequence && !isOptions) { if (!isSequence && !isOptions) {
// {a},b} // {a},b}
if (m.post.match(/,(?!,).*\}/)) { if (m.post.match(/,.*\}/)) {
str = m.pre + '{' + m.body + escClose + m.post; str = m.pre + '{' + m.body + escClose + m.post;
return expand(str); return expand(str);
} }
@@ -76491,83 +76443,6 @@ function expand(str, isTop) {
/***/ }),
/***/ 2639:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var bind = __nccwpck_require__(7564);
var $apply = __nccwpck_require__(3945);
var $call = __nccwpck_require__(8093);
var $reflectApply = __nccwpck_require__(1330);
/** @type {import('./actualApply')} */
module.exports = $reflectApply || bind.call($call, $apply);
/***/ }),
/***/ 3945:
/***/ ((module) => {
"use strict";
/** @type {import('./functionApply')} */
module.exports = Function.prototype.apply;
/***/ }),
/***/ 8093:
/***/ ((module) => {
"use strict";
/** @type {import('./functionCall')} */
module.exports = Function.prototype.call;
/***/ }),
/***/ 8705:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var bind = __nccwpck_require__(7564);
var $TypeError = __nccwpck_require__(3314);
var $call = __nccwpck_require__(8093);
var $actualApply = __nccwpck_require__(2639);
/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */
module.exports = function callBindBasic(args) {
if (args.length < 1 || typeof args[0] !== 'function') {
throw new $TypeError('a function is required');
}
return $actualApply(bind, $call, args);
};
/***/ }),
/***/ 1330:
/***/ ((module) => {
"use strict";
/** @type {import('./reflectApply')} */
module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply;
/***/ }), /***/ }),
/***/ 5630: /***/ 5630:
@@ -76917,1004 +76792,6 @@ DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
}; };
/***/ }),
/***/ 6669:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var callBind = __nccwpck_require__(8705);
var gOPD = __nccwpck_require__(3170);
var hasProtoAccessor;
try {
// eslint-disable-next-line no-extra-parens, no-proto
hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */ ([]).__proto__ === Array.prototype;
} catch (e) {
if (!e || typeof e !== 'object' || !('code' in e) || e.code !== 'ERR_PROTO_ACCESS') {
throw e;
}
}
// eslint-disable-next-line no-extra-parens
var desc = !!hasProtoAccessor && gOPD && gOPD(Object.prototype, /** @type {keyof typeof Object.prototype} */ ('__proto__'));
var $Object = Object;
var $getPrototypeOf = $Object.getPrototypeOf;
/** @type {import('./get')} */
module.exports = desc && typeof desc.get === 'function'
? callBind([desc.get])
: typeof $getPrototypeOf === 'function'
? /** @type {import('./get')} */ function getDunder(value) {
// eslint-disable-next-line eqeqeq
return $getPrototypeOf(value == null ? value : $Object(value));
}
: false;
/***/ }),
/***/ 9094:
/***/ ((module) => {
"use strict";
/** @type {import('.')} */
var $defineProperty = Object.defineProperty || false;
if ($defineProperty) {
try {
$defineProperty({}, 'a', { value: 1 });
} catch (e) {
// IE 8 has a broken defineProperty
$defineProperty = false;
}
}
module.exports = $defineProperty;
/***/ }),
/***/ 3056:
/***/ ((module) => {
"use strict";
/** @type {import('./eval')} */
module.exports = EvalError;
/***/ }),
/***/ 1620:
/***/ ((module) => {
"use strict";
/** @type {import('.')} */
module.exports = Error;
/***/ }),
/***/ 4585:
/***/ ((module) => {
"use strict";
/** @type {import('./range')} */
module.exports = RangeError;
/***/ }),
/***/ 6905:
/***/ ((module) => {
"use strict";
/** @type {import('./ref')} */
module.exports = ReferenceError;
/***/ }),
/***/ 105:
/***/ ((module) => {
"use strict";
/** @type {import('./syntax')} */
module.exports = SyntaxError;
/***/ }),
/***/ 3314:
/***/ ((module) => {
"use strict";
/** @type {import('./type')} */
module.exports = TypeError;
/***/ }),
/***/ 2578:
/***/ ((module) => {
"use strict";
/** @type {import('./uri')} */
module.exports = URIError;
/***/ }),
/***/ 5399:
/***/ ((module) => {
"use strict";
/** @type {import('.')} */
module.exports = Object;
/***/ }),
/***/ 8700:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var GetIntrinsic = __nccwpck_require__(8089);
var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
var hasToStringTag = __nccwpck_require__(5479)();
var hasOwn = __nccwpck_require__(4076);
var $TypeError = __nccwpck_require__(3314);
var toStringTag = hasToStringTag ? Symbol.toStringTag : null;
/** @type {import('.')} */
module.exports = function setToStringTag(object, value) {
var overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;
var nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;
if (
(typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean')
|| (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean')
) {
throw new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans');
}
if (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) {
if ($defineProperty) {
$defineProperty(object, toStringTag, {
configurable: !nonConfigurable,
enumerable: false,
value: value,
writable: false
});
} else {
object[toStringTag] = value; // eslint-disable-line no-param-reassign
}
}
};
/***/ }),
/***/ 9808:
/***/ ((module) => {
"use strict";
/* eslint no-invalid-this: 1 */
var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
var toStr = Object.prototype.toString;
var max = Math.max;
var funcType = '[object Function]';
var concatty = function concatty(a, b) {
var arr = [];
for (var i = 0; i < a.length; i += 1) {
arr[i] = a[i];
}
for (var j = 0; j < b.length; j += 1) {
arr[j + a.length] = b[j];
}
return arr;
};
var slicy = function slicy(arrLike, offset) {
var arr = [];
for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {
arr[j] = arrLike[i];
}
return arr;
};
var joiny = function (arr, joiner) {
var str = '';
for (var i = 0; i < arr.length; i += 1) {
str += arr[i];
if (i + 1 < arr.length) {
str += joiner;
}
}
return str;
};
module.exports = function bind(that) {
var target = this;
if (typeof target !== 'function' || toStr.apply(target) !== funcType) {
throw new TypeError(ERROR_MESSAGE + target);
}
var args = slicy(arguments, 1);
var bound;
var binder = function () {
if (this instanceof bound) {
var result = target.apply(
this,
concatty(args, arguments)
);
if (Object(result) === result) {
return result;
}
return this;
}
return target.apply(
that,
concatty(args, arguments)
);
};
var boundLength = max(0, target.length - args.length);
var boundArgs = [];
for (var i = 0; i < boundLength; i++) {
boundArgs[i] = '$' + i;
}
bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);
if (target.prototype) {
var Empty = function Empty() {};
Empty.prototype = target.prototype;
bound.prototype = new Empty();
Empty.prototype = null;
}
return bound;
};
/***/ }),
/***/ 7564:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var implementation = __nccwpck_require__(9808);
module.exports = Function.prototype.bind || implementation;
/***/ }),
/***/ 8089:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var undefined;
var $Object = __nccwpck_require__(5399);
var $Error = __nccwpck_require__(1620);
var $EvalError = __nccwpck_require__(3056);
var $RangeError = __nccwpck_require__(4585);
var $ReferenceError = __nccwpck_require__(6905);
var $SyntaxError = __nccwpck_require__(105);
var $TypeError = __nccwpck_require__(3314);
var $URIError = __nccwpck_require__(2578);
var abs = __nccwpck_require__(5641);
var floor = __nccwpck_require__(6171);
var max = __nccwpck_require__(7147);
var min = __nccwpck_require__(1017);
var pow = __nccwpck_require__(6947);
var round = __nccwpck_require__(2621);
var sign = __nccwpck_require__(156);
var $Function = Function;
// eslint-disable-next-line consistent-return
var getEvalledConstructor = function (expressionSyntax) {
try {
return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
} catch (e) {}
};
var $gOPD = __nccwpck_require__(3170);
var $defineProperty = __nccwpck_require__(9094);
var throwTypeError = function () {
throw new $TypeError();
};
var ThrowTypeError = $gOPD
? (function () {
try {
// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
arguments.callee; // IE 8 does not throw here
return throwTypeError;
} catch (calleeThrows) {
try {
// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
return $gOPD(arguments, 'callee').get;
} catch (gOPDthrows) {
return throwTypeError;
}
}
}())
: throwTypeError;
var hasSymbols = __nccwpck_require__(3336)();
var getProto = __nccwpck_require__(1967);
var $ObjectGPO = __nccwpck_require__(1311);
var $ReflectGPO = __nccwpck_require__(8681);
var $apply = __nccwpck_require__(3945);
var $call = __nccwpck_require__(8093);
var needsEval = {};
var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);
var INTRINSICS = {
__proto__: null,
'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,
'%Array%': Array,
'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,
'%AsyncFromSyncIteratorPrototype%': undefined,
'%AsyncFunction%': needsEval,
'%AsyncGenerator%': needsEval,
'%AsyncGeneratorFunction%': needsEval,
'%AsyncIteratorPrototype%': needsEval,
'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,
'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,
'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,
'%Boolean%': Boolean,
'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
'%Date%': Date,
'%decodeURI%': decodeURI,
'%decodeURIComponent%': decodeURIComponent,
'%encodeURI%': encodeURI,
'%encodeURIComponent%': encodeURIComponent,
'%Error%': $Error,
'%eval%': eval, // eslint-disable-line no-eval
'%EvalError%': $EvalError,
'%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array,
'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,
'%Function%': $Function,
'%GeneratorFunction%': needsEval,
'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
'%isFinite%': isFinite,
'%isNaN%': isNaN,
'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,
'%JSON%': typeof JSON === 'object' ? JSON : undefined,
'%Map%': typeof Map === 'undefined' ? undefined : Map,
'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),
'%Math%': Math,
'%Number%': Number,
'%Object%': $Object,
'%Object.getOwnPropertyDescriptor%': $gOPD,
'%parseFloat%': parseFloat,
'%parseInt%': parseInt,
'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
'%RangeError%': $RangeError,
'%ReferenceError%': $ReferenceError,
'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
'%RegExp%': RegExp,
'%Set%': typeof Set === 'undefined' ? undefined : Set,
'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),
'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
'%String%': String,
'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,
'%Symbol%': hasSymbols ? Symbol : undefined,
'%SyntaxError%': $SyntaxError,
'%ThrowTypeError%': ThrowTypeError,
'%TypedArray%': TypedArray,
'%TypeError%': $TypeError,
'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
'%URIError%': $URIError,
'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,
'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,
'%Function.prototype.call%': $call,
'%Function.prototype.apply%': $apply,
'%Object.defineProperty%': $defineProperty,
'%Object.getPrototypeOf%': $ObjectGPO,
'%Math.abs%': abs,
'%Math.floor%': floor,
'%Math.max%': max,
'%Math.min%': min,
'%Math.pow%': pow,
'%Math.round%': round,
'%Math.sign%': sign,
'%Reflect.getPrototypeOf%': $ReflectGPO
};
if (getProto) {
try {
null.error; // eslint-disable-line no-unused-expressions
} catch (e) {
// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229
var errorProto = getProto(getProto(e));
INTRINSICS['%Error.prototype%'] = errorProto;
}
}
var doEval = function doEval(name) {
var value;
if (name === '%AsyncFunction%') {
value = getEvalledConstructor('async function () {}');
} else if (name === '%GeneratorFunction%') {
value = getEvalledConstructor('function* () {}');
} else if (name === '%AsyncGeneratorFunction%') {
value = getEvalledConstructor('async function* () {}');
} else if (name === '%AsyncGenerator%') {
var fn = doEval('%AsyncGeneratorFunction%');
if (fn) {
value = fn.prototype;
}
} else if (name === '%AsyncIteratorPrototype%') {
var gen = doEval('%AsyncGenerator%');
if (gen && getProto) {
value = getProto(gen.prototype);
}
}
INTRINSICS[name] = value;
return value;
};
var LEGACY_ALIASES = {
__proto__: null,
'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],
'%ArrayPrototype%': ['Array', 'prototype'],
'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],
'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],
'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],
'%ArrayProto_values%': ['Array', 'prototype', 'values'],
'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],
'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],
'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],
'%BooleanPrototype%': ['Boolean', 'prototype'],
'%DataViewPrototype%': ['DataView', 'prototype'],
'%DatePrototype%': ['Date', 'prototype'],
'%ErrorPrototype%': ['Error', 'prototype'],
'%EvalErrorPrototype%': ['EvalError', 'prototype'],
'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],
'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],
'%FunctionPrototype%': ['Function', 'prototype'],
'%Generator%': ['GeneratorFunction', 'prototype'],
'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],
'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],
'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],
'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],
'%JSONParse%': ['JSON', 'parse'],
'%JSONStringify%': ['JSON', 'stringify'],
'%MapPrototype%': ['Map', 'prototype'],
'%NumberPrototype%': ['Number', 'prototype'],
'%ObjectPrototype%': ['Object', 'prototype'],
'%ObjProto_toString%': ['Object', 'prototype', 'toString'],
'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],
'%PromisePrototype%': ['Promise', 'prototype'],
'%PromiseProto_then%': ['Promise', 'prototype', 'then'],
'%Promise_all%': ['Promise', 'all'],
'%Promise_reject%': ['Promise', 'reject'],
'%Promise_resolve%': ['Promise', 'resolve'],
'%RangeErrorPrototype%': ['RangeError', 'prototype'],
'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],
'%RegExpPrototype%': ['RegExp', 'prototype'],
'%SetPrototype%': ['Set', 'prototype'],
'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],
'%StringPrototype%': ['String', 'prototype'],
'%SymbolPrototype%': ['Symbol', 'prototype'],
'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],
'%TypedArrayPrototype%': ['TypedArray', 'prototype'],
'%TypeErrorPrototype%': ['TypeError', 'prototype'],
'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],
'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],
'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],
'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],
'%URIErrorPrototype%': ['URIError', 'prototype'],
'%WeakMapPrototype%': ['WeakMap', 'prototype'],
'%WeakSetPrototype%': ['WeakSet', 'prototype']
};
var bind = __nccwpck_require__(7564);
var hasOwn = __nccwpck_require__(4076);
var $concat = bind.call($call, Array.prototype.concat);
var $spliceApply = bind.call($apply, Array.prototype.splice);
var $replace = bind.call($call, String.prototype.replace);
var $strSlice = bind.call($call, String.prototype.slice);
var $exec = bind.call($call, RegExp.prototype.exec);
/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
var stringToPath = function stringToPath(string) {
var first = $strSlice(string, 0, 1);
var last = $strSlice(string, -1);
if (first === '%' && last !== '%') {
throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');
} else if (last === '%' && first !== '%') {
throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');
}
var result = [];
$replace(string, rePropName, function (match, number, quote, subString) {
result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;
});
return result;
};
/* end adaptation */
var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
var intrinsicName = name;
var alias;
if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
alias = LEGACY_ALIASES[intrinsicName];
intrinsicName = '%' + alias[0] + '%';
}
if (hasOwn(INTRINSICS, intrinsicName)) {
var value = INTRINSICS[intrinsicName];
if (value === needsEval) {
value = doEval(intrinsicName);
}
if (typeof value === 'undefined' && !allowMissing) {
throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
}
return {
alias: alias,
name: intrinsicName,
value: value
};
}
throw new $SyntaxError('intrinsic ' + name + ' does not exist!');
};
module.exports = function GetIntrinsic(name, allowMissing) {
if (typeof name !== 'string' || name.length === 0) {
throw new $TypeError('intrinsic name must be a non-empty string');
}
if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
throw new $TypeError('"allowMissing" argument must be a boolean');
}
if ($exec(/^%?[^%]*%?$/, name) === null) {
throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');
}
var parts = stringToPath(name);
var intrinsicBaseName = parts.length > 0 ? parts[0] : '';
var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);
var intrinsicRealName = intrinsic.name;
var value = intrinsic.value;
var skipFurtherCaching = false;
var alias = intrinsic.alias;
if (alias) {
intrinsicBaseName = alias[0];
$spliceApply(parts, $concat([0, 1], alias));
}
for (var i = 1, isOwn = true; i < parts.length; i += 1) {
var part = parts[i];
var first = $strSlice(part, 0, 1);
var last = $strSlice(part, -1);
if (
(
(first === '"' || first === "'" || first === '`')
|| (last === '"' || last === "'" || last === '`')
)
&& first !== last
) {
throw new $SyntaxError('property names with quotes must have matching quotes');
}
if (part === 'constructor' || !isOwn) {
skipFurtherCaching = true;
}
intrinsicBaseName += '.' + part;
intrinsicRealName = '%' + intrinsicBaseName + '%';
if (hasOwn(INTRINSICS, intrinsicRealName)) {
value = INTRINSICS[intrinsicRealName];
} else if (value != null) {
if (!(part in value)) {
if (!allowMissing) {
throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
}
return void undefined;
}
if ($gOPD && (i + 1) >= parts.length) {
var desc = $gOPD(value, part);
isOwn = !!desc;
// By convention, when a data property is converted to an accessor
// property to emulate a data property that does not suffer from
// the override mistake, that accessor's getter is marked with
// an `originalValue` property. Here, when we detect this, we
// uphold the illusion by pretending to see that original data
// property, i.e., returning the value rather than the getter
// itself.
if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {
value = desc.get;
} else {
value = value[part];
}
} else {
isOwn = hasOwn(value, part);
value = value[part];
}
if (isOwn && !skipFurtherCaching) {
INTRINSICS[intrinsicRealName] = value;
}
}
}
return value;
};
/***/ }),
/***/ 1311:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var $Object = __nccwpck_require__(5399);
/** @type {import('./Object.getPrototypeOf')} */
module.exports = $Object.getPrototypeOf || null;
/***/ }),
/***/ 8681:
/***/ ((module) => {
"use strict";
/** @type {import('./Reflect.getPrototypeOf')} */
module.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null;
/***/ }),
/***/ 1967:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var reflectGetProto = __nccwpck_require__(8681);
var originalGetProto = __nccwpck_require__(1311);
var getDunderProto = __nccwpck_require__(6669);
/** @type {import('.')} */
module.exports = reflectGetProto
? function getProto(O) {
// @ts-expect-error TS can't narrow inside a closure, for some reason
return reflectGetProto(O);
}
: originalGetProto
? function getProto(O) {
if (!O || (typeof O !== 'object' && typeof O !== 'function')) {
throw new TypeError('getProto: not an object');
}
// @ts-expect-error TS can't narrow inside a closure, for some reason
return originalGetProto(O);
}
: getDunderProto
? function getProto(O) {
// @ts-expect-error TS can't narrow inside a closure, for some reason
return getDunderProto(O);
}
: null;
/***/ }),
/***/ 1174:
/***/ ((module) => {
"use strict";
/** @type {import('./gOPD')} */
module.exports = Object.getOwnPropertyDescriptor;
/***/ }),
/***/ 3170:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
/** @type {import('.')} */
var $gOPD = __nccwpck_require__(1174);
if ($gOPD) {
try {
$gOPD([], 'length');
} catch (e) {
// IE 8 has a broken gOPD
$gOPD = null;
}
}
module.exports = $gOPD;
/***/ }),
/***/ 3336:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var origSymbol = typeof Symbol !== 'undefined' && Symbol;
var hasSymbolSham = __nccwpck_require__(1114);
/** @type {import('.')} */
module.exports = function hasNativeSymbols() {
if (typeof origSymbol !== 'function') { return false; }
if (typeof Symbol !== 'function') { return false; }
if (typeof origSymbol('foo') !== 'symbol') { return false; }
if (typeof Symbol('bar') !== 'symbol') { return false; }
return hasSymbolSham();
};
/***/ }),
/***/ 1114:
/***/ ((module) => {
"use strict";
/** @type {import('./shams')} */
/* eslint complexity: [2, 18], max-statements: [2, 33] */
module.exports = function hasSymbols() {
if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
if (typeof Symbol.iterator === 'symbol') { return true; }
/** @type {{ [k in symbol]?: unknown }} */
var obj = {};
var sym = Symbol('test');
var symObj = Object(sym);
if (typeof sym === 'string') { return false; }
if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
// temp disabled per https://github.com/ljharb/object.assign/issues/17
// if (sym instanceof Symbol) { return false; }
// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
// if (!(symObj instanceof Symbol)) { return false; }
// if (typeof Symbol.prototype.toString !== 'function') { return false; }
// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
var symVal = 42;
obj[sym] = symVal;
for (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
var syms = Object.getOwnPropertySymbols(obj);
if (syms.length !== 1 || syms[0] !== sym) { return false; }
if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
if (typeof Object.getOwnPropertyDescriptor === 'function') {
// eslint-disable-next-line no-extra-parens
var descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym));
if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
}
return true;
};
/***/ }),
/***/ 5479:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var hasSymbols = __nccwpck_require__(1114);
/** @type {import('.')} */
module.exports = function hasToStringTagShams() {
return hasSymbols() && !!Symbol.toStringTag;
};
/***/ }),
/***/ 4076:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var call = Function.prototype.call;
var $hasOwn = Object.prototype.hasOwnProperty;
var bind = __nccwpck_require__(7564);
/** @type {import('.')} */
module.exports = bind.call(call, $hasOwn);
/***/ }),
/***/ 5641:
/***/ ((module) => {
"use strict";
/** @type {import('./abs')} */
module.exports = Math.abs;
/***/ }),
/***/ 6171:
/***/ ((module) => {
"use strict";
/** @type {import('./floor')} */
module.exports = Math.floor;
/***/ }),
/***/ 7044:
/***/ ((module) => {
"use strict";
/** @type {import('./isNaN')} */
module.exports = Number.isNaN || function isNaN(a) {
return a !== a;
};
/***/ }),
/***/ 7147:
/***/ ((module) => {
"use strict";
/** @type {import('./max')} */
module.exports = Math.max;
/***/ }),
/***/ 1017:
/***/ ((module) => {
"use strict";
/** @type {import('./min')} */
module.exports = Math.min;
/***/ }),
/***/ 6947:
/***/ ((module) => {
"use strict";
/** @type {import('./pow')} */
module.exports = Math.pow;
/***/ }),
/***/ 2621:
/***/ ((module) => {
"use strict";
/** @type {import('./round')} */
module.exports = Math.round;
/***/ }),
/***/ 156:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
"use strict";
var $isNaN = __nccwpck_require__(7044);
/** @type {import('./sign')} */
module.exports = function sign(number) {
if ($isNaN(number) || number === 0) {
return number;
}
return number < 0 ? -1 : +1;
};
/***/ }), /***/ }),
/***/ 9829: /***/ 9829:
@@ -89800,20 +88677,15 @@ exports.STATE_CACHE_MATCHED_KEY = exports.STATE_CACHE_KEY = void 0;
exports.restoreCache = restoreCache; exports.restoreCache = restoreCache;
const cache = __importStar(__nccwpck_require__(5116)); const cache = __importStar(__nccwpck_require__(5116));
const core = __importStar(__nccwpck_require__(7484)); const core = __importStar(__nccwpck_require__(7484));
const exec = __importStar(__nccwpck_require__(5236));
const hash_files_1 = __nccwpck_require__(9660);
const inputs_1 = __nccwpck_require__(9612); const inputs_1 = __nccwpck_require__(9612);
const platforms_1 = __nccwpck_require__(8361); const platforms_1 = __nccwpck_require__(8361);
const hash_files_1 = __nccwpck_require__(9660);
const exec = __importStar(__nccwpck_require__(5236));
exports.STATE_CACHE_KEY = "cache-key"; exports.STATE_CACHE_KEY = "cache-key";
exports.STATE_CACHE_MATCHED_KEY = "cache-matched-key"; exports.STATE_CACHE_MATCHED_KEY = "cache-matched-key";
const CACHE_VERSION = "1"; const CACHE_VERSION = "1";
async function restoreCache() { async function restoreCache() {
const cacheKey = await computeKeys(); const cacheKey = await computeKeys();
core.saveState(exports.STATE_CACHE_KEY, cacheKey);
if (!inputs_1.restoreCache) {
core.info("restore-cache is false. Skipping restore cache step.");
return;
}
let matchedKey; let matchedKey;
core.info(`Trying to restore uv cache from GitHub Actions cache with key: ${cacheKey}`); core.info(`Trying to restore uv cache from GitHub Actions cache with key: ${cacheKey}`);
try { try {
@@ -89825,6 +88697,7 @@ async function restoreCache() {
core.setOutput("cache-hit", false); core.setOutput("cache-hit", false);
return; return;
} }
core.saveState(exports.STATE_CACHE_KEY, cacheKey);
handleMatchResult(matchedKey, cacheKey); handleMatchResult(matchedKey, cacheKey);
} }
async function computeKeys() { async function computeKeys() {
@@ -89851,12 +88724,12 @@ async function getPythonVersion() {
} }
let output = ""; let output = "";
const options = { const options = {
silent: !core.isDebug(),
listeners: { listeners: {
stdout: (data) => { stdout: (data) => {
output += data.toString(); output += data.toString();
}, },
}, },
silent: !core.isDebug(),
}; };
try { try {
const execArgs = ["python", "find", "--directory", inputs_1.workingDirectory]; const execArgs = ["python", "find", "--directory", inputs_1.workingDirectory];
@@ -89928,10 +88801,10 @@ var __importStar = (this && this.__importStar) || (function () {
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.hashFiles = hashFiles; exports.hashFiles = hashFiles;
const crypto = __importStar(__nccwpck_require__(7598)); const crypto = __importStar(__nccwpck_require__(7598));
const core = __importStar(__nccwpck_require__(7484));
const fs = __importStar(__nccwpck_require__(3024)); const fs = __importStar(__nccwpck_require__(3024));
const stream = __importStar(__nccwpck_require__(7075)); const stream = __importStar(__nccwpck_require__(7075));
const util = __importStar(__nccwpck_require__(7975)); const util = __importStar(__nccwpck_require__(7975));
const core = __importStar(__nccwpck_require__(7484));
const glob_1 = __nccwpck_require__(7206); const glob_1 = __nccwpck_require__(7206);
/** /**
* Hashes files matching the given glob pattern. * Hashes files matching the given glob pattern.
@@ -90014,21 +88887,16 @@ var __importStar = (this && this.__importStar) || (function () {
})(); })();
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.run = run; exports.run = run;
const fs = __importStar(__nccwpck_require__(3024));
const cache = __importStar(__nccwpck_require__(5116)); const cache = __importStar(__nccwpck_require__(5116));
const core = __importStar(__nccwpck_require__(7484)); const core = __importStar(__nccwpck_require__(7484));
const exec = __importStar(__nccwpck_require__(5236)); const exec = __importStar(__nccwpck_require__(5236));
const fs = __importStar(__nccwpck_require__(3024));
const restore_cache_1 = __nccwpck_require__(5391); const restore_cache_1 = __nccwpck_require__(5391);
const inputs_1 = __nccwpck_require__(9612); const inputs_1 = __nccwpck_require__(9612);
async function run() { async function run() {
try { try {
if (inputs_1.enableCache) { if (inputs_1.enableCache) {
if (inputs_1.saveCache) { await saveCache();
await saveCache();
}
else {
core.info("save-cache is false. Skipping save cache step.");
}
// node will stay alive if any promises are not resolved, // node will stay alive if any promises are not resolved,
// which is a possibility if HTTP requests are dangling // which is a possibility if HTTP requests are dangling
// due to retries or timeouts. We know that if we got here // due to retries or timeouts. We know that if we got here
@@ -90130,21 +88998,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod }; return (mod && mod.__esModule) ? mod : { "default": mod };
}; };
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.addProblemMatchers = exports.manifestFile = exports.githubToken = exports.serverUrl = exports.toolDir = exports.toolBinDir = exports.ignoreEmptyWorkdir = exports.ignoreNothingToCache = exports.pruneCache = exports.cacheDependencyGlob = exports.cacheLocalPath = exports.cacheSuffix = exports.saveCache = exports.restoreCache = exports.enableCache = exports.checkSum = exports.activateEnvironment = exports.pythonVersion = exports.versionFile = exports.version = exports.workingDirectory = void 0; exports.manifestFile = exports.githubToken = exports.serverUrl = exports.toolDir = exports.toolBinDir = exports.ignoreEmptyWorkdir = exports.ignoreNothingToCache = exports.pruneCache = exports.cacheDependencyGlob = exports.cacheLocalPath = exports.cacheSuffix = exports.enableCache = exports.checkSum = exports.workingDirectory = exports.activateEnvironment = exports.pythonVersion = exports.version = void 0;
const node_path_1 = __importDefault(__nccwpck_require__(6760));
const core = __importStar(__nccwpck_require__(7484)); const core = __importStar(__nccwpck_require__(7484));
exports.workingDirectory = core.getInput("working-directory"); const node_path_1 = __importDefault(__nccwpck_require__(6760));
exports.version = core.getInput("version"); exports.version = core.getInput("version");
exports.versionFile = getVersionFile();
exports.pythonVersion = core.getInput("python-version"); exports.pythonVersion = core.getInput("python-version");
exports.activateEnvironment = core.getBooleanInput("activate-environment"); exports.activateEnvironment = core.getBooleanInput("activate-environment");
exports.workingDirectory = core.getInput("working-directory");
exports.checkSum = core.getInput("checksum"); exports.checkSum = core.getInput("checksum");
exports.enableCache = getEnableCache(); exports.enableCache = getEnableCache();
exports.restoreCache = core.getInput("restore-cache") === "true";
exports.saveCache = core.getInput("save-cache") === "true";
exports.cacheSuffix = core.getInput("cache-suffix") || ""; exports.cacheSuffix = core.getInput("cache-suffix") || "";
exports.cacheLocalPath = getCacheLocalPath(); exports.cacheLocalPath = getCacheLocalPath();
exports.cacheDependencyGlob = getCacheDependencyGlob(); exports.cacheDependencyGlob = core.getInput("cache-dependency-glob");
exports.pruneCache = core.getInput("prune-cache") === "true"; exports.pruneCache = core.getInput("prune-cache") === "true";
exports.ignoreNothingToCache = core.getInput("ignore-nothing-to-cache") === "true"; exports.ignoreNothingToCache = core.getInput("ignore-nothing-to-cache") === "true";
exports.ignoreEmptyWorkdir = core.getInput("ignore-empty-workdir") === "true"; exports.ignoreEmptyWorkdir = core.getInput("ignore-empty-workdir") === "true";
@@ -90153,15 +89018,6 @@ exports.toolDir = getToolDir();
exports.serverUrl = core.getInput("server-url"); exports.serverUrl = core.getInput("server-url");
exports.githubToken = core.getInput("github-token"); exports.githubToken = core.getInput("github-token");
exports.manifestFile = getManifestFile(); exports.manifestFile = getManifestFile();
exports.addProblemMatchers = core.getInput("add-problem-matchers") === "true";
function getVersionFile() {
const versionFileInput = core.getInput("version-file");
if (versionFileInput !== "") {
const tildeExpanded = expandTilde(versionFileInput);
return resolveRelativePath(tildeExpanded);
}
return versionFileInput;
}
function getEnableCache() { function getEnableCache() {
const enableCacheInput = core.getInput("enable-cache"); const enableCacheInput = core.getInput("enable-cache");
if (enableCacheInput === "auto") { if (enableCacheInput === "auto") {
@@ -90172,8 +89028,7 @@ function getEnableCache() {
function getToolBinDir() { function getToolBinDir() {
const toolBinDirInput = core.getInput("tool-bin-dir"); const toolBinDirInput = core.getInput("tool-bin-dir");
if (toolBinDirInput !== "") { if (toolBinDirInput !== "") {
const tildeExpanded = expandTilde(toolBinDirInput); return expandTilde(toolBinDirInput);
return resolveRelativePath(tildeExpanded);
} }
if (process.platform === "win32") { if (process.platform === "win32") {
if (process.env.RUNNER_TEMP !== undefined) { if (process.env.RUNNER_TEMP !== undefined) {
@@ -90186,8 +89041,7 @@ function getToolBinDir() {
function getToolDir() { function getToolDir() {
const toolDirInput = core.getInput("tool-dir"); const toolDirInput = core.getInput("tool-dir");
if (toolDirInput !== "") { if (toolDirInput !== "") {
const tildeExpanded = expandTilde(toolDirInput); return expandTilde(toolDirInput);
return resolveRelativePath(tildeExpanded);
} }
if (process.platform === "win32") { if (process.platform === "win32") {
if (process.env.RUNNER_TEMP !== undefined) { if (process.env.RUNNER_TEMP !== undefined) {
@@ -90200,8 +89054,7 @@ function getToolDir() {
function getCacheLocalPath() { function getCacheLocalPath() {
const cacheLocalPathInput = core.getInput("cache-local-path"); const cacheLocalPathInput = core.getInput("cache-local-path");
if (cacheLocalPathInput !== "") { if (cacheLocalPathInput !== "") {
const tildeExpanded = expandTilde(cacheLocalPathInput); return expandTilde(cacheLocalPathInput);
return resolveRelativePath(tildeExpanded);
} }
if (process.env.RUNNER_ENVIRONMENT === "github-hosted") { if (process.env.RUNNER_ENVIRONMENT === "github-hosted") {
if (process.env.RUNNER_TEMP !== undefined) { if (process.env.RUNNER_TEMP !== undefined) {
@@ -90214,31 +89067,12 @@ function getCacheLocalPath() {
} }
return `${process.env.HOME}${node_path_1.default.sep}.cache${node_path_1.default.sep}uv`; return `${process.env.HOME}${node_path_1.default.sep}.cache${node_path_1.default.sep}uv`;
} }
function getCacheDependencyGlob() {
const cacheDependencyGlobInput = core.getInput("cache-dependency-glob");
if (cacheDependencyGlobInput !== "") {
return cacheDependencyGlobInput
.split("\n")
.map((part) => part.trim())
.map((part) => expandTilde(part))
.map((part) => resolveRelativePath(part))
.join("\n");
}
return cacheDependencyGlobInput;
}
function expandTilde(input) { function expandTilde(input) {
if (input.startsWith("~")) { if (input.startsWith("~")) {
return `${process.env.HOME}${input.substring(1)}`; return `${process.env.HOME}${input.substring(1)}`;
} }
return input; return input;
} }
function resolveRelativePath(inputPath) {
const hasNegation = inputPath.startsWith("!");
const pathWithoutNegation = hasNegation ? inputPath.substring(1) : inputPath;
const resolvedPath = node_path_1.default.resolve(exports.workingDirectory, pathWithoutNegation);
core.debug(`Resolving relative path ${inputPath} to ${hasNegation ? "!" : ""}${resolvedPath}`);
return hasNegation ? `!${resolvedPath}` : resolvedPath;
}
function getManifestFile() { function getManifestFile() {
const manifestFileInput = core.getInput("manifest-file"); const manifestFileInput = core.getInput("manifest-file");
if (manifestFileInput !== "") { if (manifestFileInput !== "") {
@@ -90291,16 +89125,16 @@ var __importStar = (this && this.__importStar) || (function () {
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.getArch = getArch; exports.getArch = getArch;
exports.getPlatform = getPlatform; exports.getPlatform = getPlatform;
const core = __importStar(__nccwpck_require__(7484));
const exec = __importStar(__nccwpck_require__(5236)); const exec = __importStar(__nccwpck_require__(5236));
const core = __importStar(__nccwpck_require__(7484));
function getArch() { function getArch() {
const arch = process.arch; const arch = process.arch;
const archMapping = { const archMapping = {
arm64: "aarch64",
ia32: "i686", ia32: "i686",
ppc64: "powerpc64le",
s390x: "s390x",
x64: "x86_64", x64: "x86_64",
arm64: "aarch64",
s390x: "s390x",
ppc64: "powerpc64le",
}; };
if (arch in archMapping) { if (arch in archMapping) {
return archMapping[arch]; return archMapping[arch];
@@ -90309,8 +89143,8 @@ function getArch() {
async function getPlatform() { async function getPlatform() {
const processPlatform = process.platform; const processPlatform = process.platform;
const platformMapping = { const platformMapping = {
darwin: "apple-darwin",
linux: "unknown-linux-gnu", linux: "unknown-linux-gnu",
darwin: "apple-darwin",
win32: "pc-windows-msvc", win32: "pc-windows-msvc",
}; };
if (processPlatform in platformMapping) { if (processPlatform in platformMapping) {
@@ -90326,16 +89160,16 @@ async function isMuslOs() {
let stdOutput = ""; let stdOutput = "";
let errOutput = ""; let errOutput = "";
const options = { const options = {
ignoreReturnCode: true, silent: !core.isDebug(),
listeners: { listeners: {
stderr: (data) => {
errOutput += data.toString();
},
stdout: (data) => { stdout: (data) => {
stdOutput += data.toString(); stdOutput += data.toString();
}, },
stderr: (data) => {
errOutput += data.toString();
},
}, },
silent: !core.isDebug(), ignoreReturnCode: true,
}; };
try { try {
const execArgs = ["--version"]; const execArgs = ["--version"];
@@ -92261,7 +91095,7 @@ module.exports = parseParams
/***/ ((module) => { /***/ ((module) => {
"use strict"; "use strict";
module.exports = /*#__PURE__*/JSON.parse('{"name":"@actions/cache","version":"4.0.5","preview":true,"description":"Actions cache lib","keywords":["github","actions","cache"],"homepage":"https://github.com/actions/toolkit/tree/main/packages/cache","license":"MIT","main":"lib/cache.js","types":"lib/cache.d.ts","directories":{"lib":"lib","test":"__tests__"},"files":["lib","!.DS_Store"],"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/actions/toolkit.git","directory":"packages/cache"},"scripts":{"audit-moderate":"npm install && npm audit --json --audit-level=moderate > audit.json","test":"echo \\"Error: run tests from root\\" && exit 1","tsc":"tsc"},"bugs":{"url":"https://github.com/actions/toolkit/issues"},"dependencies":{"@actions/core":"^1.11.1","@actions/exec":"^1.0.1","@actions/glob":"^0.1.0","@protobuf-ts/runtime-rpc":"^2.11.1","@actions/http-client":"^2.1.1","@actions/io":"^1.0.1","@azure/abort-controller":"^1.1.0","@azure/ms-rest-js":"^2.6.0","@azure/storage-blob":"^12.13.0","semver":"^6.3.1"},"devDependencies":{"@types/node":"^22.13.9","@types/semver":"^6.0.0","@protobuf-ts/plugin":"^2.9.4","typescript":"^5.2.2"}}'); module.exports = /*#__PURE__*/JSON.parse('{"name":"@actions/cache","version":"4.0.3","preview":true,"description":"Actions cache lib","keywords":["github","actions","cache"],"homepage":"https://github.com/actions/toolkit/tree/main/packages/cache","license":"MIT","main":"lib/cache.js","types":"lib/cache.d.ts","directories":{"lib":"lib","test":"__tests__"},"files":["lib","!.DS_Store"],"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/actions/toolkit.git","directory":"packages/cache"},"scripts":{"audit-moderate":"npm install && npm audit --json --audit-level=moderate > audit.json","test":"echo \\"Error: run tests from root\\" && exit 1","tsc":"tsc"},"bugs":{"url":"https://github.com/actions/toolkit/issues"},"dependencies":{"@actions/core":"^1.11.1","@actions/exec":"^1.0.1","@actions/glob":"^0.1.0","@actions/http-client":"^2.1.1","@actions/io":"^1.0.1","@azure/abort-controller":"^1.1.0","@azure/ms-rest-js":"^2.6.0","@azure/storage-blob":"^12.13.0","@protobuf-ts/plugin":"^2.9.4","semver":"^6.3.1"},"devDependencies":{"@types/node":"^22.13.9","@types/semver":"^6.0.0","typescript":"^5.2.2"}}');
/***/ }), /***/ }),

8457
dist/setup/index.js generated vendored

File diff suppressed because one or more lines are too long

6400
dist/update-known-versions/index.js generated vendored

File diff suppressed because one or more lines are too long

7025
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -6,12 +6,14 @@
"main": "dist/index.js", "main": "dist/index.js",
"scripts": { "scripts": {
"build": "tsc", "build": "tsc",
"check": "biome check --write", "format": "biome format --fix",
"format-check": "biome format",
"lint": "biome lint --fix",
"package": "ncc build -o dist/setup src/setup-uv.ts && ncc build -o dist/save-cache src/save-cache.ts && ncc build -o dist/update-known-versions src/update-known-versions.ts", "package": "ncc build -o dist/setup src/setup-uv.ts && ncc build -o dist/save-cache src/save-cache.ts && ncc build -o dist/update-known-versions src/update-known-versions.ts",
"test": "jest", "test": "jest",
"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-versions": "RUNNER_TEMP=known_versions node dist/update-known-versions/index.js src/download/checksum/known-versions.ts \"$(gh auth token)\"", "update-known-versions": "RUNNER_TEMP=known_versions node dist/update-known-versions/index.js src/download/checksum/known-versions.ts \"$(gh auth token)\"",
"all": "npm run build && npm run check && npm run package && npm test" "all": "npm run build && npm run format && npm run lint && npm run package && npm test"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@@ -21,28 +23,28 @@
"author": "@eifinger", "author": "@eifinger",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/cache": "^4.0.5", "@actions/cache": "^4.0.3",
"@actions/core": "^1.11.1", "@actions/core": "^1.11.1",
"@actions/exec": "^1.1.1", "@actions/exec": "^1.1.1",
"@actions/glob": "^0.5.0", "@actions/glob": "^0.5.0",
"@actions/io": "^1.1.3", "@actions/io": "^1.1.3",
"@actions/tool-cache": "^2.0.2", "@actions/tool-cache": "^2.0.2",
"@octokit/core": "^7.0.3", "@octokit/core": "^7.0.2",
"@octokit/plugin-paginate-rest": "^13.1.1", "@octokit/plugin-paginate-rest": "^12.0.0",
"@octokit/plugin-rest-endpoint-methods": "^16.0.0", "@octokit/plugin-rest-endpoint-methods": "^14.0.0",
"@renovatebot/pep440": "^4.2.0", "@renovatebot/pep440": "^4.1.0",
"smol-toml": "^1.4.2", "smol-toml": "^1.3.4",
"undici": "^7.16.0" "undici": "^7.10.0"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "2.2.4", "@biomejs/biome": "1.9.4",
"@types/js-yaml": "^4.0.9", "@types/js-yaml": "^4.0.9",
"@types/node": "^24.3.1", "@types/node": "^22.15.21",
"@types/semver": "^7.7.1", "@types/semver": "^7.7.0",
"@vercel/ncc": "^0.38.3", "@vercel/ncc": "^0.38.3",
"jest": "^30.1.3", "jest": "^29.7.0",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"ts-jest": "^29.4.1", "ts-jest": "^29.3.2",
"typescript": "^5.9.2" "typescript": "^5.8.3"
} }
} }

View File

@@ -1,17 +1,16 @@
import * as cache from "@actions/cache"; import * as cache from "@actions/cache";
import * as core from "@actions/core"; import * as core from "@actions/core";
import * as exec from "@actions/exec";
import { hashFiles } from "../hash/hash-files";
import { import {
cacheDependencyGlob, cacheDependencyGlob,
cacheLocalPath, cacheLocalPath,
cacheSuffix, cacheSuffix,
pruneCache, pruneCache,
pythonVersion as pythonVersionInput, pythonVersion as pythonVersionInput,
restoreCache as shouldRestoreCache,
workingDirectory, workingDirectory,
} from "../utils/inputs"; } from "../utils/inputs";
import { getArch, getPlatform } from "../utils/platforms"; import { getArch, getPlatform } from "../utils/platforms";
import { hashFiles } from "../hash/hash-files";
import * as exec from "@actions/exec";
export const STATE_CACHE_KEY = "cache-key"; export const STATE_CACHE_KEY = "cache-key";
export const STATE_CACHE_MATCHED_KEY = "cache-matched-key"; export const STATE_CACHE_MATCHED_KEY = "cache-matched-key";
@@ -19,12 +18,6 @@ const CACHE_VERSION = "1";
export async function restoreCache(): Promise<void> { export async function restoreCache(): Promise<void> {
const cacheKey = await computeKeys(); const cacheKey = await computeKeys();
core.saveState(STATE_CACHE_KEY, cacheKey);
if (!shouldRestoreCache) {
core.info("restore-cache is false. Skipping restore cache step.");
return;
}
let matchedKey: string | undefined; let matchedKey: string | undefined;
core.info( core.info(
@@ -39,6 +32,8 @@ export async function restoreCache(): Promise<void> {
return; return;
} }
core.saveState(STATE_CACHE_KEY, cacheKey);
handleMatchResult(matchedKey, cacheKey); handleMatchResult(matchedKey, cacheKey);
} }
@@ -72,12 +67,12 @@ async function getPythonVersion(): Promise<string> {
let output = ""; let output = "";
const options: exec.ExecOptions = { const options: exec.ExecOptions = {
silent: !core.isDebug(),
listeners: { listeners: {
stdout: (data: Buffer) => { stdout: (data: Buffer) => {
output += data.toString(); output += data.toString();
}, },
}, },
silent: !core.isDebug(),
}; };
try { try {

View File

@@ -1,9 +1,9 @@
import * as crypto from "node:crypto";
import * as fs from "node:fs"; import * as fs from "node:fs";
import * as crypto from "node:crypto";
import * as core from "@actions/core"; import * as core from "@actions/core";
import type { Architecture, Platform } from "../../utils/platforms";
import { KNOWN_CHECKSUMS } from "./known-checksums"; import { KNOWN_CHECKSUMS } from "./known-checksums";
import type { Architecture, Platform } from "../../utils/platforms";
export async function validateChecksum( export async function validateChecksum(
checkSum: string | undefined, checkSum: string | undefined,
@@ -12,7 +12,7 @@ export async function validateChecksum(
platform: Platform, platform: Platform,
version: string, version: string,
): Promise<void> { ): Promise<void> {
let isValid: boolean | undefined; let isValid: boolean | undefined = undefined;
if (checkSum !== undefined && checkSum !== "") { if (checkSum !== undefined && checkSum !== "") {
isValid = await validateFileCheckSum(downloadPath, checkSum); isValid = await validateFileCheckSum(downloadPath, checkSum);
} else { } else {

View File

@@ -1,945 +1,5 @@
// AUTOGENERATED_DO_NOT_EDIT // AUTOGENERATED_DO_NOT_EDIT
export const KNOWN_CHECKSUMS: { [key: string]: string } = { export const KNOWN_CHECKSUMS: { [key: string]: string } = {
"aarch64-apple-darwin-0.8.17":
"e4d4859d7726298daa4c12e114f269ff282b2cfc2b415dc0b2ca44ae2dbd358e",
"aarch64-pc-windows-msvc-0.8.17":
"2396749de576e45a40efa35fe94b3f953c3224c21f75c05772593e085d78e77d",
"aarch64-unknown-linux-gnu-0.8.17":
"9a20d65b110770bbaa2ee89ed76eb963d8c6a480b9ebef584ea9df2ae85b4f0f",
"aarch64-unknown-linux-musl-0.8.17":
"bd141b7e263935d14f5725f2a5c1c942fd89642e37683cb904f1984ce7e365f4",
"arm-unknown-linux-musleabihf-0.8.17":
"9d4ffb6751d65a52f8daf3fd88e331ab989d490a6e336d6a96cac668fce17a65",
"armv7-unknown-linux-gnueabihf-0.8.17":
"014afffa5621986aefbe8a6d71597eb45b8cd3d4e94f825f34ec49ba4cd0c382",
"armv7-unknown-linux-musleabihf-0.8.17":
"fb976e7482c4550f38c51c5c23b9dae0322c3173f56436bf9a81252e4b74fcfb",
"i686-pc-windows-msvc-0.8.17":
"f528893452ca512b555b63267292977d237bd6fbdd967c9be6941a65ebf256f4",
"i686-unknown-linux-gnu-0.8.17":
"d52438a1588ea7c2332dc4aa8c93eedae344fc435c95491037237c7b4b36eae4",
"i686-unknown-linux-musl-0.8.17":
"9e10f4c57034e6e98dea48b0f4250a7eff983f1b2947d99ed6605a4eb0ec8d22",
"loongarch64-unknown-linux-gnu-0.8.17":
"1d02e45dbbcbbaa867afe59fd62b294cba47abf1a76e151e19db03b5dbf1c9c8",
"powerpc64-unknown-linux-gnu-0.8.17":
"6f448735dfd72e2d5c3e3bb541b388c58cdfcf3a562128d5ac1a5f2be47f95d6",
"powerpc64le-unknown-linux-gnu-0.8.17":
"e4b28cab21eb990e2bea768bc9f43b61e4fd554552cea8868c855027decef69d",
"riscv64gc-unknown-linux-gnu-0.8.17":
"f653caa34479d405d290b825a2fe782bb26c55a7bfaa870911b4e18792312d45",
"s390x-unknown-linux-gnu-0.8.17":
"8fae8182704b4b11316c87d897c3e64f2d3f55ac8c58c482d9bbef9ad611f90c",
"x86_64-apple-darwin-0.8.17":
"31ed353cfd8e6c962e7c60617bd8a9d6b97b704c1ecb5b5eceaff8c6121b54ac",
"x86_64-pc-windows-msvc-0.8.17":
"0d051779fbcb173b183efeae1c3e96148764fd82709bbbf0966df3efe48b67c5",
"x86_64-unknown-linux-gnu-0.8.17":
"920cbcaad514cc185634f6f0dcd71df5e8f4ee4456d440a22e0f8c0f142a8203",
"x86_64-unknown-linux-musl-0.8.17":
"4057052999a210fe78d93599d2165da9e24c8bbb23370cdd26b66a98ab479203",
"aarch64-apple-darwin-0.8.16":
"87e4b51b735e8445f6c445c7b4c0398273e40d34cd192bad8158736653600cd6",
"aarch64-pc-windows-msvc-0.8.16":
"392acca957d8d7cccafbb68ce6c4ba29b2ff00c8b0d4744a2136918d3a7bf765",
"aarch64-unknown-linux-gnu-0.8.16":
"22a3cbaf87776b73c2657ba5d63f8565c1235b65eaf57dffda66061f7a09913b",
"aarch64-unknown-linux-musl-0.8.16":
"6bd6a11c384f07353c3c7eec9bde094f89b92a12dc09caea9df40c424afebea5",
"arm-unknown-linux-musleabihf-0.8.16":
"53c31a6559dc4fb22ce8c56640b00a8404b7e4d55f68b6bb3aa188864e2c3084",
"armv7-unknown-linux-gnueabihf-0.8.16":
"ada6f393d5e5d9cba5445832ba61e8222859e915e5d77a37f5dd35979f3f18e4",
"armv7-unknown-linux-musleabihf-0.8.16":
"55690f70f9c61963c0069558e205acda9ff0604a44028226b9a0ec3b847c9125",
"i686-pc-windows-msvc-0.8.16":
"1e727b8af6c0781bc6eb9a2c34e7ee704070b7a2f122544443418e8be13019ee",
"i686-unknown-linux-gnu-0.8.16":
"4eaf39134663ef184f684be6f6aa83e971fb36ef7d1c67a5f2196268b61c0579",
"i686-unknown-linux-musl-0.8.16":
"a179ceba9f2fcca7b46a86b12715e28fb3429ff8193ae839700d534e35e95a45",
"loongarch64-unknown-linux-gnu-0.8.16":
"600a8be6d2621d654b6665d9a8df9370f4af9c0b6ceb851d1ae0d4b895e8e546",
"powerpc64-unknown-linux-gnu-0.8.16":
"c86008ef8a3e3730b0e58a168542331960c90a3b043e3853c1941457748595f3",
"powerpc64le-unknown-linux-gnu-0.8.16":
"91645092447a14c23b47d0f434a787a9555b29e061607d9e60d2d556b831f5aa",
"riscv64gc-unknown-linux-gnu-0.8.16":
"dbaeff3f0baad73c264c35abd937a231fb6b9d1201b6763d82e39e7516358115",
"s390x-unknown-linux-gnu-0.8.16":
"e29c330a8956c13acb0f2af7aa650dd5d9ebba6aefdceaea77f689953d140780",
"x86_64-apple-darwin-0.8.16":
"07491a998fd741090501df9bbfe538f85568901a3a66c9e0368636509158727a",
"x86_64-pc-windows-msvc-0.8.16":
"97fb93678eca3b4f731ea3879ae2e78787976e03f38c9c6fb744ab28bc3aec1b",
"x86_64-unknown-linux-gnu-0.8.16":
"fc94e50e8ef93a97d723b83faa42888e7710c4443a5b8a1af3aac2cda5390f3a",
"x86_64-unknown-linux-musl-0.8.16":
"ee220f112b91b23f641d169ba7a3652c6ab7104e7c666d26104ebd6a2f76be43",
"aarch64-apple-darwin-0.8.15":
"103367962c5cb00bf7370d84cbaa3fec5a9807be9cc833ea9d8eea400c119fa2",
"aarch64-pc-windows-msvc-0.8.15":
"16d92f21508c5dbd3374466c2cdad2909959a6d3bd06672b9db023f2a5d7a014",
"aarch64-unknown-linux-gnu-0.8.15":
"6ede0fefa7db7be3d5d9eda8784a8e43b1cf5410720eb3da60ab1d2f66678e82",
"aarch64-unknown-linux-musl-0.8.15":
"23ea21a05c62c4c307ce691f29bff2f15c94c4f07f2b83d9b356f0664bc8b3a2",
"arm-unknown-linux-musleabihf-0.8.15":
"deeac755224244b535c9f654b29aad8a165c94840a520d41e5c697235edd0576",
"armv7-unknown-linux-gnueabihf-0.8.15":
"07ad33bc28ed276944d069eb714322b24167bfe106b4bded01e272fe245934ba",
"armv7-unknown-linux-musleabihf-0.8.15":
"0b4f73e084a04828f2431c887c2e3eea590ff06a1dc279e473dd1d94cdc8f25d",
"i686-pc-windows-msvc-0.8.15":
"34425e7dc7323b98fc844d9223596e9a1d2347e6f85a512221428a455dcbea78",
"i686-unknown-linux-gnu-0.8.15":
"16230e9b785fccb628e920d0fa1ca59b50b0515b838b2bb80f997bcb7a35f2bb",
"i686-unknown-linux-musl-0.8.15":
"43d554953beac56a8d8ba23aeb2b0e0e5c43020b074071c15df5d492e46a81f3",
"powerpc64-unknown-linux-gnu-0.8.15":
"71465b1d08e0a4cb3fcfe02e127104400a85ed00c30ec5f53f8705e71567fb6a",
"powerpc64le-unknown-linux-gnu-0.8.15":
"54157ee5e01b02b8c89131391d62228787750b556bbdb7d3428a3cdfd1698102",
"riscv64gc-unknown-linux-gnu-0.8.15":
"faa4a470a26ad0db0dbefc510fac91fa0da4d9cd06ca4f229933f7aac21e46b2",
"s390x-unknown-linux-gnu-0.8.15":
"0bb022274375745352a748b8332bb170941fe01915a1670c2c6d06d182783437",
"x86_64-apple-darwin-0.8.15":
"2bbef70982e97dfc36454de173f35ec1a5e83ae11e3885df6a50db3fd76171cb",
"x86_64-pc-windows-msvc-0.8.15":
"459d95892a5cc5c21779532f4f41b9238594b79e312a5142da2148ecfa10e705",
"x86_64-unknown-linux-gnu-0.8.15":
"be9878e9d08ebcb621a683aba52e7fb8bbf92b2532e0d759026ffcc067673042",
"x86_64-unknown-linux-musl-0.8.15":
"d0fec58f3124e05e0a1af0f6541abfce4333253cdaf23c7b6bb2e6128bf138ea",
"aarch64-apple-darwin-0.8.14":
"281ea18a5778099f7edeee0a7b20671d14918782de153604c939486f2b8a2791",
"aarch64-pc-windows-msvc-0.8.14":
"d7fef1d1d0b0f8e0aa94391376fe5fb95f0e213ef7ee1c498c287fe0ea76f886",
"aarch64-unknown-linux-gnu-0.8.14":
"69616218470b2ad053617efb9e7027b1518ea38918d933c2791e113d99cec507",
"aarch64-unknown-linux-musl-0.8.14":
"d492d433d8ea87a4051c3f071ed04f13f8f001aa782e2e8192eaa5143e9a6f39",
"arm-unknown-linux-musleabihf-0.8.14":
"ef6a51cc1808de75969e2719420464d494bb5932d18ebf3ac07df7a5ab27b16a",
"armv7-unknown-linux-gnueabihf-0.8.14":
"75c77b40c39dd526f88f5119d686e44d95c10cece436e4306f0db32b94d91716",
"armv7-unknown-linux-musleabihf-0.8.14":
"33a15d40d407323a516edabdc4eb33bbefc04e17d40769a04bfc15605d2eee1e",
"i686-pc-windows-msvc-0.8.14":
"b43c5703cdfb15c019b04cad2ef19034a91e8a0872ae2d674d366dfc0a755124",
"i686-unknown-linux-gnu-0.8.14":
"d49a796d569b010d43eeb8d9259f1a12fa910176b076c04c13609648973f428e",
"i686-unknown-linux-musl-0.8.14":
"cee58d8fe55f59a0869039f83875ee44a4a12b3b3f1f1f5a2bdc68968e449f54",
"powerpc64-unknown-linux-gnu-0.8.14":
"f118e642a7e360384a0277980986cea4857cc2d90364d58865d941c6b8abfcd1",
"powerpc64le-unknown-linux-gnu-0.8.14":
"c411e63edd125283641420bb4be830872be269451756de2095aebc3ca8b0277a",
"riscv64gc-unknown-linux-gnu-0.8.14":
"1bb13f9d1a3e55dcea09f3b99b35ec0fbd3428276311b068268b07cd07c5b067",
"s390x-unknown-linux-gnu-0.8.14":
"8643d6ab3513ab4adc3ffb56c39813651725d047ee6af5de3ae1fd0e4975c364",
"x86_64-apple-darwin-0.8.14":
"567d98b0c541a68df8aaa2c3214242c4070068b2edaea1be376a4c0fa348bdf1",
"x86_64-pc-windows-msvc-0.8.14":
"3f68ab95d2856e6b238e0e3f4255a723ccdc2cf1d4b8e53f5a4f5a47b645dc72",
"x86_64-unknown-linux-gnu-0.8.14":
"954add045f29f93191523175e4aea066996840e86c1b6339dee25f48b15b5ddb",
"x86_64-unknown-linux-musl-0.8.14":
"e018287fb321c3c633df2b622c2cf53042caa5c4c43a4ca6431bcb38e0685fa4",
"aarch64-apple-darwin-0.8.13":
"c3eddc0e314abb8588f1cdf312f0b060d79e1906eff8f43b64a05ff5e2727872",
"aarch64-pc-windows-msvc-0.8.13":
"5b3a80d385d26fb9f63579a0712d020ec413ada38a6900e88fdfd41b58795b7e",
"aarch64-unknown-linux-gnu-0.8.13":
"3bb77b764618f65a969da063d1c4a507d8de5360ca2858f771cab109fa879a4d",
"aarch64-unknown-linux-musl-0.8.13":
"40ba6e62de35820e8460eacee2b5b8f4add70a834d3859f7a60cdfc6b19ab599",
"arm-unknown-linux-musleabihf-0.8.13":
"f108a49a17b0700d7121b0215575f96c46a203774ed80ef40544005d7af74a67",
"armv7-unknown-linux-gnueabihf-0.8.13":
"730d8ef57f221ecc572d47b227ecbd8261be08157efb351311f7bc1f6c1c944a",
"armv7-unknown-linux-musleabihf-0.8.13":
"b78dacab7c2fb352301d8997c0c705c3959a4e44d7b3afe670aee2397a2c9ab3",
"i686-pc-windows-msvc-0.8.13":
"08482edef8b077e12e73f76e6b4bb0300c054b8009cfac5cc354297f47d24623",
"i686-unknown-linux-gnu-0.8.13":
"0ce384911d4af9007576ceba2557c5d474a953ced34602ee4e09bd888cee13c0",
"i686-unknown-linux-musl-0.8.13":
"b6462dc8190c7a1eafa74287d8ff213764baa49e098aeeb522fa479d29e1c0bf",
"powerpc64-unknown-linux-gnu-0.8.13":
"9a8e8a8927df9fa39af79214ab1acfc227dba9d9e690a424cef1dc17296161a8",
"powerpc64le-unknown-linux-gnu-0.8.13":
"4880a8e2ba5086e7ed4bd3aecfdae5e353da569ddaac02cd3db598b4c8e77193",
"riscv64gc-unknown-linux-gnu-0.8.13":
"0cd68055cedbc5b1194e7e7ab2b35ac7aa1d835c586fb3778c7acb0e8a8ac822",
"s390x-unknown-linux-gnu-0.8.13":
"8cc2e70bee35c9e437c2308f130b79acc0d7c43e710296990ed76e702e220912",
"x86_64-apple-darwin-0.8.13":
"b799253441726351bc60c2e91254a821001e5e2e22a0e2b077d8983f583e8139",
"x86_64-pc-windows-msvc-0.8.13":
"60870fa18d438737088e533ed06617549e42531c522cc9a8fe4455d8e745dc29",
"x86_64-unknown-linux-gnu-0.8.13":
"8ca3db7b2a3199171cfc0870be1f819cb853ddcec29a5fa28dae30278922b7ba",
"x86_64-unknown-linux-musl-0.8.13":
"38ade73396b48fce89d9d1cb8a7e8f02b6e18a2d87467525ee8fb7e09899f70d",
"aarch64-apple-darwin-0.8.12":
"a3f78d20465c6d18f7072f118ce1c61b164b98698fdc37357e72958c7d1b68fd",
"aarch64-pc-windows-msvc-0.8.12":
"eb0c7e47411d11cbc3990eef51a5e10215a1fc9d5f5058fd8e952da94be16512",
"aarch64-unknown-linux-gnu-0.8.12":
"9a8a53df515bd64d423c85ace7ddca08fb9a91d8a115934c4495b5cf74c60ea6",
"aarch64-unknown-linux-musl-0.8.12":
"de85bafc3e238a4fce87eb6a4e584c9c04721475abb9e5f6fe186bdce650763f",
"arm-unknown-linux-musleabihf-0.8.12":
"5fe2f13d8c62d410278fbd69b0c1f03be5bd2c40168a98dc8fc82bca64c2eaad",
"armv7-unknown-linux-gnueabihf-0.8.12":
"6ddde49d5fcc04a90855f31b5cb500146dac23f31d16f6d7fa7da1ae481eab1e",
"armv7-unknown-linux-musleabihf-0.8.12":
"39b626f438c22a3122546445d581fe02b6fc449649b4890f44791af4f3d3c18b",
"i686-pc-windows-msvc-0.8.12":
"97e0e04648e48cccdd25210f5eaf6fb2d46f1a198983b7de10613faf1629663d",
"i686-unknown-linux-gnu-0.8.12":
"74484899512bb91ed4bd64d117284c20912c39c600cc775d6ef1bf278d6c2a94",
"i686-unknown-linux-musl-0.8.12":
"b1e303c231068a3a419b12d3ba4dc852931740ab3ad691c7a87309327eac732f",
"powerpc64-unknown-linux-gnu-0.8.12":
"455bd841952724bff1f45dad91555ce2a33c837cc8d734ca39afaa0ac3c8385d",
"powerpc64le-unknown-linux-gnu-0.8.12":
"30f1191e997d8d2845b27f57ce30e8d3643994161b7d099caf81fde22d723fa6",
"riscv64gc-unknown-linux-gnu-0.8.12":
"1e9e7ca966999161ef5174d28a18777d2a143c081a63d455f5b7fd5a1513d2e7",
"s390x-unknown-linux-gnu-0.8.12":
"55ec25ef06c1e0c095f2baa1a12ce38879db8db99a4b046286a9573dd3c605d5",
"x86_64-apple-darwin-0.8.12":
"467b462e854bc750fcad8e3ad35e2aca0d301c9287f2365afad8c17b7672b6a8",
"x86_64-pc-windows-msvc-0.8.12":
"3fb92ce0860db7cb094ddeeb1ac521532fdd3e61d0a130f7bbc6be54caca7c2e",
"x86_64-unknown-linux-gnu-0.8.12":
"f976ebdc612e71209f46664ab6c0325fa0090059b4474e047edd39eb9395373b",
"x86_64-unknown-linux-musl-0.8.12":
"fa682c444b8a57a0984129d0989801fb0406f9238a57df76fdde063c6b2339c2",
"aarch64-apple-darwin-0.8.11":
"c9e74f779a65798057bca2ff328d5c9952f458391e220c3d3216d7a03a338d9f",
"aarch64-pc-windows-msvc-0.8.11":
"09c6cc8c511d166dc12c9e56ce06c92de928a2e5bad14fc079654901dc8ea114",
"aarch64-unknown-linux-gnu-0.8.11":
"472dbebd1369049e58d3bbeaae663b212e691676cfd15d799e4faca616d37264",
"aarch64-unknown-linux-musl-0.8.11":
"1c6045bec4d5ca17777dd271401a0407c5acad79f74fd38f35c31ca64c689808",
"arm-unknown-linux-musleabihf-0.8.11":
"84da6bfdf9ee693c7278770e1d16d0d5e3ba5ea8f913d7fed13e9854aad95e31",
"armv7-unknown-linux-gnueabihf-0.8.11":
"a27bb0ae23d0584f1a6a7f851362cb52687bbd22ecce37cc80f3eeca0925dac4",
"armv7-unknown-linux-musleabihf-0.8.11":
"29605e9724eb7c68bc67892b4d8bcc28d03c1cb1125cb3dd783e81dd61cc15b5",
"i686-pc-windows-msvc-0.8.11":
"17e45a6afa19443a9749668540a033e9fedd3d6bec1ad8952d10da1f40ed9e92",
"i686-unknown-linux-gnu-0.8.11":
"85fb818676480ac0cc0f7219e4fd96667d851790c4dd054dc84f304128d88817",
"i686-unknown-linux-musl-0.8.11":
"194bc103af40c2a15b0a2e86e5eaad53a5219243df8e296d98e9c6269f67e0b3",
"powerpc64-unknown-linux-gnu-0.8.11":
"fde3e344ee3ef3eabc4803a27a05f06b082819d09153ec126b09f93882e54082",
"powerpc64le-unknown-linux-gnu-0.8.11":
"a1de2c76674c5566e27f8a5b8868b4f416ec659ad657aa87ccc2d17f9cfeaac5",
"riscv64gc-unknown-linux-gnu-0.8.11":
"c068fe0b27b7b91d79c3505fcca16ea8dc2df499e6420877bd5cf75b26f5304f",
"s390x-unknown-linux-gnu-0.8.11":
"e4d8ee92b9e20a7713cf7a9f7d7b288d9d726e7e96d874aaa20e3acc1d408287",
"x86_64-apple-darwin-0.8.11":
"7ed76b0cc314fa0cb6dd7ae99379efd3cf8fc14d71af8d71b0b5238582c7958d",
"x86_64-pc-windows-msvc-0.8.11":
"3e802b69307b10f228c8f1d096bd5721ac37a133bf33672f9fcc46a58dd5c920",
"x86_64-unknown-linux-gnu-0.8.11":
"0c6078318332c100d7d9988ea99144b534e40adef2958aa314a9f7c7b8516ed7",
"x86_64-unknown-linux-musl-0.8.11":
"0c66f4d06a4f933bddf75d4ad64e0e2d717f015ba1876c51e32ff293c84f57d5",
"aarch64-apple-darwin-0.8.10":
"5200278ae00b5c0822a7db7a99376b2167e8e9391b29c3de22f9e4fdebc9c0e8",
"aarch64-pc-windows-msvc-0.8.10":
"c51b02188c312baef71187273afa625576101e5680739eab83b1b09ca5d2f3a8",
"aarch64-unknown-linux-gnu-0.8.10":
"de60f5e3d69b54e6196fb8937fef4feb15e239f0fd14278e77e44dbb353214ae",
"aarch64-unknown-linux-musl-0.8.10":
"704f202ca92386eaa095706ec7e26c4f052f7e17721767d4ee18c676565c51b1",
"arm-unknown-linux-musleabihf-0.8.10":
"51d1244dd7f23d8aa021fa4d2a662a3727b27241e0ceb6f11820cb495611965f",
"armv7-unknown-linux-gnueabihf-0.8.10":
"ce22ffada0356570f63ad0aae096226f1c45c3d561023b3fb2b1f0936f2b804c",
"armv7-unknown-linux-musleabihf-0.8.10":
"9ee0a14ec4fa263095bae4da329602f7735d914db4ad59079b47d714bfb95409",
"i686-pc-windows-msvc-0.8.10":
"e62a2549135b4b9474c18e7bc9f0937837012dd9039f6b4b2c109a1cf99ad925",
"i686-unknown-linux-gnu-0.8.10":
"cdd36af87ca53ec6b8cc4507e85c9ca54c40fd77613633a1095a1a2f317a0563",
"i686-unknown-linux-musl-0.8.10":
"658f14b093e3bf4ffcad645fe27d7aa2f8f18a6f625a22a246288c6368a4d88f",
"powerpc64-unknown-linux-gnu-0.8.10":
"f16d77cfca0dfca2bcef7cc556e0316ba5fdc61b1c3387d60b7c40e12f6617dd",
"powerpc64le-unknown-linux-gnu-0.8.10":
"00bc1b47078520c588dbd383700d35c786ac2fa3e53c9fca51c5410581f8c87e",
"riscv64gc-unknown-linux-gnu-0.8.10":
"db605bb442563f0494c174be639b9d80fcc4e27e360a31ad2675005ea1a1e3ab",
"s390x-unknown-linux-gnu-0.8.10":
"83ca774828d652ce9dd1d6e2619e66c471e2cb236754783019b9ae0f4da72718",
"x86_64-apple-darwin-0.8.10":
"3b935381af9124a5d5da48235e149f5f0662f2717e75782d1b843d39d9265d6d",
"x86_64-pc-windows-msvc-0.8.10":
"37fcd011fd22b2a569f7e583a924af2d624d99445f669752923a2fd3841f8e3d",
"x86_64-unknown-linux-gnu-0.8.10":
"2c4392591fe9469d006452ef22f32712f35087d87fb1764ec03e23544eb8770d",
"x86_64-unknown-linux-musl-0.8.10":
"4031c6f7ac3890f29c72e0ea655add58b8fa1c678d20afcf57efa51e57751732",
"aarch64-apple-darwin-0.8.9":
"c233bee389c15fdef09a6028db61cc54a12e6171f27d6d9c018eedca5bbbd011",
"aarch64-pc-windows-msvc-0.8.9":
"7dc9b954e236f842c2120bdb50307f23104ca20a52896c7ae0ea0100904b2aed",
"aarch64-unknown-linux-gnu-0.8.9":
"03108a851cb87ce44069767e0ae7907d9a31180bdd64913852fcde25848d84f2",
"aarch64-unknown-linux-musl-0.8.9":
"fb1f2800bfd0bc9a121269e276653899c726d81cd08d6299f0fb34b4b0d61fcf",
"arm-unknown-linux-musleabihf-0.8.9":
"9a73ca16557efd21d4dad17759261c6f93eb4079a95bb39c578998ad787ee871",
"armv7-unknown-linux-gnueabihf-0.8.9":
"a6be2240c8bf070baaed8ee0a9071fe5f33b2fad55f67d39fcdc8ea720ff668a",
"armv7-unknown-linux-musleabihf-0.8.9":
"758bf39e33d3162fe6ec7bd5f359cc78daf8ce46b2300dec6c31f37b705521f9",
"i686-pc-windows-msvc-0.8.9":
"25988dae5e7698de1a6ff4bf08ed336d138710ee52f52de60859b99acf2bc96b",
"i686-unknown-linux-gnu-0.8.9":
"02a140e4d0af8d469ec088eff51ed9b232c76cfa02d4df0b84b7567c2d6ab95e",
"i686-unknown-linux-musl-0.8.9":
"99fa13e9079901365277b9b409a2892afe2efb0260f940388cadb2d56d706766",
"powerpc64-unknown-linux-gnu-0.8.9":
"604102c2bf07fbb3cc26bcb6b95e60cac55d74b4e21f1cee4b2d5f58930aa5cf",
"powerpc64le-unknown-linux-gnu-0.8.9":
"8ab18629d8a71a4188761e4e2b0eca0970690f13c85697ad232fe8b22e8d5a99",
"riscv64gc-unknown-linux-gnu-0.8.9":
"757944803901c5ca4049147e28e429e34c04d5ac5fe78728396ec4b810063b00",
"s390x-unknown-linux-gnu-0.8.9":
"b78f56186edfed8f117ed1fa09fc59ad9932864ae4e655ae61f3e205846c7ced",
"x86_64-apple-darwin-0.8.9":
"27fe8645c2599b672c3a6c865131a3d916eed9a3ba7cff5a0b863e01a473df66",
"x86_64-pc-windows-msvc-0.8.9":
"b08d68a0d86e4d0d1b5fa439ffa73ac90df2305c595f617ba9d9b5e8740a8efb",
"x86_64-unknown-linux-gnu-0.8.9":
"1056ab7c04bf9030dc0623c260fae0b414675775f333f318918000f667da6ee1",
"x86_64-unknown-linux-musl-0.8.9":
"6bb907345f9100978d3529c8a5b2cbb4e831080909c51a5bff714b491251303e",
"aarch64-apple-darwin-0.8.8":
"9de9365997d7579d27cdbc132883343b3c47add16804f11be679375037dec33a",
"aarch64-pc-windows-msvc-0.8.8":
"3029df83f2b40d2fa0cc896aed8a157afd02e8ce767064d80923e166e46b75ce",
"aarch64-unknown-linux-gnu-0.8.8":
"4e144807bef9a3b6f44fd5e4084d5010738787745c07e09dee4f008e8bee17a8",
"aarch64-unknown-linux-musl-0.8.8":
"fb7785d31a64f416ef67292ba3717781ef4eb1d6f93b6e30715d9127e862de2b",
"arm-unknown-linux-musleabihf-0.8.8":
"fb8ea8fa543322b4901b5acc585e1373dafd996d9aadce7d0c00c00ad36f2cdd",
"armv7-unknown-linux-gnueabihf-0.8.8":
"684538c1aa5da718abb86b0f5a3c5d2eb05a11520e5c87a2b75050751adcc8c6",
"armv7-unknown-linux-musleabihf-0.8.8":
"c5eebbf9ae549ca45f563a9a9770c1534854a5c4056acac0ab3779b9e1f24d75",
"i686-pc-windows-msvc-0.8.8":
"9ec9bf63460e0625cd941a5bbe0775b99c33def5a2f1fe6cbc9e99e167fea33e",
"i686-unknown-linux-gnu-0.8.8":
"d934b2f6c892a25d928cdc2dfd42b3e925011992603879d2035bc7b15a236c35",
"i686-unknown-linux-musl-0.8.8":
"a5b258ee1f686bb58f912ce8c5def3531e0e4cd2bcfe3ee332bfaf3b35e674e0",
"powerpc64-unknown-linux-gnu-0.8.8":
"23dc87674b030bf4d7f4f1cd1b903d18ccaec43af0373d62e309ee79cbe2c2f8",
"powerpc64le-unknown-linux-gnu-0.8.8":
"6a72bb057073ca989690882ac0ae70e6825151e0d2d52d37540be2dd41d70b56",
"riscv64gc-unknown-linux-gnu-0.8.8":
"f107450c910336bfc636208d4d0430a8a6581d98824a4deee5715ac72b73c97a",
"s390x-unknown-linux-gnu-0.8.8":
"5aafe51b39dc715c887d6c1960d82659fa18a7505d0050e6eba36ae5956e4c96",
"x86_64-apple-darwin-0.8.8":
"3346a3d4a45d7457dafadcc1715e8e529e5b65c27aaba2417db4b0b32a8cbac6",
"x86_64-pc-windows-msvc-0.8.8":
"ac76b826e5ba70c7a041e9ee344cbcba2919cdd3010fff7f1a83b7864911633e",
"x86_64-unknown-linux-gnu-0.8.8":
"ecc2e39de86afea661c145f33f6a89a45b1d2427d51a22b458e2c64238794180",
"x86_64-unknown-linux-musl-0.8.8":
"80ee2bde42e1cc39c59ae8a3a20f5b73127b90ece009ef7bdd13ab189ff0c353",
"aarch64-apple-darwin-0.8.7":
"d1f056d2d04b07a69d2be6ed7eb07ece12dda26570a9af316309787865eba374",
"aarch64-pc-windows-msvc-0.8.7":
"5e0fdc7ebe4f237fa1b24a95116243e6c5fb52e0601aed3b7ca24b6a76b6c2ec",
"aarch64-unknown-linux-gnu-0.8.7":
"405965165e6c5a782d9b69e1a641a491533cec80390b0bfbe95eedcf5cdc5078",
"aarch64-unknown-linux-musl-0.8.7":
"70fa63fca7c7b1ccb5a96b8b5691f8dee2f2caeb61fcf6a110227e3f55fcf94c",
"arm-unknown-linux-musleabihf-0.8.7":
"172e93344f2aaee552e606150a1d9bd8de2df2716c81ecc332904e4b2713b964",
"armv7-unknown-linux-gnueabihf-0.8.7":
"3277a9db5244767ed6e8848e487377dea69b67e0a196886696263ddbc5681daf",
"armv7-unknown-linux-musleabihf-0.8.7":
"3170d7251d8d2ab40c86a1b20221d6486baf5f52e7069525893cf20481cc8281",
"i686-pc-windows-msvc-0.8.7":
"f97b09e12f10e8e77b1519124f1f16720bbd64bc0436cad0868f4a2927a7a0e0",
"i686-unknown-linux-gnu-0.8.7":
"0e88d6a9f088f6632026d7009559d519598876db8b46540dcc6ff015bbf16b85",
"i686-unknown-linux-musl-0.8.7":
"1ab32b294aa94846ee9d1c2597ea8f617aade1e7faf2c8e460d5414d87dd8a58",
"powerpc64-unknown-linux-gnu-0.8.7":
"52fe0acf3cb57ee33407c1a2d25e66ec08ac6c4a259e016a54ea34cfe749f148",
"powerpc64le-unknown-linux-gnu-0.8.7":
"ad8d7a098c7f1603adb55bf794a6ba952c715d5d05112482a6c9a9b63d04fef8",
"riscv64gc-unknown-linux-gnu-0.8.7":
"f6bea3521a2d5b1593cb8f18d54237d0ae3b388cbd2cce83c1dcd4b512dde1a6",
"s390x-unknown-linux-gnu-0.8.7":
"ee877021eb1862d9d0cc37697267a01cfdae307c6a8bf7ece27ae92b330fd2d9",
"x86_64-apple-darwin-0.8.7":
"dca85ae222d59ddbd83f61355561d3183cce9d23eb5931c41646499f43cb2b93",
"x86_64-pc-windows-msvc-0.8.7":
"0baf6d021ca283df5e5c768ff51281043fefc889ac14aff8ce58189453166eef",
"x86_64-unknown-linux-gnu-0.8.7":
"060f68b7e86fee70ed19b852934ce6f05bb15d42894ce4a26c34a18b4c3cd511",
"x86_64-unknown-linux-musl-0.8.7":
"b1283a1b42f81dc79c2e58eb77a41e21fd4c59344d3d19e72810ab031ba93771",
"aarch64-apple-darwin-0.8.6":
"15269226c753f01137b5a35c79e59ab46d8aab25a242641fdc4003a6d0a831ff",
"aarch64-pc-windows-msvc-0.8.6":
"a2891f1f1c56e717115579da655951007e2e5e498535b473d9f7cbffe7369e1a",
"aarch64-unknown-linux-gnu-0.8.6":
"6fd314ca589788265ff99ec754bd2fa2a5d090ef592ddbbe8ded6b141615a491",
"aarch64-unknown-linux-musl-0.8.6":
"d78076c7e0dfcd3580736c11e009ef856bd13015f00406e3ded1fc895e2104ba",
"arm-unknown-linux-musleabihf-0.8.6":
"87d33a579cc2ee986e3163bb5de1791c6052ef8716d5fb8d8bf73aa2e5f1bf66",
"armv7-unknown-linux-gnueabihf-0.8.6":
"4139d74dfe3192bc71dacd3cf0cdf6a006d121db2c4d841e08f369761baaf00e",
"armv7-unknown-linux-musleabihf-0.8.6":
"5d4d117cebddc7dbdbf6e1410c65868f113a75700acac77eed28dfdc0411c113",
"i686-pc-windows-msvc-0.8.6":
"4eaa185b61f9cfe73ab7534de7282e51cc0f6bf47361429bdcbb6a5f3264f6e4",
"i686-unknown-linux-gnu-0.8.6":
"7fb9324cfb0c57a9b9145e73598794c7bc4df01f50730bd926d4ab10d4fc59ff",
"i686-unknown-linux-musl-0.8.6":
"3c2e2d69e8da093df76ffffa9758669c33ae47624f73d06ec2a83a363f17fbd4",
"powerpc64-unknown-linux-gnu-0.8.6":
"264dbfddd58cdbd35b33ea24dd802a3409eae1d4516d057bdff88df2e257eaa2",
"powerpc64le-unknown-linux-gnu-0.8.6":
"d34c6d7df2ed9e9739bc0313875e602a943b17fccbf1127f824a5ff9a3253bb5",
"riscv64gc-unknown-linux-gnu-0.8.6":
"6bcd5a72977a4362f042cc2568960b5a42c1f13240ada6b1cce6aa2f6d6a3e42",
"s390x-unknown-linux-gnu-0.8.6":
"8b4372280249038ea5824937d6e1ca7e2192061bd38f3362200133ff55cbb9c3",
"x86_64-apple-darwin-0.8.6":
"4b1da363d8913a85a4a40df6620ae800b16c62beb54f60b1d336432644cb12bb",
"x86_64-pc-windows-msvc-0.8.6":
"f7ed402ea1e4d7fb2b2490e1a097e9849bfdaaa689521d290bdce5478db0428f",
"x86_64-unknown-linux-gnu-0.8.6":
"5429c9b96cab65198c2e5bfe83e933329aa16303a0369d5beedc71785a4a2f36",
"x86_64-unknown-linux-musl-0.8.6":
"0d89cffae3ad1c4ae2d4da06f71ad4539974185a31f7c196a6151b400bf84039",
"aarch64-apple-darwin-0.8.5":
"467e875ac84ac2155f048b56e33741d7dee6f02369048d5b6c05b74b745411e2",
"aarch64-pc-windows-msvc-0.8.5":
"8d3dda6ff64065e65b49ecd42018a885c0f20e6967af950ef121f976d73e72db",
"aarch64-unknown-linux-gnu-0.8.5":
"db05450c7c1e9dd51eeaf4b59c3bc3721bd9146e7ad95e87f5736d45c4037ae0",
"aarch64-unknown-linux-musl-0.8.5":
"400771c1136c9d5cf624bb1695b08d46a4e4e0fc2c9b8897e7be950ac5e00ae0",
"arm-unknown-linux-musleabihf-0.8.5":
"7dcd2a34735d2871714ee4993cf0227492c860ab089691a30f6a65d48ec469b6",
"armv7-unknown-linux-gnueabihf-0.8.5":
"0032fa90b0a74559ac965538178499de6b396ec7ff9b8d8134f442d2d3079f8a",
"armv7-unknown-linux-musleabihf-0.8.5":
"daab0e8f9b563dcbd6bc6ac517a5f9ebe1b1dca9671011d40012c73f0cde8cd0",
"i686-pc-windows-msvc-0.8.5":
"2c133809d2839eac93341a14df6fb16bf834ae3c7582f069cf24ccc60cf367f7",
"i686-unknown-linux-gnu-0.8.5":
"6c6b88bf178f5bd508523457a589e09c885deb57983f8d73dfdd43794d6decfb",
"i686-unknown-linux-musl-0.8.5":
"5968f60135941a2bcca742bf44854bbbe8adfba4d0a170f5991d95572c0e4d26",
"powerpc64-unknown-linux-gnu-0.8.5":
"a4e7b7dca6386b8623c12581ecb606b31a9df53ca8acbbb14dec5ceaa23c1603",
"powerpc64le-unknown-linux-gnu-0.8.5":
"1d521c56d8ee83b90f15350f1cebb506e2441e574b27acdbdfce8449ddbfa1c3",
"riscv64gc-unknown-linux-gnu-0.8.5":
"ca7536b206090982e6f90d566bc441598a6aaad4cfc885618f12051c51a0e454",
"s390x-unknown-linux-gnu-0.8.5":
"92fd077879ea943775bebf49d3515b5da8a237bcb9a975b2476183946b6ed017",
"x86_64-apple-darwin-0.8.5":
"9ee5b34975ab4659345fc96cc08098d7ec871cdfa969a5774894bcaebdaf3b58",
"x86_64-pc-windows-msvc-0.8.5":
"898049e2db4a92e59bf1da7e14cad9b5afadb7d0cf9dd55a5274825290f7ba6d",
"x86_64-unknown-linux-gnu-0.8.5":
"9db7e7db3cf98ddb57954bfb72c9ba4b8a4514b910e666e3c57e8b4e83a0d630",
"x86_64-unknown-linux-musl-0.8.5":
"64aec5c2fa8255d19ff20480afb6445e29be94628c58a429c131f5c60bd990b5",
"aarch64-apple-darwin-0.8.4":
"ef6785df8c23232ce6209c04acefd0c0d2ffb3a3ba0eef16422bdfe99a059105",
"aarch64-pc-windows-msvc-0.8.4":
"34cdff9ed7e1ffece93a895e65377a0ea4f186eb6785ead045280be59edabf19",
"aarch64-unknown-linux-gnu-0.8.4":
"d42742a28ce161e72cce45c8c5621ee23317e30d461f595c382acf0f9b331f20",
"aarch64-unknown-linux-musl-0.8.4":
"d194e457ba2c9f4e737ee9919c66465e0297d956b6c7121b61d37b98e15a694c",
"arm-unknown-linux-musleabihf-0.8.4":
"cfd9d5c2d5bc462308c54e4224cb4102819cfc230cd7a75dcf5cd345969ab732",
"armv7-unknown-linux-gnueabihf-0.8.4":
"234358eb9384c6392678d392ab0835daf500a71b6d78b5b33f10793c2c695d05",
"armv7-unknown-linux-musleabihf-0.8.4":
"65408f9aab2895faa1c523a064eef01f2d5cea4686ceb704217d8ece03a69a8c",
"i686-pc-windows-msvc-0.8.4":
"fc4fca95757e78fa4a782ae7f5cba4f52137df49b737cec0a6ad8092ca829151",
"i686-unknown-linux-gnu-0.8.4":
"d43485d5531529c4a57bf9b504e9ac1609a4467d220a268c38464d83d6df08b6",
"i686-unknown-linux-musl-0.8.4":
"cd4e9127d6562f0817060aa9c1b396afc7db31cdf48b73ecc347bd6f4f77f075",
"powerpc64-unknown-linux-gnu-0.8.4":
"3083419366b512e89e53f7e73c48ca15e28daa1ec674f5ef6492d06b0834e62d",
"powerpc64le-unknown-linux-gnu-0.8.4":
"1e1164b8b2bfcd09daf5b32bada5fdc08b81d384bebd9707691cc48561749a27",
"riscv64gc-unknown-linux-gnu-0.8.4":
"0b4e5e41b4c2836e6d8c1b4eb5151a0ea775908bc892ba62a8126fcdd7b06914",
"s390x-unknown-linux-gnu-0.8.4":
"28aefb0bac0349aa3f218cfa43ce50793f81c6948d01e2e4b97ea5421a2734ab",
"x86_64-apple-darwin-0.8.4":
"14e5309f182d1a92cf6c82f5891a0a0dc1cd5d46627171eaa1e84fa2b7e0afc3",
"x86_64-pc-windows-msvc-0.8.4":
"817c50c80229f88de9699626ee3774c0cceed86099663e8fb00c5ffae7ea911c",
"x86_64-unknown-linux-gnu-0.8.4":
"eb61d39fdc6ea21a6d00a24b50376102168240849c5022d3eba331f972ba3934",
"x86_64-unknown-linux-musl-0.8.4":
"4e16694fcc20a94136af70fb1449e8817150896af0339b6b28dfb6d006cd8116",
"aarch64-apple-darwin-0.8.3":
"9ebfe9f3b51187932ef97270b689da48261acacadd6ea7018d2cc62719c86ffe",
"aarch64-pc-windows-msvc-0.8.3":
"6e0692b817c5d6cfddad13ad177e866e36d95e8d32b4a296a49d937fdcda18d3",
"aarch64-unknown-linux-gnu-0.8.3":
"e82b5a3eb19e5087a6ea92800b0402f60378bd395e3483acd0b46124128ab71f",
"aarch64-unknown-linux-musl-0.8.3":
"05707835aadb8d0dfacf64a50dc31eb77fb11d1773b13ddd78d2404d43be3b7f",
"arm-unknown-linux-musleabihf-0.8.3":
"63f09a167470e40f5a7afce7ba726fa31d700042107215a8f46572a617b2ba64",
"armv7-unknown-linux-gnueabihf-0.8.3":
"ca3ab5110a248febf3af56ca8e417add5a164228d8861d2f6439d6c77654ad24",
"armv7-unknown-linux-musleabihf-0.8.3":
"79b9f2f8abf64b93aaf48f87b159bc34e73b92428c6424a9e633f481449bc8be",
"i686-pc-windows-msvc-0.8.3":
"5d272849a94b7ad36711f336d745e08ed3732042fc51f5c7f28bfc4e95463615",
"i686-unknown-linux-gnu-0.8.3":
"5ca9dcdd8aba4c59266536c00453f3815ccf4852a1bef78f181f4ae43726e742",
"i686-unknown-linux-musl-0.8.3":
"7a7eb903b673c0a0fa8282e12d2130fb63c1f0e574b1b8eb24ac63503db5db9e",
"powerpc64-unknown-linux-gnu-0.8.3":
"ad94079c0aa352730e5656246ecb8fd6cb5c7c1bbcc100954020f32128d6b0de",
"powerpc64le-unknown-linux-gnu-0.8.3":
"27ccd00f3c617b59d6977e48612dc5fe49d15c1181bf995863350e78002e54ac",
"riscv64gc-unknown-linux-gnu-0.8.3":
"897257393ca612058bb22691fab3a45480d3f7fc1df5bb968696576d7d98d6c1",
"s390x-unknown-linux-gnu-0.8.3":
"d148aebfc019aa14c686713fb0a391bb700290ecdf2903c2fdab0009182d880b",
"x86_64-apple-darwin-0.8.3":
"77eac9622f76ad89a8c59b31a96277aa61eb290d2949c69ab2061076471aeda2",
"x86_64-pc-windows-msvc-0.8.3":
"4ca84e28b08f48255f95156c5987d61a5e4c51a43372708bc6d84e994eeb7bdb",
"x86_64-unknown-linux-gnu-0.8.3":
"427c27ed5f87bf91aa045cf459ea34d348ed6377c62c3c054f1b4046b2f83fe2",
"x86_64-unknown-linux-musl-0.8.3":
"bfbe34caae328355b720ad0f667be99990b1b93721c8cb726e4a502796eb6d68",
"aarch64-apple-darwin-0.8.2":
"954d24634d5f37fa26c7af75eb79893d11623fc81b4de4b82d60d1ade4bfca22",
"aarch64-pc-windows-msvc-0.8.2":
"0e1e80ca0d6faab2c716ac7b73214c6df7a37dc0a45998d5f7d6e73339db8e48",
"aarch64-unknown-linux-gnu-0.8.2":
"27da35ef54e9131c2e305de67dd59a07c19257882c6b1f3cf4d8d5fbb8eaf4ca",
"aarch64-unknown-linux-musl-0.8.2":
"725237095ea91ad4fe54b1a047138194bdef428002709e0ae9dfea33b66e1c8a",
"arm-unknown-linux-musleabihf-0.8.2":
"ea523b34d5c96b32f1f68a51b690774f7822474a355fd74973a089ba2002e82a",
"armv7-unknown-linux-gnueabihf-0.8.2":
"8fcbdce85af3b62b8625e780c0065ccd35aab830fcd380c2bb5a03e2174861b0",
"armv7-unknown-linux-musleabihf-0.8.2":
"d433a35cd4e0b9ed8163b42b69d050954b77163765e5c25ac21aa08da2117ad3",
"i686-pc-windows-msvc-0.8.2":
"d862eaf046abe9143b3e172137cb50657920d324cb3e00be78d22aba4478d7f8",
"i686-unknown-linux-gnu-0.8.2":
"fc0baebac65fba4865c23f0ec31722750543c5f5320d7c52221b0565065520ce",
"i686-unknown-linux-musl-0.8.2":
"fff6ad20fbcf808089823161a303ab32bfbec31b0af73c3d5717fe8b80aa8a81",
"powerpc64-unknown-linux-gnu-0.8.2":
"d0cfde8f85eeeb7baabbca6ad7e66fba0bfb2e6145a95fb9fc97d82d153d08c8",
"powerpc64le-unknown-linux-gnu-0.8.2":
"f44b3870a323ba5dbd189c46ef10e565f9ba94c1f675b1daf8d1deab7cda92fb",
"riscv64gc-unknown-linux-gnu-0.8.2":
"87e97d546129846a2ee73516fa71770ee787ee62121ebfc5c3db682ae0f54cf1",
"s390x-unknown-linux-gnu-0.8.2":
"de324cd0b04162e25fd1dc2332b05e556978fec4bfcc3fbea6565e8276caac53",
"x86_64-apple-darwin-0.8.2":
"ae755df53c8c2c1f3dfbee6e3d2e00be0dfbc9c9b4bdffdb040b96f43678b7ce",
"x86_64-pc-windows-msvc-0.8.2":
"503a430df36957f851daedaed707a2ab69ed21a48bd499c2f0f7253ad5ba983f",
"x86_64-unknown-linux-gnu-0.8.2":
"6dcb28a541868a455aefb2e8d4a1283dd6bf888605a2db710f0530cec888b0ad",
"x86_64-unknown-linux-musl-0.8.2":
"2df1c90246ac03b237f997dce0a31a757523a6aaa9a15b26996a9851dc08ad3c",
"aarch64-apple-darwin-0.8.1":
"4dd195318b0ca893f9e51bd243441016fcf721dfc2c29f86ab7de74c1c216e53",
"aarch64-pc-windows-msvc-0.8.1":
"759b952f7ee0f2a556f6470ea48a2a87508f9a5cbd3624c881875c93748389af",
"aarch64-unknown-linux-gnu-0.8.1":
"0604abcd1a9232022f1b093874e6303d2725512f2e9fc324f0ac49a30d1b2de6",
"aarch64-unknown-linux-musl-0.8.1":
"4b87748593ca3fd060b96599494d5bad6e172455208c3d6a0f4d36cc89a435f9",
"arm-unknown-linux-musleabihf-0.8.1":
"6903a6c4ac2f00548a0164ff53ba1898be2e48449071c90bdf38811537ef47d2",
"armv7-unknown-linux-gnueabihf-0.8.1":
"179e0c81217d97eecba4c75566404edf947614f72b0be8b5c975b60b7d973282",
"armv7-unknown-linux-musleabihf-0.8.1":
"f62be877927f3a5e6ee99e352e73af8e1735e4251bb8cf11424f79b560616b20",
"i686-pc-windows-msvc-0.8.1":
"87107714fee0e0b137360b8b5f2425d5994655c58f2743fac5203c5d5cbf2f7e",
"i686-unknown-linux-gnu-0.8.1":
"1689bb02d731cd4e0ad6e9fb384c937d5ea38246f80c4a3f86bd9bf30c395490",
"i686-unknown-linux-musl-0.8.1":
"9a39a92210752fb03436eb9e69a52cade45c6fdad92aca209fef5594df2dded1",
"powerpc64-unknown-linux-gnu-0.8.1":
"5a6bb32ba3f0e26d7a2de90987ba285850a8b405eb402484448c927721fb784d",
"powerpc64le-unknown-linux-gnu-0.8.1":
"0e7bb9f5c298b9a55e019809fbc7d4a88e491ea7b606cd6b4bbc9ab648904af0",
"riscv64gc-unknown-linux-gnu-0.8.1":
"5346c2757546b26fc3b738cc021c3c17e372a08b6ee361cde95a88ee1eb87577",
"s390x-unknown-linux-gnu-0.8.1":
"66108f45f1fe81b7b02c3490debf838a90c818de00dd8c17c45ccad65554f8d7",
"x86_64-apple-darwin-0.8.1":
"96b3836b7bf97a24ac13a8854f2da7cd3a44993820935b29be964d776e3a3446",
"x86_64-pc-windows-msvc-0.8.1":
"b161c45b2a7f97400b1005591d782d2c96ea1c4570ac1336cd82a2500dbbed1f",
"x86_64-unknown-linux-gnu-0.8.1":
"abaeb153d85cf57277945c70fe449f813b14aa1913d1caa50daf333a01b2f317",
"x86_64-unknown-linux-musl-0.8.1":
"e54c95d4f1420311b7266d57e36304755b24c956a2928f365bb91215e3554c34",
"aarch64-apple-darwin-0.8.0":
"5a5ca58e3999d4f440632da87a56f7030eaaa3a13d3896561eec5fd51cb9ad45",
"aarch64-pc-windows-msvc-0.8.0":
"2fc83c9e2de30c1de8e9461188ffdac75ad41ac1e2227fd158d46b6cd09501d3",
"aarch64-unknown-linux-gnu-0.8.0":
"61f136a187150624c10ec7025137fdf5391ef083a4cab0eba4fbdb2a928de16b",
"aarch64-unknown-linux-musl-0.8.0":
"c5a7c042e40a9acb693c5ee01f26db047b07e4f3f301470b38ee4a2f3e0e831b",
"arm-unknown-linux-musleabihf-0.8.0":
"94c54815e371c93ce08ba5d4b95e7d847d11bdc1ba5af5e15656e6d1be521f74",
"armv7-unknown-linux-gnueabihf-0.8.0":
"57c891ebe985ef1c4e83bbc60b9d2fce40fd6e383db451ac1fc04d60a415022d",
"armv7-unknown-linux-musleabihf-0.8.0":
"fa8a3f50c1ffeb7013a7fb9d9dbba54ff0a1e5d2c4c758ec6fe785c37426ae7f",
"i686-pc-windows-msvc-0.8.0":
"cd03e12986765e48297228678dbeada0c284c552884910bcb3f0ea3ceeec8ee4",
"i686-unknown-linux-gnu-0.8.0":
"ebb52595b6b5a0b6805a50c5d5dc06fd632bbfcce5854228e1e426784e7813b6",
"i686-unknown-linux-musl-0.8.0":
"b9a44b22bb0605f8413d84a811346696b79e624aed850c0087fbea389074d401",
"powerpc64-unknown-linux-gnu-0.8.0":
"7b65a08c8ac4a2fae9f466d94e29896fb5f49f92d72a7c6ac315031b94d43857",
"powerpc64le-unknown-linux-gnu-0.8.0":
"698bc873422f261ec7e9da3ddb3a1b2b2d96be3f4aa6abe566c9d4a315b9d9d4",
"riscv64gc-unknown-linux-gnu-0.8.0":
"c508d286c64d34933f06e6ce04e2aada129e039692a57f6d8adf0bf9bbb90186",
"s390x-unknown-linux-gnu-0.8.0":
"756f55e2567585f1e62522b3e25bfae8c1b7f8a856d2e7ec85b48fcf5abbe9a8",
"x86_64-apple-darwin-0.8.0":
"828917cad79aae8327811c59fcc625ff3861bfe21d2cbb77c206737d41117ff2",
"x86_64-pc-windows-msvc-0.8.0":
"bad5afed0c18bd7f6c5125f5c7ab89ac830a3db7340c96d50a50527e9880cdfe",
"x86_64-unknown-linux-gnu-0.8.0":
"a7d74ee5c5ff3069b9d88236a05f293cc4e2809bad872f3a88a384489ba3675e",
"x86_64-unknown-linux-musl-0.8.0":
"0208cbcb3850bfc69277c9a16c2b0399218b075dc923aca7e4b576ee4228c570",
"aarch64-apple-darwin-0.7.22":
"707677074a9ae6906d4ccb22089341e3541db78022dc926e985bcc35fbb53a74",
"aarch64-pc-windows-msvc-0.7.22":
"bcbee39a55eca43ea286cbaa467b083888c7811ab8f47458063bc53331224f4d",
"aarch64-unknown-linux-gnu-0.7.22":
"d2ee24524f5ed45baceaddebded48493f7dd2692fad8a1d1796c606134c133b7",
"aarch64-unknown-linux-musl-0.7.22":
"1d524e7d61336ccdc4caa2299df811f318b96d81034ff621b7217d6c440a1702",
"arm-unknown-linux-musleabihf-0.7.22":
"ad458ba424cbd77f8278b634e9e14a2fea0ba1610b7a51b38e611cd8a8072792",
"armv7-unknown-linux-gnueabihf-0.7.22":
"3523c1f0396249bc3eae97f15141921108214e4fdce50f153272c79c91d3e737",
"armv7-unknown-linux-musleabihf-0.7.22":
"b96ec5d9be9527fe3a4e6642e26489cd1b12a8cbd3f2b80145bd61bd4919e188",
"i686-pc-windows-msvc-0.7.22":
"aca18c571d8bd6d370e0440a16544afde421ea01585721a46d3847c11404fb41",
"i686-unknown-linux-gnu-0.7.22":
"ea5f6c1460843bd1c391e06d731278707806666438a9389f957e604f60be3eca",
"i686-unknown-linux-musl-0.7.22":
"e20e7eceb3100bc93ed638d723a5b4f9985dd2650398b3f10b175a93e744c7b7",
"powerpc64-unknown-linux-gnu-0.7.22":
"7e7281c99a62a729483ea0268511bf9416a97f6256cc9123d7910b42d7c27937",
"powerpc64le-unknown-linux-gnu-0.7.22":
"0891f6f9fb7099cf35cc6bf4d3e565504ce793466d0a592056703518cb771dcf",
"riscv64gc-unknown-linux-gnu-0.7.22":
"8bf7e0bff7f1cfa2c8057405c2f5a377c7b864a83dfff8ce045f5773374f7add",
"s390x-unknown-linux-gnu-0.7.22":
"d7aba1fe8783e39f5f05061fc255a28d98eff0b83600915b606903ee1764b674",
"x86_64-apple-darwin-0.7.22":
"af8fb83280a000f5864653ca0c9a1f69bbdbc8b2bbfeb2e1d450ce7fd1518ff1",
"x86_64-pc-windows-msvc-0.7.22":
"ce5c13291643e8306e8d2dbcaf340d36ea985a761a53f2ca0a45e1a8e8936c85",
"x86_64-unknown-linux-gnu-0.7.22":
"8379e040fa1828e662968edaa3856aaeb6e1a0a0ec76ef8583096be1f72f19d4",
"x86_64-unknown-linux-musl-0.7.22":
"0508e73f28fa4024c76c4e0a5e347fea6aeb4bead0234618e6cfb76804237259",
"aarch64-apple-darwin-0.7.21":
"c73af7a4e0bcea9b5b593a0c7e5c025ee78d8be3f7cd60bfeadc8614a16c92ef",
"aarch64-pc-windows-msvc-0.7.21":
"877454562ba2af12a020652fb8f63d14b6c05aa6d1d3497441822c6c0b198541",
"aarch64-unknown-linux-gnu-0.7.21":
"1dae18211605b9d00767d913da5108aea50200a88372bf8a2e1f56abdbe509f0",
"aarch64-unknown-linux-musl-0.7.21":
"6577895c91a6bf6c1fda5f0fdfd07f8ee05f75f24a70a49193f8fb8dcde81fc3",
"arm-unknown-linux-musleabihf-0.7.21":
"cb175698eeb3abf77c00c4d19e9c5e10ed847f6988769f5b18a5c98c1ebd21ad",
"armv7-unknown-linux-gnueabihf-0.7.21":
"9c64218ebc2f96520105fddf3b500026a50d9319c7faf4d2221a7113efd96fd7",
"armv7-unknown-linux-musleabihf-0.7.21":
"9f83f0c4821e572e9289e270e64429495b188e372519ee88524e97b50943e657",
"i686-pc-windows-msvc-0.7.21":
"aaf3f3bc934616214e1f33ccb22432dc59110211b2b15636d66e8e42e9cf2f6f",
"i686-unknown-linux-gnu-0.7.21":
"141a4ecfe0bf08e82fe5834a0fd265cf3c27833c1bfbab69344efb1604c2d964",
"i686-unknown-linux-musl-0.7.21":
"ae1faeda2475f0df8733215133771da58de159d9e7b5a728f30047708e21a724",
"powerpc64-unknown-linux-gnu-0.7.21":
"bef76b3992d21682dfc82e096d18f449d43a757f28a00a62eb7e05002349f287",
"powerpc64le-unknown-linux-gnu-0.7.21":
"107c6c5a444c27bf772b1ec233b5b83dffd79348488cccc832dc9c14ee5ddf56",
"riscv64gc-unknown-linux-gnu-0.7.21":
"c5c160e64809ae29404354e555df7264763f7cf67012ffc1350619cc9d19299b",
"s390x-unknown-linux-gnu-0.7.21":
"77f3472201867a766e6f2a37ceb2e2f2f78343d3460c2313e3643483c80ecf92",
"x86_64-apple-darwin-0.7.21":
"f8a9b4f4a80a44653344d36b53e148134176e8f7cc99f8e823676a57c884595e",
"x86_64-pc-windows-msvc-0.7.21":
"7a4e427ceaf3c7d8437e512cbc25af84796c4079cf842c3349d4b646a9209da5",
"x86_64-unknown-linux-gnu-0.7.21":
"ca3e8898adfce5fcc891d393a079013fa4bd0d9636cef11aded8a7485bcba312",
"x86_64-unknown-linux-musl-0.7.21":
"7400debadcd63e530cf58c3cfc71d43d5a1017d2f699be86c6e91d7dc2073c7c",
"aarch64-apple-darwin-0.7.20":
"69da236af5934209a5c059fff1b2f69068918c423601f42448b1d92336853127",
"aarch64-pc-windows-msvc-0.7.20":
"34f3720cdd736f034f3b0d1b03d6b74b85d3528ccefd3552b3aadf455f191b2f",
"aarch64-unknown-linux-gnu-0.7.20":
"675165f879d6833aa313ecb25ac44781e131933a984727e180b3218d2cd6c1e9",
"aarch64-unknown-linux-musl-0.7.20":
"0f68f4a4583923635e56f7f930526bbbcc14d090f1c1a7ec1d28cc4ddad05279",
"arm-unknown-linux-musleabihf-0.7.20":
"9d3eb7fd1e3580a40e5d3f25db5d8a0719fb77be1d750b4849f6dbc96885e39f",
"armv7-unknown-linux-gnueabihf-0.7.20":
"775c3634a1ed7f0c23e5ce8e418acdb394fe87df1ac21af9f274e1e68df0d9b4",
"armv7-unknown-linux-musleabihf-0.7.20":
"27ac3e7f44c1af5bb9f01560e1848893e09c502a85552521cc9cf0d2cd4322c5",
"i686-pc-windows-msvc-0.7.20":
"90367e9f5adc46d6effd2b2107bee5f900f959c64898ae3ffb1e28b9519b15e5",
"i686-unknown-linux-gnu-0.7.20":
"9b53f988b7024728da39fc3e4217bf8cf233d1aa7afda20599dc3acb2049f328",
"i686-unknown-linux-musl-0.7.20":
"fa3091a175cdba4202367b30bda899bc3ed3b6c2161b7c42500c3bd1b388c3e2",
"powerpc64-unknown-linux-gnu-0.7.20":
"84b76581c50071a87609d340050b2cd0ba7fad7e929106202d4c99f4c5a41243",
"powerpc64le-unknown-linux-gnu-0.7.20":
"25082231ee1b479cc9fc486949e3196affda09b82bf0c6b3c8eacde37f56e9db",
"riscv64gc-unknown-linux-gnu-0.7.20":
"339015c2c934b93355a972c737f649fdf96abb699bebbc1b0955de9e5fff04bb",
"s390x-unknown-linux-gnu-0.7.20":
"16819d631e56438ea2e58b60bfb99feb8b2b8cdbec73e375e21c6dbe1de8c725",
"x86_64-apple-darwin-0.7.20":
"0c0edf17aff045bcb9bf89ffa43fefaec2d6585ff69debdb0ade62608f8ff069",
"x86_64-pc-windows-msvc-0.7.20":
"ddf35e258c32971c00f3f4213cf1b5cf0847a42dac578738cb294d379e4a9f6c",
"x86_64-unknown-linux-gnu-0.7.20":
"10f204426ff188925d22a53c1d0310d190a8d4d24513712e1b8e2ca9873f0666",
"x86_64-unknown-linux-musl-0.7.20":
"c8efa6bacde9154aa705feb35985cbc852d75c7d634e8a6867aa2f5571b27a62",
"aarch64-apple-darwin-0.7.19":
"698d24883fd441960fb4bc153b7030b89517a295502017ff3fdbba2fb0a0aa67",
"aarch64-pc-windows-msvc-0.7.19":
"c843b95d9bad3e364ead2af00b793d42156cb4f8ac0c2e33bfd2b3e50a0efc86",
"aarch64-unknown-linux-gnu-0.7.19":
"31b81b4b4ecd51ee4202f1e710fc22b72666f716ffbb825aa397c8246624d60f",
"aarch64-unknown-linux-musl-0.7.19":
"e83c7c6d86c8e7456078c736a72550ce20222df8083f9317fc58cd49422ce5eb",
"arm-unknown-linux-musleabihf-0.7.19":
"fe9834d5383feccd095cbfdbc290d7379f64bafc894ae8d8eb0724edfa754853",
"armv7-unknown-linux-gnueabihf-0.7.19":
"6678e4d1a91349dacd3405b0efa88656d1c8a16fa7ccea822c368039988f8339",
"armv7-unknown-linux-musleabihf-0.7.19":
"3022a75e757a31978e896e2e3fc2cf2dc966267a8757a270be0b421f541467e4",
"i686-pc-windows-msvc-0.7.19":
"063829d117c2e42322b0e3a59ee91020dcb1d95522889b903ffad392df197a11",
"i686-unknown-linux-gnu-0.7.19":
"1785537fc65a35609dc33063b5f1cc85437a08ade4c0a832071c018481afe515",
"i686-unknown-linux-musl-0.7.19":
"e64bc4f74cee116694ea63ad0722245f62f386de271be1a1c28a6e4fd977326e",
"powerpc64-unknown-linux-gnu-0.7.19":
"fb8a4a0d20dd3e236a88229e15af89fa3144bd06c4087dbfc7ba8ca691b0a953",
"powerpc64le-unknown-linux-gnu-0.7.19":
"b335d0593c165fbfcc51915b3eb056f45c5691d06744a5ded7210d789469870a",
"riscv64gc-unknown-linux-gnu-0.7.19":
"36ccef1387594e8fb212257fbeafa9e260709b363e1b262f43bd5a679134e4ac",
"s390x-unknown-linux-gnu-0.7.19":
"08ac0245d24ba16bbf224b00e8bc8021d081f9dcfdc61881cb6e4ac83954705a",
"x86_64-apple-darwin-0.7.19":
"40667bcb615b5af3e373ad611c4a9b95639b97e19b5924a436df8e69ca9331e2",
"x86_64-pc-windows-msvc-0.7.19":
"3098b38638b271d8b14b81247d6d69bb105807ec9fc5eb85f8cc8b6de5867c86",
"x86_64-unknown-linux-gnu-0.7.19":
"5ad6f11d5a04cb3af2418666031f20b63190f82032ec5a7f3a174385cc5567e4",
"x86_64-unknown-linux-musl-0.7.19":
"6236ed00a7442ab2c0f56f807d5a3331f3fb5c7640a357482fbc8492682641b2",
"aarch64-apple-darwin-0.7.18":
"c33cfaab95da1413a0403f643b7edb1c5af6798d8a2370196a80fc37b894df48",
"aarch64-pc-windows-msvc-0.7.18":
"c9c78de380e459f8424f648d107d4ab5286273ab19622a5d17796dc6689de453",
"aarch64-unknown-linux-gnu-0.7.18":
"2af8d0d963f547deba09c52aca79a26113f0ed5c903c101241fedcac90c2d8f4",
"aarch64-unknown-linux-musl-0.7.18":
"32872da98e5c48945e45406d427b3b4fdc11f04e4b8f297f49f76724894eb61b",
"arm-unknown-linux-musleabihf-0.7.18":
"c6c9e718aee25142139b25bf6bb5f9566c57812abced3efa71b4677ac3ef1275",
"armv7-unknown-linux-gnueabihf-0.7.18":
"00cdc4c898a251ea0c12f5db7b22929ff6f73f87a51fc6f874dfb57aecdcc995",
"armv7-unknown-linux-musleabihf-0.7.18":
"92a07d26943b5e223e941b64fa22e048c13fb6462ccb35f18fe2e212cfdc1c18",
"i686-pc-windows-msvc-0.7.18":
"4293c65f1fce52bd5396ec4419ce1c76412e276e0f292ec2464c319b7f8d59be",
"i686-unknown-linux-gnu-0.7.18":
"e5db36cb7b7edbe405c70211802ffe3b161983027f7644ca9ddc9ed5605dd504",
"i686-unknown-linux-musl-0.7.18":
"5829e240206ca895f8e500e9432dd87553091459a80d2a40c0d144688d443336",
"powerpc64-unknown-linux-gnu-0.7.18":
"927af365bc8388da27d241149a52ee3b9772db87ebace6fec6b00062aedd4a24",
"powerpc64le-unknown-linux-gnu-0.7.18":
"dc7ca0bca11efd40a4f85c40e2d83d830dacb7b0f9626bc40360a6697aa035e6",
"riscv64gc-unknown-linux-gnu-0.7.18":
"2cd75769322d264151e9abc2cf89edd086239afa00c0a1354d52a700657f7deb",
"s390x-unknown-linux-gnu-0.7.18":
"bc63ad2eefe5278b121a78255e8c488eb69ae29784b69012439ef365701393db",
"x86_64-apple-darwin-0.7.18":
"7a4a3350224a3a3904589ea306041af68686d72ec4d4b68e34c15d25dfc5cb4a",
"x86_64-pc-windows-msvc-0.7.18":
"5a5b3ef7c6aee0bb1101ef047f35a0fc7cc82e34eef3286e54c5badd261cb599",
"x86_64-unknown-linux-gnu-0.7.18":
"bcb8093f59eb08539087faf895ea1e794fe3db395de79eb41ddaa41d8c25adf7",
"x86_64-unknown-linux-musl-0.7.18":
"c8b51ed978b5f95a7c34dfe39e1dce966f7497fc12179f27507d507d9f3ff40b",
"aarch64-apple-darwin-0.7.17":
"0777e13ba598ccb9a9f78df209c98922b219a195765b9f1b309457a08cbae43d",
"aarch64-pc-windows-msvc-0.7.17":
"be0e7263e4106ca73ac72b4f84ae1c203db446d42d764b2b6459bf1d84aa1859",
"aarch64-unknown-linux-gnu-0.7.17":
"b88fda8f37769d445dd4b433c83490112afa18fc009b75e3cb28412a1d189c53",
"aarch64-unknown-linux-musl-0.7.17":
"789f3749497181311fbc27d2da322f4f836d814389901e8a7917ee664f500a6b",
"arm-unknown-linux-musleabihf-0.7.17":
"7f39a83f2cd7925aa25020dce70f9d2617213b710aec1c9fd686c3314ee814a2",
"armv7-unknown-linux-gnueabihf-0.7.17":
"9a4ee0fe51b07b8badf7ca874b3a065a0d2cf3b04c69aa2c7618c03d6ddd46ce",
"armv7-unknown-linux-musleabihf-0.7.17":
"6a5d3fa02a7bb5696ac392d6277f29174f27bc38e0100016ee67c55c8a472e3b",
"i686-pc-windows-msvc-0.7.17":
"45ffa8cd52e6a0764c2bde7c97be840b6c7606f976e6ae51bab394a891653f52",
"i686-unknown-linux-gnu-0.7.17":
"043897d13541c11c1221761c768d4234b889ce1fa39f1f27a567e11ca2c86233",
"i686-unknown-linux-musl-0.7.17":
"0d7a846ff1ae9d620243da530adcc468bba4aa317cb3ba4210c724e2ec5734b4",
"powerpc64-unknown-linux-gnu-0.7.17":
"46331c3771dbc8aaaa4c75421b6195edb763bac5ca4b8d551efd2da013351252",
"powerpc64le-unknown-linux-gnu-0.7.17":
"9f7e13304c7f3977c2e1eaa068a6beb36e6974a2abcf8cb1b8e0d8b96c251203",
"riscv64gc-unknown-linux-gnu-0.7.17":
"789fea86b495397c7bd12c92221259f07c78ba738d568757b06500ac94b6ebe8",
"s390x-unknown-linux-gnu-0.7.17":
"208c6609012ca921aa3ca67d49dde34464e405041b1d8b041c15078687456570",
"x86_64-apple-darwin-0.7.17":
"c0aff6481443e7dc38c01dfb3535814db42c00ad3ab374e7b4ed4ebb7f5b2237",
"x86_64-pc-windows-msvc-0.7.17":
"b49d1a02662ac4a490c886fff8a340a4adc32da8d0634fc653a69459d2b5f863",
"x86_64-unknown-linux-gnu-0.7.17":
"e9bf64a66a318a82d3c37a74c31527df0ac7e7c821a10f5e1032415f000d7d43",
"x86_64-unknown-linux-musl-0.7.17":
"ffd877241741df0a6436ba6ed0d8cd6573f1f922ede3a967c32c57d2133c72b0",
"aarch64-apple-darwin-0.7.16":
"a157919a2a615fac5de0fcef5120a63de7e6582fb6e0ae4428238af347ed1054",
"aarch64-pc-windows-msvc-0.7.16":
"a832dd02c44cd8d373b226ca34128982aca5303dd3b477c90c5a1f83efa874b0",
"aarch64-unknown-linux-gnu-0.7.16":
"4ff5b8542514b453073cad1dfba08db751ada21981b869c69a2ac29fd639b586",
"aarch64-unknown-linux-musl-0.7.16":
"c1536a85aa85cae05c51d25b2819c5b9869f67c66c65948aadeb0c38c4bd51b3",
"arm-unknown-linux-musleabihf-0.7.16":
"20902d98f9a309df2a83ffd31ecfda444dfb75249c2779eedaeed7d73274f34b",
"armv7-unknown-linux-gnueabihf-0.7.16":
"72afc7e60eff20a1c2181f88c9d96e06553f854192b3a13069aba0f8b045a839",
"armv7-unknown-linux-musleabihf-0.7.16":
"c0b5300958a489330a9790b701f1491a1bec72e402281cdaf6a2362b51fa4c13",
"i686-pc-windows-msvc-0.7.16":
"6d4c4de0cc8c88fb7d94138c05091dac6746a7bc9d94b3743e804a485546154b",
"i686-unknown-linux-gnu-0.7.16":
"ee03aaf5d736524a8b6e74c273d5877be1bb720933cb8f7f5e70b42c70933418",
"i686-unknown-linux-musl-0.7.16":
"b815f060a689e0fe95ec36498533bb261b92dab5cdb60b02cc19fa30c6cd7e57",
"powerpc64-unknown-linux-gnu-0.7.16":
"a2b78151e50646b26cacef24de87d625d4b100efe69347c88a8a6d340b0e82cb",
"powerpc64le-unknown-linux-gnu-0.7.16":
"c231b3880c6584b6fe411b0c7507ed0c091856a64f84720b732ddd39b21b7e6c",
"riscv64gc-unknown-linux-gnu-0.7.16":
"6be4c3e27989ffd49befc689884b78b55c53c817a27040b8e232edd92185b037",
"s390x-unknown-linux-gnu-0.7.16":
"f4e1814f2326db1eb0d0d2ea96ee36c361a856e8c9d8d82817936aad9baa4299",
"x86_64-apple-darwin-0.7.16":
"414cb3c348b0482bc88fdabbc267973a11401e684a78fd471b2c4553fa8b6965",
"x86_64-pc-windows-msvc-0.7.16":
"409d19c14a9b1ce83bf7331dbda89984802efb3a2fbf9ffdf149b22ab9cf2826",
"x86_64-unknown-linux-gnu-0.7.16":
"c51f5dc9fd33e789992839d2957d6cfe0b6dce1cd7ec641740af456b12e9d468",
"x86_64-unknown-linux-musl-0.7.16":
"34c9da84a673e6c06d2e081d72d953f278fe5bb6aba0437210ba62817b340eb7",
"aarch64-apple-darwin-0.7.15":
"7a20f3d33cbbc75683d66e0562d4bdbd702ca656d7dc1b7be3c592de6a6517b9",
"aarch64-pc-windows-msvc-0.7.15":
"d15770be109fdde45c60a522fcc97bf19e0d9d9de8a0d2f0dadc772786110123",
"aarch64-unknown-linux-gnu-0.7.15":
"a8241809c6efcf5ff649d259276dabd297a2c46e9e2f78891a1f9b8ae858e1e8",
"aarch64-unknown-linux-musl-0.7.15":
"4351c1e2ec13f5eb4da058ac1c39f00ae3042de9d6fdb6480e0170f32813210f",
"arm-unknown-linux-musleabihf-0.7.15":
"26c7f1baf3f14857d8d5d2df86ea47a3ce5a0e6223c1db9af2a32bb3d216d5f1",
"armv7-unknown-linux-gnueabihf-0.7.15":
"6609e0f39c958a2b728ffec99ed53741cee92d5db168fb275448216a9e2f5a63",
"armv7-unknown-linux-musleabihf-0.7.15":
"3a60e3bfc6b927537eff1c6fdb359bdfb5a02a59820bb964e04144d731b12ca9",
"i686-pc-windows-msvc-0.7.15":
"831ac11382c9ae014f6f5d27506c8977bfba5aa6b104e278d3a87ff4d1e311d3",
"i686-unknown-linux-gnu-0.7.15":
"8d11cd225843aa7e7b25a5300721d48519a13bc82fc8b7bf63b063b8520b2db6",
"i686-unknown-linux-musl-0.7.15":
"8640a014e5ef7020b33a8e95fabd5e0c75adf80beeaf265ed50dfe2bee92aeb2",
"powerpc64-unknown-linux-gnu-0.7.15":
"6a4c0fe1075c4f3b9dfb8d0654a58ca547aaa84f829bc9e1b60a096153d18686",
"powerpc64le-unknown-linux-gnu-0.7.15":
"81f6d18b857cc3517f249fd7e321b9cad6e6c17bc7d7ad88cefc0c25cca3e486",
"riscv64gc-unknown-linux-gnu-0.7.15":
"6a0a6ef8fa3d03b6a6cab9185cd84e28c78db1e5736efa711e6f5efa4e6c27e3",
"s390x-unknown-linux-gnu-0.7.15":
"d5a2343934c7fec124fb0a140b12c4dd30e20c5473e67b11d064f5b6e52eead0",
"x86_64-apple-darwin-0.7.15":
"4c7c1fe116566b6f8725a3801a33fa5e066b8687643acd73249e5db1351c2103",
"x86_64-pc-windows-msvc-0.7.15":
"b78c2d265e74b21b1c04b5b4ffd61c5c7b8110f9188e24949ee9f6fd5fbaf0a8",
"x86_64-unknown-linux-gnu-0.7.15":
"b1dc0892749e93382decbd894755be0ba1535587f0bb8333572b072d1b0f652a",
"x86_64-unknown-linux-musl-0.7.15":
"c97afc120614c88bd8c13dac2d35015bc59656289633d61bc438e7e680a38710",
"aarch64-apple-darwin-0.7.14": "aarch64-apple-darwin-0.7.14":
"7cb9cb6b3005a16356493887d7e7e297237b754b5753b91e826ada98ab2da172", "7cb9cb6b3005a16356493887d7e7e297237b754b5753b91e826ada98ab2da172",
"aarch64-pc-windows-msvc-0.7.14": "aarch64-pc-windows-msvc-0.7.14":

View File

@@ -1,12 +1,12 @@
import { promises as fs } from "node:fs";
import * as path from "node:path";
import * as core from "@actions/core"; import * as core from "@actions/core";
import * as tc from "@actions/tool-cache"; import * as tc from "@actions/tool-cache";
import * as path from "node:path";
import * as pep440 from "@renovatebot/pep440"; import * as pep440 from "@renovatebot/pep440";
import { promises as fs } from "node:fs";
import { OWNER, REPO, TOOL_CACHE_NAME } from "../utils/constants"; import { OWNER, REPO, TOOL_CACHE_NAME } from "../utils/constants";
import { Octokit } from "../utils/octokit";
import type { Architecture, Platform } from "../utils/platforms"; import type { Architecture, Platform } from "../utils/platforms";
import { validateChecksum } from "./checksum/checksum"; import { validateChecksum } from "./checksum/checksum";
import { Octokit } from "../utils/octokit";
import { import {
getDownloadUrl, getDownloadUrl,
getLatestKnownVersion as getLatestVersionInManifest, getLatestKnownVersion as getLatestVersionInManifest,
@@ -24,7 +24,7 @@ export function tryGetFromToolCache(
resolvedVersion = version; resolvedVersion = version;
} }
const installedPath = tc.find(TOOL_CACHE_NAME, resolvedVersion, arch); const installedPath = tc.find(TOOL_CACHE_NAME, resolvedVersion, arch);
return { installedPath, version: resolvedVersion }; return { version: resolvedVersion, installedPath };
} }
export async function downloadVersionFromGithub( export async function downloadVersionFromGithub(
@@ -121,7 +121,7 @@ async function downloadVersion(
version, version,
arch, arch,
); );
return { cachedToolDir, version: version }; return { version: version, cachedToolDir };
} }
function getExtension(platform: Platform): string { function getExtension(platform: Platform): string {
@@ -160,7 +160,6 @@ export async function resolveVersion(
} }
async function getAvailableVersions(githubToken: string): Promise<string[]> { async function getAvailableVersions(githubToken: string): Promise<string[]> {
core.info("Getting available versions from GitHub API...");
try { try {
const octokit = new Octokit({ const octokit = new Octokit({
auth: githubToken, auth: githubToken,
@@ -185,17 +184,11 @@ async function getReleaseTagNames(
owner: OWNER, owner: OWNER,
repo: REPO, repo: REPO,
}); });
const releaseTagNames = response.map((release) => release.tag_name); return response.map((release) => release.tag_name);
if (releaseTagNames.length === 0) {
throw Error(
"Github API request failed while getting releases. Check the GitHub status page for outages. Try again later.",
);
}
return releaseTagNames;
} }
async function getLatestVersion(githubToken: string) { async function getLatestVersion(githubToken: string) {
core.info("Getting latest version from GitHub API..."); core.debug("Getting latest version...");
const octokit = new Octokit({ const octokit = new Octokit({
auth: githubToken, auth: githubToken,
}); });
@@ -204,18 +197,14 @@ async function getLatestVersion(githubToken: string) {
try { try {
latestRelease = await getLatestRelease(octokit); latestRelease = await getLatestRelease(octokit);
} catch (err) { } catch (err) {
if ((err as Error).message.includes("Bad credentials")) { core.info(
core.info( "No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.",
"No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.", );
); if (err instanceof Error) {
const octokit = new Octokit(); core.debug(err.message);
latestRelease = await getLatestRelease(octokit);
} else {
core.error(
"Github API request failed while getting latest release. Check the GitHub status page for outages. Try again later.",
);
throw err;
} }
const octokit = new Octokit();
latestRelease = await getLatestRelease(octokit);
} }
if (!latestRelease) { if (!latestRelease) {

View File

@@ -1,8 +1,8 @@
import { promises as fs } from "node:fs"; import { promises as fs } from "node:fs";
import { join } from "node:path";
import * as core from "@actions/core"; import * as core from "@actions/core";
import * as semver from "semver"; import * as semver from "semver";
import { fetch } from "../utils/fetch"; import { fetch } from "../utils/fetch";
import { join } from "node:path";
const localManifestFile = join(__dirname, "..", "..", "version-manifest.json"); const localManifestFile = join(__dirname, "..", "..", "version-manifest.json");
@@ -79,11 +79,11 @@ export async function updateVersionManifest(
} }
const artifactParts = artifactName.split(".")[0].split("-"); const artifactParts = artifactName.split(".")[0].split("-");
manifest.push({ manifest.push({
arch: artifactParts[1],
artifactName: artifactName,
downloadUrl: downloadUrl,
platform: artifactName.split(`uv-${artifactParts[1]}-`)[1].split(".")[0],
version: version, version: version,
artifactName: artifactName,
arch: artifactParts[1],
platform: artifactName.split(`uv-${artifactParts[1]}-`)[1].split(".")[0],
downloadUrl: downloadUrl,
}); });
} }
core.debug(`Updating manifest-file: ${JSON.stringify(manifest)}`); core.debug(`Updating manifest-file: ${JSON.stringify(manifest)}`);

View File

@@ -1,8 +1,8 @@
import * as crypto from "node:crypto"; import * as crypto from "node:crypto";
import * as core from "@actions/core";
import * as fs from "node:fs"; import * as fs from "node:fs";
import * as stream from "node:stream"; import * as stream from "node:stream";
import * as util from "node:util"; import * as util from "node:util";
import * as core from "@actions/core";
import { create } from "@actions/glob"; import { create } from "@actions/glob";
/** /**

View File

@@ -1,27 +1,22 @@
import * as fs from "node:fs";
import * as cache from "@actions/cache"; import * as cache from "@actions/cache";
import * as core from "@actions/core"; import * as core from "@actions/core";
import * as exec from "@actions/exec"; import * as exec from "@actions/exec";
import * as fs from "node:fs";
import { import {
STATE_CACHE_KEY,
STATE_CACHE_MATCHED_KEY, STATE_CACHE_MATCHED_KEY,
STATE_CACHE_KEY,
} from "./cache/restore-cache"; } from "./cache/restore-cache";
import { import {
cacheLocalPath, cacheLocalPath,
enableCache, enableCache,
ignoreNothingToCache, ignoreNothingToCache,
pruneCache as shouldPruneCache, pruneCache as shouldPruneCache,
saveCache as shouldSaveCache,
} from "./utils/inputs"; } from "./utils/inputs";
export async function run(): Promise<void> { export async function run(): Promise<void> {
try { try {
if (enableCache) { if (enableCache) {
if (shouldSaveCache) { await saveCache();
await saveCache();
} else {
core.info("save-cache is false. Skipping save cache step.");
}
// node will stay alive if any promises are not resolved, // node will stay alive if any promises are not resolved,
// which is a possibility if HTTP requests are dangling // which is a possibility if HTTP requests are dangling
// due to retries or timeouts. We know that if we got here // due to retries or timeouts. We know that if we got here

View File

@@ -1,38 +1,37 @@
import fs from "node:fs";
import * as path from "node:path";
import * as core from "@actions/core"; import * as core from "@actions/core";
import * as exec from "@actions/exec"; import * as path from "node:path";
import { restoreCache } from "./cache/restore-cache";
import { import {
tryGetFromToolCache,
resolveVersion,
downloadVersionFromGithub, downloadVersionFromGithub,
downloadVersionFromManifest, downloadVersionFromManifest,
resolveVersion,
tryGetFromToolCache,
} from "./download/download-version"; } from "./download/download-version";
import { import { restoreCache } from "./cache/restore-cache";
activateEnvironment as activateEnvironmentInput,
addProblemMatchers,
cacheLocalPath,
checkSum,
enableCache,
githubToken,
ignoreEmptyWorkdir,
manifestFile,
pythonVersion,
serverUrl,
toolBinDir,
toolDir,
versionFile as versionFileInput,
version as versionInput,
workingDirectory,
} from "./utils/inputs";
import { import {
type Architecture, type Architecture,
getArch, getArch,
getPlatform, getPlatform,
type Platform, type Platform,
} from "./utils/platforms"; } from "./utils/platforms";
import { getUvVersionFromFile } from "./version/resolve"; import {
activateEnvironment as activateEnvironmentInput,
cacheLocalPath,
checkSum,
ignoreEmptyWorkdir,
enableCache,
githubToken,
pythonVersion,
toolBinDir,
toolDir,
version as versionInput,
workingDirectory,
serverUrl,
manifestFile,
} from "./utils/inputs";
import * as exec from "@actions/exec";
import fs from "node:fs";
import { getUvVersionFromConfigFile } from "./utils/config-file";
async function run(): Promise<void> { async function run(): Promise<void> {
detectEmptyWorkdir(); detectEmptyWorkdir();
@@ -134,19 +133,10 @@ async function determineVersion(
if (versionInput !== "") { if (versionInput !== "") {
return await resolveVersion(versionInput, manifestFile, githubToken); return await resolveVersion(versionInput, manifestFile, githubToken);
} }
if (versionFileInput !== "") { const versionFromUvToml = getUvVersionFromConfigFile(
const versionFromFile = getUvVersionFromFile(versionFileInput);
if (versionFromFile === undefined) {
throw new Error(
`Could not determine uv version from file: ${versionFileInput}`,
);
}
return await resolveVersion(versionFromFile, manifestFile, githubToken);
}
const versionFromUvToml = getUvVersionFromFile(
`${workingDirectory}${path.sep}uv.toml`, `${workingDirectory}${path.sep}uv.toml`,
); );
const versionFromPyproject = getUvVersionFromFile( const versionFromPyproject = getUvVersionFromConfigFile(
`${workingDirectory}${path.sep}pyproject.toml`, `${workingDirectory}${path.sep}pyproject.toml`,
); );
if (versionFromUvToml === undefined && versionFromPyproject === undefined) { if (versionFromUvToml === undefined && versionFromPyproject === undefined) {
@@ -227,10 +217,8 @@ function setCacheDir(cacheLocalPath: string): void {
} }
function addMatchers(): void { function addMatchers(): void {
if (addProblemMatchers) { const matchersPath = path.join(__dirname, `..${path.sep}..`, ".github");
const matchersPath = path.join(__dirname, `..${path.sep}..`, ".github"); core.info(`##[add-matcher]${path.join(matchersPath, "python.json")}`);
core.info(`##[add-matcher]${path.join(matchersPath, "python.json")}`);
}
} }
run(); run();

View File

@@ -1,12 +1,14 @@
import * as core from "@actions/core";
import * as semver from "semver"; import * as semver from "semver";
import * as core from "@actions/core";
import { Octokit } from "./utils/octokit";
import { OWNER, REPO } from "./utils/constants";
import { updateChecksums } from "./download/checksum/update-known-checksums"; import { updateChecksums } from "./download/checksum/update-known-checksums";
import { import {
getLatestKnownVersion,
updateVersionManifest, updateVersionManifest,
getLatestKnownVersion,
} from "./download/version-manifest"; } from "./download/version-manifest";
import { OWNER, REPO } from "./utils/constants";
import { Octokit } from "./utils/octokit";
async function run(): Promise<void> { async function run(): Promise<void> {
const checksumFilePath = process.argv.slice(2)[0]; const checksumFilePath = process.argv.slice(2)[0];

46
src/utils/config-file.ts Normal file
View File

@@ -0,0 +1,46 @@
import fs from "node:fs";
import * as core from "@actions/core";
import * as toml from "smol-toml";
export function getUvVersionFromConfigFile(
filePath: string,
): string | undefined {
core.info(`Trying to find required-version for uv in: ${filePath}`);
if (!fs.existsSync(filePath)) {
core.info(`Could not find file: ${filePath}`);
return undefined;
}
let requiredVersion: string | undefined;
try {
requiredVersion = getRequiredVersion(filePath);
} catch (err) {
const message = (err as Error).message;
core.warning(`Error while parsing ${filePath}: ${message}`);
return undefined;
}
if (requiredVersion?.startsWith("==")) {
requiredVersion = requiredVersion.slice(2);
}
if (requiredVersion !== undefined) {
core.info(
`Found required-version for uv in ${filePath}: ${requiredVersion}`,
);
}
return requiredVersion;
}
function getRequiredVersion(filePath: string): string | undefined {
const fileContent = fs.readFileSync(filePath, "utf-8");
if (filePath.endsWith("pyproject.toml")) {
const tomlContent = toml.parse(fileContent) as {
tool?: { uv?: { "required-version"?: string } };
};
return tomlContent?.tool?.uv?.["required-version"];
}
const tomlContent = toml.parse(fileContent) as {
"required-version"?: string;
};
return tomlContent["required-version"];
}

View File

@@ -1,4 +1,4 @@
import { ProxyAgent, type RequestInit, fetch as undiciFetch } from "undici"; import { fetch as undiciFetch, ProxyAgent, type RequestInit } from "undici";
export function getProxyAgent() { export function getProxyAgent() {
const httpProxy = process.env.HTTP_PROXY || process.env.http_proxy; const httpProxy = process.env.HTTP_PROXY || process.env.http_proxy;

View File

@@ -1,18 +1,16 @@
import path from "node:path";
import * as core from "@actions/core"; import * as core from "@actions/core";
import path from "node:path";
import { getManifestFromRepo } from "@actions/tool-cache";
export const workingDirectory = core.getInput("working-directory");
export const version = core.getInput("version"); export const version = core.getInput("version");
export const versionFile = getVersionFile();
export const pythonVersion = core.getInput("python-version"); export const pythonVersion = core.getInput("python-version");
export const activateEnvironment = core.getBooleanInput("activate-environment"); export const activateEnvironment = core.getBooleanInput("activate-environment");
export const workingDirectory = core.getInput("working-directory");
export const checkSum = core.getInput("checksum"); export const checkSum = core.getInput("checksum");
export const enableCache = getEnableCache(); export const enableCache = getEnableCache();
export const restoreCache = core.getInput("restore-cache") === "true";
export const saveCache = core.getInput("save-cache") === "true";
export const cacheSuffix = core.getInput("cache-suffix") || ""; export const cacheSuffix = core.getInput("cache-suffix") || "";
export const cacheLocalPath = getCacheLocalPath(); export const cacheLocalPath = getCacheLocalPath();
export const cacheDependencyGlob = getCacheDependencyGlob(); export const cacheDependencyGlob = core.getInput("cache-dependency-glob");
export const pruneCache = core.getInput("prune-cache") === "true"; export const pruneCache = core.getInput("prune-cache") === "true";
export const ignoreNothingToCache = export const ignoreNothingToCache =
core.getInput("ignore-nothing-to-cache") === "true"; core.getInput("ignore-nothing-to-cache") === "true";
@@ -23,17 +21,6 @@ export const toolDir = getToolDir();
export const serverUrl = core.getInput("server-url"); export const serverUrl = core.getInput("server-url");
export const githubToken = core.getInput("github-token"); export const githubToken = core.getInput("github-token");
export const manifestFile = getManifestFile(); export const manifestFile = getManifestFile();
export const addProblemMatchers =
core.getInput("add-problem-matchers") === "true";
function getVersionFile(): string {
const versionFileInput = core.getInput("version-file");
if (versionFileInput !== "") {
const tildeExpanded = expandTilde(versionFileInput);
return resolveRelativePath(tildeExpanded);
}
return versionFileInput;
}
function getEnableCache(): boolean { function getEnableCache(): boolean {
const enableCacheInput = core.getInput("enable-cache"); const enableCacheInput = core.getInput("enable-cache");
@@ -46,8 +33,7 @@ function getEnableCache(): boolean {
function getToolBinDir(): string | undefined { function getToolBinDir(): string | undefined {
const toolBinDirInput = core.getInput("tool-bin-dir"); const toolBinDirInput = core.getInput("tool-bin-dir");
if (toolBinDirInput !== "") { if (toolBinDirInput !== "") {
const tildeExpanded = expandTilde(toolBinDirInput); return expandTilde(toolBinDirInput);
return resolveRelativePath(tildeExpanded);
} }
if (process.platform === "win32") { if (process.platform === "win32") {
if (process.env.RUNNER_TEMP !== undefined) { if (process.env.RUNNER_TEMP !== undefined) {
@@ -63,8 +49,7 @@ function getToolBinDir(): string | undefined {
function getToolDir(): string | undefined { function getToolDir(): string | undefined {
const toolDirInput = core.getInput("tool-dir"); const toolDirInput = core.getInput("tool-dir");
if (toolDirInput !== "") { if (toolDirInput !== "") {
const tildeExpanded = expandTilde(toolDirInput); return expandTilde(toolDirInput);
return resolveRelativePath(tildeExpanded);
} }
if (process.platform === "win32") { if (process.platform === "win32") {
if (process.env.RUNNER_TEMP !== undefined) { if (process.env.RUNNER_TEMP !== undefined) {
@@ -80,8 +65,7 @@ function getToolDir(): string | undefined {
function getCacheLocalPath(): string { function getCacheLocalPath(): string {
const cacheLocalPathInput = core.getInput("cache-local-path"); const cacheLocalPathInput = core.getInput("cache-local-path");
if (cacheLocalPathInput !== "") { if (cacheLocalPathInput !== "") {
const tildeExpanded = expandTilde(cacheLocalPathInput); return expandTilde(cacheLocalPathInput);
return resolveRelativePath(tildeExpanded);
} }
if (process.env.RUNNER_ENVIRONMENT === "github-hosted") { if (process.env.RUNNER_ENVIRONMENT === "github-hosted") {
if (process.env.RUNNER_TEMP !== undefined) { if (process.env.RUNNER_TEMP !== undefined) {
@@ -97,19 +81,6 @@ function getCacheLocalPath(): string {
return `${process.env.HOME}${path.sep}.cache${path.sep}uv`; return `${process.env.HOME}${path.sep}.cache${path.sep}uv`;
} }
function getCacheDependencyGlob(): string {
const cacheDependencyGlobInput = core.getInput("cache-dependency-glob");
if (cacheDependencyGlobInput !== "") {
return cacheDependencyGlobInput
.split("\n")
.map((part) => part.trim())
.map((part) => expandTilde(part))
.map((part) => resolveRelativePath(part))
.join("\n");
}
return cacheDependencyGlobInput;
}
function expandTilde(input: string): string { function expandTilde(input: string): string {
if (input.startsWith("~")) { if (input.startsWith("~")) {
return `${process.env.HOME}${input.substring(1)}`; return `${process.env.HOME}${input.substring(1)}`;
@@ -117,18 +88,6 @@ function expandTilde(input: string): string {
return input; return input;
} }
function resolveRelativePath(inputPath: string): string {
const hasNegation = inputPath.startsWith("!");
const pathWithoutNegation = hasNegation ? inputPath.substring(1) : inputPath;
const resolvedPath = path.resolve(workingDirectory, pathWithoutNegation);
core.debug(
`Resolving relative path ${inputPath} to ${hasNegation ? "!" : ""}${resolvedPath}`,
);
return hasNegation ? `!${resolvedPath}` : resolvedPath;
}
function getManifestFile(): string | undefined { function getManifestFile(): string | undefined {
const manifestFileInput = core.getInput("manifest-file"); const manifestFileInput = core.getInput("manifest-file");
if (manifestFileInput !== "") { if (manifestFileInput !== "") {

View File

@@ -4,8 +4,8 @@ import type {
OctokitOptions, OctokitOptions,
} from "@octokit/core/dist-types/types"; } from "@octokit/core/dist-types/types";
import { import {
type PaginateInterface,
paginateRest, paginateRest,
type PaginateInterface,
} from "@octokit/plugin-paginate-rest"; } from "@octokit/plugin-paginate-rest";
import { legacyRestEndpointMethods } from "@octokit/plugin-rest-endpoint-methods"; import { legacyRestEndpointMethods } from "@octokit/plugin-rest-endpoint-methods";
import { fetch as customFetch } from "./fetch"; import { fetch as customFetch } from "./fetch";

View File

@@ -1,5 +1,5 @@
import * as core from "@actions/core";
import * as exec from "@actions/exec"; import * as exec from "@actions/exec";
import * as core from "@actions/core";
export type Platform = export type Platform =
| "unknown-linux-gnu" | "unknown-linux-gnu"
| "unknown-linux-musl" | "unknown-linux-musl"
@@ -16,11 +16,11 @@ export type Architecture =
export function getArch(): Architecture | undefined { export function getArch(): Architecture | undefined {
const arch = process.arch; const arch = process.arch;
const archMapping: { [key: string]: Architecture } = { const archMapping: { [key: string]: Architecture } = {
arm64: "aarch64",
ia32: "i686", ia32: "i686",
ppc64: "powerpc64le",
s390x: "s390x",
x64: "x86_64", x64: "x86_64",
arm64: "aarch64",
s390x: "s390x",
ppc64: "powerpc64le",
}; };
if (arch in archMapping) { if (arch in archMapping) {
@@ -31,8 +31,8 @@ export function getArch(): Architecture | undefined {
export async function getPlatform(): Promise<Platform | undefined> { export async function getPlatform(): Promise<Platform | undefined> {
const processPlatform = process.platform; const processPlatform = process.platform;
const platformMapping: { [key: string]: Platform } = { const platformMapping: { [key: string]: Platform } = {
darwin: "apple-darwin",
linux: "unknown-linux-gnu", linux: "unknown-linux-gnu",
darwin: "apple-darwin",
win32: "pc-windows-msvc", win32: "pc-windows-msvc",
}; };
@@ -50,16 +50,16 @@ async function isMuslOs(): Promise<boolean> {
let stdOutput = ""; let stdOutput = "";
let errOutput = ""; let errOutput = "";
const options: exec.ExecOptions = { const options: exec.ExecOptions = {
ignoreReturnCode: true, silent: !core.isDebug(),
listeners: { listeners: {
stderr: (data: Buffer) => {
errOutput += data.toString();
},
stdout: (data: Buffer) => { stdout: (data: Buffer) => {
stdOutput += data.toString(); stdOutput += data.toString();
}, },
stderr: (data: Buffer) => {
errOutput += data.toString();
},
}, },
silent: !core.isDebug(), ignoreReturnCode: true,
}; };
try { try {

View File

@@ -1,22 +0,0 @@
import fs from "node:fs";
import * as toml from "smol-toml";
export function getRequiredVersionFromConfigFile(
filePath: string,
): string | undefined {
if (!filePath.endsWith(".toml")) {
return undefined;
}
const fileContent = fs.readFileSync(filePath, "utf-8");
if (filePath.endsWith("pyproject.toml")) {
const tomlContent = toml.parse(fileContent) as {
tool?: { uv?: { "required-version"?: string } };
};
return tomlContent?.tool?.uv?.["required-version"];
}
const tomlContent = toml.parse(fileContent) as {
"required-version"?: string;
};
return tomlContent["required-version"];
}

View File

@@ -1,43 +0,0 @@
import fs from "node:fs";
import * as toml from "smol-toml";
export function getUvVersionFromRequirementsFile(
filePath: string,
): string | undefined {
const fileContent = fs.readFileSync(filePath, "utf-8");
if (filePath.endsWith(".txt")) {
return getUvVersionFromAllDependencies(fileContent.split("\n"));
}
const dependencies = parsePyprojectDependencies(fileContent);
return getUvVersionFromAllDependencies(dependencies);
}
function getUvVersionFromAllDependencies(
allDependencies: string[],
): string | undefined {
return allDependencies
.find((dep: string) => dep.match(/^uv[=<>~!]/))
?.match(/^uv([=<>~!]+\S*)/)?.[1]
.trim();
}
interface Pyproject {
project?: {
dependencies?: string[];
"optional-dependencies"?: Record<string, string[]>;
};
"dependency-groups"?: Record<string, Array<string | object>>;
}
function parsePyprojectDependencies(pyprojectContent: string): string[] {
const pyproject: Pyproject = toml.parse(pyprojectContent);
const dependencies: string[] = pyproject?.project?.dependencies || [];
const optionalDependencies: string[] = Object.values(
pyproject?.project?.["optional-dependencies"] || {},
).flat();
const devDependencies: string[] = Object.values(
pyproject?.["dependency-groups"] || {},
)
.flat()
.filter((item: string | object) => typeof item === "string");
return dependencies.concat(optionalDependencies, devDependencies);
}

View File

@@ -1,34 +0,0 @@
import fs from "node:fs";
import * as core from "@actions/core";
import { getRequiredVersionFromConfigFile } from "./config-file";
import { getUvVersionFromRequirementsFile } from "./requirements-file";
import { getUvVersionFromToolVersions } from "./tool-versions-file";
export function getUvVersionFromFile(filePath: string): string | undefined {
core.info(`Trying to find version for uv in: ${filePath}`);
if (!fs.existsSync(filePath)) {
core.info(`Could not find file: ${filePath}`);
return undefined;
}
let uvVersion: string | undefined;
try {
uvVersion = getUvVersionFromToolVersions(filePath);
if (uvVersion === undefined) {
uvVersion = getRequiredVersionFromConfigFile(filePath);
}
if (uvVersion === undefined) {
uvVersion = getUvVersionFromRequirementsFile(filePath);
}
} catch (err) {
const message = (err as Error).message;
core.warning(`Error while parsing ${filePath}: ${message}`);
return undefined;
}
if (uvVersion?.startsWith("==")) {
uvVersion = uvVersion.slice(2);
}
if (uvVersion !== undefined) {
core.info(`Found version for uv in ${filePath}: ${uvVersion}`);
}
return uvVersion;
}

View File

@@ -1,31 +0,0 @@
import fs from "node:fs";
import * as core from "@actions/core";
export function getUvVersionFromToolVersions(
filePath: string,
): string | undefined {
if (!filePath.endsWith(".tool-versions")) {
return undefined;
}
const fileContents = fs.readFileSync(filePath, "utf8");
const lines = fileContents.split("\n");
for (const line of lines) {
// Skip commented lines
if (line.trim().startsWith("#")) {
continue;
}
const match = line.match(/^\s*uv\s*v?\s*(?<version>[^\s]+)\s*$/);
if (match) {
const matchedVersion = match.groups?.version.trim();
if (matchedVersion?.startsWith("ref")) {
core.warning(
"The ref syntax of .tool-versions is not supported. Please use a released version instead.",
);
return undefined;
}
return matchedVersion;
}
}
return undefined;
}

View File

@@ -1,12 +1,12 @@
{ {
"compilerOptions": { "compilerOptions": {
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, "target": "ES2022" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */,
"module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,
"noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
"outDir": "./lib" /* Redirect output structure to the directory. */, "outDir": "./lib" /* Redirect output structure to the directory. */,
"rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */,
"strict": true /* Enable all strict type-checking options. */, "strict": true /* Enable all strict type-checking options. */,
"target": "ES2022" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ "noImplicitAny": true /* Raise error on expressions and declarations with an implied 'any' type. */,
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
}, },
"exclude": ["node_modules", "**/*.test.ts"] "exclude": ["node_modules", "**/*.test.ts"]
} }

File diff suppressed because it is too large Load Diff