Compare commits

..

1 Commits

Author SHA1 Message Date
Kevin Stillhammer
928a502318 Use uv from tool-cache to prune cache 2025-02-12 15:33:08 +01:00
28 changed files with 53272 additions and 109751 deletions

View File

49
.github/workflows/check-dist.yml vendored Normal file
View File

@@ -0,0 +1,49 @@
# `dist/index.js` is a special file in Actions.
# When you reference an action with `uses:` in a workflow,
# `index.js` is the code that will run.
# For our project, we generate this file through a build process from other source files.
# We need to make sure the checked-in `index.js` actually matches what we expect it to be.
name: Check dist/
on:
push:
branches:
- main
pull_request:
workflow_dispatch:
jobs:
check-dist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm ci
- name: Rebuild the dist/ directory
run: |
npm run build
npm run package
- name: Compare the expected and actual dist/ directories
run: |
if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then
echo "Detected uncommitted changes after build. See status below:"
git diff --text -v
exit 1
fi
id: diff
# If index.js was different than expected, upload the expected version as an artifact
- uses: actions/upload-artifact@v4
if: ${{ failure() && steps.diff.conclusion == 'failure' }}
with:
name: dist
path: dist/

View File

@@ -12,14 +12,13 @@
name: "CodeQL"
on:
workflow_dispatch:
push:
branches:
- main
branches: [main]
pull_request:
# The branches below must be a subset of the branches above
branches:
- main
branches: [main]
schedule:
- cron: "31 7 * * 3"
jobs:
analyze:

View File

@@ -3,10 +3,10 @@ name: Release Drafter
# yamllint disable-line rule:truthy
on:
workflow_dispatch:
push:
branches:
- main
workflow_dispatch:
jobs:
update_release_draft:

View File

@@ -1,9 +1,6 @@
name: "test-cache-windows"
on:
workflow_dispatch:
pull_request:
branches:
- main
push:
branches:
- main

View File

@@ -1,9 +1,6 @@
name: "test-cache"
on:
workflow_dispatch:
pull_request:
branches:
- main
push:
branches:
- main

View File

@@ -1,9 +1,6 @@
name: "test-windows"
on:
workflow_dispatch:
pull_request:
branches:
- main
push:
branches:
- main

View File

@@ -1,9 +1,6 @@
name: "test"
on:
workflow_dispatch:
pull_request:
branches:
- main
push:
branches:
- main
@@ -13,12 +10,10 @@ concurrency:
cancel-in-progress: true
jobs:
lint:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Actionlint
uses: eifinger/actionlint-action@23c85443d840cd73bbecb9cddfc933cc21649a38 # v1.9.1
- uses: actions/setup-node@v4
with:
node-version: "20"
@@ -28,7 +23,7 @@ jobs:
npm run all
- name: Make sure no changes from linters are detected
run: |
git diff --exit-code || (echo "::error::Please run 'npm run all' to fix the issues" && exit 1)
git diff --exit-code
test-default-version:
runs-on: ${{ matrix.os }}
strategy:
@@ -205,6 +200,7 @@ jobs:
exit 1
fi
shell: bash
test-malformed-pyproject-file-fallback:
runs-on: ubuntu-latest
steps:
@@ -216,12 +212,3 @@ jobs:
pyproject-file: "__tests__/fixtures/malformed-pyproject-toml-project/pyproject.toml"
- run: uv sync
working-directory: __tests__/fixtures/uv-project
test-musl:
runs-on: ubuntu-latest
container: alpine
steps:
- uses: actions/checkout@v4
- name: Install latest version
uses: ./
- run: uv sync
working-directory: __tests__/fixtures/uv-project

View File

@@ -19,7 +19,7 @@ jobs:
src/download/checksum/known-checksums.ts ${{ secrets.GITHUB_TOKEN }}
- run: npm install && npm run all
- name: Create Pull Request
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6
with:
commit-message: "chore: update known checksums"
title:

View File

@@ -1,6 +1,7 @@
---
name: Update Major Minor Tags
# yamllint disable-line rule:truthy
on:
push:
branches-ignore:
@@ -14,32 +15,5 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Update Major Minor Tags
run: |
set -x
cd "${GITHUB_WORKSPACE}" || exit
# Set up variables.
TAG="${GITHUB_REF#refs/tags/}" # v1.2.3
MINOR="${TAG%.*}" # v1.2
MAJOR="${MINOR%.*}" # v1
if [ "${GITHUB_REF}" = "${TAG}" ]; then
echo "This workflow is not triggered by tag push: GITHUB_REF=${GITHUB_REF}"
exit 1
fi
MESSAGE="Release ${TAG}"
# Set up Git.
git config user.name "${GITHUB_ACTOR}"
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com"
# Update MAJOR/MINOR tag
git tag -fa "${MAJOR}" -m "${MESSAGE}"
git tag -fa "${MINOR}" -m "${MESSAGE}"
# Push
git push --force origin "${MINOR}"
git push --force origin "${MAJOR}"
- name: Run Update semver
uses: haya14busa/action-update-semver@v1.2.1

View File

