5
0
mirror of https://github.com/astral-sh/setup-uv.git synced 2025-12-17 11:05:59 +00:00

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
46 changed files with 16435 additions and 29067 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

@@ -39,7 +39,7 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v5 uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL

View File

@@ -19,7 +19,7 @@ jobs:
lint: lint:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Actionlint - name: Actionlint
uses: eifinger/actionlint-action@23c85443d840cd73bbecb9cddfc933cc21649a38 # v1.9.1 uses: eifinger/actionlint-action@23c85443d840cd73bbecb9cddfc933cc21649a38 # v1.9.1
- uses: actions/setup-node@v4 - uses: actions/setup-node@v4
@@ -44,7 +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@v5 - uses: actions/checkout@v4
- name: Install latest version - name: Install latest version
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -62,7 +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@v5 - uses: actions/checkout@v4
- name: Install version ${{ matrix.uv-version }} - name: Install version ${{ matrix.uv-version }}
uses: ./ uses: ./
with: with:
@@ -76,7 +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@v5 - uses: actions/checkout@v4
- name: Install version 0.3 - name: Install version 0.3
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -99,7 +99,7 @@ jobs:
test-pep440-version: test-pep440-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Install version 0.4.30 - name: Install version 0.4.30
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -115,7 +115,7 @@ jobs:
test-pyproject-file-version: test-pyproject-file-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Install version 0.5.14 - name: Install version 0.5.14
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -131,7 +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@v5 - uses: actions/checkout@v4
- name: Install using malformed pyproject.toml - name: Install using malformed pyproject.toml
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -142,7 +142,7 @@ jobs:
test-uv-file-version: test-uv-file-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Install version 0.5.15 - name: Install version 0.5.15
id: setup-uv id: setup-uv
uses: ./ uses: ./
@@ -155,54 +155,6 @@ jobs:
exit 1 exit 1
fi fi
test-version-file-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- 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@v5
- 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@v5
- 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:
@@ -213,7 +165,7 @@ jobs:
- os: macos-latest - os: macos-latest
checksum: "a70cbfbf3bb5c08b2f84963b4f12c94e08fbb2468ba418a3bfe1066fbe9e7218" checksum: "a70cbfbf3bb5c08b2f84963b4f12c94e08fbb2468ba418a3bfe1066fbe9e7218"
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Checksum matches expected - name: Checksum matches expected
uses: ./ uses: ./
with: with:
@@ -225,7 +177,7 @@ jobs:
test-with-explicit-token: test-with-explicit-token:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Install default version - name: Install default version
uses: ./ uses: ./
with: with:
@@ -236,7 +188,7 @@ jobs:
test-uvx: test-uvx:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Install default version - name: Install default version
uses: ./ uses: ./
- run: uvx ruff --version - run: uvx ruff --version
@@ -253,7 +205,7 @@ jobs:
windows-latest, windows-latest,
] ]
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Install default version - name: Install default version
uses: ./ uses: ./
- run: uv tool install ruff - run: uv tool install ruff
@@ -262,7 +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@v5 - uses: actions/checkout@v4
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -285,7 +237,7 @@ jobs:
matrix: matrix:
os: [ubuntu-latest, macos-latest, windows-latest] os: [ubuntu-latest, macos-latest, windows-latest]
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Install latest version - name: Install latest version
uses: ./ uses: ./
with: with:
@@ -306,7 +258,7 @@ jobs:
matrix: matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ] os: [ ubuntu-latest, macos-latest, windows-latest ]
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Install latest version - name: Install latest version
uses: ./ uses: ./
with: with:
@@ -327,7 +279,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: alpine container: alpine
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Install latest version - name: Install latest version
uses: ./ uses: ./
- run: uv sync - run: uv sync
@@ -340,7 +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@v5 - uses: actions/checkout@v4
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -357,7 +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@v5 - uses: actions/checkout@v4
- name: Restore with cache - name: Restore with cache
id: restore id: restore
uses: ./ uses: ./
@@ -389,7 +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@v5 - uses: actions/checkout@v4
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -403,7 +355,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: test-setup-cache needs: test-setup-cache
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Restore with cache - name: Restore with cache
id: restore id: restore
uses: ./ uses: ./
@@ -425,7 +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@v5 - uses: actions/checkout@v4
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -440,7 +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@v5 - uses: actions/checkout@v4
- 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
@@ -475,7 +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@v5 - uses: actions/checkout@v4
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -490,7 +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@v5 - uses: actions/checkout@v4
- name: Setup with cache - name: Setup with cache
uses: ./ uses: ./
with: with:
@@ -503,7 +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@v5 - uses: actions/checkout@v4
- name: Restore with cache - name: Restore with cache
id: restore id: restore
uses: ./ uses: ./
@@ -524,7 +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@v5 - uses: actions/checkout@v4
- name: Create cache directory - name: Create cache directory
run: mkdir -p ~/uv-cache run: mkdir -p ~/uv-cache
shell: bash shell: bash
@@ -538,7 +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@v5 - uses: actions/checkout@v4
- name: Create cache directory - name: Create cache directory
run: mkdir -p ~/uv-cache run: mkdir -p ~/uv-cache
shell: bash shell: bash
@@ -571,7 +523,7 @@ jobs:
test-no-python-version: test-no-python-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- 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
@@ -584,7 +536,7 @@ jobs:
test-custom-manifest-file: test-custom-manifest-file:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- name: Install from custom manifest file - name: Install from custom manifest file
uses: ./ uses: ./
with: with:
@@ -598,46 +550,6 @@ jobs:
exit 1 exit 1
fi fi
test-absolute-path:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- 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@v5
- 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:
@@ -649,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
@@ -674,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

@@ -11,7 +11,7 @@ jobs:
contents: write contents: write
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- uses: actions/setup-node@v4 - uses: actions/setup-node@v4
with: with:
node-version: "20" node-version: "20"

View File

@@ -15,7 +15,7 @@ jobs:
permissions: permissions:
contents: write contents: write
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v4
- 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,7 +15,6 @@ 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)
@@ -30,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)
@@ -94,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
@@ -196,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.
@@ -403,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`
@@ -457,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
@@ -68,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.2/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"
}
} }
} }

1541
dist/save-cache/index.js generated vendored

File diff suppressed because it is too large Load Diff

6304
dist/setup/index.js generated vendored

File diff suppressed because one or more lines are too long

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

File diff suppressed because one or more lines are too long

7011
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.15.0" "undici": "^7.10.0"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "2.2.2", "@biomejs/biome": "1.9.4",
"@types/js-yaml": "^4.0.9", "@types/js-yaml": "^4.0.9",
"@types/node": "^24.3.0", "@types/node": "^22.15.21",
"@types/semver": "^7.7.0", "@types/semver": "^7.7.0",
"@vercel/ncc": "^0.38.3", "@vercel/ncc": "^0.38.3",
"jest": "^30.1.1", "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,7 +1,5 @@
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,
@@ -11,6 +9,8 @@ import {
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";
@@ -67,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,833 +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.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,10 +1,10 @@
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,

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,16 +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 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";
@@ -21,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");
@@ -44,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) {
@@ -61,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) {
@@ -78,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) {
@@ -95,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)}`;
@@ -115,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