@@ -156,7 +156,6 @@ are automatically verified by this action. The sha256 hashes can be found on the
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.
Caching is enabled by default on GitHub-hosted runners.
> [!TIP]
>
@@ -279,20 +278,6 @@ If you want to ignore this, set the `ignore-nothing-to-cache` input to `true`.
ignore-nothing-to-cache: true
```
### Ignore empty workdir
By default, the action will warn if the workdir is empty, because this is usually the case when
`actions/checkout` is configured to run after `setup-uv`, which is not supported.
If you want to ignore this, set the `ignore-empty-workdir` input to `true`.
```yaml
- name: Ignore empty workdir
uses: astral-sh/setup-uv@v5
with:
ignore-empty-workdir: true
```
### GitHub authentication token
This action uses the GitHub API to fetch the uv release artifacts. To avoid hitting the GitHub API
@@ -427,47 +412,6 @@ output:
run: echo "Installed uv version is ${{ steps.setup-uv.outputs.uv-version }}"
```
### Should I include the resolution strategy in the cache key?
**Yes!**
The cache key gets computed by using the [cache-dependency-glob](#cache-dependency-glob).
If you
have jobs which use the same dependency definitions from `requirements.txt` or
`pyproject.toml` but different
[resolution strategies](https://docs.astral.sh/uv/concepts/resolution/#resolution-strategy),
each job will have different dependencies or dependency versions.
But if you do not add the resolution strategy as a [cache-suffix](#enable-caching),
they will have the same cache key.
This means the first job which starts uploading its cache will win and all other job will fail
uploading the cache,
because they try to upload with the same cache key.
You might see errors like
`Failed to save: Failed to CreateCacheEntry: Received non-retryable error: Failed request: (409) Conflict: cache entry with the same key, version, and scope already exists`
### Why do I see warnings like `Cache not found for keys`
When a workflow runs for the first time on a branch and has a new cache key, because the
[cache-dependency-glob](#cache-dependency-glob) found changed files (changed dependencies),
the cache will not be found and the warning `Cache not found for keys` will be printed.
While this might be irritating at first, it is expected behaviour and the cache will be created
and reused in later workflows.
The reason for the warning is, that we have to way to know if this is the first run of a new
cache key or the user accidentally misconfigured the [cache-dependency-glob](#cache-dependency-glob)
or [cache-suffix](#enable-caching) and the cache never gets used.
### Do I have to run `actions/checkout` before or after `setup-uv`?
Some workflows need uv but do not need to access the repository content.
But **if** you need to access the repository content, you have run `actions/checkout` before running `setup-uv`.
Running `actions/checkout` after `setup-uv` **is not supported**.
## Acknowledgements
`setup-uv` was initially written and published by [Kevin Stillhammer](https://github.com/eifinger)

View File

@@ -45,9 +45,6 @@ inputs:
ignore-nothing-to-cache:
description: "Ignore when nothing is found to cache."
default: "false"
ignore-empty-workdir:
description: "Ignore when the working directory is empty."
default: "false"
tool-dir:
description: "Custom path to set UV_TOOL_DIR to."
required: false

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

File diff suppressed because one or more lines are too long

59487
dist/setup/index.js generated vendored

File diff suppressed because one or more lines are too long

54602
dist/update-known-checksums/index.js generated vendored

File diff suppressed because one or more lines are too long

835
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -23,26 +23,25 @@
"author": "@eifinger",
"license": "MIT",
"dependencies": {
"@actions/cache": "^4.0.2",
"@actions/cache": "^4.0.0",
"@actions/core": "^1.11.1",
"@actions/exec": "^1.1.1",
"@actions/glob": "^0.5.0",
"@actions/io": "^1.1.3",
"@actions/tool-cache": "^2.0.2",
"@octokit/core": "^6.1.4",
"@octokit/plugin-paginate-rest": "^11.4.3",
"@octokit/plugin-rest-endpoint-methods": "^13.3.1",
"undici": "^7.5.0",
"@octokit/core": "^6.1.3",
"@octokit/plugin-paginate-rest": "^11.4.0",
"@octokit/plugin-rest-endpoint-methods": "^13.3.0",
"smol-toml": "^1.3.1"
},
"devDependencies": {
"@biomejs/biome": "1.9.4",
"@types/node": "^22.13.10",
"@types/node": "^22.12.0",
"@types/semver": "^7.5.8",
"@vercel/ncc": "^0.38.3",
"jest": "^29.7.0",
"js-yaml": "^4.1.0",
"ts-jest": "^29.2.6",
"typescript": "^5.8.2"
"ts-jest": "^29.2.5",
"typescript": "^5.7.3"
}
}

View File

@@ -53,8 +53,7 @@ async function computeKeys(): Promise<string> {
}
const suffix = cacheSuffix ? `-${cacheSuffix}` : "";
const pythonVersion = await getPythonVersion();
const platform = await getPlatform();
return `setup-uv-${CACHE_VERSION}-${getArch()}-${platform}-${pythonVersion}${cacheDependencyPathHash}${suffix}`;
return `setup-uv-${CACHE_VERSION}-${getArch()}-${getPlatform()}-${pythonVersion}${cacheDependencyPathHash}${suffix}`;
}
async function getPythonVersion(): Promise<string> {

View File

@@ -1,311 +1,5 @@
// AUTOGENERATED_DO_NOT_EDIT
export const KNOWN_CHECKSUMS: { [key: string]: string } = {
"aarch64-apple-darwin-0.6.6":
"d0fb047593122746c7529960f8efd5d7d10d2cb230302f71158e9765ad37727b",
"aarch64-pc-windows-msvc-0.6.6":
"6bb6d5a28e8a181fd5b0046778b97a75c3ec1c5117a058e1961e0f6df9ee2925",
"aarch64-unknown-linux-gnu-0.6.6":
"37a543598cdb7d8fc9b74e6b1fe1fdf8b9a279c6137c7ff8396a88f69ec7a43c",
"aarch64-unknown-linux-musl-0.6.6":
"1f11c12ccfb693a6928c097c6b2ae3caa8e073744661795a6c96c5ffa9358f24",
"arm-unknown-linux-musleabihf-0.6.6":
"6cbd68ca3cef4a9a2f0f5c53492d47596494c82df8f1017df144c37a39d13294",
"armv7-unknown-linux-gnueabihf-0.6.6":
"97c71ad1f443182b3594ef671624e23f8f7960cb84badbbbda38598457845f83",
"armv7-unknown-linux-musleabihf-0.6.6":
"bee1941d59c8703fa143e186db1f335324b1922f38201cd52bfdfe1b29062987",
"i686-pc-windows-msvc-0.6.6":
"2231f24bfe6b8729427a5ecccf0339c5feacf96309f62da51c5077f4cfe8954e",
"i686-unknown-linux-gnu-0.6.6":
"16667b429a57ee917b10093e81e52956e4c19f9fd73d05dd87c3cbc27779ac7e",
"i686-unknown-linux-musl-0.6.6":
"96fab088198ef251facccfdf3850139720249f673c937cf6cc21642f54f19894",
"powerpc64-unknown-linux-gnu-0.6.6":
"564d1207601cdb3a3684f7d3ac31bf40436ac6912df7de340216b30a2e94ca44",
"powerpc64le-unknown-linux-gnu-0.6.6":
"c2aa7d2686b1f5943a562488153141f9690acfa59d6fdb01a2272019dc4f94dd",
"s390x-unknown-linux-gnu-0.6.6":
"fe7a1425620325b6063bf8b5c008846bc0ef7c867e7a155049adf5d9c356db2d",
"x86_64-apple-darwin-0.6.6":
"c584b85e81df8d8ae8142876b80ae977e41c6bba14c57cc1061b6a87f361ad2e",
"x86_64-pc-windows-msvc-0.6.6":
"72d7866fac1a9f5e895ec632a0b8a98ea59627cb2c3b8e68af4fec899ee4b43b",
"x86_64-unknown-linux-gnu-0.6.6":
"4c3426c4919d9f44633ab9884827fa1ad64ad8d993516d636eb955a3835c4a8c",
"x86_64-unknown-linux-musl-0.6.6":
"bcc30541d54156d434a74d6070a44c333263edc65ea423d3039cb8112ed78c95",
"aarch64-apple-darwin-0.6.5":
"4952c6275778fbc7e5cf6b5739ffd944c47063134d6ea43a7037b0a028ef771e",
"aarch64-pc-windows-msvc-0.6.5":
"2af20abb3a289d57ae6a8f34ec9f6a60276947fdfb80de6d7304a1b49242cc64",
"aarch64-unknown-linux-gnu-0.6.5":
"ebf0707ab949b948ad14250ed93f968fec954e20d12ce6bc9fce74b0ce7e4900",
"aarch64-unknown-linux-musl-0.6.5":
"8e3eae9802c443f87f7519518c9900a323e95a54e47f89433452287d9d2e9d13",
"arm-unknown-linux-musleabihf-0.6.5":
"85caa3c874d98ae5cb981d13e127602c2063d69874b8fd18ca0d1083805a04b1",
"armv7-unknown-linux-gnueabihf-0.6.5":
"184051f8cceccaafee109787f5c8f5788ed6e619ad65edc98779a96b3a8782c2",
"armv7-unknown-linux-musleabihf-0.6.5":
"86c7f7dcd0197c131ecce8f3c34807470753c145e1570cec5f0836e34481af9d",
"i686-pc-windows-msvc-0.6.5":
"65dac0af6d2f143736e83fe17f5b52546686fa000fb2f1f89dbb26d1c96183db",
"i686-unknown-linux-gnu-0.6.5":
"beb346c6a869d6e742de8a797fa7c2a489c6cbc3127387e08a9106a944f56dc2",
"i686-unknown-linux-musl-0.6.5":
"5a254d1f0dc92e00c3f2a9c97f27a1adb1261f841e08f1ed3e4f03dcf45b7c12",
"powerpc64-unknown-linux-gnu-0.6.5":
"1f8fd8dde91258380dbcd4b9fc65f15a7dc3af6cfffefb9a4f99d32c4c67436d",
"powerpc64le-unknown-linux-gnu-0.6.5":
"d2b6e19ca7ecd8d7e0d1ddced965aa91a3c822d07a7f7657743945245c1f627a",
"s390x-unknown-linux-gnu-0.6.5":
"43a3e39f19fd5d098bb8c896b6c0f99a146253c271d78409cf31c2f55f2763d0",
"x86_64-apple-darwin-0.6.5":
"d336d862694e1c36afea55eb15f5df02aa77c04a168b781df515d641e23285f0",
"x86_64-pc-windows-msvc-0.6.5":
"a3e9f0913189c38b804bf6bb3d348af305a8ceabc690be92b6e111245a821640",
"x86_64-unknown-linux-gnu-0.6.5":
"8fc9895719a1291ecd193cb86f9282ff3649cef797d29eacc74c4f573aab1e2f",
"x86_64-unknown-linux-musl-0.6.5":
"ed4830b7b6293b9413618970b84dad7bc9245f4a7dfa741f943afdb647c196c4",
"aarch64-apple-darwin-0.6.4":
"1497302e13b33188d6ea4b255520e72f4b9ca9a2c5e9ad30b7bc919e5a0b1071",
"aarch64-pc-windows-msvc-0.6.4":
"92d18fec3da41dd759ff5c05074445def51d30a325cee0e94d4539fbaabae795",
"aarch64-unknown-linux-gnu-0.6.4":
"4c78928aa92170bb1c68245da3a5ce0c051e185b7cb6356c33909f94f033ae84",
"aarch64-unknown-linux-musl-0.6.4":
"fec5583459f22a26eab91aa32cb922cdb7bd72826b3e23c6c164c3814126f462",
"arm-unknown-linux-musleabihf-0.6.4":
"e9e1ef68e6b316b47a5ee48a48e5b28898a351fb588f0944666b004fa5baed2c",
"armv7-unknown-linux-gnueabihf-0.6.4":
"65df00771f9d4928853ecb5a627745edc829af3ee1339171c2f53f2afa935323",
"armv7-unknown-linux-musleabihf-0.6.4":
"f963d53f99ddcf5281b79545cf905dc66a6b25a4a5dcdefaecefd42a63710b88",
"i686-pc-windows-msvc-0.6.4":
"ecdb47abb3fc29511a2adc9df0407fe604371c6518cd2861235c8aa178928941",
"i686-unknown-linux-gnu-0.6.4":
"7e8c9c6d1b1c9f43eb50a634742f03c34d87a94d8155d2602f1f23c2c6cbfc22",
"i686-unknown-linux-musl-0.6.4":
"f3985d87a510c1fded1c8de25c6e70bcc2039e587f17efc5ab328b20c956b224",
"powerpc64-unknown-linux-gnu-0.6.4":
"81d3430b221d57070af86cdd868d766316266515fa49aa61c660ff1d61e5fa78",
"powerpc64le-unknown-linux-gnu-0.6.4":
"c8aba58a91854645ee41deeb9b0223c5218231c4d03b5b9cbe17f2ddd2f62358",
"s390x-unknown-linux-gnu-0.6.4":
"a73197566e1b706a6ca0427556b6d4732185eb6d621f0730d70c165ee5b1395e",
"x86_64-apple-darwin-0.6.4":
"af09c768697edd009ac1af66eaea35bbd29f145bd9c2c02b8f93309e23670b4f",
"x86_64-pc-windows-msvc-0.6.4":
"4526b772f5d9b0afdd61a780ab649730d125e0a56348daa7463ee44c0c5e5762",
"x86_64-unknown-linux-gnu-0.6.4":
"ed38cde84d822c1878c484e560e28c157a1c025204151efa60aa46831500f4d6",
"x86_64-unknown-linux-musl-0.6.4":
"1b04edff73d7d7f837b9d6a36a556fe2feb59cc9f747c4fcd01f76c886dd3579",
"aarch64-apple-darwin-0.6.3":
"51b84818bbfe08358a298ba3389c6d448d3ddc0f2601a2d63c5a62cb7b704062",
"aarch64-pc-windows-msvc-0.6.3":
"ec3561ca86328aa351919de2d5208f6761a58d42a2e0e50e1d1d80d10039756a",
"aarch64-unknown-linux-gnu-0.6.3":
"447726788204106ffd8ecc59396fccc75fae7aca998555265b5ea6950b00160c",
"aarch64-unknown-linux-musl-0.6.3":
"2bb44c9fb8a13e244d502a577d6c32669b680941c996c35524817971e6e56460",
"arm-unknown-linux-musleabihf-0.6.3":
"d1e508cdbb4b479c496d6a50febe4b0f0159ef1d0693d09d274c119471545aea",
"armv7-unknown-linux-gnueabihf-0.6.3":
"d067b079991909b3f76279c048c57470aaa2d0fcf1ce3307b7f15fec88b7a99d",
"armv7-unknown-linux-musleabihf-0.6.3":
"82c7b7aca1855f285db509ae3c957f9b1ca5e3eaa77ecbd80da8349fe0a6491e",
"i686-pc-windows-msvc-0.6.3":
"83173da302701020c44cefdab5d127e5cde9e4333ca7e7cbefc03e39908b7a39",
"i686-unknown-linux-gnu-0.6.3":
"7c044bd2db0690cce49b0613abf01daaeb6fb829737ef9ec7978191f218e1542",
"i686-unknown-linux-musl-0.6.3":
"a3401dd97c1ee55c1def00c5b98419087da2fd0ce81a74df1cf268a95b338998",
"powerpc64-unknown-linux-gnu-0.6.3":
"6023103b5d761da0e06c70a95197476796ba68ed3f6849529c89d603609a82d5",
"powerpc64le-unknown-linux-gnu-0.6.3":
"e41eec560bd166f5bd155772ef120ec7220a80dcb4b70e71d8f4781276c5d102",
"s390x-unknown-linux-gnu-0.6.3":
"2c3c03d95c20adb2e521efaeddf6f9947c427c5e8140e38585595f3c947cebed",
"x86_64-apple-darwin-0.6.3":
"a675d2d0fcf533f89f4b584bfa8ee3173a1ffbc87d9d1d48fcc3abb8c55d946d",
"x86_64-pc-windows-msvc-0.6.3":
"40b50b3da3cf74dc5717802acd076b4669b6d7d2c91c4482875b4e5e46c62ba3",
"x86_64-unknown-linux-gnu-0.6.3":
"b7a37a33d62cb7672716c695226450231e8c02a8eb2b468fa61cd28a8f86eab2",
"x86_64-unknown-linux-musl-0.6.3":
"7c77a5bc7c5fc56becf266c2ea8dae1e0fd4f9fe2c510110d097ad9066cacfb1",
"aarch64-apple-darwin-0.6.2":
"4af802a1216053650dd82eee85ea4241994f432937d41c8b0bc90f2639e6ae14",
"aarch64-pc-windows-msvc-0.6.2":
"02299bd78e4fbd2850532710c52a92368601f77654e3c6c342c651d75e6ca1f6",
"aarch64-unknown-linux-gnu-0.6.2":
"ca4c08724764a2b6c8f2173c4e3ca9dcde0d9d328e73b4d725cfb6b17a925eed",
"aarch64-unknown-linux-musl-0.6.2":
"9a90ef4761d75ee1a5158cc2fbd787c78dcfb1c12532a00a3c13b915db720c2e",
"arm-unknown-linux-musleabihf-0.6.2":
"f3643b8b67d6f711876a5682d4607b4a31e6e2935b4ccb35d7a98ec067b944d9",
"armv7-unknown-linux-gnueabihf-0.6.2":
"79a0df9c7e1df089722ff5338c7766e2437a2d3e40b4e232c72be4a4e9e3a7b9",
"armv7-unknown-linux-musleabihf-0.6.2":
"6aff9c4d54a1466be66234a754181f6e48501ac206d02dd5cf5e81df4c9efbfd",
"i686-pc-windows-msvc-0.6.2":
"29e46887292d4d645cb941731bfbc688fc1689255f9898b25e6b1c96bf1b954c",
"i686-unknown-linux-gnu-0.6.2":
"66301b549ea0e8e6960dc6d1eb7b9dcf5fc8d8913f2bb480434918af25f1c6c4",
"i686-unknown-linux-musl-0.6.2":
"b85ec115f14ca15418db3540c597e13a970546df49a85c1905c16286b86eb471",
"powerpc64-unknown-linux-gnu-0.6.2":
"de17553549280fd877452dd1f7f9d0a604e3544bfad007b8ec0b9943f103796f",
"powerpc64le-unknown-linux-gnu-0.6.2":
"f341fd4874d2d007135626a0657d1478f331a78991d8a1a06aaa0d52fbe16183",
"s390x-unknown-linux-gnu-0.6.2":
"17fd89bd8de75da9c91baf918b8079c1f1f92bb6a398f0cfbc5ddefe0c7f0ee5",
"x86_64-apple-darwin-0.6.2":
"2b9e78b2562aea93f13e42df1177cb07c59a4d4f1c8ff8907d0c31f3a5e5e8db",
"x86_64-pc-windows-msvc-0.6.2":
"5f33c3cc5c183775cc51b3e661a0d2ce31142d32a50406a67c7ad0321fc841d9",
"x86_64-unknown-linux-gnu-0.6.2":
"37ea31f099678a3bee56f8a757d73551aad43f8025d377a8dde80dd946c1b7f2",
"x86_64-unknown-linux-musl-0.6.2":
"fcd01693df76379be5bc325efa43c644cf0704a2e720ccd6695f41ded09934d7",
"aarch64-apple-darwin-0.6.1":
"90e10cc7f26cbaf3eaa867cf99344ffd550e942fd4b660e88f2f91c23022dc5a",
"aarch64-pc-windows-msvc-0.6.1":
"a9bce4582ec8dcc93e19e94b4d7ab653b378a68da1a7e72f5ea82ddd2d42fb44",
"aarch64-unknown-linux-gnu-0.6.1":
"f355989fb5ecf47c9f9087a0b21e2ee7d7c802bc3d0cf6edae07560d4297751f",
"aarch64-unknown-linux-musl-0.6.1":
"6455886f9aef3392df0af630dee9df892787fdffda0f0800245f86a735bd810d",
"arm-unknown-linux-musleabihf-0.6.1":
"4bbd397391134dbfedebb938d40845573eafe6dfd1e8e1882e89c21de702104e",
"armv7-unknown-linux-gnueabihf-0.6.1":
"811e19387997ac14f1b775c3e975a7d560c93f866eb5fd2955132f9718445a0a",
"armv7-unknown-linux-musleabihf-0.6.1":
"a2022883913d55c0913001869f64208b8b3244ec6286c9e097ad9563b9f747b9",
"i686-pc-windows-msvc-0.6.1":
"920e08d6d649a414981c2c1814746fcb0a10f25e2c65e359abf534212e1f0c8c",
"i686-unknown-linux-gnu-0.6.1":
"943a9a4637151d9f950de65725b28f0dfe3f73e7ad5b2b9ab35392cbc44b3cec",
"i686-unknown-linux-musl-0.6.1":
"63d269c67e7da4f645cd6be593b55e2f0e84a9bb7cf2d45faca791c27c5f9f66",
"powerpc64-unknown-linux-gnu-0.6.1":
"8775b00b1c44a7400e8a8d5238efc5ecc636f62ed8e865bd612486c67c6272b3",
"powerpc64le-unknown-linux-gnu-0.6.1":
"becf4913112c475b2713df01a8c0536b38dc2c48f04b1d603cd6f0a74f88caa2",
"s390x-unknown-linux-gnu-0.6.1":
"ee687d56ba1e359a7a2e20e301b992b83882df5ffb1409d301e1b0d21b3fa16a",
"x86_64-apple-darwin-0.6.1":
"d8609b53f280d5e784a7586bf7a3fd90c557656af109cee8572b24a0c1443191",
"x86_64-pc-windows-msvc-0.6.1":
"32de1730597db0a7c5f34e2257ab491b660374b22c016c3d9a59ae279d837697",
"x86_64-unknown-linux-gnu-0.6.1":
"0dcad9831d3f10f3bc4dcd7678948dfc74c0b3ab3f07aa684eb9e5135b971a58",
"x86_64-unknown-linux-musl-0.6.1":
"143dba84867f72107048e1f95be8f894d59f456e018a34276d9d2d6bacdf8f99",
"aarch64-apple-darwin-0.6.0":
"ff4f1ec24a3adb3dd251f9523e4b7a7cba379e9896ae6ed1efa163fcdcd6af8a",
"aarch64-pc-windows-msvc-0.6.0":
"c29a1bfcc3070a3a4834b9aa8e290f25e82e7b2a1d25cdbae3418fb8b72c2b0b",
"aarch64-unknown-linux-gnu-0.6.0":
"47fa7ada7352f69a5efd19628b86b83c0bbda34541de3a4254ba75a188414953",
"aarch64-unknown-linux-musl-0.6.0":
"92b105bb9253a6123a0f8a8412aec9d05b162bf529cbe60fcad75a71a9a43d3f",
"arm-unknown-linux-musleabihf-0.6.0":
"a36895e6bde3bb0a74f2d61230332bd8f2cb60984e86bbbc69e9b2e742e1b971",
"armv7-unknown-linux-gnueabihf-0.6.0":
"01cbd440e41eb9fff4e372a534706156fefefe34ac44d6eb9b8abc7d5739b0fd",
"armv7-unknown-linux-musleabihf-0.6.0":
"62424a2b18a7b4a7cd62912d7cd952a74f755e6b46e46c9bae6029f4b3f2f2cf",
"i686-pc-windows-msvc-0.6.0":
"40422491d697c2da3f30c2b00b5fbfbe5075e33dd64956137959a6536b851213",
"i686-unknown-linux-gnu-0.6.0":
"22ee5cacb0139b065e219e43db84f4f21ea2a316f7341b245786d2f3e748488d",
"i686-unknown-linux-musl-0.6.0":
"1ab5f3ea0e809c5390dbda97558d4176efcbe7e3eb5166eb2c61a41991d7c4f9",
"powerpc64-unknown-linux-gnu-0.6.0":
"b99ba184663eecbd1197d60c3120b5451879009b69e900eed83b8dd5f9b568ec",
"powerpc64le-unknown-linux-gnu-0.6.0":
"d782751a6ec8a0775aa57087275225b6562a115004c1f41935bec1609765508d",
"s390x-unknown-linux-gnu-0.6.0":
"664f4165767a0cd808d1784d1d70243da4789024ec5cd779a861201b54a479b7",
"x86_64-apple-darwin-0.6.0":
"530ef3b6f563448e8e017a8cd6693d6c72c146fb0a3c43440bb0e93fcf36264f",
"x86_64-pc-windows-msvc-0.6.0":
"65836dae55d3a63e5fc1d51ae52e6ea175aaab1c82c4a6660d46462b27d19c2a",
"x86_64-unknown-linux-gnu-0.6.0":
"1a26ce241f7ff1f52634d869f86db533fffba21e528597029ee9d1423bf3df18",
"x86_64-unknown-linux-musl-0.6.0":
"ac2331cda152aa71fed700c7b1ceec4a0662185e65f544b3c3a607be53f856f0",
"aarch64-apple-darwin-0.5.31":
"396c9bd6acd98466fdb585da2ed040eecea15228e580d4bd649c09215b490bf9",
"aarch64-pc-windows-msvc-0.5.31":
"e1c862e67f03f11ff5d359d4b1afa9f624bd52489d09ffb6efcc1c5c743674bc",
"aarch64-unknown-linux-gnu-0.5.31":
"e7f358efb0718bd8f98dc0c29fd0902323b590381ca765537063a2ca23ed34c7",
"aarch64-unknown-linux-musl-0.5.31":
"7a49b56be133a756b8ef589beef33f70176a7ce796e118de2911bdae0ffb9a56",
"arm-unknown-linux-musleabihf-0.5.31":
"2ad1f334295c3ce92c5fd7c3fa9121ffd4569b6db1846c1ecbb6a2007041d09f",
"armv7-unknown-linux-gnueabihf-0.5.31":
"78270187aebe5f37fdff184f65e8aa537fd9a06cb5d5119f59c6dd7badcf95ef",
"armv7-unknown-linux-musleabihf-0.5.31":
"329dba251b81dcc840f261148d6466442b23bad54d75f1a21d5005c9c4d04aa0",
"i686-pc-windows-msvc-0.5.31":
"3860cbf6115f7af85cdf9e83ba1a9ee2bc6cf4da750825014a999738ba6950dd",
"i686-unknown-linux-gnu-0.5.31":
"4347e44f076448a8b37140a762845d65831819c21f1b6b1da4706640b82d3e4a",
"i686-unknown-linux-musl-0.5.31":
"54365460d1dbed67a6106ece17ec50900f1209ec1543172364696e7694c7b64c",
"powerpc64-unknown-linux-gnu-0.5.31":
"1263a21ef5f72d48d03b7051b69102d7addcb647af2e5182b5e6c5313d8ffd48",
"powerpc64le-unknown-linux-gnu-0.5.31":
"e292dc0a7b23fab01bbf2b6fdddf8bb0c531805b1dbc3905637af70a88ff1f5f",
"s390x-unknown-linux-gnu-0.5.31":
"66232646bd15a38cf6877c6af6bf8668fadb2af910d7cf7a1159885487a15e70",
"x86_64-apple-darwin-0.5.31":
"5316b82da14fab9a76b3521c901e7c0a7d641fb9d28eb07874e26a00b0ac2725",
"x86_64-pc-windows-msvc-0.5.31":
"1ad54dace424c259b603ecd36262cb235af2bc8d6f280e24063d57919545f593",
"x86_64-unknown-linux-gnu-0.5.31":
"017ce7ed02c967f1b0489f09162e19ee3df4586a44e681211d16206e007fce62",
"x86_64-unknown-linux-musl-0.5.31":
"b0642eedb1704371f0cf533e2103ebcaebed59e043c71a70c8fa4a971d2032ab",
"aarch64-apple-darwin-0.5.30":
"654c3e010c9c53b024fa752d08b949e0f80f10ec4e3a1acea9437a1d127a1053",
"aarch64-pc-windows-msvc-0.5.30":
"aa5331546935864fe0c627fc22f4ffc60cd2d24ec17900780e95e11436d544a8",
"aarch64-unknown-linux-gnu-0.5.30":
"d1ea4a2299768b2c8263db0abd8ea0de3b8052a34a51f5cf73094051456d4de2",
"aarch64-unknown-linux-musl-0.5.30":
"e9b51e591a852a5bc432df3411acaf2c03efd5c8a1ea4280e356881a0c689d31",
"arm-unknown-linux-musleabihf-0.5.30":
"d143460c27df2b8bcafe8a548eb90fb8000a97921754f13a45cb675d04d366f8",
"armv7-unknown-linux-gnueabihf-0.5.30":
"3d1953151a534e0cbe3c2094e5165a419e75f1ae32444748c5cd69bcfb9906c0",
"armv7-unknown-linux-musleabihf-0.5.30":
"4ef3aee22dc8feb9665df4339d4689c1262a26d36d34c7c543e0caa31eb8f45b",
"i686-pc-windows-msvc-0.5.30":
"3389683ab13451b628cfd95ca5bf56fd7137300af5903180d60eed35c4cbfb82",
"i686-unknown-linux-gnu-0.5.30":
"3ebb74ae2326030c93972f4c1b5e77a17b29bd191349b6244e41e70bb98d8507",
"i686-unknown-linux-musl-0.5.30":
"bc590e89243cf7688709ba39822d0acaee394dc0b4781eef044af411e6ac26af",
"powerpc64-unknown-linux-gnu-0.5.30":
"e289eae011dec0fa5d00133c17efde5e427237e876bfb0e1e27146e45959fc26",
"powerpc64le-unknown-linux-gnu-0.5.30":
"b10ba261377f89e598322f3329beeada6b868119581e2a7294e7585351d3733f",
"s390x-unknown-linux-gnu-0.5.30":
"7341e6d62b0e02fbd33fe6ce0158e9f68617f43e5ec42fc6904d246bda5f6d34",
"x86_64-apple-darwin-0.5.30":
"42c4a5d3611928613342958652ab16943d05980b1ab5057bb47e4283ef7e890d",
"x86_64-pc-windows-msvc-0.5.30":
"43d6b97d2e283f6509a9199fd32411d67a64d5b5dca3e6e63e45ec2faec68f73",
"x86_64-unknown-linux-gnu-0.5.30":
"9d82816c14c44054f0c679f2bcaecfd910c75f207e08874085cb27b482f17776",
"x86_64-unknown-linux-musl-0.5.30":
"7cc79871e5fcd2678474d756bfc32c6c3d28e136963dda10902c516fab67fa2d",
"aarch64-apple-darwin-0.5.29":
"c89e96bde40402cc4db2f59bcb886882ab69e557235279283a2db9dea61135c3",
"aarch64-pc-windows-msvc-0.5.29":

View File

@@ -5,7 +5,11 @@ import { promises as fs } from "node:fs";
import { OWNER, REPO, TOOL_CACHE_NAME } from "../utils/constants";
import type { Architecture, Platform } from "../utils/platforms";
import { validateChecksum } from "./checksum/checksum";
import { Octokit } from "../utils/octokit";
import { Octokit } from "@octokit/core";
import { paginateRest } from "@octokit/plugin-paginate-rest";
import { restEndpointMethods } from "@octokit/plugin-rest-endpoint-methods";
const PaginatingOctokit = Octokit.plugin(paginateRest, restEndpointMethods);
export function tryGetFromToolCache(
arch: Architecture,
@@ -74,7 +78,6 @@ export async function resolveVersion(
versionInput: string,
githubToken: string,
): Promise<string> {
core.debug(`Resolving version: ${versionInput}`);
const version =
versionInput === "latest"
? await getLatestVersion(githubToken)
@@ -84,7 +87,6 @@ export async function resolveVersion(
return version;
}
const availableVersions = await getAvailableVersions(githubToken);
core.debug(`Available versions: ${availableVersions}`);
const resolvedVersion = tc.evaluateVersions(availableVersions, version);
if (resolvedVersion === "") {
throw new Error(`No version found for ${version}`);
@@ -94,7 +96,7 @@ export async function resolveVersion(
async function getAvailableVersions(githubToken: string): Promise<string[]> {
try {
const octokit = new Octokit({
const octokit = new PaginatingOctokit({
auth: githubToken,
});
return await getReleaseTagNames(octokit);
@@ -103,7 +105,7 @@ async function getAvailableVersions(githubToken: string): Promise<string[]> {
core.info(
"No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.",
);
const octokit = new Octokit();
const octokit = new PaginatingOctokit();
return await getReleaseTagNames(octokit);
}
throw err;
@@ -111,7 +113,7 @@ async function getAvailableVersions(githubToken: string): Promise<string[]> {
}
async function getReleaseTagNames(
octokit: InstanceType<typeof Octokit>,
octokit: InstanceType<typeof PaginatingOctokit>,
): Promise<string[]> {
const response = await octokit.paginate(octokit.rest.repos.listReleases, {
owner: OWNER,
@@ -121,8 +123,7 @@ async function getReleaseTagNames(
}
async function getLatestVersion(githubToken: string) {
core.debug("Getting latest version...");
const octokit = new Octokit({
const octokit = new PaginatingOctokit({
auth: githubToken,
});
@@ -130,24 +131,26 @@ async function getLatestVersion(githubToken: string) {
try {
latestRelease = await getLatestRelease(octokit);
} catch (err) {
core.info(
"No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.",
);
if (err instanceof Error) {
core.debug(err.message);
if ((err as Error).message.includes("Bad credentials")) {
core.info(
"No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.",
);
const octokit = new PaginatingOctokit();
latestRelease = await getLatestRelease(octokit);
} else {
throw err;
}
const octokit = new Octokit();
latestRelease = await getLatestRelease(octokit);
}
if (!latestRelease) {
throw new Error("Could not determine latest release.");
}
core.debug(`Latest version: ${latestRelease.tag_name}`);
return latestRelease.tag_name;
}
async function getLatestRelease(octokit: InstanceType<typeof Octokit>) {
async function getLatestRelease(
octokit: InstanceType<typeof PaginatingOctokit>,
) {
const { data: latestRelease } = await octokit.rest.repos.getLatestRelease({
owner: OWNER,
repo: REPO,

View File

@@ -12,6 +12,7 @@ import {
ignoreNothingToCache,
pruneCache as shouldPruneCache,
} from "./utils/inputs";
import { STATE_CACHED_UV_DIR } from "./utils/constants";
export async function run(): Promise<void> {
try {
@@ -72,8 +73,10 @@ async function saveCache(): Promise<void> {
}
async function pruneCache(): Promise<void> {
const uvDir = core.getState(STATE_CACHED_UV_DIR);
const options: exec.ExecOptions = {
silent: !core.isDebug(),
silent: false,
env: { PATH: uvDir },
};
const execArgs = ["cache", "prune", "--ci"];

View File

@@ -16,7 +16,6 @@ import {
import {
cacheLocalPath,
checkSum,
ignoreEmptyWorkdir,
enableCache,
githubToken,
pyProjectFile,
@@ -29,10 +28,10 @@ import {
import * as exec from "@actions/exec";
import fs from "node:fs";
import { getUvVersionFromConfigFile } from "./utils/pyproject";
import { STATE_CACHED_UV_DIR } from "./utils/constants";
async function run(): Promise<void> {
detectEmptyWorkdir();
const platform = await getPlatform();
const platform = getPlatform();
const arch = getArch();
try {
@@ -44,6 +43,7 @@ async function run(): Promise<void> {
}
const setupResult = await setupUv(platform, arch, checkSum, githubToken);
core.saveState(STATE_CACHED_UV_DIR, setupResult.uvDir);
addUvToPath(setupResult.uvDir);
addToolBinToPath();
setToolDir();
@@ -63,20 +63,6 @@ async function run(): Promise<void> {
}
}
function detectEmptyWorkdir(): void {
if (fs.readdirSync(".").length === 0) {
if (ignoreEmptyWorkdir) {
core.info(
"Empty workdir detected. Ignoring because ignore-empty-workdir is enabled",
);
} else {
core.warning(
"Empty workdir detected. This may cause unexpected behavior. You can enable ignore-empty-workdir to mute this warning.",
);
}
}
}
async function setupUv(
platform: Platform,
arch: Architecture,

View File

@@ -1,16 +1,20 @@
import * as semver from "semver";
import * as core from "@actions/core";
import { Octokit } from "./utils/octokit";
import { Octokit } from "@octokit/core";
import { paginateRest } from "@octokit/plugin-paginate-rest";
import { restEndpointMethods } from "@octokit/plugin-rest-endpoint-methods";
import { OWNER, REPO } from "./utils/constants";
import { updateChecksums } from "./download/checksum/update-known-checksums";
const PaginatingOctokit = Octokit.plugin(paginateRest, restEndpointMethods);
async function run(): Promise<void> {
const checksumFilePath = process.argv.slice(2)[0];
const github_token = process.argv.slice(2)[1];
const octokit = new Octokit({
const octokit = new PaginatingOctokit({
auth: github_token,
});

View File

@@ -1,3 +1,4 @@
export const REPO = "uv";
export const OWNER = "astral-sh";
export const TOOL_CACHE_NAME = "uv";
export const STATE_CACHED_UV_DIR = "cached-uv-dir";

View File

@@ -13,8 +13,6 @@ export const cacheDependencyGlob = core.getInput("cache-dependency-glob");
export const pruneCache = core.getInput("prune-cache") === "true";
export const ignoreNothingToCache =
core.getInput("ignore-nothing-to-cache") === "true";
export const ignoreEmptyWorkdir =
core.getInput("ignore-empty-workdir") === "true";
export const toolBinDir = getToolBinDir();
export const toolDir = getToolDir();
export const githubToken = core.getInput("github-token");

View File

@@ -1,58 +0,0 @@
import { Octokit as Core } from "@octokit/core";
import type {
Constructor,
OctokitOptions,
} from "@octokit/core/dist-types/types";
import {
paginateRest,
type PaginateInterface,
} from "@octokit/plugin-paginate-rest";
import { legacyRestEndpointMethods } from "@octokit/plugin-rest-endpoint-methods";
import { fetch as undiciFetch, ProxyAgent, type RequestInit } from "undici";
export type { RestEndpointMethodTypes } from "@octokit/plugin-rest-endpoint-methods";
const DEFAULTS = {
baseUrl: "https://api.github.com",
userAgent: "setup-uv",
};
export function getProxyAgent() {
const httpProxy = process.env.HTTP_PROXY || process.env.http_prox;
if (httpProxy) {
return new ProxyAgent(httpProxy);
}
const httpsProxy = process.env.HTTPS_PROXY || process.env.https_proxy;
if (httpsProxy) {
return new ProxyAgent(httpsProxy);
}
return undefined;
}
export const customFetch = async (url: string, opts: RequestInit) =>
await undiciFetch(url, {
dispatcher: getProxyAgent(),
...opts,
});
export const Octokit: typeof Core &
Constructor<
{
paginate: PaginateInterface;
} & ReturnType<typeof legacyRestEndpointMethods>
> = Core.plugin(paginateRest, legacyRestEndpointMethods).defaults(
function buildDefaults(options: OctokitOptions): OctokitOptions {
return {
...DEFAULTS,
...options,
request: {
fetch: customFetch,
...options.request,
},
};
},
);
export type Octokit = InstanceType<typeof Octokit>;

View File

@@ -1,17 +1,10 @@
import * as exec from "@actions/exec";
import * as core from "@actions/core";
export type Platform =
| "unknown-linux-gnu"
| "unknown-linux-musl"
| "unknown-linux-musleabihf"
| "apple-darwin"
| "pc-windows-msvc";
export type Architecture =
| "i686"
| "x86_64"
| "aarch64"
| "s390x"
| "powerpc64le";
export type Architecture = "i686" | "x86_64" | "aarch64";
export function getArch(): Architecture | undefined {
const arch = process.arch;
@@ -19,8 +12,6 @@ export function getArch(): Architecture | undefined {
ia32: "i686",
x64: "x86_64",
arm64: "aarch64",
s390x: "s390x",
ppc64: "powerpc64le",
};
if (arch in archMapping) {
@@ -28,49 +19,15 @@ export function getArch(): Architecture | undefined {
}
}
export async function getPlatform(): Promise<Platform | undefined> {
const processPlatform = process.platform;
export function getPlatform(): Platform | undefined {
const platform = process.platform;
const platformMapping: { [key: string]: Platform } = {
linux: "unknown-linux-gnu",
darwin: "apple-darwin",
win32: "pc-windows-msvc",
};
if (processPlatform in platformMapping) {
const platform = platformMapping[processPlatform];
if (platform === "unknown-linux-gnu") {
const isMusl = await isMuslOs();
return isMusl ? "unknown-linux-musl" : platform;
}
return platform;
}
}
async function isMuslOs(): Promise<boolean> {
let stdOutput = "";
let errOutput = "";
const options: exec.ExecOptions = {
silent: !core.isDebug(),
listeners: {
stdout: (data: Buffer) => {
stdOutput += data.toString();
},
stderr: (data: Buffer) => {
errOutput += data.toString();
},
},
ignoreReturnCode: true,
};
try {
const execArgs = ["--version"];
await exec.exec("ldd", execArgs, options);
return stdOutput.includes("musl") || errOutput.includes("musl");
} catch (error) {
const err = error as Error;
core.warning(
`Failed to determine glibc or musl. Falling back to glibc. Error: ${err.message}`,
);
return false;
if (platform in platformMapping) {
return platformMapping[platform];
}
}

View File

@@ -5,7 +5,6 @@ import * as toml from "smol-toml";
export function getUvVersionFromConfigFile(
filePath: string,
): string | undefined {
core.debug(`Trying to find required-version for uv in: ${filePath}`);
if (!fs.existsSync(filePath)) {
core.warning(`Could not find file: ${filePath}`);
return undefined;