Compare commits

..
27 changed files with 1070 additions and 5768 deletions
+3 -9
View File
@@ -4,15 +4,9 @@
"owner": "ruff-format", "owner": "ruff-format",
"pattern": [ "pattern": [
{ {
"code": 2, "file": 2,
"column": 5, "message": 1,
"endColumn": 7, "regexp": "^(Would reformat):\\s*(.+)$"
"endLine": 6,
"file": 3,
"line": 4,
"message": 8,
"regexp": "^(?:(error|warning|notice))\\s+title=([^,]+),file=([^,]+),line=(\\d+),col=(\\d+)(?:,endLine=(\\d+))?(?:,endColumn=(\\d+))?::(.+)$",
"severity": 1
} }
] ]
} }
+4 -4
View File
@@ -39,13 +39,13 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
source-root: src source-root: src
@@ -57,7 +57,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 uses: github/codeql-action/autobuild@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
# ️ Command-line programs to run using the OS shell. # ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl # 📚 https://git.io/JvXDl
@@ -71,4 +71,4 @@ jobs:
# make release # make release
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0 uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
+1 -1
View File
@@ -17,6 +17,6 @@ jobs:
pull-requests: read pull-requests: read
steps: steps:
- name: 🚀 Run Release Drafter - name: 🚀 Run Release Drafter
uses: release-drafter/release-drafter@6db134d15f3909ccc9eefd369f02bd1e9cffdf97 # v6.2.0 uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+22 -87
View File
@@ -15,21 +15,17 @@ permissions: {}
jobs: jobs:
lint: lint:
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions:
security-events: write # for zizmor
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Actionlint - name: Actionlint
uses: eifinger/actionlint-action@447fbfe7533062b7a9ea55f790f2396fba6d052a # v1.10.0 uses: eifinger/actionlint-action@03ff1f78c0670b71017616a37170f327df932030 # v1.9.2
- name: Run zizmor - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
uses: zizmorcore/zizmor-action@135698455da5c3b3e55f73f4419e481ab68cdd95 # v0.4.1
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with: with:
node-version: "20" node-version: "20"
- run: | - run: |
npm ci --ignore-scripts npm install
- run: | - run: |
npm run all npm run all
- name: Check all jobs are in all-tests-passed.needs - name: Check all jobs are in all-tests-passed.needs
@@ -46,7 +42,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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use latest version - name: Use latest version
@@ -61,7 +57,7 @@ jobs:
ruff-version: ["0.1.7", "0.1.8", "0.4.7", "0.4.10", "0.7", "0.7.x", ">=0.7.0"] ruff-version: ["0.1.7", "0.1.8", "0.4.7", "0.4.10", "0.7", "0.7.x", ">=0.7.0"]
os: [ ubuntu-latest, ubuntu-24.04-arm, macos-latest, macos-14, windows-latest ] os: [ ubuntu-latest, ubuntu-24.04-arm, macos-latest, macos-14, windows-latest ]
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use version ${{ matrix.ruff-version }} - name: Use version ${{ matrix.ruff-version }}
@@ -72,7 +68,7 @@ jobs:
test-unsupported-version: test-unsupported-version:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Try install old version - name: Try install old version
@@ -92,7 +88,7 @@ jobs:
test-version-from-version-file-pyproject: test-version-from-version-file-pyproject:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use version from pyproject.toml - name: Use version from pyproject.toml
@@ -111,7 +107,7 @@ jobs:
test-default-version-from-pyproject: test-default-version-from-pyproject:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use default version from pyproject.toml - name: Use default version from pyproject.toml
@@ -129,7 +125,7 @@ jobs:
test-default-version-from-pyproject-dev-group: test-default-version-from-pyproject-dev-group:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use default version from pyproject.toml dev group - name: Use default version from pyproject.toml dev group
@@ -148,7 +144,7 @@ jobs:
test-default-version-from-pyproject-dependency-groups: test-default-version-from-pyproject-dependency-groups:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use default version from pyproject.toml dependency groups - name: Use default version from pyproject.toml dependency groups
@@ -164,30 +160,10 @@ jobs:
fi fi
env: env:
RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }} RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }}
test-default-version-from-pyproject-dependency-groups-with-env-marker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Use default version from pyproject.toml with environment marker
id: ruff-action
uses: ./
with:
src: __tests__/fixtures/python-project
version-file: __tests__/fixtures/pyproject-dependency-groups-with-env-marker/pyproject.toml
- name: Correct version gets installed
run: |
if [ "$RUFF_VERSION" != "0.13.3" ]; then
echo "Expected version 0.13.3 but got $RUFF_VERSION"
exit 1
fi
env:
RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }}
test-default-version-from-pyproject-poetry-groups: test-default-version-from-pyproject-poetry-groups:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use default version from pyproject.toml poetry group dependencies - name: Use default version from pyproject.toml poetry group dependencies
@@ -206,7 +182,7 @@ jobs:
test-default-version-from-pyproject-poetry: test-default-version-from-pyproject-poetry:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use default version from pyproject.toml poetry dependencies - name: Use default version from pyproject.toml poetry dependencies
@@ -225,7 +201,7 @@ jobs:
test-default-version-from-pyproject-optional-dependencies: test-default-version-from-pyproject-optional-dependencies:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use default version from pyproject.toml optional dependencies - name: Use default version from pyproject.toml optional dependencies
@@ -244,7 +220,7 @@ jobs:
test-default-version-from-requirements: test-default-version-from-requirements:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use default version from requirements.txt - name: Use default version from requirements.txt
@@ -260,29 +236,10 @@ jobs:
fi fi
env: env:
RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }} RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }}
test-default-version-from-requirements-with-hash:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Use default version from requirements-with-hash.txt
id: ruff-action
uses: ./
with:
src: __tests__/fixtures/python-project
version-file: __tests__/fixtures/requirements-with-hash.txt
- name: Correct version gets installed
run: |
if [ "$RUFF_VERSION" != "0.9.0" ]; then
exit 1
fi
env:
RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }}
test-semver-range: test-semver-range:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use version 0.7 - name: Use version 0.7
@@ -301,7 +258,7 @@ jobs:
test-pep440-version-specifier: test-pep440-version-specifier:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Install version 0.9.10 - name: Install version 0.9.10
@@ -327,7 +284,7 @@ jobs:
- os: macos-latest - os: macos-latest
checksum: "af9583bff12afbca5d5670334e0187dd60c4d91bc71317d1b2dde70cb1200ba9" checksum: "af9583bff12afbca5d5670334e0187dd60c4d91bc71317d1b2dde70cb1200ba9"
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Checksum matches expected - name: Checksum matches expected
@@ -339,7 +296,7 @@ jobs:
test-with-explicit-token: test-with-explicit-token:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use default version - name: Use default version
@@ -353,7 +310,7 @@ jobs:
matrix: matrix:
os: [ubuntu-latest, windows-latest] os: [ubuntu-latest, windows-latest]
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use args - name: Use args
@@ -364,7 +321,7 @@ jobs:
test-failure: test-failure:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Format should fail - name: Format should fail
@@ -400,7 +357,7 @@ jobs:
matrix: matrix:
os: [ ubuntu-latest, windows-latest ] os: [ ubuntu-latest, windows-latest ]
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Use args - name: Use args
@@ -410,25 +367,6 @@ jobs:
src: >- src: >-
__tests__/fixtures/python-project/src/python_project/__init__.py __tests__/fixtures/python-project/src/python_project/__init__.py
__tests__/fixtures/python-project/src/python_project/hello_world.py __tests__/fixtures/python-project/src/python_project/hello_world.py
test-parent-directory-pyproject:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Use version from parent directory pyproject.toml
id: ruff-action
uses: ./
with:
src: __tests__/fixtures/parent-config-project/subproject
- name: Correct version gets installed
run: |
if [ "$RUFF_VERSION" != "0.10.0" ]; then
echo "Expected version 0.10.0 but got $RUFF_VERSION"
exit 1
fi
env:
RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }}
all-tests-passed: all-tests-passed:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -441,12 +379,10 @@ jobs:
- test-default-version-from-pyproject - test-default-version-from-pyproject
- test-default-version-from-pyproject-dev-group - test-default-version-from-pyproject-dev-group
- test-default-version-from-pyproject-dependency-groups - test-default-version-from-pyproject-dependency-groups
- test-default-version-from-pyproject-dependency-groups-with-env-marker
- test-default-version-from-pyproject-poetry-groups - test-default-version-from-pyproject-poetry-groups
- test-default-version-from-pyproject-poetry - test-default-version-from-pyproject-poetry
- test-default-version-from-pyproject-optional-dependencies - test-default-version-from-pyproject-optional-dependencies
- test-default-version-from-requirements - test-default-version-from-requirements
- test-default-version-from-requirements-with-hash
- test-semver-range - test-semver-range
- test-pep440-version-specifier - test-pep440-version-specifier
- test-checksum - test-checksum
@@ -454,7 +390,6 @@ jobs:
- test-args - test-args
- test-failure - test-failure
- test-multiple-src - test-multiple-src
- test-parent-directory-pyproject
if: always() if: always()
steps: steps:
- name: All tests passed - name: All tests passed
+4 -4
View File
@@ -11,10 +11,10 @@ jobs:
contents: write contents: write
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: false persist-credentials: false
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 - uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
with: with:
node-version: "20" node-version: "20"
- name: Update known checksums - name: Update known checksums
@@ -22,9 +22,9 @@ jobs:
run: run:
node dist/update-known-checksums/index.js node dist/update-known-checksums/index.js
src/download/checksum/known-checksums.ts ${{ secrets.GITHUB_TOKEN }} src/download/checksum/known-checksums.ts ${{ secrets.GITHUB_TOKEN }}
- run: npm ci --ignore-scripts && npm run all - run: npm install && npm run all
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0 uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
with: with:
commit-message: "chore: update known checksums" commit-message: "chore: update known checksums"
title: title:
@@ -16,9 +16,9 @@ jobs:
permissions: permissions:
contents: write contents: write
steps: steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
with: with:
persist-credentials: true persist-credentials: false
- name: Update Major Minor Tags - name: Update Major Minor Tags
run: | run: |
set -x set -x
+9
View File
@@ -186,6 +186,15 @@ are not sufficient, you can provide a custom GitHub token with the necessary per
github-token: ${{ secrets.CUSTOM_GITHUB_TOKEN }} github-token: ${{ secrets.CUSTOM_GITHUB_TOKEN }}
``` ```
## Reliability
This action includes built-in retry mechanisms to handle intermittent network issues that can occur when downloading Ruff or fetching version information from GitHub's API. The action will automatically retry failed operations up to 3 times with exponential backoff, which significantly reduces failure rates due to temporary connectivity issues.
- **GitHub API calls**: 30-second timeout with 3 retries
- **Binary downloads**: 60-second timeout with 3 retries
- **Smart error detection**: Automatically identifies retryable errors (timeouts, network issues, 5xx HTTP responses)
- **Detailed logging**: Provides comprehensive error information for debugging
## Outputs ## Outputs
| Output | Description | | Output | Description |
@@ -1,13 +0,0 @@
[project]
name = "parent-config-project"
version = "0.1.0"
description = "Test fixture for parent directory pyproject.toml search"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"ruff==0.10.0",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
@@ -1,3 +0,0 @@
"""Hello world example."""
print("Hello, world!")
@@ -1,15 +0,0 @@
[project]
name = "pyproject-dependency-groups-with-env-marker"
version = "0.1.0"
description = "Test fixture for issue #256 - environment markers"
readme = "README.md"
requires-python = ">=3.12"
[dependency-groups]
dev = [
"ruff~=0.13 ; python_version >= '3.11'",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
@@ -1,2 +0,0 @@
ruff==0.9.0 \
--hash=sha256:badc0de
+1 -2
View File
@@ -1,5 +1,5 @@
{ {
"$schema": "https://biomejs.dev/schemas/2.3.2/schema.json", "$schema": "https://biomejs.dev/schemas/2.1.4/schema.json",
"assist": { "assist": {
"actions": { "actions": {
"source": { "source": {
@@ -13,7 +13,6 @@
"ignoreUnknown": false, "ignoreUnknown": false,
"includes": [ "includes": [
"**", "**",
"!**/coverage",
"!**/dist", "!**/dist",
"!**/lib", "!**/lib",
"!**/node_modules", "!**/node_modules",
Generated Vendored
+305 -440
View File
@@ -29071,240 +29071,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.KNOWN_CHECKSUMS = void 0; exports.KNOWN_CHECKSUMS = void 0;
// AUTOGENERATED_DO_NOT_EDIT // AUTOGENERATED_DO_NOT_EDIT
exports.KNOWN_CHECKSUMS = { exports.KNOWN_CHECKSUMS = {
"aarch64-apple-darwin-0.14.14": "76a9b0ebe57d0eee56940dbe0b62462578d1369cca8314ed0d2a6f2102292d4f",
"aarch64-pc-windows-msvc-0.14.14": "449982699657bd68d170440dad958281b030bc05865fe012d043cd225e78eb79",
"aarch64-unknown-linux-gnu-0.14.14": "1eee1ce3467fb5f348738bb5e4598859b55816a79c3cd6a26ca0dae03d7e2672",
"aarch64-unknown-linux-musl-0.14.14": "a4d7302aa201a6f8e71dfa217cd8273fddd4e434a93ee3b4b07047fd7a684ac1",
"arm-unknown-linux-musleabihf-0.14.14": "c225db82587780d1675e220db02c5209f406b29afb0a525628e11ffaca537068",
"armv7-unknown-linux-gnueabihf-0.14.14": "cdc9596d6317e6cb32fbf3fd6c0e5817f96676b215957e6583db28abf4a15427",
"armv7-unknown-linux-musleabihf-0.14.14": "0f1938426c50500bac09a09df5396aa19d6ce9f01a3a18a531dfaee5cc0d93e8",
"i686-pc-windows-msvc-0.14.14": "4f6af9d82acae3d1308c55b0fa51b84d57eafc380aedf97a53a32314118c9a71",
"i686-unknown-linux-gnu-0.14.14": "5ceb5e2f1906d85e444cb71503379e14d96ded423bd68906f1a539b78d9fc2c3",
"i686-unknown-linux-musl-0.14.14": "878cebcaf3481295d22a1274cea94ec050455917669ccecac586dcfe6b4a557e",
"powerpc64-unknown-linux-gnu-0.14.14": "e01a6db6bbf15db82052269887fb49e6be79923d188f1f60ed74f93b6b9a90d4",
"powerpc64le-unknown-linux-gnu-0.14.14": "6048f270a46cce01228a53fde14fa6182a99d9e99169d7c252f706d7ba2a4845",
"riscv64gc-unknown-linux-gnu-0.14.14": "6eca650195a22c0a568adc923b645b6317dad3ecc8a3d5c02c08768d6b333393",
"s390x-unknown-linux-gnu-0.14.14": "dbde3ba91f84d8c183ed49bca0790777285d21381ad64a290584bd19038b83a4",
"x86_64-apple-darwin-0.14.14": "749396c675c6f07205be6c4ef89e2e95123d790062d681059a355030e9d7d119",
"x86_64-pc-windows-msvc-0.14.14": "81bfeed34f15296e6c81ecea912b6fff4430b957de8a1181ce9365434e3d6744",
"x86_64-unknown-linux-gnu-0.14.14": "9876634f799d933bdaa1de864f47d26f898b2e20aa8f4f85d63235c3a231068d",
"x86_64-unknown-linux-musl-0.14.14": "55a1ee65f5ac9416cc40f99c2df62f0d4525d40369fe371caff945c495174d57",
"aarch64-apple-darwin-0.14.13": "067d1a90da8add55614eff91990425883a092d8279d9e503258ff8be0f8e9c18",
"aarch64-pc-windows-msvc-0.14.13": "f7b5b9740ae893ac6abe9b9f68865073ffb9146a6f352ba9718d53b102ad02ef",
"aarch64-unknown-linux-gnu-0.14.13": "84ce8fe1ef9b2eba018ba396fd018ac2bc22865a9e2a02573899ea6ee8e1e5fd",
"aarch64-unknown-linux-musl-0.14.13": "25941b777ff712f4d9473d26c1b875034214a3d5de20ea99b2add939dcd0b367",
"arm-unknown-linux-musleabihf-0.14.13": "3d833d451accb334f9cb91141083bbee5b835dcf0b49d14e5ccb13e0b6a7c387",
"armv7-unknown-linux-gnueabihf-0.14.13": "90aa92a6de0f63eacb2d380c324039c101c6097956690fbaec05ed8d922f8766",
"armv7-unknown-linux-musleabihf-0.14.13": "192deb53946b4309c56c1ad7c401ddac7557d0a517da7addfc636f1188bab30d",
"i686-pc-windows-msvc-0.14.13": "4ead4d5fc89a1f02aa97dad944e69306ae4177a689a3818d3575fed11aa994fe",
"i686-unknown-linux-gnu-0.14.13": "a321fc4862748563a663472a4458fe514e34542d0fe8d767d67b1463d585fb2f",
"i686-unknown-linux-musl-0.14.13": "597541ac81d553c2fe97339680bfdb3e926714763ee37f0b5dbcc572d695e376",
"powerpc64-unknown-linux-gnu-0.14.13": "cad4c05db54969608ec292b695397ddaef7452f759b976a60b69d9fefc6c5724",
"powerpc64le-unknown-linux-gnu-0.14.13": "bc7faa37e496ae0198ee7e1c9e8958df3c55025ccf8be175b74533f87626e726",
"riscv64gc-unknown-linux-gnu-0.14.13": "d9c6fd360347b9b0079994246ed08186f64629529e2fd2dc1a97a31da2a214d5",
"s390x-unknown-linux-gnu-0.14.13": "1995227a65970cb2c1aa3b03c9a5418ee1fa56210c4577e6f8e1a14d1e79ed5d",
"x86_64-apple-darwin-0.14.13": "69e424a42ac3a7c6c7032ad96deb757c35c93c848b6ea329a3f4c605e6d89ef9",
"x86_64-pc-windows-msvc-0.14.13": "d2af4376053458f283d74980b49dc0d61d3ef9d9b8684c5b25bd64b73e11634a",
"x86_64-unknown-linux-gnu-0.14.13": "b1e03e4cf245411f184106ba3d973b3902021bf5327e2fde0cfad163aacdc2c1",
"x86_64-unknown-linux-musl-0.14.13": "2fe394f493318551f271277a2228e56b31ca69a4842483e5709af4548f342bc3",
"aarch64-apple-darwin-0.14.11": "c3fab6bcad9cc2f8a342829dd4ea011c54b9671d023b71baac1cbf2b3526cefd",
"aarch64-pc-windows-msvc-0.14.11": "43faade7e8f33a8ffab726aa44ee2b6bc1fd9d51407320db797dcb3dac068461",
"aarch64-unknown-linux-gnu-0.14.11": "e5c018ac042ddeb9c02c3d96b6efe3a0dcd3406ba9bd695253d6111785f7abf6",
"aarch64-unknown-linux-musl-0.14.11": "4779a99b51812b56d56d180174be46ddb2fed98fecaea7565b450d37cff1b8c6",
"arm-unknown-linux-musleabihf-0.14.11": "a400347f59192992b61dc0bb9dfdfe640f8063403112d9e3a70f6275d34ae386",
"armv7-unknown-linux-gnueabihf-0.14.11": "7938729417dcd33b7078ae0a77440cc152bba33518bb095e19cb108c132b2602",
"armv7-unknown-linux-musleabihf-0.14.11": "57da6726050047ff2989554734deb94eb053789fc92c297a1a722a6723106a77",
"i686-pc-windows-msvc-0.14.11": "51bec5b8cdc4008fb76e11eba4cbb62b8617ff242d316465fa2247dabfd2dcb9",
"i686-unknown-linux-gnu-0.14.11": "9051f2529d36e38b58b03b6e605d77f62b6378d5afe70eba692f9a214794b273",
"i686-unknown-linux-musl-0.14.11": "3f94ba805fd14bd8c088b710c950cd89d9968294fa3cff68a618e50ad9dea73d",
"powerpc64-unknown-linux-gnu-0.14.11": "eb69c9da0285717f39ed25f666a0860d7d6a50359a1de0bf76fba6f83d59e1ea",
"powerpc64le-unknown-linux-gnu-0.14.11": "001b43b7558d32f320fa775c74af0035952a724d323bb5204b6f83017297c6db",
"riscv64gc-unknown-linux-gnu-0.14.11": "8901e1a36846c59a94ef468808e4a1af58f74e9c2830f40e045f5f9e70d6867c",
"s390x-unknown-linux-gnu-0.14.11": "d29ba2740b7735ab20663225dd420acfb0797b29358d902afc7b87ee0f1f4b08",
"x86_64-apple-darwin-0.14.11": "b301d1c04facba1004d180c8fd9ae36d868b780900682c97ecf324015c75f0b3",
"x86_64-pc-windows-msvc-0.14.11": "e254f04e054e095215b8f74d5cdb7288f2d3f226bdc42b35cd44751fc7a55b2d",
"x86_64-unknown-linux-gnu-0.14.11": "b98f19bb2cc99e0ea4de1625fbc43661902a1db45ff49a72e7f4a58cfedaabfb",
"x86_64-unknown-linux-musl-0.14.11": "8e8b7a3f791e0faf3a1728d808133f6f9bd5c1422eccb9956e7e7376ff5404b8",
"aarch64-apple-darwin-0.14.10": "dd0f3ec914604d802658ae0d271ff9d767c117d1702a44222170dd2ffbad8d2c",
"aarch64-pc-windows-msvc-0.14.10": "a5b5bb9525a47dfff0ce8ad31546549b31dc1184f54027517838b1bbc9d81129",
"aarch64-unknown-linux-gnu-0.14.10": "f6c8735bf175d449d79151f6bfe84251770ca6032e86bea0d327bc3789179027",
"aarch64-unknown-linux-musl-0.14.10": "0888883f71199ca3af3569052d0cc1aee8b316390ffe75bc19f9a8047ffd0158",
"arm-unknown-linux-musleabihf-0.14.10": "5102cff6cbed54953d6cd9c9d920a9dd6fbe283e047136a6e9bc732ae14a5cf3",
"armv7-unknown-linux-gnueabihf-0.14.10": "94a3ad56d89c39ed47d4e864a18ea31baf989384840d5e182c3f94d5f35a4c93",
"armv7-unknown-linux-musleabihf-0.14.10": "2a051d384d5d5fa84521f843424454620ff5d22580f90cd882512373c36933b0",
"i686-pc-windows-msvc-0.14.10": "29e7519db7afed48e3729d16289a467acae7c6c34113d50bdd1e7e1077e1c7b5",
"i686-unknown-linux-gnu-0.14.10": "56f98f880933907b809de3180e866e72342971024445144c409a6d0a46237c1a",
"i686-unknown-linux-musl-0.14.10": "0cce7104a85d2891a9f62d9ee2decb942b91888d6156e4e858c1cb350a71a57c",
"powerpc64-unknown-linux-gnu-0.14.10": "7685d9de6c1b139fd767f70310598a79d5b6c613d744a366b2fe99e420d19c32",
"powerpc64le-unknown-linux-gnu-0.14.10": "620476793ed106c1f6bfa15e3b0d7834a55cad048a853d63f0c118b9fb7c7337",
"riscv64gc-unknown-linux-gnu-0.14.10": "922872274af2b681381b46a242e77fa9bf427fa745313e818b89a6246be81d77",
"s390x-unknown-linux-gnu-0.14.10": "da9cf8172369821dfaabfc8861238f565fdbcec1aebe897d900020ce561572de",
"x86_64-apple-darwin-0.14.10": "7d5af84e84a189b49ac235d7970d35588cbed0d087f4237c96e5ac3c392bc6fb",
"x86_64-pc-windows-msvc-0.14.10": "9c3340d322fff7a6dc132b8783ba734f5eaf4c46f7dd8bc828abdf850b3bebe1",
"x86_64-unknown-linux-gnu-0.14.10": "4695e6375b1fa2b9c5f839218d695d8e701cfccb15d3f622b6a6feedb086bffb",
"x86_64-unknown-linux-musl-0.14.10": "e1fac6f2705057f48f3d000694d0f41c95b06e738cf4825315c670f3b9d24933",
"aarch64-apple-darwin-0.14.9": "ea132e6d6af23dbcf21c81d7fd8c5a94ccf16b1fb36a8bc60da971e339301f10",
"aarch64-pc-windows-msvc-0.14.9": "dcc2c8a687b9682ab345418ba2793bc8594ae1f2bdb78af520b363e17cf2e271",
"aarch64-unknown-linux-gnu-0.14.9": "423a07140aca7d007d63a42ff9322c0c2017dfe0ed23efe8bcbc36ed21d1cfd7",
"aarch64-unknown-linux-musl-0.14.9": "9bdedf2e8d6398e193c2b2feccb2b4c9f8d37a6dc87cc0b587340a60e87d14e2",
"arm-unknown-linux-musleabihf-0.14.9": "5d04fe5dac3a625c576f48d441238896d164128ec5ba64c9964e5d9502e92b1e",
"armv7-unknown-linux-gnueabihf-0.14.9": "1404c9aace1216ad5cf8b977be5b967ab507f7245eec7bc9bb3fab80010a7769",
"armv7-unknown-linux-musleabihf-0.14.9": "e90707e761fb9ce528c3728e5e12ddbadd60ad45dbacfb1ab9dff4b308f10ae3",
"i686-pc-windows-msvc-0.14.9": "a7e19280ec509dbefdffd097e29f0ca411cca7196a7272198d022d22d5fad6c3",
"i686-unknown-linux-gnu-0.14.9": "33494807d987983f1a91e486cc6a028364aa3291c96c3784620f75a3f477411a",
"i686-unknown-linux-musl-0.14.9": "816e6fdefd899f2dcca7261dc6575ecac82907b94238569cbfef2b1639680865",
"powerpc64-unknown-linux-gnu-0.14.9": "6786baf11e8b59c29d19c0da127451606837243472797aa5084eecccd9a74445",
"powerpc64le-unknown-linux-gnu-0.14.9": "ba7219c9dce6f2d931d9851ac9623923b3fc5dafeb08c640885c7e33a6074775",
"riscv64gc-unknown-linux-gnu-0.14.9": "8f46292b808c5ce0d72d1a4428e189a641d9f41b3af0b077537ddb7631f48b8d",
"s390x-unknown-linux-gnu-0.14.9": "d795afb56c7f4ba55a7a08eda03bce1fd8b32d71c9cf1741218ac6b5578d8b84",
"x86_64-apple-darwin-0.14.9": "ce980eb4b44a84cbf278686f8cf71a21b353888b29472ca269ffe385ce4f2351",
"x86_64-pc-windows-msvc-0.14.9": "98727a845f01782b78efe1a3f0913aa9ec76c9a24e09aca89e26b3b684ca86a0",
"x86_64-unknown-linux-gnu-0.14.9": "b012ebe5dee8d8c125f4d553fccda058249fbb1c914c17175c6edda14a1fb7da",
"x86_64-unknown-linux-musl-0.14.9": "3bdbdb32f95bcf2c5bc45502a2050f30706f1c205fa0087ee3d4c688f67854fc",
"aarch64-apple-darwin-0.14.8": "4efc019832a6b9225f650ee256d31b2e875021cae662963d533c78b5cf865f52",
"aarch64-pc-windows-msvc-0.14.8": "965217e69f6d43e4df25abeec7b51a5ea014dbec219b9b2866ca37dcd312405e",
"aarch64-unknown-linux-gnu-0.14.8": "9bbce62639bb30abf76202f2ec32c4234498de3c93c21b4c32c99d51c802cc41",
"aarch64-unknown-linux-musl-0.14.8": "0b3464f54fa56f514c29e92bcf05867b914ad6c246e2ddbe4cce5c0700f2a3d9",
"arm-unknown-linux-musleabihf-0.14.8": "5496ae4d581e7f6cdf509f56d33830056d1f8a432aa489bf9e40fc9754fbf1fa",
"armv7-unknown-linux-gnueabihf-0.14.8": "203de1734ffddac18f02e3756ba0c02bd1770665031aba617ccf488ccfe78b25",
"armv7-unknown-linux-musleabihf-0.14.8": "5e424ba3ebc90306f73e05914244245b66b27c3a44dcdf9029d97bfc56131491",
"i686-pc-windows-msvc-0.14.8": "2bdff511119eb9d94e5a240c15bef668c43b0640e61c549b32242d7b04efd062",
"i686-unknown-linux-gnu-0.14.8": "8f0c15e9518d1b9c0423986d3d1045ed5c4005e1037589a6772eee724ec3ba02",
"i686-unknown-linux-musl-0.14.8": "55326d64201ff99dc96e93b23de951c2656825089ee581fc8aee099140d4d310",
"powerpc64-unknown-linux-gnu-0.14.8": "52ffb3434ca8ada1d2703df0c4b929758444c24d9a47a8608a0775ddf6dbfa6c",
"powerpc64le-unknown-linux-gnu-0.14.8": "3a8808f7b02f37e649e1cc1145ad3d2e4d23b4154637525480c7f6536f4152b9",
"riscv64gc-unknown-linux-gnu-0.14.8": "8e6f1f660c1145bfe1b13fe41b7e6f4e829be3351bd536acbd41f91478d8932c",
"s390x-unknown-linux-gnu-0.14.8": "f3ed19ba06face77e21c682846a4e5b3d4d9bfe5132eea86e30a84522b70d2b3",
"x86_64-apple-darwin-0.14.8": "c53af0ba3cbc5e9e8f7768d28a7ff2d0795843e39302891093227bc6df343e94",
"x86_64-pc-windows-msvc-0.14.8": "a837e98f5e6a21222a896f60521f563aea2c686a07cad17da9f5b5f2c4e04f8a",
"x86_64-unknown-linux-gnu-0.14.8": "dce933cd68e3ca69c64c277ce6671dcdee7adeeaa6ac5a15047a4c973b30741f",
"x86_64-unknown-linux-musl-0.14.8": "0f5496a3d2413b3cb85bbf9e4a6f95b5db127ac10989ecb3d8c0c0a0a74a892b",
"aarch64-apple-darwin-0.14.7": "24631da81fe9ce5f4112e8caeb71957e81682e752a563f0a50715735f923e3c4",
"aarch64-pc-windows-msvc-0.14.7": "24ca141d57fcd5bd303ca51af002cb9a815f072d9076b40ec2813835d46c4a82",
"aarch64-unknown-linux-gnu-0.14.7": "8cc84635155dfc11acca297af25ed6c8a30e36146729a90df9e7d348a8fc0a4d",
"aarch64-unknown-linux-musl-0.14.7": "8d429dbc2c308377c33874dc71d4c2388728f0d01c0a5869d2c878d21a6ced87",
"arm-unknown-linux-musleabihf-0.14.7": "3cf1d9fdfd58a113b0b629e0ef2d247bbadbc8deec25724d6dc7d6f6ca7e7304",
"armv7-unknown-linux-gnueabihf-0.14.7": "058f52b31c88056291b0e917ea909eea036570dcdee32af1ce62eacff98c4e2a",
"armv7-unknown-linux-musleabihf-0.14.7": "9dddf78485ba0b5da8d8a73b24332ecf759a4de95ca5700c5141067683b5b615",
"i686-pc-windows-msvc-0.14.7": "46d16810e1a0e7efd5c25efc60b719225c3a8b8a7fb662b61f293eeb62ccafdb",
"i686-unknown-linux-gnu-0.14.7": "29242e501fea264ef4cb03164d9c375e426fad5c298412f64a4d50bc9ea19bc1",
"i686-unknown-linux-musl-0.14.7": "5b1eeea3f27745e7e68b19bd214267aa653ef64c62c25ef4cd8bb57af8477171",
"powerpc64-unknown-linux-gnu-0.14.7": "3cc47bf9943a46839d847746ccae59a3147982c5bf93bdc786fa5279d7d28681",
"powerpc64le-unknown-linux-gnu-0.14.7": "1dabc7d0251f6f11ade20620538daeed1c4d27223576a04ddb2a87adfed2ca11",
"riscv64gc-unknown-linux-gnu-0.14.7": "075232dfa5a03ef399d183879848cdb5d71485639c2a07fc62a27f4d4a68af3d",
"s390x-unknown-linux-gnu-0.14.7": "a83cb05567dd4bb59fa8fd36b8337b21d475dd6f82fe0600a2364f1de6c295c3",
"x86_64-apple-darwin-0.14.7": "c3035811c5354d923f3d7fd6320cfb23de30600f1eb86aa1518bac27c3d7fffd",
"x86_64-pc-windows-msvc-0.14.7": "9a54b82e12574ea068e0914cdb1398993cbf78338c0799b6f9003a783fec779b",
"x86_64-unknown-linux-gnu-0.14.7": "8a545d346b3f6f979574df96b4fb2a983f2568fe200f1c1f690bd2cbdce5ea51",
"x86_64-unknown-linux-musl-0.14.7": "0f6cd59aa2b266758f1083c73f1b8303e3aedde0d953f0e79777faf174d8104f",
"aarch64-apple-darwin-0.14.6": "b2ace677f51d0f2b91ca27d312ac8b069658502049015f4891c16f8864136282",
"aarch64-pc-windows-msvc-0.14.6": "90518b6d16fe8b705c891dcdd77b20ab41da5e042b085aced7bbc647f6f2fdcd",
"aarch64-unknown-linux-gnu-0.14.6": "bf3d592d5f879f072520afaa9c4a76a3ad0f6cf4b7bf7e27fb5d0e728e863f14",
"aarch64-unknown-linux-musl-0.14.6": "4d3c113e59c5fbc31f1def566cebf28732bb45ff6b83df8e142bc1c055b3afa3",
"arm-unknown-linux-musleabihf-0.14.6": "d0a3ed0a773f8e7edc44d63644b952d446dba771fdbb3eefd02853c323373f90",
"armv7-unknown-linux-gnueabihf-0.14.6": "d6b71f6a951963f8dd0f2e099206b0aabf95d9bb49451a607da3e5823b800596",
"armv7-unknown-linux-musleabihf-0.14.6": "a048f1e9a97afe8ac2a63785f5733d5736b9d6e6767b4d5b6434916d38f888e1",
"i686-pc-windows-msvc-0.14.6": "c7b76311939f0ed7fbf4fe1be7c6c96c05b26a73e500650dff2586cbbe5c0b45",
"i686-unknown-linux-gnu-0.14.6": "fe3fbd9227a7f2c1277306c31cf7627ab1dc61c25fa30854d66d8db138a74872",
"i686-unknown-linux-musl-0.14.6": "5a184f4c1e6a665f56f980464dd87eeb75f32e37bf67d195efdaa41bba634a5d",
"powerpc64-unknown-linux-gnu-0.14.6": "fe54fda27408241e9bee7bc5c9740a9a47a87a073ecd3d9bb166c32329c33958",
"powerpc64le-unknown-linux-gnu-0.14.6": "d4296a0f41ed25cbf56a04b04bda7f3661b8be9d3220b89cc342e6cb4e6ee259",
"riscv64gc-unknown-linux-gnu-0.14.6": "e06b714ebb8846421ed6b998beac66a7fd1fad09f7bee89e4e6b671c6e8c3fc3",
"s390x-unknown-linux-gnu-0.14.6": "2ba3e5b6e66d9ba60d6fac9b699f77dd79402c872fc244259db7fc7815180b3d",
"x86_64-apple-darwin-0.14.6": "efe45a6defcf4f1b6de87d56ce94635f53b00f88ddc2fcb8e25e2c4e3a61261c",
"x86_64-pc-windows-msvc-0.14.6": "3a8bb3499484c7f9e86060c89d0e61c47dac7f9fb4d7fe46bc59dca400b322c9",
"x86_64-unknown-linux-gnu-0.14.6": "b0ee141ada4749c7ee16ba21465b4ef035455b495aa3ab951bbcb9bde9f4d001",
"x86_64-unknown-linux-musl-0.14.6": "7ef1743875c7c469cc1c4bb6da6a9bbff3f3a7b89a75632d6cd2944ede470a5e",
"aarch64-apple-darwin-0.14.5": "c07616663ac63792c16269d6798a47fb1f45b29997706178d60e90da698a9970",
"aarch64-pc-windows-msvc-0.14.5": "c09ff1cdaafd6cc3733586dc517bfd3e0d0ddc39360c90343ab7b610c8ade130",
"aarch64-unknown-linux-gnu-0.14.5": "da5692a609e728dd1773aebf087113c5c3561aafdfa9fe574b30de9438c60a23",
"aarch64-unknown-linux-musl-0.14.5": "ebef9d7119119e67b1065a5a35128148898e1581037e7d68c3aa9223983af0a4",
"arm-unknown-linux-musleabihf-0.14.5": "00c937e44474d21878bdb2e9e214d74005fddc8c43a4c76d8e71a9085c7cc6af",
"armv7-unknown-linux-gnueabihf-0.14.5": "aa54fcaba5d7029180139491213f504e5789b36e0017c0a67aff7b6ec0c04c45",
"armv7-unknown-linux-musleabihf-0.14.5": "5e06c211d5dc4e85eeafd29e87af4aed690a41b02f9296537d4d4ebe62fded9a",
"i686-pc-windows-msvc-0.14.5": "6b54cf61dad3276995d157d000f501917f1aa54735391150bf93282329253c92",
"i686-unknown-linux-gnu-0.14.5": "81aadc05c630e7e7c4ca68c510f5ce462e0645fa03650ca3f844cb4d9b2efc27",
"i686-unknown-linux-musl-0.14.5": "556c63188c8bc7e253a4eaef8727857a808a81af6fef02f76f27a71e800554a0",
"powerpc64-unknown-linux-gnu-0.14.5": "df85081b5e776d934188f9eb67a1d2d17dba1e986f7e76668ffeed6e541858d1",
"powerpc64le-unknown-linux-gnu-0.14.5": "4a02aa69a73bc5d9e579b08f5081e0fec412e353bacafa6b4a0705d89b3486e6",
"riscv64gc-unknown-linux-gnu-0.14.5": "a1a20ddca6e776a8f38d533da4aa1eeb543ecbfa08813c482e3cb7d5ef0c39fc",
"s390x-unknown-linux-gnu-0.14.5": "242bf290de417e8c9e8ca5c844be933e611cca3f3b301dc8537f72d051ceb3b9",
"x86_64-apple-darwin-0.14.5": "d7285770c5098be00c9b4ff099d6ef7f8b2a54b4019c9507b628ee9f0d404c06",
"x86_64-pc-windows-msvc-0.14.5": "9b998bf1a790a18b829fab3368ee7404a8f1f2cec2acb650aa1fd1b74962d023",
"x86_64-unknown-linux-gnu-0.14.5": "5bc52346f81098e42beecd622f49c4336a5361eb38b7b51d466b0a9647e99e33",
"x86_64-unknown-linux-musl-0.14.5": "69ddecf374a4f53eeda238399614ed6f92c5e75fe04436c604fb78435d5658eb",
"aarch64-apple-darwin-0.14.4": "ab26cd2b03d5b2ec42dc7ac1886a29055eb2003aa2db14b26c7091c7cd6b4c68",
"aarch64-pc-windows-msvc-0.14.4": "270773b34836e5b546d3ec9fe3b6cab4057881eff69828566f230baffff7634a",
"aarch64-unknown-linux-gnu-0.14.4": "8bf03ef4bb8ce42321ea0e59a505739b29b18d85b1d4f220736e242248b7da31",
"aarch64-unknown-linux-musl-0.14.4": "c77b72e565e9044eddce02e71f9214edea045047b786bb2bc973a6d8f94fb13e",
"arm-unknown-linux-musleabihf-0.14.4": "5211b338bf1c48faa2fc045bd68c56b50e1e3d898f2255c39a3a7040033738f1",
"armv7-unknown-linux-gnueabihf-0.14.4": "62e05c9a4571ea1aca80db377b4a11dd2325100db9ca0d7db16b61b87cb3d0b5",
"armv7-unknown-linux-musleabihf-0.14.4": "b20725ed5be925b58120172b2395bdbea9857bc562c3a7a7e47a4d9281bafb7f",
"i686-pc-windows-msvc-0.14.4": "bbe517649a5c6134b424b3065db7b5dcfaed72c2f5e848ec87cb2b33be7a133f",
"i686-unknown-linux-gnu-0.14.4": "a68939e63f7b384351172ff1535d37e73ecf81a94b0c89f369f3f41aabcccede",
"i686-unknown-linux-musl-0.14.4": "ff05a300bbb06211ec9cc43daec05da197ed116b5f6a5ea9ac8fc80fc00df39f",
"powerpc64-unknown-linux-gnu-0.14.4": "394eae2ad3485eb3530db3e9b51feacbf0b03e63ec8e93f2134a137c59da4abe",
"powerpc64le-unknown-linux-gnu-0.14.4": "b12b41763fa3c1068d2378669fa2740b11e0dd3dea3f667f732241a25fb06c9f",
"riscv64gc-unknown-linux-gnu-0.14.4": "c6385274d7a3b1d0c7ed05b36101faf2c7206e8adc0c7c107d32fc8e5d57628c",
"s390x-unknown-linux-gnu-0.14.4": "dcbf1dce38298dccfea7edffb1ea237ab2ccf2ea5dbae6d5b2dc4fe88177b094",
"x86_64-apple-darwin-0.14.4": "041b9429400bfc3aca8402940fe6fa0ec33f9d79e8f50fbfb3063f70b4327fa3",
"x86_64-pc-windows-msvc-0.14.4": "5541af69b1f342d843f8fca6218bd0d5d9064e987d14405a2abf60ce94c615a4",
"x86_64-unknown-linux-gnu-0.14.4": "c9120e68e358eb0f850123537afe18945f9095e9f17967944fd23585fc88bb0b",
"x86_64-unknown-linux-musl-0.14.4": "dcb5b42fd364c9e837b6800886564a891d023c8b87c967224351399cb1cda154",
"aarch64-apple-darwin-0.14.3": "fc4c2c153656bc4082fb6c928fbd6867d5eb932240b663b329365f3f1821fc82",
"aarch64-pc-windows-msvc-0.14.3": "b7ed5d2006b1c43559e78d90e65f2fa1982bec3976de74978485660fcdd67548",
"aarch64-unknown-linux-gnu-0.14.3": "daa9edc586b669079fbe204bf5f5b48ee05c5dac862d2daf5ad72d3c2777834b",
"aarch64-unknown-linux-musl-0.14.3": "571058fe7e3381ad54bec8b3d9d127013e332d822b35978b503722147aa3b9cf",
"arm-unknown-linux-musleabihf-0.14.3": "f5e9b79cea63116ad582ffb514a61a506978762b67859b9e9e9cdee4b2ad065d",
"armv7-unknown-linux-gnueabihf-0.14.3": "07094c107682c58260d652708a0c8b2f3d38bdffd5e7ec9a81785e665154a137",
"armv7-unknown-linux-musleabihf-0.14.3": "edfd2491e25383de77f60aafcbd5451350b2cb6f9af38b6cf5a2e725193333cd",
"i686-pc-windows-msvc-0.14.3": "f46525c0684a220c063c1c1f8d516c8cccab8ec9f62417e17e02cd4c1a138417",
"i686-unknown-linux-gnu-0.14.3": "c7180e275ccaa97eae1528a15a08828cd9aaa15b57d3828f8722b0edd347046d",
"i686-unknown-linux-musl-0.14.3": "60d1db56b1b4064b00f349b5fc8e11f2e63b8fa3bce4679f9c9da91356d6c3f6",
"powerpc64-unknown-linux-gnu-0.14.3": "b9bf7191d023fcdd938e51fa53b63226897a23896f82057fe32fde9df10b1649",
"powerpc64le-unknown-linux-gnu-0.14.3": "c1f5e497fe183dc1e0b6bb984573a0703182b68ac07587add1cbc370957ebd20",
"riscv64gc-unknown-linux-gnu-0.14.3": "909e92469524b80520af17537df55f245d6ba018928bc486fd8418e9983b539f",
"s390x-unknown-linux-gnu-0.14.3": "d8c56807e9827f391e1266bd19e0235fa470a0620cf166975365862e5bf9e908",
"x86_64-apple-darwin-0.14.3": "076e88da3dcb38d3fef61daccc759bf29b605a490143ae707c0e067ebf8d7050",
"x86_64-pc-windows-msvc-0.14.3": "ccc1bd362cca52a7fb7f9ee2cec7317c139ccb86e0964a5c1d4b14efbf2118ff",
"x86_64-unknown-linux-gnu-0.14.3": "cb8a88912aa91a1864ad662c24df4514699ddfcbc52e684218aaf5ac57d7de0d",
"x86_64-unknown-linux-musl-0.14.3": "58fd05427420df7b7b51bc6bbd5a430f38d2dfd63c74660f27625a4632f12532",
"aarch64-apple-darwin-0.14.2": "33225f67ce61188fce91b801ab50a4028f8b0d66abbf81810841dd7d42371e38",
"aarch64-pc-windows-msvc-0.14.2": "4fb68c66c719b337c2364aeb8210326a28b8ae046ef9a9c90407d473264515dd",
"aarch64-unknown-linux-gnu-0.14.2": "a907d6a13120679b7194eb61beace09103f04b90e32cf7c2ac11979e6f618e35",
"aarch64-unknown-linux-musl-0.14.2": "e323e9716661c9e18152aefe62e3fada497c10c9b3ef3095359c31b4df4f866a",
"arm-unknown-linux-musleabihf-0.14.2": "2b3ccfd36718b29e0f5d1dcc10540b61205c72ee1c6a43331e6a97f2a17f12d0",
"armv7-unknown-linux-gnueabihf-0.14.2": "5539a66c2723670dbf54eadf615e106aa038decbc701b9d47f7ed535ac677e1d",
"armv7-unknown-linux-musleabihf-0.14.2": "c59be0daa3144ba317c88dd6cb3af68cff0f8dfbf2f495bebfb5b630d6f4c7cd",
"i686-pc-windows-msvc-0.14.2": "125e2010b28ccb01ed2a4596e3db8d8dc0a46ccba2ee08e6038cc56ebbfbcb96",
"i686-unknown-linux-gnu-0.14.2": "e2accde14cb371ca1b60935028c72138390f552cd77fc8c52a75f28c68eaa963",
"i686-unknown-linux-musl-0.14.2": "d11f67f949e909412c523edcc1944c16dfecde49ed3709bca40631e371300da1",
"powerpc64-unknown-linux-gnu-0.14.2": "99cc0f2cf83a7f82bb4e0db9ff1de8bcc5bf966054c0c82d25e189ee4565b0d5",
"powerpc64le-unknown-linux-gnu-0.14.2": "81ac087a458bcaac7905c9afe84ef58061394a71264e8dd115889be0bc96fc6e",
"riscv64gc-unknown-linux-gnu-0.14.2": "7917eb80fbae72040ad199f634361ce6001bc6225c165caa09c6d983c90692b0",
"s390x-unknown-linux-gnu-0.14.2": "e24bfabe70535ffeedbba74ff6ecdf6c6bb09c5d9bf2c6c902e5540b569d6236",
"x86_64-apple-darwin-0.14.2": "f119057618599e8983bdeed64e949af54f67d7a62464d11de0ba1237619a9990",
"x86_64-pc-windows-msvc-0.14.2": "0a1160f45263cc847acd4b42392bf0484c9420806eeb7f776e1384fb557aeade",
"x86_64-unknown-linux-gnu-0.14.2": "b4457ef6c130165655e0fb91081dbef09011ec41955115aaa22c94f7655c97c2",
"x86_64-unknown-linux-musl-0.14.2": "e5e177a829b370376abb6a1dc9edc8c59ac519ebe64b1366b65e2952fa524a8d",
"aarch64-apple-darwin-0.14.1": "ee12f441b4c14eff354784a52f8a16767573bd6285627cad2ade04551e8a678b",
"aarch64-pc-windows-msvc-0.14.1": "3bd0b34cc645faaf88b4010a639d9b0ec6c313359774ad7e48daaef4ddb3c4f7",
"aarch64-unknown-linux-gnu-0.14.1": "8203922d5f55a04089005184942f2f449f9736a06e96854230ba5991bb91ee9a",
"aarch64-unknown-linux-musl-0.14.1": "ddfc9df5c879a1984fef4e29838e46fa8e979adc3fdab5967f096363427e8790",
"arm-unknown-linux-musleabihf-0.14.1": "a29be1acc5f29ee8cb5a5add223a7ed07e8ffd0f9a78219e115e57041c63b416",
"armv7-unknown-linux-gnueabihf-0.14.1": "dd8ead33fc3158618a29f02d76fd7ff4f6914272b5d94a65e348b8b8c0753d78",
"armv7-unknown-linux-musleabihf-0.14.1": "16d79262e9fc98ceef167577a391d54d9c8a2d8fe90de22266f456bf4644f7e5",
"i686-pc-windows-msvc-0.14.1": "ffe525c5e641f3bef31d9bc6e1e3585f9f796dda1254c15e5a18ef51a91917c3",
"i686-unknown-linux-gnu-0.14.1": "37f10652706cdf1f107c620970bf37591b0be44111614101509f56e596f866b3",
"i686-unknown-linux-musl-0.14.1": "e39c79642ec4e3d95d31a0ae77fb648946f2a639cb3cbf876c0f5e1e2571e94e",
"powerpc64-unknown-linux-gnu-0.14.1": "1ec026aef1c670715d5c197bbf18b4edd81e140fbecee51ed169e05b042c6045",
"powerpc64le-unknown-linux-gnu-0.14.1": "193d66f5ed6e21a46b244118c983ab91628ed65ae542f7345f8e37a8c555bff0",
"riscv64gc-unknown-linux-gnu-0.14.1": "4cbea006f37927abac8c32575212f982b86aaa4f73a32983e4a8934320ef7e9c",
"s390x-unknown-linux-gnu-0.14.1": "5cd7f6e6e2de3b03ada4821de444e92bb87ce5c57981c1d8ba8128dc62f02668",
"x86_64-apple-darwin-0.14.1": "7fda94bd7fc6114eecb67b858a8c93f1b4aa658aa1f5e887b37a2b95bf6f26a7",
"x86_64-pc-windows-msvc-0.14.1": "ab0bc1876a16e1afa4177fe9f58d568fbe85921efb253395bd03d01e1e2c467d",
"x86_64-unknown-linux-gnu-0.14.1": "8798f5892db7dc70a3250f89d3ef613f87f1fa5fdb4242921ee31427daf78e87",
"x86_64-unknown-linux-musl-0.14.1": "ec5b8eb318ff9e2412988420eb78f965aca02e9f67df34eeea7609e0c5a0fb7f",
"aarch64-apple-darwin-0.14.0": "0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec", "aarch64-apple-darwin-0.14.0": "0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec",
"aarch64-pc-windows-msvc-0.14.0": "a882d2ec2235c13f63453fde682775d2e1f8a44ccfd1af9e031255b051e30e70", "aarch64-pc-windows-msvc-0.14.0": "a882d2ec2235c13f63453fde682775d2e1f8a44ccfd1af9e031255b051e30e70",
"aarch64-unknown-linux-gnu-0.14.0": "60fc3b464a723456ba1bc8cd91d29806753c885f72e26ac67b718cee6b35aaca", "aarch64-unknown-linux-gnu-0.14.0": "60fc3b464a723456ba1bc8cd91d29806753c885f72e26ac67b718cee6b35aaca",
@@ -31956,6 +31722,7 @@ const plugin_rest_endpoint_methods_1 = __nccwpck_require__(9210);
const pep440 = __importStar(__nccwpck_require__(3297)); const pep440 = __importStar(__nccwpck_require__(3297));
const semver = __importStar(__nccwpck_require__(9318)); const semver = __importStar(__nccwpck_require__(9318));
const constants_1 = __nccwpck_require__(6156); const constants_1 = __nccwpck_require__(6156);
const retry_1 = __nccwpck_require__(5931);
const checksum_1 = __nccwpck_require__(5391); const checksum_1 = __nccwpck_require__(5391);
const PaginatingOctokit = core_1.Octokit.plugin(plugin_paginate_rest_1.paginateRest, plugin_rest_endpoint_methods_1.restEndpointMethods); const PaginatingOctokit = core_1.Octokit.plugin(plugin_paginate_rest_1.paginateRest, plugin_rest_endpoint_methods_1.restEndpointMethods);
function tryGetFromToolCache(arch, version) { function tryGetFromToolCache(arch, version) {
@@ -31977,7 +31744,21 @@ async function downloadVersion(platform, arch, version, checkSum, githubToken) {
} }
const downloadUrl = constructDownloadUrl(version, platform, arch); const downloadUrl = constructDownloadUrl(version, platform, arch);
core.debug(`Downloading ruff from "${downloadUrl}" ...`); core.debug(`Downloading ruff from "${downloadUrl}" ...`);
const downloadPath = await tc.downloadTool(downloadUrl, undefined, githubToken); const downloadPath = await (0, retry_1.withRetry)(async () => {
try {
return await tc.downloadTool(downloadUrl, undefined, githubToken);
}
catch (error) {
const err = error;
if ((0, retry_1.isRetryableError)(err)) {
throw new retry_1.RetryableError(`Failed to download ruff binary: ${err.message}`, err);
}
else {
throw new retry_1.NonRetryableError(`Failed to download ruff binary: ${err.message}`, err);
}
}
}, { maxRetries: 3, timeoutMs: 60000 }, // 60 second timeout for downloads
"download ruff binary");
core.debug(`Downloaded ruff to "${downloadPath}"`); core.debug(`Downloaded ruff to "${downloadPath}"`);
await (0, checksum_1.validateChecksum)(checkSum, downloadPath, arch, platform, version); await (0, checksum_1.validateChecksum)(checkSum, downloadPath, arch, platform, version);
const extractedDir = await extractDownloadedArtifact(version, downloadPath, extension, platform, artifact); const extractedDir = await extractDownloadedArtifact(version, downloadPath, extension, platform, artifact);
@@ -32033,6 +31814,7 @@ async function resolveVersion(versionInput, githubToken) {
return resolvedVersion; return resolvedVersion;
} }
async function getAvailableVersions(githubToken) { async function getAvailableVersions(githubToken) {
return await (0, retry_1.withRetry)(async () => {
try { try {
const octokit = new PaginatingOctokit({ const octokit = new PaginatingOctokit({
auth: githubToken, auth: githubToken,
@@ -32040,19 +31822,40 @@ async function getAvailableVersions(githubToken) {
return await getReleaseTagNames(octokit); return await getReleaseTagNames(octokit);
} }
catch (err) { catch (err) {
if (err.message.includes("Bad credentials")) { const error = err;
if (error.message.includes("Bad credentials")) {
core.info("No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited."); core.info("No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.");
const octokit = new PaginatingOctokit(); const octokit = new PaginatingOctokit();
return await getReleaseTagNames(octokit); return await getReleaseTagNames(octokit);
} }
throw err; if ((0, retry_1.isRetryableError)(error)) {
throw new retry_1.RetryableError(`Failed to get available versions: ${error.message}`, error);
} }
else {
throw new retry_1.NonRetryableError(`Failed to get available versions: ${error.message}`, error);
}
}
}, { maxRetries: 3, timeoutMs: 30000 }, // 30 second timeout for API calls
"get available versions");
} }
async function getReleaseTagNames(octokit) { async function getReleaseTagNames(octokit) {
const response = await octokit.paginate(octokit.rest.repos.listReleases, { const response = await (0, retry_1.withRetry)(async () => {
try {
return await octokit.paginate(octokit.rest.repos.listReleases, {
owner: constants_1.OWNER, owner: constants_1.OWNER,
repo: constants_1.REPO, repo: constants_1.REPO,
}); });
}
catch (error) {
const err = error;
if ((0, retry_1.isRetryableError)(err)) {
throw new retry_1.RetryableError(`Failed to list GitHub releases: ${err.message}`, err);
}
else {
throw new retry_1.NonRetryableError(`Failed to list GitHub releases: ${err.message}`, err);
}
}
}, { maxRetries: 3, timeoutMs: 30000 }, "list GitHub releases");
const releaseTagNames = response.map((release) => release.tag_name); const releaseTagNames = response.map((release) => release.tag_name);
if (releaseTagNames.length === 0) { if (releaseTagNames.length === 0) {
throw Error("Github API request failed while getting releases. Check the GitHub status page for outages. Try again later."); throw Error("Github API request failed while getting releases. Check the GitHub status page for outages. Try again later.");
@@ -32060,6 +31863,7 @@ async function getReleaseTagNames(octokit) {
return response.map((release) => release.tag_name); return response.map((release) => release.tag_name);
} }
async function getLatestVersion(githubToken) { async function getLatestVersion(githubToken) {
return await (0, retry_1.withRetry)(async () => {
const octokit = new PaginatingOctokit({ const octokit = new PaginatingOctokit({
auth: githubToken, auth: githubToken,
}); });
@@ -32068,28 +31872,48 @@ async function getLatestVersion(githubToken) {
latestRelease = await getLatestRelease(octokit); latestRelease = await getLatestRelease(octokit);
} }
catch (err) { catch (err) {
if (err.message.includes("Bad credentials")) { const error = err;
if (error.message.includes("Bad credentials")) {
core.info("No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited."); core.info("No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.");
const octokit = new PaginatingOctokit(); const octokit = new PaginatingOctokit();
latestRelease = await getLatestRelease(octokit); latestRelease = await getLatestRelease(octokit);
} }
else { else {
core.error("Github API request failed while getting latest release. Check the GitHub status page for outages. Try again later."); core.error("Github API request failed while getting latest release. Check the GitHub status page for outages. Try again later.");
throw err; if ((0, retry_1.isRetryableError)(error)) {
throw new retry_1.RetryableError(`Failed to get latest version: ${error.message}`, error);
}
else {
throw new retry_1.NonRetryableError(`Failed to get latest version: ${error.message}`, error);
}
} }
} }
if (!latestRelease) { if (!latestRelease) {
throw new Error("Could not determine latest release."); throw new Error("Could not determine latest release.");
} }
return latestRelease.tag_name; return latestRelease.tag_name;
}, { maxRetries: 3, timeoutMs: 30000 }, "get latest version");
} }
async function getLatestRelease(octokit) { async function getLatestRelease(octokit) {
return await (0, retry_1.withRetry)(async () => {
try {
const { data: latestRelease } = await octokit.rest.repos.getLatestRelease({ const { data: latestRelease } = await octokit.rest.repos.getLatestRelease({
owner: constants_1.OWNER, owner: constants_1.OWNER,
repo: constants_1.REPO, repo: constants_1.REPO,
}); });
return latestRelease; return latestRelease;
} }
catch (error) {
const err = error;
if ((0, retry_1.isRetryableError)(err)) {
throw new retry_1.RetryableError(`Failed to get latest release: ${err.message}`, err);
}
else {
throw new retry_1.NonRetryableError(`Failed to get latest release: ${err.message}`, err);
}
}
}, { maxRetries: 3, timeoutMs: 30000 }, "get latest release");
}
function maxSatisfying(versions, version) { function maxSatisfying(versions, version) {
const maxSemver = tc.evaluateVersions(versions, version); const maxSemver = tc.evaluateVersions(versions, version);
if (maxSemver !== "") { if (maxSemver !== "") {
@@ -32146,6 +31970,7 @@ var __importStar = (this && this.__importStar) || (function () {
}; };
})(); })();
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
const fs = __importStar(__nccwpck_require__(3024));
const path = __importStar(__nccwpck_require__(6760)); const path = __importStar(__nccwpck_require__(6760));
const core = __importStar(__nccwpck_require__(7484)); const core = __importStar(__nccwpck_require__(7484));
const exec = __importStar(__nccwpck_require__(5236)); const exec = __importStar(__nccwpck_require__(5236));
@@ -32154,7 +31979,6 @@ const download_version_1 = __nccwpck_require__(8255);
const inputs_1 = __nccwpck_require__(9612); const inputs_1 = __nccwpck_require__(9612);
const platforms_1 = __nccwpck_require__(8361); const platforms_1 = __nccwpck_require__(8361);
const pyproject_1 = __nccwpck_require__(3929); const pyproject_1 = __nccwpck_require__(3929);
const pyproject_finder_1 = __nccwpck_require__(6346);
async function run() { async function run() {
const platform = (0, platforms_1.getPlatform)(); const platform = (0, platforms_1.getPlatform)();
const arch = (0, platforms_1.getArch)(); const arch = (0, platforms_1.getArch)();
@@ -32211,9 +32035,9 @@ async function determineVersion() {
} }
return await (0, download_version_1.resolveVersion)(versionFromPyproject || "latest", inputs_1.githubToken); return await (0, download_version_1.resolveVersion)(versionFromPyproject || "latest", inputs_1.githubToken);
} }
const pyProjectPath = (0, pyproject_finder_1.findPyprojectToml)(inputs_1.src, process.env.GITHUB_WORKSPACE || "."); const pyProjectPath = path.join(inputs_1.src, "pyproject.toml");
if (!pyProjectPath) { if (!fs.existsSync(pyProjectPath)) {
core.info(`Could not find pyproject.toml. Using latest version.`); core.info(`Could not find ${pyProjectPath}. Using latest version.`);
return await (0, download_version_1.resolveVersion)("latest", inputs_1.githubToken); return await (0, download_version_1.resolveVersion)("latest", inputs_1.githubToken);
} }
const versionFromPyproject = (0, pyproject_1.getRuffVersionFromRequirementsFile)(pyProjectPath); const versionFromPyproject = (0, pyproject_1.getRuffVersionFromRequirementsFile)(pyProjectPath);
@@ -32341,110 +32165,6 @@ function getPlatform() {
} }
/***/ }),
/***/ 6346:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.findPyprojectToml = findPyprojectToml;
const fs = __importStar(__nccwpck_require__(3024));
const path = __importStar(__nccwpck_require__(6760));
const core = __importStar(__nccwpck_require__(7484));
/**
* Search for a pyproject.toml file starting from the given directory
* and traversing upwards through parent directories until reaching
* the GitHub workspace root.
*
* @param startDir The directory to start the search from (e.g., the src input)
* @param workspaceRoot The GitHub workspace directory (GITHUB_WORKSPACE)
* @returns The path to the found pyproject.toml, or undefined if not found
*/
function findPyprojectToml(startDir, workspaceRoot) {
let currentDir = path.resolve(startDir);
const resolvedWorkspaceRoot = path.resolve(workspaceRoot);
while (true) {
const pyprojectPath = path.join(currentDir, "pyproject.toml");
core.debug(`Checking for ${pyprojectPath}`);
if (fs.existsSync(pyprojectPath)) {
core.info(`Found pyproject.toml at ${pyprojectPath}`);
return pyprojectPath;
}
// Check if we've reached the workspace root
if (currentDir === resolvedWorkspaceRoot) {
// If we're at workspace root and didn't find it, stop searching
break;
}
// Move up to parent directory
const parentDir = path.dirname(currentDir);
// If parent is the same as current, we've reached the filesystem root
if (parentDir === currentDir) {
break;
}
currentDir = parentDir;
// If we've gone past the workspace root, stop searching
if (isPathWithinWorkspace(currentDir, resolvedWorkspaceRoot) === false) {
break;
}
}
return undefined;
}
/**
* Check if a given path is within or equal to the workspace root.
*
* @param checkPath The path to check
* @param workspaceRoot The workspace root directory
* @returns true if within or equal to workspace, false if outside, undefined if can't determine
*/
function isPathWithinWorkspace(checkPath, workspaceRoot) {
try {
const checkPathResolved = path.resolve(checkPath);
const workspaceRootResolved = path.resolve(workspaceRoot);
// Check if checkPath starts with workspaceRoot (case-insensitive on Windows)
const relativePath = path.relative(workspaceRootResolved, checkPathResolved);
return !relativePath.startsWith("..") && !path.isAbsolute(relativePath);
}
catch {
return undefined;
}
}
/***/ }), /***/ }),
/***/ 3929: /***/ 3929:
@@ -32486,54 +32206,23 @@ var __importStar = (this && this.__importStar) || (function () {
}; };
})(); })();
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.findRuffVersionInSpec = findRuffVersionInSpec;
exports.getRuffVersionFromRequirementsFile = getRuffVersionFromRequirementsFile; exports.getRuffVersionFromRequirementsFile = getRuffVersionFromRequirementsFile;
const fs = __importStar(__nccwpck_require__(3024)); const fs = __importStar(__nccwpck_require__(3024));
const core = __importStar(__nccwpck_require__(7484)); const core = __importStar(__nccwpck_require__(7484));
const toml = __importStar(__nccwpck_require__(7106)); const toml = __importStar(__nccwpck_require__(7106));
/**
* Find ruff version in a dependency specification.
* Only handles strings that start with "ruff" (e.g., "ruff==0.9.3").
* Returns undefined for non-ruff dependencies.
* Strips environment markers (everything after ';').
* Strips leading '==' from exact version specifiers (PEP 440) for downstream compatibility.
*
* @internal This is exported for testing purposes only.
*/
function findRuffVersionInSpec(spec) {
const trimmedSpec = spec.trim();
const fullDepMatch = trimmedSpec.match(/^ruff\s*(.+)$/);
let versionSpec;
if (fullDepMatch) {
versionSpec = fullDepMatch[1];
}
else {
return undefined;
}
// Strip trailing backslash (line continuation)
versionSpec = versionSpec.replace(/\\$/, "").trim();
// Strip environment markers (everything after ';')
const match = versionSpec.match(/^([^;]+)(?:;.*)?$/);
if (match) {
let version = match[1].trim();
if (version) {
// Strip leading '==' from exact version specifiers for compatibility with semver
if (version.startsWith("==")) {
version = version.slice(2);
}
if (trimmedSpec.includes(";")) {
core.warning("Environment markers are ignored. ruff is a standalone tool that works independently of Python version.");
}
core.info(`Found ruff version in requirements file: ${version}`);
return version;
}
}
return undefined;
}
function getRuffVersionFromAllDependencies(allDependencies) { function getRuffVersionFromAllDependencies(allDependencies) {
return allDependencies const ruffVersionDefinition = allDependencies.find((dep) => dep.startsWith("ruff"));
.map((dep) => findRuffVersionInSpec(dep)) if (ruffVersionDefinition) {
.find((version) => version !== undefined); const ruffVersion = ruffVersionDefinition
.match(/^ruff([^A-Z0-9._-]+.*)$/)?.[1]
.trim();
if (ruffVersion?.startsWith("==")) {
return ruffVersion.slice(2);
}
core.info(`Found ruff version in pyproject.toml: ${ruffVersion}`);
return ruffVersion;
}
return undefined;
} }
function parsePyproject(pyprojectContent) { function parsePyproject(pyprojectContent) {
const pyproject = toml.parse(pyprojectContent); const pyproject = toml.parse(pyprojectContent);
@@ -32555,9 +32244,8 @@ function getRuffVersionFromPoetryGroups(pyproject) {
return poetryGroups return poetryGroups
.flatMap((group) => Object.entries(group.dependencies)) .flatMap((group) => Object.entries(group.dependencies))
.map(([name, spec]) => { .map(([name, spec]) => {
if (typeof spec === "string") { if (name === "ruff" && typeof spec === "string")
return findRuffVersionInSpec(`${name} ${spec}`); return spec;
}
return undefined; return undefined;
}) })
.find((version) => version !== undefined); .find((version) => version !== undefined);
@@ -32582,6 +32270,175 @@ function getRuffVersionFromRequirementsFile(filePath) {
} }
/***/ }),
/***/ 5931:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.NonRetryableError = exports.RetryableError = exports.DEFAULT_RETRY_OPTIONS = void 0;
exports.withRetry = withRetry;
exports.withTimeout = withTimeout;
exports.isRetryableError = isRetryableError;
exports.wrapWithRetryLogic = wrapWithRetryLogic;
const core = __importStar(__nccwpck_require__(7484));
exports.DEFAULT_RETRY_OPTIONS = {
backoffMultiplier: 2,
initialDelayMs: 1000,
maxDelayMs: 10000,
maxRetries: 3,
timeoutMs: 30000, // 30 second timeout
};
class RetryableError extends Error {
cause;
constructor(message, cause) {
super(message);
this.cause = cause;
this.name = "RetryableError";
}
}
exports.RetryableError = RetryableError;
class NonRetryableError extends Error {
cause;
constructor(message, cause) {
super(message);
this.cause = cause;
this.name = "NonRetryableError";
}
}
exports.NonRetryableError = NonRetryableError;
async function withRetry(operation, options = {}, operationName = "operation") {
const opts = { ...exports.DEFAULT_RETRY_OPTIONS, ...options };
let lastError;
for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
try {
if (attempt > 0) {
const delay = Math.min(opts.initialDelayMs * opts.backoffMultiplier ** (attempt - 1), opts.maxDelayMs);
core.info(`Retrying ${operationName} (attempt ${attempt + 1}/${opts.maxRetries + 1}) after ${delay}ms delay...`);
await sleep(delay);
}
// Wrap operation with timeout if specified
if (opts.timeoutMs) {
return await withTimeout(operation(), opts.timeoutMs, operationName);
}
else {
return await operation();
}
}
catch (error) {
lastError = error;
// Don't retry on non-retryable errors
if (lastError instanceof NonRetryableError) {
core.debug(`Non-retryable error in ${operationName}: ${lastError.message}`);
throw lastError.cause || lastError;
}
// Log the error for debugging
core.debug(`Attempt ${attempt + 1} failed for ${operationName}: ${lastError.message}`);
// If this was the last attempt, throw the error
if (attempt === opts.maxRetries) {
core.error(`${operationName} failed after ${opts.maxRetries + 1} attempts. Last error: ${lastError.message}`);
throw lastError;
}
}
}
throw lastError || new Error(`${operationName} failed for unknown reason`);
}
async function withTimeout(promise, timeoutMs, operationName = "operation") {
const timeoutPromise = new Promise((_, reject) => {
setTimeout(() => {
reject(new RetryableError(`${operationName} timed out after ${timeoutMs}ms`));
}, timeoutMs);
});
return Promise.race([promise, timeoutPromise]);
}
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
function isRetryableError(error) {
const message = error.message.toLowerCase();
// Network-related errors that should be retried
const retryableMessages = [
"connect timeout",
"connection timeout",
"timeout",
"econnreset",
"econnrefused",
"enotfound",
"network error",
"request timeout",
"socket timeout",
"fetch failed",
"connect etimedout",
];
// HTTP status codes that should be retried
const retryableStatusCodes = [408, 429, 500, 502, 503, 504];
// Check for retryable messages
if (retryableMessages.some((msg) => message.includes(msg))) {
return true;
}
// Check for HTTP status codes in error message
const statusMatch = message.match(/status.*?(\d{3})/);
if (statusMatch) {
const statusCode = parseInt(statusMatch[1], 10);
if (retryableStatusCodes.includes(statusCode)) {
return true;
}
}
return false;
}
function wrapWithRetryLogic(operation, operationName, options = {}) {
return async () => {
try {
return await withRetry(operation, options, operationName);
}
catch (error) {
const err = error;
if (isRetryableError(err)) {
throw new RetryableError(`${operationName} failed: ${err.message}`, err);
}
else {
throw new NonRetryableError(`${operationName} failed: ${err.message}`, err);
}
}
};
}
/***/ }), /***/ }),
/***/ 2613: /***/ 2613:
@@ -34726,12 +34583,6 @@ ${codeblock}`, options);
}; };
// dist/util.js // dist/util.js
function isEscaped(str, ptr) {
let i = 0;
while (str[ptr - ++i] === "\\")
;
return --i && i % 2;
}
function indexOfNewline(str, start = 0, end = str.length) { function indexOfNewline(str, start = 0, end = str.length) {
let idx = str.indexOf("\n", start); let idx = str.indexOf("\n", start);
if (str[idx - 1] === "\r") if (str[idx - 1] === "\r")
@@ -34786,7 +34637,7 @@ function getStringEnd(str, seek) {
seek += target.length - 1; seek += target.length - 1;
do do
seek = str.indexOf(target, ++seek); seek = str.indexOf(target, ++seek);
while (seek > -1 && first !== "'" && isEscaped(str, seek)); while (seek > -1 && first !== "'" && str[seek - 1] === "\\" && (str[seek - 2] !== "\\" || str[seek - 3] === "\\"));
if (seek > -1) { if (seek > -1) {
seek += target.length; seek += target.length;
if (target.length > 1) { if (target.length > 1) {
@@ -34800,7 +34651,7 @@ function getStringEnd(str, seek) {
} }
// dist/date.js // dist/date.js
var DATE_TIME_RE = /^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i; var DATE_TIME_RE = /^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}:\d{2}(?:\.\d+)?)?(Z|[-+]\d{2}:\d{2})?$/i;
var TomlDate = class _TomlDate extends Date { var TomlDate = class _TomlDate extends Date {
#hasDate = false; #hasDate = false;
#hasTime = false; #hasTime = false;
@@ -34895,14 +34746,13 @@ var TomlDate = class _TomlDate extends Date {
var INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/; var INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/;
var FLOAT_REGEX = /^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/; var FLOAT_REGEX = /^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/;
var LEADING_ZERO = /^[+-]?0[0-9_]/; var LEADING_ZERO = /^[+-]?0[0-9_]/;
var ESCAPE_REGEX = /^[0-9a-f]{2,8}$/i; var ESCAPE_REGEX = /^[0-9a-f]{4,8}$/i;
var ESC_MAP = { var ESC_MAP = {
b: "\b", b: "\b",
t: " ", t: " ",
n: "\n", n: "\n",
f: "\f", f: "\f",
r: "\r", r: "\r",
e: "\x1B",
'"': '"', '"': '"',
"\\": "\\" "\\": "\\"
}; };
@@ -34937,8 +34787,8 @@ function parseString(str, ptr = 0, endPtr = str.length) {
} }
if (isEscape) { if (isEscape) {
isEscape = false; isEscape = false;
if (c === "x" || c === "u" || c === "U") { if (c === "u" || c === "U") {
let code = str.slice(ptr, ptr += c === "x" ? 2 : c === "u" ? 4 : 8); let code = str.slice(ptr, ptr += c === "u" ? 4 : 8);
if (!ESCAPE_REGEX.test(code)) { if (!ESCAPE_REGEX.test(code)) {
throw new TomlError("invalid unicode escape", { throw new TomlError("invalid unicode escape", {
toml: str, toml: str,
@@ -35031,14 +34881,24 @@ function parseValue(value, toml, ptr, integersAsBigInt) {
} }
// dist/extract.js // dist/extract.js
function sliceAndTrimEndOf(str, startPtr, endPtr) { function sliceAndTrimEndOf(str, startPtr, endPtr, allowNewLines) {
let value = str.slice(startPtr, endPtr); let value = str.slice(startPtr, endPtr);
let commentIdx = value.indexOf("#"); let commentIdx = value.indexOf("#");
if (commentIdx > -1) { if (commentIdx > -1) {
skipComment(str, commentIdx); skipComment(str, commentIdx);
value = value.slice(0, commentIdx); value = value.slice(0, commentIdx);
} }
return [value.trimEnd(), commentIdx]; let trimmed = value.trimEnd();
if (!allowNewLines) {
let newlineIdx = value.indexOf("\n", trimmed.length);
if (newlineIdx > -1) {
throw new TomlError("newlines are not allowed in inline tables", {
toml: str,
ptr: startPtr + newlineIdx
});
}
}
return [trimmed, commentIdx];
} }
function extractValue(str, ptr, end, depth, integersAsBigInt) { function extractValue(str, ptr, end, depth, integersAsBigInt) {
if (depth === 0) { if (depth === 0) {
@@ -35050,25 +34910,24 @@ function extractValue(str, ptr, end, depth, integersAsBigInt) {
let c = str[ptr]; let c = str[ptr];
if (c === "[" || c === "{") { if (c === "[" || c === "{") {
let [value, endPtr2] = c === "[" ? parseArray(str, ptr, depth, integersAsBigInt) : parseInlineTable(str, ptr, depth, integersAsBigInt); let [value, endPtr2] = c === "[" ? parseArray(str, ptr, depth, integersAsBigInt) : parseInlineTable(str, ptr, depth, integersAsBigInt);
if (end) { let newPtr = end ? skipUntil(str, endPtr2, ",", end) : endPtr2;
endPtr2 = skipVoid(str, endPtr2); if (endPtr2 - newPtr && end === "}") {
if (str[endPtr2] === ",") let nextNewLine = indexOfNewline(str, endPtr2, newPtr);
endPtr2++; if (nextNewLine > -1) {
else if (str[endPtr2] !== end) { throw new TomlError("newlines are not allowed in inline tables", {
throw new TomlError("expected comma or end of structure", {
toml: str, toml: str,
ptr: endPtr2 ptr: nextNewLine
}); });
} }
} }
return [value, endPtr2]; return [value, newPtr];
} }
let endPtr; let endPtr;
if (c === '"' || c === "'") { if (c === '"' || c === "'") {
endPtr = getStringEnd(str, ptr); endPtr = getStringEnd(str, ptr);
let parsed = parseString(str, ptr, endPtr); let parsed = parseString(str, ptr, endPtr);
if (end) { if (end) {
endPtr = skipVoid(str, endPtr); endPtr = skipVoid(str, endPtr, end !== "]");
if (str[endPtr] && str[endPtr] !== "," && str[endPtr] !== end && str[endPtr] !== "\n" && str[endPtr] !== "\r") { if (str[endPtr] && str[endPtr] !== "," && str[endPtr] !== end && str[endPtr] !== "\n" && str[endPtr] !== "\r") {
throw new TomlError("unexpected character encountered", { throw new TomlError("unexpected character encountered", {
toml: str, toml: str,
@@ -35080,7 +34939,7 @@ function extractValue(str, ptr, end, depth, integersAsBigInt) {
return [parsed, endPtr]; return [parsed, endPtr];
} }
endPtr = skipUntil(str, ptr, ",", end); endPtr = skipUntil(str, ptr, ",", end);
let slice = sliceAndTrimEndOf(str, ptr, endPtr - +(str[endPtr - 1] === ",")); let slice = sliceAndTrimEndOf(str, ptr, endPtr - +(str[endPtr - 1] === ","), end === "]");
if (!slice[0]) { if (!slice[0]) {
throw new TomlError("incomplete key-value declaration: no value specified", { throw new TomlError("incomplete key-value declaration: no value specified", {
toml: str, toml: str,
@@ -35170,16 +35029,17 @@ function parseInlineTable(str, ptr, depth, integersAsBigInt) {
let res = {}; let res = {};
let seen = /* @__PURE__ */ new Set(); let seen = /* @__PURE__ */ new Set();
let c; let c;
let comma = 0;
ptr++; ptr++;
while ((c = str[ptr++]) !== "}" && c) { while ((c = str[ptr++]) !== "}" && c) {
if (c === ",") { let err = { toml: str, ptr: ptr - 1 };
throw new TomlError("expected value, found comma", { if (c === "\n") {
toml: str, throw new TomlError("newlines are not allowed in inline tables", err);
ptr: ptr - 1 } else if (c === "#") {
}); throw new TomlError("inline tables cannot contain comments", err);
} else if (c === "#") } else if (c === ",") {
ptr = skipComment(str, ptr); throw new TomlError("expected key-value, found comma", err);
else if (c !== " " && c !== " " && c !== "\n" && c !== "\r") { } else if (c !== " " && c !== " ") {
let k; let k;
let t = res; let t = res;
let hasOwn = false; let hasOwn = false;
@@ -35208,8 +35068,15 @@ function parseInlineTable(str, ptr, depth, integersAsBigInt) {
seen.add(value); seen.add(value);
t[k] = value; t[k] = value;
ptr = valueEndPtr; ptr = valueEndPtr;
comma = str[ptr - 1] === "," ? ptr - 1 : 0;
} }
} }
if (comma) {
throw new TomlError("trailing commas are not allowed in inline tables", {
toml: str,
ptr: comma
});
}
if (!c) { if (!c) {
throw new TomlError("unfinished table encountered", { throw new TomlError("unfinished table encountered", {
toml: str, toml: str,
@@ -35461,13 +35328,14 @@ function stringifyArrayTable(array, key, depth, numberAsFloat) {
} }
let res = ""; let res = "";
for (let i = 0; i < array.length; i++) { for (let i = 0; i < array.length; i++) {
res += `${res && "\n"}[[${key}]] res += `[[${key}]]
`; `;
res += stringifyTable(0, array[i], key, depth, numberAsFloat); res += stringifyTable(array[i], key, depth, numberAsFloat);
res += "\n\n";
} }
return res; return res;
} }
function stringifyTable(tableKey, obj, prefix, depth, numberAsFloat) { function stringifyTable(obj, prefix, depth, numberAsFloat) {
if (depth === 0) { if (depth === 0) {
throw new Error("Could not stringify the object: maximum object depth exceeded"); throw new Error("Could not stringify the object: maximum object depth exceeded");
} }
@@ -35483,10 +35351,13 @@ function stringifyTable(tableKey, obj, prefix, depth, numberAsFloat) {
} }
let key = BARE_KEY.test(k) ? k : formatString(k); let key = BARE_KEY.test(k) ? k : formatString(k);
if (type === "array" && isArrayOfTables(obj[k])) { if (type === "array" && isArrayOfTables(obj[k])) {
tables += (tables && "\n") + stringifyArrayTable(obj[k], prefix ? `${prefix}.${key}` : key, depth - 1, numberAsFloat); tables += stringifyArrayTable(obj[k], prefix ? `${prefix}.${key}` : key, depth - 1, numberAsFloat);
} else if (type === "object") { } else if (type === "object") {
let tblKey = prefix ? `${prefix}.${key}` : key; let tblKey = prefix ? `${prefix}.${key}` : key;
tables += (tables && "\n") + stringifyTable(tblKey, obj[k], tblKey, depth - 1, numberAsFloat); tables += `[${tblKey}]
`;
tables += stringifyTable(obj[k], tblKey, depth - 1, numberAsFloat);
tables += "\n\n";
} else { } else {
preamble += key; preamble += key;
preamble += " = "; preamble += " = ";
@@ -35495,20 +35366,14 @@ function stringifyTable(tableKey, obj, prefix, depth, numberAsFloat) {
} }
} }
} }
if (tableKey && (preamble || !tables)) return `${preamble}
preamble = preamble ? `[${tableKey}] ${tables}`.trim();
${preamble}` : `[${tableKey}]`;
return preamble && tables ? `${preamble}
${tables}` : preamble || tables;
} }
function stringify(obj, { maxDepth = 1e3, numbersAsFloat = false } = {}) { function stringify(obj, { maxDepth = 1e3, numbersAsFloat = false } = {}) {
if (extendedTypeOf(obj) !== "object") { if (extendedTypeOf(obj) !== "object") {
throw new TypeError("stringify can only be called with an object"); throw new TypeError("stringify can only be called with an object");
} }
let str = stringifyTable(0, obj, "", maxDepth, numbersAsFloat); return stringifyTable(obj, "", maxDepth, numbersAsFloat);
if (str[str.length - 1] !== "\n")
return str + "\n";
return str;
} }
// dist/index.js // dist/index.js
+198 -235
View File
@@ -28205,240 +28205,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.KNOWN_CHECKSUMS = void 0; exports.KNOWN_CHECKSUMS = void 0;
// AUTOGENERATED_DO_NOT_EDIT // AUTOGENERATED_DO_NOT_EDIT
exports.KNOWN_CHECKSUMS = { exports.KNOWN_CHECKSUMS = {
"aarch64-apple-darwin-0.14.14": "76a9b0ebe57d0eee56940dbe0b62462578d1369cca8314ed0d2a6f2102292d4f",
"aarch64-pc-windows-msvc-0.14.14": "449982699657bd68d170440dad958281b030bc05865fe012d043cd225e78eb79",
"aarch64-unknown-linux-gnu-0.14.14": "1eee1ce3467fb5f348738bb5e4598859b55816a79c3cd6a26ca0dae03d7e2672",
"aarch64-unknown-linux-musl-0.14.14": "a4d7302aa201a6f8e71dfa217cd8273fddd4e434a93ee3b4b07047fd7a684ac1",
"arm-unknown-linux-musleabihf-0.14.14": "c225db82587780d1675e220db02c5209f406b29afb0a525628e11ffaca537068",
"armv7-unknown-linux-gnueabihf-0.14.14": "cdc9596d6317e6cb32fbf3fd6c0e5817f96676b215957e6583db28abf4a15427",
"armv7-unknown-linux-musleabihf-0.14.14": "0f1938426c50500bac09a09df5396aa19d6ce9f01a3a18a531dfaee5cc0d93e8",
"i686-pc-windows-msvc-0.14.14": "4f6af9d82acae3d1308c55b0fa51b84d57eafc380aedf97a53a32314118c9a71",
"i686-unknown-linux-gnu-0.14.14": "5ceb5e2f1906d85e444cb71503379e14d96ded423bd68906f1a539b78d9fc2c3",
"i686-unknown-linux-musl-0.14.14": "878cebcaf3481295d22a1274cea94ec050455917669ccecac586dcfe6b4a557e",
"powerpc64-unknown-linux-gnu-0.14.14": "e01a6db6bbf15db82052269887fb49e6be79923d188f1f60ed74f93b6b9a90d4",
"powerpc64le-unknown-linux-gnu-0.14.14": "6048f270a46cce01228a53fde14fa6182a99d9e99169d7c252f706d7ba2a4845",
"riscv64gc-unknown-linux-gnu-0.14.14": "6eca650195a22c0a568adc923b645b6317dad3ecc8a3d5c02c08768d6b333393",
"s390x-unknown-linux-gnu-0.14.14": "dbde3ba91f84d8c183ed49bca0790777285d21381ad64a290584bd19038b83a4",
"x86_64-apple-darwin-0.14.14": "749396c675c6f07205be6c4ef89e2e95123d790062d681059a355030e9d7d119",
"x86_64-pc-windows-msvc-0.14.14": "81bfeed34f15296e6c81ecea912b6fff4430b957de8a1181ce9365434e3d6744",
"x86_64-unknown-linux-gnu-0.14.14": "9876634f799d933bdaa1de864f47d26f898b2e20aa8f4f85d63235c3a231068d",
"x86_64-unknown-linux-musl-0.14.14": "55a1ee65f5ac9416cc40f99c2df62f0d4525d40369fe371caff945c495174d57",
"aarch64-apple-darwin-0.14.13": "067d1a90da8add55614eff91990425883a092d8279d9e503258ff8be0f8e9c18",
"aarch64-pc-windows-msvc-0.14.13": "f7b5b9740ae893ac6abe9b9f68865073ffb9146a6f352ba9718d53b102ad02ef",
"aarch64-unknown-linux-gnu-0.14.13": "84ce8fe1ef9b2eba018ba396fd018ac2bc22865a9e2a02573899ea6ee8e1e5fd",
"aarch64-unknown-linux-musl-0.14.13": "25941b777ff712f4d9473d26c1b875034214a3d5de20ea99b2add939dcd0b367",
"arm-unknown-linux-musleabihf-0.14.13": "3d833d451accb334f9cb91141083bbee5b835dcf0b49d14e5ccb13e0b6a7c387",
"armv7-unknown-linux-gnueabihf-0.14.13": "90aa92a6de0f63eacb2d380c324039c101c6097956690fbaec05ed8d922f8766",
"armv7-unknown-linux-musleabihf-0.14.13": "192deb53946b4309c56c1ad7c401ddac7557d0a517da7addfc636f1188bab30d",
"i686-pc-windows-msvc-0.14.13": "4ead4d5fc89a1f02aa97dad944e69306ae4177a689a3818d3575fed11aa994fe",
"i686-unknown-linux-gnu-0.14.13": "a321fc4862748563a663472a4458fe514e34542d0fe8d767d67b1463d585fb2f",
"i686-unknown-linux-musl-0.14.13": "597541ac81d553c2fe97339680bfdb3e926714763ee37f0b5dbcc572d695e376",
"powerpc64-unknown-linux-gnu-0.14.13": "cad4c05db54969608ec292b695397ddaef7452f759b976a60b69d9fefc6c5724",
"powerpc64le-unknown-linux-gnu-0.14.13": "bc7faa37e496ae0198ee7e1c9e8958df3c55025ccf8be175b74533f87626e726",
"riscv64gc-unknown-linux-gnu-0.14.13": "d9c6fd360347b9b0079994246ed08186f64629529e2fd2dc1a97a31da2a214d5",
"s390x-unknown-linux-gnu-0.14.13": "1995227a65970cb2c1aa3b03c9a5418ee1fa56210c4577e6f8e1a14d1e79ed5d",
"x86_64-apple-darwin-0.14.13": "69e424a42ac3a7c6c7032ad96deb757c35c93c848b6ea329a3f4c605e6d89ef9",
"x86_64-pc-windows-msvc-0.14.13": "d2af4376053458f283d74980b49dc0d61d3ef9d9b8684c5b25bd64b73e11634a",
"x86_64-unknown-linux-gnu-0.14.13": "b1e03e4cf245411f184106ba3d973b3902021bf5327e2fde0cfad163aacdc2c1",
"x86_64-unknown-linux-musl-0.14.13": "2fe394f493318551f271277a2228e56b31ca69a4842483e5709af4548f342bc3",
"aarch64-apple-darwin-0.14.11": "c3fab6bcad9cc2f8a342829dd4ea011c54b9671d023b71baac1cbf2b3526cefd",
"aarch64-pc-windows-msvc-0.14.11": "43faade7e8f33a8ffab726aa44ee2b6bc1fd9d51407320db797dcb3dac068461",
"aarch64-unknown-linux-gnu-0.14.11": "e5c018ac042ddeb9c02c3d96b6efe3a0dcd3406ba9bd695253d6111785f7abf6",
"aarch64-unknown-linux-musl-0.14.11": "4779a99b51812b56d56d180174be46ddb2fed98fecaea7565b450d37cff1b8c6",
"arm-unknown-linux-musleabihf-0.14.11": "a400347f59192992b61dc0bb9dfdfe640f8063403112d9e3a70f6275d34ae386",
"armv7-unknown-linux-gnueabihf-0.14.11": "7938729417dcd33b7078ae0a77440cc152bba33518bb095e19cb108c132b2602",
"armv7-unknown-linux-musleabihf-0.14.11": "57da6726050047ff2989554734deb94eb053789fc92c297a1a722a6723106a77",
"i686-pc-windows-msvc-0.14.11": "51bec5b8cdc4008fb76e11eba4cbb62b8617ff242d316465fa2247dabfd2dcb9",
"i686-unknown-linux-gnu-0.14.11": "9051f2529d36e38b58b03b6e605d77f62b6378d5afe70eba692f9a214794b273",
"i686-unknown-linux-musl-0.14.11": "3f94ba805fd14bd8c088b710c950cd89d9968294fa3cff68a618e50ad9dea73d",
"powerpc64-unknown-linux-gnu-0.14.11": "eb69c9da0285717f39ed25f666a0860d7d6a50359a1de0bf76fba6f83d59e1ea",
"powerpc64le-unknown-linux-gnu-0.14.11": "001b43b7558d32f320fa775c74af0035952a724d323bb5204b6f83017297c6db",
"riscv64gc-unknown-linux-gnu-0.14.11": "8901e1a36846c59a94ef468808e4a1af58f74e9c2830f40e045f5f9e70d6867c",
"s390x-unknown-linux-gnu-0.14.11": "d29ba2740b7735ab20663225dd420acfb0797b29358d902afc7b87ee0f1f4b08",
"x86_64-apple-darwin-0.14.11": "b301d1c04facba1004d180c8fd9ae36d868b780900682c97ecf324015c75f0b3",
"x86_64-pc-windows-msvc-0.14.11": "e254f04e054e095215b8f74d5cdb7288f2d3f226bdc42b35cd44751fc7a55b2d",
"x86_64-unknown-linux-gnu-0.14.11": "b98f19bb2cc99e0ea4de1625fbc43661902a1db45ff49a72e7f4a58cfedaabfb",
"x86_64-unknown-linux-musl-0.14.11": "8e8b7a3f791e0faf3a1728d808133f6f9bd5c1422eccb9956e7e7376ff5404b8",
"aarch64-apple-darwin-0.14.10": "dd0f3ec914604d802658ae0d271ff9d767c117d1702a44222170dd2ffbad8d2c",
"aarch64-pc-windows-msvc-0.14.10": "a5b5bb9525a47dfff0ce8ad31546549b31dc1184f54027517838b1bbc9d81129",
"aarch64-unknown-linux-gnu-0.14.10": "f6c8735bf175d449d79151f6bfe84251770ca6032e86bea0d327bc3789179027",
"aarch64-unknown-linux-musl-0.14.10": "0888883f71199ca3af3569052d0cc1aee8b316390ffe75bc19f9a8047ffd0158",
"arm-unknown-linux-musleabihf-0.14.10": "5102cff6cbed54953d6cd9c9d920a9dd6fbe283e047136a6e9bc732ae14a5cf3",
"armv7-unknown-linux-gnueabihf-0.14.10": "94a3ad56d89c39ed47d4e864a18ea31baf989384840d5e182c3f94d5f35a4c93",
"armv7-unknown-linux-musleabihf-0.14.10": "2a051d384d5d5fa84521f843424454620ff5d22580f90cd882512373c36933b0",
"i686-pc-windows-msvc-0.14.10": "29e7519db7afed48e3729d16289a467acae7c6c34113d50bdd1e7e1077e1c7b5",
"i686-unknown-linux-gnu-0.14.10": "56f98f880933907b809de3180e866e72342971024445144c409a6d0a46237c1a",
"i686-unknown-linux-musl-0.14.10": "0cce7104a85d2891a9f62d9ee2decb942b91888d6156e4e858c1cb350a71a57c",
"powerpc64-unknown-linux-gnu-0.14.10": "7685d9de6c1b139fd767f70310598a79d5b6c613d744a366b2fe99e420d19c32",
"powerpc64le-unknown-linux-gnu-0.14.10": "620476793ed106c1f6bfa15e3b0d7834a55cad048a853d63f0c118b9fb7c7337",
"riscv64gc-unknown-linux-gnu-0.14.10": "922872274af2b681381b46a242e77fa9bf427fa745313e818b89a6246be81d77",
"s390x-unknown-linux-gnu-0.14.10": "da9cf8172369821dfaabfc8861238f565fdbcec1aebe897d900020ce561572de",
"x86_64-apple-darwin-0.14.10": "7d5af84e84a189b49ac235d7970d35588cbed0d087f4237c96e5ac3c392bc6fb",
"x86_64-pc-windows-msvc-0.14.10": "9c3340d322fff7a6dc132b8783ba734f5eaf4c46f7dd8bc828abdf850b3bebe1",
"x86_64-unknown-linux-gnu-0.14.10": "4695e6375b1fa2b9c5f839218d695d8e701cfccb15d3f622b6a6feedb086bffb",
"x86_64-unknown-linux-musl-0.14.10": "e1fac6f2705057f48f3d000694d0f41c95b06e738cf4825315c670f3b9d24933",
"aarch64-apple-darwin-0.14.9": "ea132e6d6af23dbcf21c81d7fd8c5a94ccf16b1fb36a8bc60da971e339301f10",
"aarch64-pc-windows-msvc-0.14.9": "dcc2c8a687b9682ab345418ba2793bc8594ae1f2bdb78af520b363e17cf2e271",
"aarch64-unknown-linux-gnu-0.14.9": "423a07140aca7d007d63a42ff9322c0c2017dfe0ed23efe8bcbc36ed21d1cfd7",
"aarch64-unknown-linux-musl-0.14.9": "9bdedf2e8d6398e193c2b2feccb2b4c9f8d37a6dc87cc0b587340a60e87d14e2",
"arm-unknown-linux-musleabihf-0.14.9": "5d04fe5dac3a625c576f48d441238896d164128ec5ba64c9964e5d9502e92b1e",
"armv7-unknown-linux-gnueabihf-0.14.9": "1404c9aace1216ad5cf8b977be5b967ab507f7245eec7bc9bb3fab80010a7769",
"armv7-unknown-linux-musleabihf-0.14.9": "e90707e761fb9ce528c3728e5e12ddbadd60ad45dbacfb1ab9dff4b308f10ae3",
"i686-pc-windows-msvc-0.14.9": "a7e19280ec509dbefdffd097e29f0ca411cca7196a7272198d022d22d5fad6c3",
"i686-unknown-linux-gnu-0.14.9": "33494807d987983f1a91e486cc6a028364aa3291c96c3784620f75a3f477411a",
"i686-unknown-linux-musl-0.14.9": "816e6fdefd899f2dcca7261dc6575ecac82907b94238569cbfef2b1639680865",
"powerpc64-unknown-linux-gnu-0.14.9": "6786baf11e8b59c29d19c0da127451606837243472797aa5084eecccd9a74445",
"powerpc64le-unknown-linux-gnu-0.14.9": "ba7219c9dce6f2d931d9851ac9623923b3fc5dafeb08c640885c7e33a6074775",
"riscv64gc-unknown-linux-gnu-0.14.9": "8f46292b808c5ce0d72d1a4428e189a641d9f41b3af0b077537ddb7631f48b8d",
"s390x-unknown-linux-gnu-0.14.9": "d795afb56c7f4ba55a7a08eda03bce1fd8b32d71c9cf1741218ac6b5578d8b84",
"x86_64-apple-darwin-0.14.9": "ce980eb4b44a84cbf278686f8cf71a21b353888b29472ca269ffe385ce4f2351",
"x86_64-pc-windows-msvc-0.14.9": "98727a845f01782b78efe1a3f0913aa9ec76c9a24e09aca89e26b3b684ca86a0",
"x86_64-unknown-linux-gnu-0.14.9": "b012ebe5dee8d8c125f4d553fccda058249fbb1c914c17175c6edda14a1fb7da",
"x86_64-unknown-linux-musl-0.14.9": "3bdbdb32f95bcf2c5bc45502a2050f30706f1c205fa0087ee3d4c688f67854fc",
"aarch64-apple-darwin-0.14.8": "4efc019832a6b9225f650ee256d31b2e875021cae662963d533c78b5cf865f52",
"aarch64-pc-windows-msvc-0.14.8": "965217e69f6d43e4df25abeec7b51a5ea014dbec219b9b2866ca37dcd312405e",
"aarch64-unknown-linux-gnu-0.14.8": "9bbce62639bb30abf76202f2ec32c4234498de3c93c21b4c32c99d51c802cc41",
"aarch64-unknown-linux-musl-0.14.8": "0b3464f54fa56f514c29e92bcf05867b914ad6c246e2ddbe4cce5c0700f2a3d9",
"arm-unknown-linux-musleabihf-0.14.8": "5496ae4d581e7f6cdf509f56d33830056d1f8a432aa489bf9e40fc9754fbf1fa",
"armv7-unknown-linux-gnueabihf-0.14.8": "203de1734ffddac18f02e3756ba0c02bd1770665031aba617ccf488ccfe78b25",
"armv7-unknown-linux-musleabihf-0.14.8": "5e424ba3ebc90306f73e05914244245b66b27c3a44dcdf9029d97bfc56131491",
"i686-pc-windows-msvc-0.14.8": "2bdff511119eb9d94e5a240c15bef668c43b0640e61c549b32242d7b04efd062",
"i686-unknown-linux-gnu-0.14.8": "8f0c15e9518d1b9c0423986d3d1045ed5c4005e1037589a6772eee724ec3ba02",
"i686-unknown-linux-musl-0.14.8": "55326d64201ff99dc96e93b23de951c2656825089ee581fc8aee099140d4d310",
"powerpc64-unknown-linux-gnu-0.14.8": "52ffb3434ca8ada1d2703df0c4b929758444c24d9a47a8608a0775ddf6dbfa6c",
"powerpc64le-unknown-linux-gnu-0.14.8": "3a8808f7b02f37e649e1cc1145ad3d2e4d23b4154637525480c7f6536f4152b9",
"riscv64gc-unknown-linux-gnu-0.14.8": "8e6f1f660c1145bfe1b13fe41b7e6f4e829be3351bd536acbd41f91478d8932c",
"s390x-unknown-linux-gnu-0.14.8": "f3ed19ba06face77e21c682846a4e5b3d4d9bfe5132eea86e30a84522b70d2b3",
"x86_64-apple-darwin-0.14.8": "c53af0ba3cbc5e9e8f7768d28a7ff2d0795843e39302891093227bc6df343e94",
"x86_64-pc-windows-msvc-0.14.8": "a837e98f5e6a21222a896f60521f563aea2c686a07cad17da9f5b5f2c4e04f8a",
"x86_64-unknown-linux-gnu-0.14.8": "dce933cd68e3ca69c64c277ce6671dcdee7adeeaa6ac5a15047a4c973b30741f",
"x86_64-unknown-linux-musl-0.14.8": "0f5496a3d2413b3cb85bbf9e4a6f95b5db127ac10989ecb3d8c0c0a0a74a892b",
"aarch64-apple-darwin-0.14.7": "24631da81fe9ce5f4112e8caeb71957e81682e752a563f0a50715735f923e3c4",
"aarch64-pc-windows-msvc-0.14.7": "24ca141d57fcd5bd303ca51af002cb9a815f072d9076b40ec2813835d46c4a82",
"aarch64-unknown-linux-gnu-0.14.7": "8cc84635155dfc11acca297af25ed6c8a30e36146729a90df9e7d348a8fc0a4d",
"aarch64-unknown-linux-musl-0.14.7": "8d429dbc2c308377c33874dc71d4c2388728f0d01c0a5869d2c878d21a6ced87",
"arm-unknown-linux-musleabihf-0.14.7": "3cf1d9fdfd58a113b0b629e0ef2d247bbadbc8deec25724d6dc7d6f6ca7e7304",
"armv7-unknown-linux-gnueabihf-0.14.7": "058f52b31c88056291b0e917ea909eea036570dcdee32af1ce62eacff98c4e2a",
"armv7-unknown-linux-musleabihf-0.14.7": "9dddf78485ba0b5da8d8a73b24332ecf759a4de95ca5700c5141067683b5b615",
"i686-pc-windows-msvc-0.14.7": "46d16810e1a0e7efd5c25efc60b719225c3a8b8a7fb662b61f293eeb62ccafdb",
"i686-unknown-linux-gnu-0.14.7": "29242e501fea264ef4cb03164d9c375e426fad5c298412f64a4d50bc9ea19bc1",
"i686-unknown-linux-musl-0.14.7": "5b1eeea3f27745e7e68b19bd214267aa653ef64c62c25ef4cd8bb57af8477171",
"powerpc64-unknown-linux-gnu-0.14.7": "3cc47bf9943a46839d847746ccae59a3147982c5bf93bdc786fa5279d7d28681",
"powerpc64le-unknown-linux-gnu-0.14.7": "1dabc7d0251f6f11ade20620538daeed1c4d27223576a04ddb2a87adfed2ca11",
"riscv64gc-unknown-linux-gnu-0.14.7": "075232dfa5a03ef399d183879848cdb5d71485639c2a07fc62a27f4d4a68af3d",
"s390x-unknown-linux-gnu-0.14.7": "a83cb05567dd4bb59fa8fd36b8337b21d475dd6f82fe0600a2364f1de6c295c3",
"x86_64-apple-darwin-0.14.7": "c3035811c5354d923f3d7fd6320cfb23de30600f1eb86aa1518bac27c3d7fffd",
"x86_64-pc-windows-msvc-0.14.7": "9a54b82e12574ea068e0914cdb1398993cbf78338c0799b6f9003a783fec779b",
"x86_64-unknown-linux-gnu-0.14.7": "8a545d346b3f6f979574df96b4fb2a983f2568fe200f1c1f690bd2cbdce5ea51",
"x86_64-unknown-linux-musl-0.14.7": "0f6cd59aa2b266758f1083c73f1b8303e3aedde0d953f0e79777faf174d8104f",
"aarch64-apple-darwin-0.14.6": "b2ace677f51d0f2b91ca27d312ac8b069658502049015f4891c16f8864136282",
"aarch64-pc-windows-msvc-0.14.6": "90518b6d16fe8b705c891dcdd77b20ab41da5e042b085aced7bbc647f6f2fdcd",
"aarch64-unknown-linux-gnu-0.14.6": "bf3d592d5f879f072520afaa9c4a76a3ad0f6cf4b7bf7e27fb5d0e728e863f14",
"aarch64-unknown-linux-musl-0.14.6": "4d3c113e59c5fbc31f1def566cebf28732bb45ff6b83df8e142bc1c055b3afa3",
"arm-unknown-linux-musleabihf-0.14.6": "d0a3ed0a773f8e7edc44d63644b952d446dba771fdbb3eefd02853c323373f90",
"armv7-unknown-linux-gnueabihf-0.14.6": "d6b71f6a951963f8dd0f2e099206b0aabf95d9bb49451a607da3e5823b800596",
"armv7-unknown-linux-musleabihf-0.14.6": "a048f1e9a97afe8ac2a63785f5733d5736b9d6e6767b4d5b6434916d38f888e1",
"i686-pc-windows-msvc-0.14.6": "c7b76311939f0ed7fbf4fe1be7c6c96c05b26a73e500650dff2586cbbe5c0b45",
"i686-unknown-linux-gnu-0.14.6": "fe3fbd9227a7f2c1277306c31cf7627ab1dc61c25fa30854d66d8db138a74872",
"i686-unknown-linux-musl-0.14.6": "5a184f4c1e6a665f56f980464dd87eeb75f32e37bf67d195efdaa41bba634a5d",
"powerpc64-unknown-linux-gnu-0.14.6": "fe54fda27408241e9bee7bc5c9740a9a47a87a073ecd3d9bb166c32329c33958",
"powerpc64le-unknown-linux-gnu-0.14.6": "d4296a0f41ed25cbf56a04b04bda7f3661b8be9d3220b89cc342e6cb4e6ee259",
"riscv64gc-unknown-linux-gnu-0.14.6": "e06b714ebb8846421ed6b998beac66a7fd1fad09f7bee89e4e6b671c6e8c3fc3",
"s390x-unknown-linux-gnu-0.14.6": "2ba3e5b6e66d9ba60d6fac9b699f77dd79402c872fc244259db7fc7815180b3d",
"x86_64-apple-darwin-0.14.6": "efe45a6defcf4f1b6de87d56ce94635f53b00f88ddc2fcb8e25e2c4e3a61261c",
"x86_64-pc-windows-msvc-0.14.6": "3a8bb3499484c7f9e86060c89d0e61c47dac7f9fb4d7fe46bc59dca400b322c9",
"x86_64-unknown-linux-gnu-0.14.6": "b0ee141ada4749c7ee16ba21465b4ef035455b495aa3ab951bbcb9bde9f4d001",
"x86_64-unknown-linux-musl-0.14.6": "7ef1743875c7c469cc1c4bb6da6a9bbff3f3a7b89a75632d6cd2944ede470a5e",
"aarch64-apple-darwin-0.14.5": "c07616663ac63792c16269d6798a47fb1f45b29997706178d60e90da698a9970",
"aarch64-pc-windows-msvc-0.14.5": "c09ff1cdaafd6cc3733586dc517bfd3e0d0ddc39360c90343ab7b610c8ade130",
"aarch64-unknown-linux-gnu-0.14.5": "da5692a609e728dd1773aebf087113c5c3561aafdfa9fe574b30de9438c60a23",
"aarch64-unknown-linux-musl-0.14.5": "ebef9d7119119e67b1065a5a35128148898e1581037e7d68c3aa9223983af0a4",
"arm-unknown-linux-musleabihf-0.14.5": "00c937e44474d21878bdb2e9e214d74005fddc8c43a4c76d8e71a9085c7cc6af",
"armv7-unknown-linux-gnueabihf-0.14.5": "aa54fcaba5d7029180139491213f504e5789b36e0017c0a67aff7b6ec0c04c45",
"armv7-unknown-linux-musleabihf-0.14.5": "5e06c211d5dc4e85eeafd29e87af4aed690a41b02f9296537d4d4ebe62fded9a",
"i686-pc-windows-msvc-0.14.5": "6b54cf61dad3276995d157d000f501917f1aa54735391150bf93282329253c92",
"i686-unknown-linux-gnu-0.14.5": "81aadc05c630e7e7c4ca68c510f5ce462e0645fa03650ca3f844cb4d9b2efc27",
"i686-unknown-linux-musl-0.14.5": "556c63188c8bc7e253a4eaef8727857a808a81af6fef02f76f27a71e800554a0",
"powerpc64-unknown-linux-gnu-0.14.5": "df85081b5e776d934188f9eb67a1d2d17dba1e986f7e76668ffeed6e541858d1",
"powerpc64le-unknown-linux-gnu-0.14.5": "4a02aa69a73bc5d9e579b08f5081e0fec412e353bacafa6b4a0705d89b3486e6",
"riscv64gc-unknown-linux-gnu-0.14.5": "a1a20ddca6e776a8f38d533da4aa1eeb543ecbfa08813c482e3cb7d5ef0c39fc",
"s390x-unknown-linux-gnu-0.14.5": "242bf290de417e8c9e8ca5c844be933e611cca3f3b301dc8537f72d051ceb3b9",
"x86_64-apple-darwin-0.14.5": "d7285770c5098be00c9b4ff099d6ef7f8b2a54b4019c9507b628ee9f0d404c06",
"x86_64-pc-windows-msvc-0.14.5": "9b998bf1a790a18b829fab3368ee7404a8f1f2cec2acb650aa1fd1b74962d023",
"x86_64-unknown-linux-gnu-0.14.5": "5bc52346f81098e42beecd622f49c4336a5361eb38b7b51d466b0a9647e99e33",
"x86_64-unknown-linux-musl-0.14.5": "69ddecf374a4f53eeda238399614ed6f92c5e75fe04436c604fb78435d5658eb",
"aarch64-apple-darwin-0.14.4": "ab26cd2b03d5b2ec42dc7ac1886a29055eb2003aa2db14b26c7091c7cd6b4c68",
"aarch64-pc-windows-msvc-0.14.4": "270773b34836e5b546d3ec9fe3b6cab4057881eff69828566f230baffff7634a",
"aarch64-unknown-linux-gnu-0.14.4": "8bf03ef4bb8ce42321ea0e59a505739b29b18d85b1d4f220736e242248b7da31",
"aarch64-unknown-linux-musl-0.14.4": "c77b72e565e9044eddce02e71f9214edea045047b786bb2bc973a6d8f94fb13e",
"arm-unknown-linux-musleabihf-0.14.4": "5211b338bf1c48faa2fc045bd68c56b50e1e3d898f2255c39a3a7040033738f1",
"armv7-unknown-linux-gnueabihf-0.14.4": "62e05c9a4571ea1aca80db377b4a11dd2325100db9ca0d7db16b61b87cb3d0b5",
"armv7-unknown-linux-musleabihf-0.14.4": "b20725ed5be925b58120172b2395bdbea9857bc562c3a7a7e47a4d9281bafb7f",
"i686-pc-windows-msvc-0.14.4": "bbe517649a5c6134b424b3065db7b5dcfaed72c2f5e848ec87cb2b33be7a133f",
"i686-unknown-linux-gnu-0.14.4": "a68939e63f7b384351172ff1535d37e73ecf81a94b0c89f369f3f41aabcccede",
"i686-unknown-linux-musl-0.14.4": "ff05a300bbb06211ec9cc43daec05da197ed116b5f6a5ea9ac8fc80fc00df39f",
"powerpc64-unknown-linux-gnu-0.14.4": "394eae2ad3485eb3530db3e9b51feacbf0b03e63ec8e93f2134a137c59da4abe",
"powerpc64le-unknown-linux-gnu-0.14.4": "b12b41763fa3c1068d2378669fa2740b11e0dd3dea3f667f732241a25fb06c9f",
"riscv64gc-unknown-linux-gnu-0.14.4": "c6385274d7a3b1d0c7ed05b36101faf2c7206e8adc0c7c107d32fc8e5d57628c",
"s390x-unknown-linux-gnu-0.14.4": "dcbf1dce38298dccfea7edffb1ea237ab2ccf2ea5dbae6d5b2dc4fe88177b094",
"x86_64-apple-darwin-0.14.4": "041b9429400bfc3aca8402940fe6fa0ec33f9d79e8f50fbfb3063f70b4327fa3",
"x86_64-pc-windows-msvc-0.14.4": "5541af69b1f342d843f8fca6218bd0d5d9064e987d14405a2abf60ce94c615a4",
"x86_64-unknown-linux-gnu-0.14.4": "c9120e68e358eb0f850123537afe18945f9095e9f17967944fd23585fc88bb0b",
"x86_64-unknown-linux-musl-0.14.4": "dcb5b42fd364c9e837b6800886564a891d023c8b87c967224351399cb1cda154",
"aarch64-apple-darwin-0.14.3": "fc4c2c153656bc4082fb6c928fbd6867d5eb932240b663b329365f3f1821fc82",
"aarch64-pc-windows-msvc-0.14.3": "b7ed5d2006b1c43559e78d90e65f2fa1982bec3976de74978485660fcdd67548",
"aarch64-unknown-linux-gnu-0.14.3": "daa9edc586b669079fbe204bf5f5b48ee05c5dac862d2daf5ad72d3c2777834b",
"aarch64-unknown-linux-musl-0.14.3": "571058fe7e3381ad54bec8b3d9d127013e332d822b35978b503722147aa3b9cf",
"arm-unknown-linux-musleabihf-0.14.3": "f5e9b79cea63116ad582ffb514a61a506978762b67859b9e9e9cdee4b2ad065d",
"armv7-unknown-linux-gnueabihf-0.14.3": "07094c107682c58260d652708a0c8b2f3d38bdffd5e7ec9a81785e665154a137",
"armv7-unknown-linux-musleabihf-0.14.3": "edfd2491e25383de77f60aafcbd5451350b2cb6f9af38b6cf5a2e725193333cd",
"i686-pc-windows-msvc-0.14.3": "f46525c0684a220c063c1c1f8d516c8cccab8ec9f62417e17e02cd4c1a138417",
"i686-unknown-linux-gnu-0.14.3": "c7180e275ccaa97eae1528a15a08828cd9aaa15b57d3828f8722b0edd347046d",
"i686-unknown-linux-musl-0.14.3": "60d1db56b1b4064b00f349b5fc8e11f2e63b8fa3bce4679f9c9da91356d6c3f6",
"powerpc64-unknown-linux-gnu-0.14.3": "b9bf7191d023fcdd938e51fa53b63226897a23896f82057fe32fde9df10b1649",
"powerpc64le-unknown-linux-gnu-0.14.3": "c1f5e497fe183dc1e0b6bb984573a0703182b68ac07587add1cbc370957ebd20",
"riscv64gc-unknown-linux-gnu-0.14.3": "909e92469524b80520af17537df55f245d6ba018928bc486fd8418e9983b539f",
"s390x-unknown-linux-gnu-0.14.3": "d8c56807e9827f391e1266bd19e0235fa470a0620cf166975365862e5bf9e908",
"x86_64-apple-darwin-0.14.3": "076e88da3dcb38d3fef61daccc759bf29b605a490143ae707c0e067ebf8d7050",
"x86_64-pc-windows-msvc-0.14.3": "ccc1bd362cca52a7fb7f9ee2cec7317c139ccb86e0964a5c1d4b14efbf2118ff",
"x86_64-unknown-linux-gnu-0.14.3": "cb8a88912aa91a1864ad662c24df4514699ddfcbc52e684218aaf5ac57d7de0d",
"x86_64-unknown-linux-musl-0.14.3": "58fd05427420df7b7b51bc6bbd5a430f38d2dfd63c74660f27625a4632f12532",
"aarch64-apple-darwin-0.14.2": "33225f67ce61188fce91b801ab50a4028f8b0d66abbf81810841dd7d42371e38",
"aarch64-pc-windows-msvc-0.14.2": "4fb68c66c719b337c2364aeb8210326a28b8ae046ef9a9c90407d473264515dd",
"aarch64-unknown-linux-gnu-0.14.2": "a907d6a13120679b7194eb61beace09103f04b90e32cf7c2ac11979e6f618e35",
"aarch64-unknown-linux-musl-0.14.2": "e323e9716661c9e18152aefe62e3fada497c10c9b3ef3095359c31b4df4f866a",
"arm-unknown-linux-musleabihf-0.14.2": "2b3ccfd36718b29e0f5d1dcc10540b61205c72ee1c6a43331e6a97f2a17f12d0",
"armv7-unknown-linux-gnueabihf-0.14.2": "5539a66c2723670dbf54eadf615e106aa038decbc701b9d47f7ed535ac677e1d",
"armv7-unknown-linux-musleabihf-0.14.2": "c59be0daa3144ba317c88dd6cb3af68cff0f8dfbf2f495bebfb5b630d6f4c7cd",
"i686-pc-windows-msvc-0.14.2": "125e2010b28ccb01ed2a4596e3db8d8dc0a46ccba2ee08e6038cc56ebbfbcb96",
"i686-unknown-linux-gnu-0.14.2": "e2accde14cb371ca1b60935028c72138390f552cd77fc8c52a75f28c68eaa963",
"i686-unknown-linux-musl-0.14.2": "d11f67f949e909412c523edcc1944c16dfecde49ed3709bca40631e371300da1",
"powerpc64-unknown-linux-gnu-0.14.2": "99cc0f2cf83a7f82bb4e0db9ff1de8bcc5bf966054c0c82d25e189ee4565b0d5",
"powerpc64le-unknown-linux-gnu-0.14.2": "81ac087a458bcaac7905c9afe84ef58061394a71264e8dd115889be0bc96fc6e",
"riscv64gc-unknown-linux-gnu-0.14.2": "7917eb80fbae72040ad199f634361ce6001bc6225c165caa09c6d983c90692b0",
"s390x-unknown-linux-gnu-0.14.2": "e24bfabe70535ffeedbba74ff6ecdf6c6bb09c5d9bf2c6c902e5540b569d6236",
"x86_64-apple-darwin-0.14.2": "f119057618599e8983bdeed64e949af54f67d7a62464d11de0ba1237619a9990",
"x86_64-pc-windows-msvc-0.14.2": "0a1160f45263cc847acd4b42392bf0484c9420806eeb7f776e1384fb557aeade",
"x86_64-unknown-linux-gnu-0.14.2": "b4457ef6c130165655e0fb91081dbef09011ec41955115aaa22c94f7655c97c2",
"x86_64-unknown-linux-musl-0.14.2": "e5e177a829b370376abb6a1dc9edc8c59ac519ebe64b1366b65e2952fa524a8d",
"aarch64-apple-darwin-0.14.1": "ee12f441b4c14eff354784a52f8a16767573bd6285627cad2ade04551e8a678b",
"aarch64-pc-windows-msvc-0.14.1": "3bd0b34cc645faaf88b4010a639d9b0ec6c313359774ad7e48daaef4ddb3c4f7",
"aarch64-unknown-linux-gnu-0.14.1": "8203922d5f55a04089005184942f2f449f9736a06e96854230ba5991bb91ee9a",
"aarch64-unknown-linux-musl-0.14.1": "ddfc9df5c879a1984fef4e29838e46fa8e979adc3fdab5967f096363427e8790",
"arm-unknown-linux-musleabihf-0.14.1": "a29be1acc5f29ee8cb5a5add223a7ed07e8ffd0f9a78219e115e57041c63b416",
"armv7-unknown-linux-gnueabihf-0.14.1": "dd8ead33fc3158618a29f02d76fd7ff4f6914272b5d94a65e348b8b8c0753d78",
"armv7-unknown-linux-musleabihf-0.14.1": "16d79262e9fc98ceef167577a391d54d9c8a2d8fe90de22266f456bf4644f7e5",
"i686-pc-windows-msvc-0.14.1": "ffe525c5e641f3bef31d9bc6e1e3585f9f796dda1254c15e5a18ef51a91917c3",
"i686-unknown-linux-gnu-0.14.1": "37f10652706cdf1f107c620970bf37591b0be44111614101509f56e596f866b3",
"i686-unknown-linux-musl-0.14.1": "e39c79642ec4e3d95d31a0ae77fb648946f2a639cb3cbf876c0f5e1e2571e94e",
"powerpc64-unknown-linux-gnu-0.14.1": "1ec026aef1c670715d5c197bbf18b4edd81e140fbecee51ed169e05b042c6045",
"powerpc64le-unknown-linux-gnu-0.14.1": "193d66f5ed6e21a46b244118c983ab91628ed65ae542f7345f8e37a8c555bff0",
"riscv64gc-unknown-linux-gnu-0.14.1": "4cbea006f37927abac8c32575212f982b86aaa4f73a32983e4a8934320ef7e9c",
"s390x-unknown-linux-gnu-0.14.1": "5cd7f6e6e2de3b03ada4821de444e92bb87ce5c57981c1d8ba8128dc62f02668",
"x86_64-apple-darwin-0.14.1": "7fda94bd7fc6114eecb67b858a8c93f1b4aa658aa1f5e887b37a2b95bf6f26a7",
"x86_64-pc-windows-msvc-0.14.1": "ab0bc1876a16e1afa4177fe9f58d568fbe85921efb253395bd03d01e1e2c467d",
"x86_64-unknown-linux-gnu-0.14.1": "8798f5892db7dc70a3250f89d3ef613f87f1fa5fdb4242921ee31427daf78e87",
"x86_64-unknown-linux-musl-0.14.1": "ec5b8eb318ff9e2412988420eb78f965aca02e9f67df34eeea7609e0c5a0fb7f",
"aarch64-apple-darwin-0.14.0": "0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec", "aarch64-apple-darwin-0.14.0": "0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec",
"aarch64-pc-windows-msvc-0.14.0": "a882d2ec2235c13f63453fde682775d2e1f8a44ccfd1af9e031255b051e30e70", "aarch64-pc-windows-msvc-0.14.0": "a882d2ec2235c13f63453fde682775d2e1f8a44ccfd1af9e031255b051e30e70",
"aarch64-unknown-linux-gnu-0.14.0": "60fc3b464a723456ba1bc8cd91d29806753c885f72e26ac67b718cee6b35aaca", "aarch64-unknown-linux-gnu-0.14.0": "60fc3b464a723456ba1bc8cd91d29806753c885f72e26ac67b718cee6b35aaca",
@@ -31080,6 +30846,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.updateChecksums = updateChecksums; exports.updateChecksums = updateChecksums;
const node_fs_1 = __nccwpck_require__(3024); const node_fs_1 = __nccwpck_require__(3024);
const tc = __importStar(__nccwpck_require__(3472)); const tc = __importStar(__nccwpck_require__(3472));
const retry_1 = __nccwpck_require__(5931);
const known_checksums_1 = __nccwpck_require__(2764); const known_checksums_1 = __nccwpck_require__(2764);
async function updateChecksums(filePath, downloadUrls) { async function updateChecksums(filePath, downloadUrls) {
await node_fs_1.promises.rm(filePath); await node_fs_1.promises.rm(filePath);
@@ -31129,9 +30896,22 @@ async function getOrDownloadChecksum(key, downloadUrl) {
return checksum; return checksum;
} }
async function downloadAssetContent(downloadUrl) { async function downloadAssetContent(downloadUrl) {
return await (0, retry_1.withRetry)(async () => {
try {
const downloadPath = await tc.downloadTool(downloadUrl); const downloadPath = await tc.downloadTool(downloadUrl);
return await node_fs_1.promises.readFile(downloadPath, "utf8"); return await node_fs_1.promises.readFile(downloadPath, "utf8");
} }
catch (error) {
const err = error;
if ((0, retry_1.isRetryableError)(err)) {
throw new retry_1.RetryableError(`Failed to download checksum file: ${err.message}`, err);
}
else {
throw new retry_1.NonRetryableError(`Failed to download checksum file: ${err.message}`, err);
}
}
}, { maxRetries: 3, timeoutMs: 30000 }, "download checksum file");
}
/***/ }), /***/ }),
@@ -31182,15 +30962,29 @@ const plugin_rest_endpoint_methods_1 = __nccwpck_require__(9210);
const semver = __importStar(__nccwpck_require__(9318)); const semver = __importStar(__nccwpck_require__(9318));
const update_known_checksums_1 = __nccwpck_require__(6182); const update_known_checksums_1 = __nccwpck_require__(6182);
const constants_1 = __nccwpck_require__(6156); const constants_1 = __nccwpck_require__(6156);
const retry_1 = __nccwpck_require__(5931);
const PaginatingOctokit = core_1.Octokit.plugin(plugin_paginate_rest_1.paginateRest, plugin_rest_endpoint_methods_1.restEndpointMethods); const PaginatingOctokit = core_1.Octokit.plugin(plugin_paginate_rest_1.paginateRest, plugin_rest_endpoint_methods_1.restEndpointMethods);
async function run() { async function run() {
const checksumFilePath = process.argv.slice(2)[0]; const checksumFilePath = process.argv.slice(2)[0];
const github_token = process.argv.slice(2)[1]; const github_token = process.argv.slice(2)[1];
const response = await (0, retry_1.withRetry)(async () => {
try {
const octokit = new PaginatingOctokit({ auth: github_token }); const octokit = new PaginatingOctokit({ auth: github_token });
const response = await octokit.paginate(octokit.rest.repos.listReleases, { return await octokit.paginate(octokit.rest.repos.listReleases, {
owner: constants_1.OWNER, owner: constants_1.OWNER,
repo: constants_1.REPO, repo: constants_1.REPO,
}); });
}
catch (error) {
const err = error;
if ((0, retry_1.isRetryableError)(err)) {
throw new retry_1.RetryableError(`Failed to list releases for checksum update: ${err.message}`, err);
}
else {
throw new retry_1.NonRetryableError(`Failed to list releases for checksum update: ${err.message}`, err);
}
}
}, { maxRetries: 3, timeoutMs: 60000 }, "list releases for checksum update");
const downloadUrls = response.flatMap((release) => release.assets const downloadUrls = response.flatMap((release) => release.assets
.filter((asset) => asset.name.endsWith(".sha256")) .filter((asset) => asset.name.endsWith(".sha256"))
.map((asset) => asset.browser_download_url)); .map((asset) => asset.browser_download_url));
@@ -31217,6 +31011,175 @@ exports.OWNER = "astral-sh";
exports.TOOL_CACHE_NAME = "ruff"; exports.TOOL_CACHE_NAME = "ruff";
/***/ }),
/***/ 5931:
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.NonRetryableError = exports.RetryableError = exports.DEFAULT_RETRY_OPTIONS = void 0;
exports.withRetry = withRetry;
exports.withTimeout = withTimeout;
exports.isRetryableError = isRetryableError;
exports.wrapWithRetryLogic = wrapWithRetryLogic;
const core = __importStar(__nccwpck_require__(7484));
exports.DEFAULT_RETRY_OPTIONS = {
backoffMultiplier: 2,
initialDelayMs: 1000,
maxDelayMs: 10000,
maxRetries: 3,
timeoutMs: 30000, // 30 second timeout
};
class RetryableError extends Error {
cause;
constructor(message, cause) {
super(message);
this.cause = cause;
this.name = "RetryableError";
}
}
exports.RetryableError = RetryableError;
class NonRetryableError extends Error {
cause;
constructor(message, cause) {
super(message);
this.cause = cause;
this.name = "NonRetryableError";
}
}
exports.NonRetryableError = NonRetryableError;
async function withRetry(operation, options = {}, operationName = "operation") {
const opts = { ...exports.DEFAULT_RETRY_OPTIONS, ...options };
let lastError;
for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
try {
if (attempt > 0) {
const delay = Math.min(opts.initialDelayMs * opts.backoffMultiplier ** (attempt - 1), opts.maxDelayMs);
core.info(`Retrying ${operationName} (attempt ${attempt + 1}/${opts.maxRetries + 1}) after ${delay}ms delay...`);
await sleep(delay);
}
// Wrap operation with timeout if specified
if (opts.timeoutMs) {
return await withTimeout(operation(), opts.timeoutMs, operationName);
}
else {
return await operation();
}
}
catch (error) {
lastError = error;
// Don't retry on non-retryable errors
if (lastError instanceof NonRetryableError) {
core.debug(`Non-retryable error in ${operationName}: ${lastError.message}`);
throw lastError.cause || lastError;
}
// Log the error for debugging
core.debug(`Attempt ${attempt + 1} failed for ${operationName}: ${lastError.message}`);
// If this was the last attempt, throw the error
if (attempt === opts.maxRetries) {
core.error(`${operationName} failed after ${opts.maxRetries + 1} attempts. Last error: ${lastError.message}`);
throw lastError;
}
}
}
throw lastError || new Error(`${operationName} failed for unknown reason`);
}
async function withTimeout(promise, timeoutMs, operationName = "operation") {
const timeoutPromise = new Promise((_, reject) => {
setTimeout(() => {
reject(new RetryableError(`${operationName} timed out after ${timeoutMs}ms`));
}, timeoutMs);
});
return Promise.race([promise, timeoutPromise]);
}
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
function isRetryableError(error) {
const message = error.message.toLowerCase();
// Network-related errors that should be retried
const retryableMessages = [
"connect timeout",
"connection timeout",
"timeout",
"econnreset",
"econnrefused",
"enotfound",
"network error",
"request timeout",
"socket timeout",
"fetch failed",
"connect etimedout",
];
// HTTP status codes that should be retried
const retryableStatusCodes = [408, 429, 500, 502, 503, 504];
// Check for retryable messages
if (retryableMessages.some((msg) => message.includes(msg))) {
return true;
}
// Check for HTTP status codes in error message
const statusMatch = message.match(/status.*?(\d{3})/);
if (statusMatch) {
const statusCode = parseInt(statusMatch[1], 10);
if (retryableStatusCodes.includes(statusCode)) {
return true;
}
}
return false;
}
function wrapWithRetryLogic(operation, operationName, options = {}) {
return async () => {
try {
return await withRetry(operation, options, operationName);
}
catch (error) {
const err = error;
if (isRetryableError(err)) {
throw new RetryableError(`${operationName} failed: ${err.message}`, err);
}
else {
throw new NonRetryableError(`${operationName} failed: ${err.message}`, err);
}
}
};
}
/***/ }), /***/ }),
/***/ 2613: /***/ 2613:
-12
View File
@@ -1,12 +0,0 @@
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
collectCoverageFrom: ["src/**/*.ts", "!src/**/*.d.ts"],
moduleFileExtensions: ["ts", "js"],
preset: "ts-jest",
roots: ["<rootDir>/src"],
testEnvironment: "node",
testMatch: ["**/*.test.ts"],
transform: {
"^.+\\.ts$": "ts-jest",
},
};
+61 -3848
View File
File diff suppressed because it is too large Load Diff
+7 -16
View File
@@ -10,19 +10,13 @@
"package": "ncc build -o dist/ruff-action src/ruff-action.ts && ncc build -o dist/update-known-checksums src/update-known-checksums.ts", "package": "ncc build -o dist/ruff-action src/ruff-action.ts && ncc build -o dist/update-known-checksums src/update-known-checksums.ts",
"act": "act pull_request -W .github/workflows/test.yml --container-architecture linux/amd64 -s GITHUB_TOKEN=\"$(gh auth token)\"", "act": "act pull_request -W .github/workflows/test.yml --container-architecture linux/amd64 -s GITHUB_TOKEN=\"$(gh auth token)\"",
"update-known-checksums": "RUNNER_TEMP=known_checksums node dist/update-known-checksums/index.js src/download/checksum/known-checksums.ts \"$(gh auth token)\"", "update-known-checksums": "RUNNER_TEMP=known_checksums node dist/update-known-checksums/index.js src/download/checksum/known-checksums.ts \"$(gh auth token)\"",
"test": "jest", "all": "npm install && npm run build && npm run check && npm run package"
"all": "npm ci --ignore-scripts && npm run build && npm run check && npm run test && npm run package"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/astral-sh/ruff-action.git" "url": "git+https://github.com/astral-sh/ruff-action.git"
}, },
"keywords": [ "keywords": ["actions", "python", "ruff", "action"],
"actions",
"python",
"ruff",
"action"
],
"author": "@eifinger", "author": "@eifinger",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
@@ -32,19 +26,16 @@
"@octokit/core": "^7.0.3", "@octokit/core": "^7.0.3",
"@octokit/plugin-paginate-rest": "^13.1.1", "@octokit/plugin-paginate-rest": "^13.1.1",
"@octokit/plugin-rest-endpoint-methods": "^16.0.0", "@octokit/plugin-rest-endpoint-methods": "^16.0.0",
"@renovatebot/pep440": "^4.2.1", "@renovatebot/pep440": "^4.1.0",
"smol-toml": "^1.6.0" "smol-toml": "^1.4.1"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "2.3.2", "@biomejs/biome": "2.1.4",
"@types/jest": "^29.5.14",
"@types/js-yaml": "^4.0.9", "@types/js-yaml": "^4.0.9",
"@types/node": "^24.10.9", "@types/node": "^24.2.1",
"@types/semver": "^7.7.1", "@types/semver": "^7.7.0",
"@vercel/ncc": "^0.38.3", "@vercel/ncc": "^0.38.3",
"jest": "^29.7.0",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"ts-jest": "^29.2.5",
"typescript": "^5.9.2" "typescript": "^5.9.2"
} }
} }
-468
View File
@@ -1,473 +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.14.14":
"76a9b0ebe57d0eee56940dbe0b62462578d1369cca8314ed0d2a6f2102292d4f",
"aarch64-pc-windows-msvc-0.14.14":
"449982699657bd68d170440dad958281b030bc05865fe012d043cd225e78eb79",
"aarch64-unknown-linux-gnu-0.14.14":
"1eee1ce3467fb5f348738bb5e4598859b55816a79c3cd6a26ca0dae03d7e2672",
"aarch64-unknown-linux-musl-0.14.14":
"a4d7302aa201a6f8e71dfa217cd8273fddd4e434a93ee3b4b07047fd7a684ac1",
"arm-unknown-linux-musleabihf-0.14.14":
"c225db82587780d1675e220db02c5209f406b29afb0a525628e11ffaca537068",
"armv7-unknown-linux-gnueabihf-0.14.14":
"cdc9596d6317e6cb32fbf3fd6c0e5817f96676b215957e6583db28abf4a15427",
"armv7-unknown-linux-musleabihf-0.14.14":
"0f1938426c50500bac09a09df5396aa19d6ce9f01a3a18a531dfaee5cc0d93e8",
"i686-pc-windows-msvc-0.14.14":
"4f6af9d82acae3d1308c55b0fa51b84d57eafc380aedf97a53a32314118c9a71",
"i686-unknown-linux-gnu-0.14.14":
"5ceb5e2f1906d85e444cb71503379e14d96ded423bd68906f1a539b78d9fc2c3",
"i686-unknown-linux-musl-0.14.14":
"878cebcaf3481295d22a1274cea94ec050455917669ccecac586dcfe6b4a557e",
"powerpc64-unknown-linux-gnu-0.14.14":
"e01a6db6bbf15db82052269887fb49e6be79923d188f1f60ed74f93b6b9a90d4",
"powerpc64le-unknown-linux-gnu-0.14.14":
"6048f270a46cce01228a53fde14fa6182a99d9e99169d7c252f706d7ba2a4845",
"riscv64gc-unknown-linux-gnu-0.14.14":
"6eca650195a22c0a568adc923b645b6317dad3ecc8a3d5c02c08768d6b333393",
"s390x-unknown-linux-gnu-0.14.14":
"dbde3ba91f84d8c183ed49bca0790777285d21381ad64a290584bd19038b83a4",
"x86_64-apple-darwin-0.14.14":
"749396c675c6f07205be6c4ef89e2e95123d790062d681059a355030e9d7d119",
"x86_64-pc-windows-msvc-0.14.14":
"81bfeed34f15296e6c81ecea912b6fff4430b957de8a1181ce9365434e3d6744",
"x86_64-unknown-linux-gnu-0.14.14":
"9876634f799d933bdaa1de864f47d26f898b2e20aa8f4f85d63235c3a231068d",
"x86_64-unknown-linux-musl-0.14.14":
"55a1ee65f5ac9416cc40f99c2df62f0d4525d40369fe371caff945c495174d57",
"aarch64-apple-darwin-0.14.13":
"067d1a90da8add55614eff91990425883a092d8279d9e503258ff8be0f8e9c18",
"aarch64-pc-windows-msvc-0.14.13":
"f7b5b9740ae893ac6abe9b9f68865073ffb9146a6f352ba9718d53b102ad02ef",
"aarch64-unknown-linux-gnu-0.14.13":
"84ce8fe1ef9b2eba018ba396fd018ac2bc22865a9e2a02573899ea6ee8e1e5fd",
"aarch64-unknown-linux-musl-0.14.13":
"25941b777ff712f4d9473d26c1b875034214a3d5de20ea99b2add939dcd0b367",
"arm-unknown-linux-musleabihf-0.14.13":
"3d833d451accb334f9cb91141083bbee5b835dcf0b49d14e5ccb13e0b6a7c387",
"armv7-unknown-linux-gnueabihf-0.14.13":
"90aa92a6de0f63eacb2d380c324039c101c6097956690fbaec05ed8d922f8766",
"armv7-unknown-linux-musleabihf-0.14.13":
"192deb53946b4309c56c1ad7c401ddac7557d0a517da7addfc636f1188bab30d",
"i686-pc-windows-msvc-0.14.13":
"4ead4d5fc89a1f02aa97dad944e69306ae4177a689a3818d3575fed11aa994fe",
"i686-unknown-linux-gnu-0.14.13":
"a321fc4862748563a663472a4458fe514e34542d0fe8d767d67b1463d585fb2f",
"i686-unknown-linux-musl-0.14.13":
"597541ac81d553c2fe97339680bfdb3e926714763ee37f0b5dbcc572d695e376",
"powerpc64-unknown-linux-gnu-0.14.13":
"cad4c05db54969608ec292b695397ddaef7452f759b976a60b69d9fefc6c5724",
"powerpc64le-unknown-linux-gnu-0.14.13":
"bc7faa37e496ae0198ee7e1c9e8958df3c55025ccf8be175b74533f87626e726",
"riscv64gc-unknown-linux-gnu-0.14.13":
"d9c6fd360347b9b0079994246ed08186f64629529e2fd2dc1a97a31da2a214d5",
"s390x-unknown-linux-gnu-0.14.13":
"1995227a65970cb2c1aa3b03c9a5418ee1fa56210c4577e6f8e1a14d1e79ed5d",
"x86_64-apple-darwin-0.14.13":
"69e424a42ac3a7c6c7032ad96deb757c35c93c848b6ea329a3f4c605e6d89ef9",
"x86_64-pc-windows-msvc-0.14.13":
"d2af4376053458f283d74980b49dc0d61d3ef9d9b8684c5b25bd64b73e11634a",
"x86_64-unknown-linux-gnu-0.14.13":
"b1e03e4cf245411f184106ba3d973b3902021bf5327e2fde0cfad163aacdc2c1",
"x86_64-unknown-linux-musl-0.14.13":
"2fe394f493318551f271277a2228e56b31ca69a4842483e5709af4548f342bc3",
"aarch64-apple-darwin-0.14.11":
"c3fab6bcad9cc2f8a342829dd4ea011c54b9671d023b71baac1cbf2b3526cefd",
"aarch64-pc-windows-msvc-0.14.11":
"43faade7e8f33a8ffab726aa44ee2b6bc1fd9d51407320db797dcb3dac068461",
"aarch64-unknown-linux-gnu-0.14.11":
"e5c018ac042ddeb9c02c3d96b6efe3a0dcd3406ba9bd695253d6111785f7abf6",
"aarch64-unknown-linux-musl-0.14.11":
"4779a99b51812b56d56d180174be46ddb2fed98fecaea7565b450d37cff1b8c6",
"arm-unknown-linux-musleabihf-0.14.11":
"a400347f59192992b61dc0bb9dfdfe640f8063403112d9e3a70f6275d34ae386",
"armv7-unknown-linux-gnueabihf-0.14.11":
"7938729417dcd33b7078ae0a77440cc152bba33518bb095e19cb108c132b2602",
"armv7-unknown-linux-musleabihf-0.14.11":
"57da6726050047ff2989554734deb94eb053789fc92c297a1a722a6723106a77",
"i686-pc-windows-msvc-0.14.11":
"51bec5b8cdc4008fb76e11eba4cbb62b8617ff242d316465fa2247dabfd2dcb9",
"i686-unknown-linux-gnu-0.14.11":
"9051f2529d36e38b58b03b6e605d77f62b6378d5afe70eba692f9a214794b273",
"i686-unknown-linux-musl-0.14.11":
"3f94ba805fd14bd8c088b710c950cd89d9968294fa3cff68a618e50ad9dea73d",
"powerpc64-unknown-linux-gnu-0.14.11":
"eb69c9da0285717f39ed25f666a0860d7d6a50359a1de0bf76fba6f83d59e1ea",
"powerpc64le-unknown-linux-gnu-0.14.11":
"001b43b7558d32f320fa775c74af0035952a724d323bb5204b6f83017297c6db",
"riscv64gc-unknown-linux-gnu-0.14.11":
"8901e1a36846c59a94ef468808e4a1af58f74e9c2830f40e045f5f9e70d6867c",
"s390x-unknown-linux-gnu-0.14.11":
"d29ba2740b7735ab20663225dd420acfb0797b29358d902afc7b87ee0f1f4b08",
"x86_64-apple-darwin-0.14.11":
"b301d1c04facba1004d180c8fd9ae36d868b780900682c97ecf324015c75f0b3",
"x86_64-pc-windows-msvc-0.14.11":
"e254f04e054e095215b8f74d5cdb7288f2d3f226bdc42b35cd44751fc7a55b2d",
"x86_64-unknown-linux-gnu-0.14.11":
"b98f19bb2cc99e0ea4de1625fbc43661902a1db45ff49a72e7f4a58cfedaabfb",
"x86_64-unknown-linux-musl-0.14.11":
"8e8b7a3f791e0faf3a1728d808133f6f9bd5c1422eccb9956e7e7376ff5404b8",
"aarch64-apple-darwin-0.14.10":
"dd0f3ec914604d802658ae0d271ff9d767c117d1702a44222170dd2ffbad8d2c",
"aarch64-pc-windows-msvc-0.14.10":
"a5b5bb9525a47dfff0ce8ad31546549b31dc1184f54027517838b1bbc9d81129",
"aarch64-unknown-linux-gnu-0.14.10":
"f6c8735bf175d449d79151f6bfe84251770ca6032e86bea0d327bc3789179027",
"aarch64-unknown-linux-musl-0.14.10":
"0888883f71199ca3af3569052d0cc1aee8b316390ffe75bc19f9a8047ffd0158",
"arm-unknown-linux-musleabihf-0.14.10":
"5102cff6cbed54953d6cd9c9d920a9dd6fbe283e047136a6e9bc732ae14a5cf3",
"armv7-unknown-linux-gnueabihf-0.14.10":
"94a3ad56d89c39ed47d4e864a18ea31baf989384840d5e182c3f94d5f35a4c93",
"armv7-unknown-linux-musleabihf-0.14.10":
"2a051d384d5d5fa84521f843424454620ff5d22580f90cd882512373c36933b0",
"i686-pc-windows-msvc-0.14.10":
"29e7519db7afed48e3729d16289a467acae7c6c34113d50bdd1e7e1077e1c7b5",
"i686-unknown-linux-gnu-0.14.10":
"56f98f880933907b809de3180e866e72342971024445144c409a6d0a46237c1a",
"i686-unknown-linux-musl-0.14.10":
"0cce7104a85d2891a9f62d9ee2decb942b91888d6156e4e858c1cb350a71a57c",
"powerpc64-unknown-linux-gnu-0.14.10":
"7685d9de6c1b139fd767f70310598a79d5b6c613d744a366b2fe99e420d19c32",
"powerpc64le-unknown-linux-gnu-0.14.10":
"620476793ed106c1f6bfa15e3b0d7834a55cad048a853d63f0c118b9fb7c7337",
"riscv64gc-unknown-linux-gnu-0.14.10":
"922872274af2b681381b46a242e77fa9bf427fa745313e818b89a6246be81d77",
"s390x-unknown-linux-gnu-0.14.10":
"da9cf8172369821dfaabfc8861238f565fdbcec1aebe897d900020ce561572de",
"x86_64-apple-darwin-0.14.10":
"7d5af84e84a189b49ac235d7970d35588cbed0d087f4237c96e5ac3c392bc6fb",
"x86_64-pc-windows-msvc-0.14.10":
"9c3340d322fff7a6dc132b8783ba734f5eaf4c46f7dd8bc828abdf850b3bebe1",
"x86_64-unknown-linux-gnu-0.14.10":
"4695e6375b1fa2b9c5f839218d695d8e701cfccb15d3f622b6a6feedb086bffb",
"x86_64-unknown-linux-musl-0.14.10":
"e1fac6f2705057f48f3d000694d0f41c95b06e738cf4825315c670f3b9d24933",
"aarch64-apple-darwin-0.14.9":
"ea132e6d6af23dbcf21c81d7fd8c5a94ccf16b1fb36a8bc60da971e339301f10",
"aarch64-pc-windows-msvc-0.14.9":
"dcc2c8a687b9682ab345418ba2793bc8594ae1f2bdb78af520b363e17cf2e271",
"aarch64-unknown-linux-gnu-0.14.9":
"423a07140aca7d007d63a42ff9322c0c2017dfe0ed23efe8bcbc36ed21d1cfd7",
"aarch64-unknown-linux-musl-0.14.9":
"9bdedf2e8d6398e193c2b2feccb2b4c9f8d37a6dc87cc0b587340a60e87d14e2",
"arm-unknown-linux-musleabihf-0.14.9":
"5d04fe5dac3a625c576f48d441238896d164128ec5ba64c9964e5d9502e92b1e",
"armv7-unknown-linux-gnueabihf-0.14.9":
"1404c9aace1216ad5cf8b977be5b967ab507f7245eec7bc9bb3fab80010a7769",
"armv7-unknown-linux-musleabihf-0.14.9":
"e90707e761fb9ce528c3728e5e12ddbadd60ad45dbacfb1ab9dff4b308f10ae3",
"i686-pc-windows-msvc-0.14.9":
"a7e19280ec509dbefdffd097e29f0ca411cca7196a7272198d022d22d5fad6c3",
"i686-unknown-linux-gnu-0.14.9":
"33494807d987983f1a91e486cc6a028364aa3291c96c3784620f75a3f477411a",
"i686-unknown-linux-musl-0.14.9":
"816e6fdefd899f2dcca7261dc6575ecac82907b94238569cbfef2b1639680865",
"powerpc64-unknown-linux-gnu-0.14.9":
"6786baf11e8b59c29d19c0da127451606837243472797aa5084eecccd9a74445",
"powerpc64le-unknown-linux-gnu-0.14.9":
"ba7219c9dce6f2d931d9851ac9623923b3fc5dafeb08c640885c7e33a6074775",
"riscv64gc-unknown-linux-gnu-0.14.9":
"8f46292b808c5ce0d72d1a4428e189a641d9f41b3af0b077537ddb7631f48b8d",
"s390x-unknown-linux-gnu-0.14.9":
"d795afb56c7f4ba55a7a08eda03bce1fd8b32d71c9cf1741218ac6b5578d8b84",
"x86_64-apple-darwin-0.14.9":
"ce980eb4b44a84cbf278686f8cf71a21b353888b29472ca269ffe385ce4f2351",
"x86_64-pc-windows-msvc-0.14.9":
"98727a845f01782b78efe1a3f0913aa9ec76c9a24e09aca89e26b3b684ca86a0",
"x86_64-unknown-linux-gnu-0.14.9":
"b012ebe5dee8d8c125f4d553fccda058249fbb1c914c17175c6edda14a1fb7da",
"x86_64-unknown-linux-musl-0.14.9":
"3bdbdb32f95bcf2c5bc45502a2050f30706f1c205fa0087ee3d4c688f67854fc",
"aarch64-apple-darwin-0.14.8":
"4efc019832a6b9225f650ee256d31b2e875021cae662963d533c78b5cf865f52",
"aarch64-pc-windows-msvc-0.14.8":
"965217e69f6d43e4df25abeec7b51a5ea014dbec219b9b2866ca37dcd312405e",
"aarch64-unknown-linux-gnu-0.14.8":
"9bbce62639bb30abf76202f2ec32c4234498de3c93c21b4c32c99d51c802cc41",
"aarch64-unknown-linux-musl-0.14.8":
"0b3464f54fa56f514c29e92bcf05867b914ad6c246e2ddbe4cce5c0700f2a3d9",
"arm-unknown-linux-musleabihf-0.14.8":
"5496ae4d581e7f6cdf509f56d33830056d1f8a432aa489bf9e40fc9754fbf1fa",
"armv7-unknown-linux-gnueabihf-0.14.8":
"203de1734ffddac18f02e3756ba0c02bd1770665031aba617ccf488ccfe78b25",
"armv7-unknown-linux-musleabihf-0.14.8":
"5e424ba3ebc90306f73e05914244245b66b27c3a44dcdf9029d97bfc56131491",
"i686-pc-windows-msvc-0.14.8":
"2bdff511119eb9d94e5a240c15bef668c43b0640e61c549b32242d7b04efd062",
"i686-unknown-linux-gnu-0.14.8":
"8f0c15e9518d1b9c0423986d3d1045ed5c4005e1037589a6772eee724ec3ba02",
"i686-unknown-linux-musl-0.14.8":
"55326d64201ff99dc96e93b23de951c2656825089ee581fc8aee099140d4d310",
"powerpc64-unknown-linux-gnu-0.14.8":
"52ffb3434ca8ada1d2703df0c4b929758444c24d9a47a8608a0775ddf6dbfa6c",
"powerpc64le-unknown-linux-gnu-0.14.8":
"3a8808f7b02f37e649e1cc1145ad3d2e4d23b4154637525480c7f6536f4152b9",
"riscv64gc-unknown-linux-gnu-0.14.8":
"8e6f1f660c1145bfe1b13fe41b7e6f4e829be3351bd536acbd41f91478d8932c",
"s390x-unknown-linux-gnu-0.14.8":
"f3ed19ba06face77e21c682846a4e5b3d4d9bfe5132eea86e30a84522b70d2b3",
"x86_64-apple-darwin-0.14.8":
"c53af0ba3cbc5e9e8f7768d28a7ff2d0795843e39302891093227bc6df343e94",
"x86_64-pc-windows-msvc-0.14.8":
"a837e98f5e6a21222a896f60521f563aea2c686a07cad17da9f5b5f2c4e04f8a",
"x86_64-unknown-linux-gnu-0.14.8":
"dce933cd68e3ca69c64c277ce6671dcdee7adeeaa6ac5a15047a4c973b30741f",
"x86_64-unknown-linux-musl-0.14.8":
"0f5496a3d2413b3cb85bbf9e4a6f95b5db127ac10989ecb3d8c0c0a0a74a892b",
"aarch64-apple-darwin-0.14.7":
"24631da81fe9ce5f4112e8caeb71957e81682e752a563f0a50715735f923e3c4",
"aarch64-pc-windows-msvc-0.14.7":
"24ca141d57fcd5bd303ca51af002cb9a815f072d9076b40ec2813835d46c4a82",
"aarch64-unknown-linux-gnu-0.14.7":
"8cc84635155dfc11acca297af25ed6c8a30e36146729a90df9e7d348a8fc0a4d",
"aarch64-unknown-linux-musl-0.14.7":
"8d429dbc2c308377c33874dc71d4c2388728f0d01c0a5869d2c878d21a6ced87",
"arm-unknown-linux-musleabihf-0.14.7":
"3cf1d9fdfd58a113b0b629e0ef2d247bbadbc8deec25724d6dc7d6f6ca7e7304",
"armv7-unknown-linux-gnueabihf-0.14.7":
"058f52b31c88056291b0e917ea909eea036570dcdee32af1ce62eacff98c4e2a",
"armv7-unknown-linux-musleabihf-0.14.7":
"9dddf78485ba0b5da8d8a73b24332ecf759a4de95ca5700c5141067683b5b615",
"i686-pc-windows-msvc-0.14.7":
"46d16810e1a0e7efd5c25efc60b719225c3a8b8a7fb662b61f293eeb62ccafdb",
"i686-unknown-linux-gnu-0.14.7":
"29242e501fea264ef4cb03164d9c375e426fad5c298412f64a4d50bc9ea19bc1",
"i686-unknown-linux-musl-0.14.7":
"5b1eeea3f27745e7e68b19bd214267aa653ef64c62c25ef4cd8bb57af8477171",
"powerpc64-unknown-linux-gnu-0.14.7":
"3cc47bf9943a46839d847746ccae59a3147982c5bf93bdc786fa5279d7d28681",
"powerpc64le-unknown-linux-gnu-0.14.7":
"1dabc7d0251f6f11ade20620538daeed1c4d27223576a04ddb2a87adfed2ca11",
"riscv64gc-unknown-linux-gnu-0.14.7":
"075232dfa5a03ef399d183879848cdb5d71485639c2a07fc62a27f4d4a68af3d",
"s390x-unknown-linux-gnu-0.14.7":
"a83cb05567dd4bb59fa8fd36b8337b21d475dd6f82fe0600a2364f1de6c295c3",
"x86_64-apple-darwin-0.14.7":
"c3035811c5354d923f3d7fd6320cfb23de30600f1eb86aa1518bac27c3d7fffd",
"x86_64-pc-windows-msvc-0.14.7":
"9a54b82e12574ea068e0914cdb1398993cbf78338c0799b6f9003a783fec779b",
"x86_64-unknown-linux-gnu-0.14.7":
"8a545d346b3f6f979574df96b4fb2a983f2568fe200f1c1f690bd2cbdce5ea51",
"x86_64-unknown-linux-musl-0.14.7":
"0f6cd59aa2b266758f1083c73f1b8303e3aedde0d953f0e79777faf174d8104f",
"aarch64-apple-darwin-0.14.6":
"b2ace677f51d0f2b91ca27d312ac8b069658502049015f4891c16f8864136282",
"aarch64-pc-windows-msvc-0.14.6":
"90518b6d16fe8b705c891dcdd77b20ab41da5e042b085aced7bbc647f6f2fdcd",
"aarch64-unknown-linux-gnu-0.14.6":
"bf3d592d5f879f072520afaa9c4a76a3ad0f6cf4b7bf7e27fb5d0e728e863f14",
"aarch64-unknown-linux-musl-0.14.6":
"4d3c113e59c5fbc31f1def566cebf28732bb45ff6b83df8e142bc1c055b3afa3",
"arm-unknown-linux-musleabihf-0.14.6":
"d0a3ed0a773f8e7edc44d63644b952d446dba771fdbb3eefd02853c323373f90",
"armv7-unknown-linux-gnueabihf-0.14.6":
"d6b71f6a951963f8dd0f2e099206b0aabf95d9bb49451a607da3e5823b800596",
"armv7-unknown-linux-musleabihf-0.14.6":
"a048f1e9a97afe8ac2a63785f5733d5736b9d6e6767b4d5b6434916d38f888e1",
"i686-pc-windows-msvc-0.14.6":
"c7b76311939f0ed7fbf4fe1be7c6c96c05b26a73e500650dff2586cbbe5c0b45",
"i686-unknown-linux-gnu-0.14.6":
"fe3fbd9227a7f2c1277306c31cf7627ab1dc61c25fa30854d66d8db138a74872",
"i686-unknown-linux-musl-0.14.6":
"5a184f4c1e6a665f56f980464dd87eeb75f32e37bf67d195efdaa41bba634a5d",
"powerpc64-unknown-linux-gnu-0.14.6":
"fe54fda27408241e9bee7bc5c9740a9a47a87a073ecd3d9bb166c32329c33958",
"powerpc64le-unknown-linux-gnu-0.14.6":
"d4296a0f41ed25cbf56a04b04bda7f3661b8be9d3220b89cc342e6cb4e6ee259",
"riscv64gc-unknown-linux-gnu-0.14.6":
"e06b714ebb8846421ed6b998beac66a7fd1fad09f7bee89e4e6b671c6e8c3fc3",
"s390x-unknown-linux-gnu-0.14.6":
"2ba3e5b6e66d9ba60d6fac9b699f77dd79402c872fc244259db7fc7815180b3d",
"x86_64-apple-darwin-0.14.6":
"efe45a6defcf4f1b6de87d56ce94635f53b00f88ddc2fcb8e25e2c4e3a61261c",
"x86_64-pc-windows-msvc-0.14.6":
"3a8bb3499484c7f9e86060c89d0e61c47dac7f9fb4d7fe46bc59dca400b322c9",
"x86_64-unknown-linux-gnu-0.14.6":
"b0ee141ada4749c7ee16ba21465b4ef035455b495aa3ab951bbcb9bde9f4d001",
"x86_64-unknown-linux-musl-0.14.6":
"7ef1743875c7c469cc1c4bb6da6a9bbff3f3a7b89a75632d6cd2944ede470a5e",
"aarch64-apple-darwin-0.14.5":
"c07616663ac63792c16269d6798a47fb1f45b29997706178d60e90da698a9970",
"aarch64-pc-windows-msvc-0.14.5":
"c09ff1cdaafd6cc3733586dc517bfd3e0d0ddc39360c90343ab7b610c8ade130",
"aarch64-unknown-linux-gnu-0.14.5":
"da5692a609e728dd1773aebf087113c5c3561aafdfa9fe574b30de9438c60a23",
"aarch64-unknown-linux-musl-0.14.5":
"ebef9d7119119e67b1065a5a35128148898e1581037e7d68c3aa9223983af0a4",
"arm-unknown-linux-musleabihf-0.14.5":
"00c937e44474d21878bdb2e9e214d74005fddc8c43a4c76d8e71a9085c7cc6af",
"armv7-unknown-linux-gnueabihf-0.14.5":
"aa54fcaba5d7029180139491213f504e5789b36e0017c0a67aff7b6ec0c04c45",
"armv7-unknown-linux-musleabihf-0.14.5":
"5e06c211d5dc4e85eeafd29e87af4aed690a41b02f9296537d4d4ebe62fded9a",
"i686-pc-windows-msvc-0.14.5":
"6b54cf61dad3276995d157d000f501917f1aa54735391150bf93282329253c92",
"i686-unknown-linux-gnu-0.14.5":
"81aadc05c630e7e7c4ca68c510f5ce462e0645fa03650ca3f844cb4d9b2efc27",
"i686-unknown-linux-musl-0.14.5":
"556c63188c8bc7e253a4eaef8727857a808a81af6fef02f76f27a71e800554a0",
"powerpc64-unknown-linux-gnu-0.14.5":
"df85081b5e776d934188f9eb67a1d2d17dba1e986f7e76668ffeed6e541858d1",
"powerpc64le-unknown-linux-gnu-0.14.5":
"4a02aa69a73bc5d9e579b08f5081e0fec412e353bacafa6b4a0705d89b3486e6",
"riscv64gc-unknown-linux-gnu-0.14.5":
"a1a20ddca6e776a8f38d533da4aa1eeb543ecbfa08813c482e3cb7d5ef0c39fc",
"s390x-unknown-linux-gnu-0.14.5":
"242bf290de417e8c9e8ca5c844be933e611cca3f3b301dc8537f72d051ceb3b9",
"x86_64-apple-darwin-0.14.5":
"d7285770c5098be00c9b4ff099d6ef7f8b2a54b4019c9507b628ee9f0d404c06",
"x86_64-pc-windows-msvc-0.14.5":
"9b998bf1a790a18b829fab3368ee7404a8f1f2cec2acb650aa1fd1b74962d023",
"x86_64-unknown-linux-gnu-0.14.5":
"5bc52346f81098e42beecd622f49c4336a5361eb38b7b51d466b0a9647e99e33",
"x86_64-unknown-linux-musl-0.14.5":
"69ddecf374a4f53eeda238399614ed6f92c5e75fe04436c604fb78435d5658eb",
"aarch64-apple-darwin-0.14.4":
"ab26cd2b03d5b2ec42dc7ac1886a29055eb2003aa2db14b26c7091c7cd6b4c68",
"aarch64-pc-windows-msvc-0.14.4":
"270773b34836e5b546d3ec9fe3b6cab4057881eff69828566f230baffff7634a",
"aarch64-unknown-linux-gnu-0.14.4":
"8bf03ef4bb8ce42321ea0e59a505739b29b18d85b1d4f220736e242248b7da31",
"aarch64-unknown-linux-musl-0.14.4":
"c77b72e565e9044eddce02e71f9214edea045047b786bb2bc973a6d8f94fb13e",
"arm-unknown-linux-musleabihf-0.14.4":
"5211b338bf1c48faa2fc045bd68c56b50e1e3d898f2255c39a3a7040033738f1",
"armv7-unknown-linux-gnueabihf-0.14.4":
"62e05c9a4571ea1aca80db377b4a11dd2325100db9ca0d7db16b61b87cb3d0b5",
"armv7-unknown-linux-musleabihf-0.14.4":
"b20725ed5be925b58120172b2395bdbea9857bc562c3a7a7e47a4d9281bafb7f",
"i686-pc-windows-msvc-0.14.4":
"bbe517649a5c6134b424b3065db7b5dcfaed72c2f5e848ec87cb2b33be7a133f",
"i686-unknown-linux-gnu-0.14.4":
"a68939e63f7b384351172ff1535d37e73ecf81a94b0c89f369f3f41aabcccede",
"i686-unknown-linux-musl-0.14.4":
"ff05a300bbb06211ec9cc43daec05da197ed116b5f6a5ea9ac8fc80fc00df39f",
"powerpc64-unknown-linux-gnu-0.14.4":
"394eae2ad3485eb3530db3e9b51feacbf0b03e63ec8e93f2134a137c59da4abe",
"powerpc64le-unknown-linux-gnu-0.14.4":
"b12b41763fa3c1068d2378669fa2740b11e0dd3dea3f667f732241a25fb06c9f",
"riscv64gc-unknown-linux-gnu-0.14.4":
"c6385274d7a3b1d0c7ed05b36101faf2c7206e8adc0c7c107d32fc8e5d57628c",
"s390x-unknown-linux-gnu-0.14.4":
"dcbf1dce38298dccfea7edffb1ea237ab2ccf2ea5dbae6d5b2dc4fe88177b094",
"x86_64-apple-darwin-0.14.4":
"041b9429400bfc3aca8402940fe6fa0ec33f9d79e8f50fbfb3063f70b4327fa3",
"x86_64-pc-windows-msvc-0.14.4":
"5541af69b1f342d843f8fca6218bd0d5d9064e987d14405a2abf60ce94c615a4",
"x86_64-unknown-linux-gnu-0.14.4":
"c9120e68e358eb0f850123537afe18945f9095e9f17967944fd23585fc88bb0b",
"x86_64-unknown-linux-musl-0.14.4":
"dcb5b42fd364c9e837b6800886564a891d023c8b87c967224351399cb1cda154",
"aarch64-apple-darwin-0.14.3":
"fc4c2c153656bc4082fb6c928fbd6867d5eb932240b663b329365f3f1821fc82",
"aarch64-pc-windows-msvc-0.14.3":
"b7ed5d2006b1c43559e78d90e65f2fa1982bec3976de74978485660fcdd67548",
"aarch64-unknown-linux-gnu-0.14.3":
"daa9edc586b669079fbe204bf5f5b48ee05c5dac862d2daf5ad72d3c2777834b",
"aarch64-unknown-linux-musl-0.14.3":
"571058fe7e3381ad54bec8b3d9d127013e332d822b35978b503722147aa3b9cf",
"arm-unknown-linux-musleabihf-0.14.3":
"f5e9b79cea63116ad582ffb514a61a506978762b67859b9e9e9cdee4b2ad065d",
"armv7-unknown-linux-gnueabihf-0.14.3":
"07094c107682c58260d652708a0c8b2f3d38bdffd5e7ec9a81785e665154a137",
"armv7-unknown-linux-musleabihf-0.14.3":
"edfd2491e25383de77f60aafcbd5451350b2cb6f9af38b6cf5a2e725193333cd",
"i686-pc-windows-msvc-0.14.3":
"f46525c0684a220c063c1c1f8d516c8cccab8ec9f62417e17e02cd4c1a138417",
"i686-unknown-linux-gnu-0.14.3":
"c7180e275ccaa97eae1528a15a08828cd9aaa15b57d3828f8722b0edd347046d",
"i686-unknown-linux-musl-0.14.3":
"60d1db56b1b4064b00f349b5fc8e11f2e63b8fa3bce4679f9c9da91356d6c3f6",
"powerpc64-unknown-linux-gnu-0.14.3":
"b9bf7191d023fcdd938e51fa53b63226897a23896f82057fe32fde9df10b1649",
"powerpc64le-unknown-linux-gnu-0.14.3":
"c1f5e497fe183dc1e0b6bb984573a0703182b68ac07587add1cbc370957ebd20",
"riscv64gc-unknown-linux-gnu-0.14.3":
"909e92469524b80520af17537df55f245d6ba018928bc486fd8418e9983b539f",
"s390x-unknown-linux-gnu-0.14.3":
"d8c56807e9827f391e1266bd19e0235fa470a0620cf166975365862e5bf9e908",
"x86_64-apple-darwin-0.14.3":
"076e88da3dcb38d3fef61daccc759bf29b605a490143ae707c0e067ebf8d7050",
"x86_64-pc-windows-msvc-0.14.3":
"ccc1bd362cca52a7fb7f9ee2cec7317c139ccb86e0964a5c1d4b14efbf2118ff",
"x86_64-unknown-linux-gnu-0.14.3":
"cb8a88912aa91a1864ad662c24df4514699ddfcbc52e684218aaf5ac57d7de0d",
"x86_64-unknown-linux-musl-0.14.3":
"58fd05427420df7b7b51bc6bbd5a430f38d2dfd63c74660f27625a4632f12532",
"aarch64-apple-darwin-0.14.2":
"33225f67ce61188fce91b801ab50a4028f8b0d66abbf81810841dd7d42371e38",
"aarch64-pc-windows-msvc-0.14.2":
"4fb68c66c719b337c2364aeb8210326a28b8ae046ef9a9c90407d473264515dd",
"aarch64-unknown-linux-gnu-0.14.2":
"a907d6a13120679b7194eb61beace09103f04b90e32cf7c2ac11979e6f618e35",
"aarch64-unknown-linux-musl-0.14.2":
"e323e9716661c9e18152aefe62e3fada497c10c9b3ef3095359c31b4df4f866a",
"arm-unknown-linux-musleabihf-0.14.2":
"2b3ccfd36718b29e0f5d1dcc10540b61205c72ee1c6a43331e6a97f2a17f12d0",
"armv7-unknown-linux-gnueabihf-0.14.2":
"5539a66c2723670dbf54eadf615e106aa038decbc701b9d47f7ed535ac677e1d",
"armv7-unknown-linux-musleabihf-0.14.2":
"c59be0daa3144ba317c88dd6cb3af68cff0f8dfbf2f495bebfb5b630d6f4c7cd",
"i686-pc-windows-msvc-0.14.2":
"125e2010b28ccb01ed2a4596e3db8d8dc0a46ccba2ee08e6038cc56ebbfbcb96",
"i686-unknown-linux-gnu-0.14.2":
"e2accde14cb371ca1b60935028c72138390f552cd77fc8c52a75f28c68eaa963",
"i686-unknown-linux-musl-0.14.2":
"d11f67f949e909412c523edcc1944c16dfecde49ed3709bca40631e371300da1",
"powerpc64-unknown-linux-gnu-0.14.2":
"99cc0f2cf83a7f82bb4e0db9ff1de8bcc5bf966054c0c82d25e189ee4565b0d5",
"powerpc64le-unknown-linux-gnu-0.14.2":
"81ac087a458bcaac7905c9afe84ef58061394a71264e8dd115889be0bc96fc6e",
"riscv64gc-unknown-linux-gnu-0.14.2":
"7917eb80fbae72040ad199f634361ce6001bc6225c165caa09c6d983c90692b0",
"s390x-unknown-linux-gnu-0.14.2":
"e24bfabe70535ffeedbba74ff6ecdf6c6bb09c5d9bf2c6c902e5540b569d6236",
"x86_64-apple-darwin-0.14.2":
"f119057618599e8983bdeed64e949af54f67d7a62464d11de0ba1237619a9990",
"x86_64-pc-windows-msvc-0.14.2":
"0a1160f45263cc847acd4b42392bf0484c9420806eeb7f776e1384fb557aeade",
"x86_64-unknown-linux-gnu-0.14.2":
"b4457ef6c130165655e0fb91081dbef09011ec41955115aaa22c94f7655c97c2",
"x86_64-unknown-linux-musl-0.14.2":
"e5e177a829b370376abb6a1dc9edc8c59ac519ebe64b1366b65e2952fa524a8d",
"aarch64-apple-darwin-0.14.1":
"ee12f441b4c14eff354784a52f8a16767573bd6285627cad2ade04551e8a678b",
"aarch64-pc-windows-msvc-0.14.1":
"3bd0b34cc645faaf88b4010a639d9b0ec6c313359774ad7e48daaef4ddb3c4f7",
"aarch64-unknown-linux-gnu-0.14.1":
"8203922d5f55a04089005184942f2f449f9736a06e96854230ba5991bb91ee9a",
"aarch64-unknown-linux-musl-0.14.1":
"ddfc9df5c879a1984fef4e29838e46fa8e979adc3fdab5967f096363427e8790",
"arm-unknown-linux-musleabihf-0.14.1":
"a29be1acc5f29ee8cb5a5add223a7ed07e8ffd0f9a78219e115e57041c63b416",
"armv7-unknown-linux-gnueabihf-0.14.1":
"dd8ead33fc3158618a29f02d76fd7ff4f6914272b5d94a65e348b8b8c0753d78",
"armv7-unknown-linux-musleabihf-0.14.1":
"16d79262e9fc98ceef167577a391d54d9c8a2d8fe90de22266f456bf4644f7e5",
"i686-pc-windows-msvc-0.14.1":
"ffe525c5e641f3bef31d9bc6e1e3585f9f796dda1254c15e5a18ef51a91917c3",
"i686-unknown-linux-gnu-0.14.1":
"37f10652706cdf1f107c620970bf37591b0be44111614101509f56e596f866b3",
"i686-unknown-linux-musl-0.14.1":
"e39c79642ec4e3d95d31a0ae77fb648946f2a639cb3cbf876c0f5e1e2571e94e",
"powerpc64-unknown-linux-gnu-0.14.1":
"1ec026aef1c670715d5c197bbf18b4edd81e140fbecee51ed169e05b042c6045",
"powerpc64le-unknown-linux-gnu-0.14.1":
"193d66f5ed6e21a46b244118c983ab91628ed65ae542f7345f8e37a8c555bff0",
"riscv64gc-unknown-linux-gnu-0.14.1":
"4cbea006f37927abac8c32575212f982b86aaa4f73a32983e4a8934320ef7e9c",
"s390x-unknown-linux-gnu-0.14.1":
"5cd7f6e6e2de3b03ada4821de444e92bb87ce5c57981c1d8ba8128dc62f02668",
"x86_64-apple-darwin-0.14.1":
"7fda94bd7fc6114eecb67b858a8c93f1b4aa658aa1f5e887b37a2b95bf6f26a7",
"x86_64-pc-windows-msvc-0.14.1":
"ab0bc1876a16e1afa4177fe9f58d568fbe85921efb253395bd03d01e1e2c467d",
"x86_64-unknown-linux-gnu-0.14.1":
"8798f5892db7dc70a3250f89d3ef613f87f1fa5fdb4242921ee31427daf78e87",
"x86_64-unknown-linux-musl-0.14.1":
"ec5b8eb318ff9e2412988420eb78f965aca02e9f67df34eeea7609e0c5a0fb7f",
"aarch64-apple-darwin-0.14.0": "aarch64-apple-darwin-0.14.0":
"0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec", "0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec",
"aarch64-pc-windows-msvc-0.14.0": "aarch64-pc-windows-msvc-0.14.0":
@@ -1,5 +1,11 @@
import { promises as fs } from "node:fs"; import { promises as fs } from "node:fs";
import * as tc from "@actions/tool-cache"; import * as tc from "@actions/tool-cache";
import {
isRetryableError,
NonRetryableError,
RetryableError,
withRetry,
} from "../../utils/retry";
import { KNOWN_CHECKSUMS } from "./known-checksums"; import { KNOWN_CHECKSUMS } from "./known-checksums";
export async function updateChecksums( export async function updateChecksums(
filePath: string, filePath: string,
@@ -60,6 +66,27 @@ async function getOrDownloadChecksum(
} }
async function downloadAssetContent(downloadUrl: string): Promise<string> { async function downloadAssetContent(downloadUrl: string): Promise<string> {
return await withRetry(
async () => {
try {
const downloadPath = await tc.downloadTool(downloadUrl); const downloadPath = await tc.downloadTool(downloadUrl);
return await fs.readFile(downloadPath, "utf8"); return await fs.readFile(downloadPath, "utf8");
} catch (error) {
const err = error as Error;
if (isRetryableError(err)) {
throw new RetryableError(
`Failed to download checksum file: ${err.message}`,
err,
);
} else {
throw new NonRetryableError(
`Failed to download checksum file: ${err.message}`,
err,
);
}
}
},
{ maxRetries: 3, timeoutMs: 30000 },
"download checksum file",
);
} }
+114 -10
View File
@@ -9,6 +9,12 @@ import * as pep440 from "@renovatebot/pep440";
import * as semver from "semver"; import * as semver from "semver";
import { OWNER, REPO, TOOL_CACHE_NAME } from "../utils/constants"; import { OWNER, REPO, TOOL_CACHE_NAME } from "../utils/constants";
import type { Architecture, Platform } from "../utils/platforms"; import type { Architecture, Platform } from "../utils/platforms";
import {
isRetryableError,
NonRetryableError,
RetryableError,
withRetry,
} from "../utils/retry";
import { validateChecksum } from "./checksum/checksum"; import { validateChecksum } from "./checksum/checksum";
const PaginatingOctokit = Octokit.plugin(paginateRest, restEndpointMethods); const PaginatingOctokit = Octokit.plugin(paginateRest, restEndpointMethods);
@@ -43,11 +49,29 @@ export async function downloadVersion(
const downloadUrl = constructDownloadUrl(version, platform, arch); const downloadUrl = constructDownloadUrl(version, platform, arch);
core.debug(`Downloading ruff from "${downloadUrl}" ...`); core.debug(`Downloading ruff from "${downloadUrl}" ...`);
const downloadPath = await tc.downloadTool( const downloadPath = await withRetry(
downloadUrl, async () => {
undefined, try {
githubToken, return await tc.downloadTool(downloadUrl, undefined, githubToken);
} catch (error) {
const err = error as Error;
if (isRetryableError(err)) {
throw new RetryableError(
`Failed to download ruff binary: ${err.message}`,
err,
); );
} else {
throw new NonRetryableError(
`Failed to download ruff binary: ${err.message}`,
err,
);
}
}
},
{ maxRetries: 3, timeoutMs: 60000 }, // 60 second timeout for downloads
"download ruff binary",
);
core.debug(`Downloaded ruff to "${downloadPath}"`); core.debug(`Downloaded ruff to "${downloadPath}"`);
await validateChecksum(checkSum, downloadPath, arch, platform, version); await validateChecksum(checkSum, downloadPath, arch, platform, version);
@@ -134,30 +158,70 @@ export async function resolveVersion(
} }
async function getAvailableVersions(githubToken: string): Promise<string[]> { async function getAvailableVersions(githubToken: string): Promise<string[]> {
return await withRetry(
async () => {
try { try {
const octokit = new PaginatingOctokit({ const octokit = new PaginatingOctokit({
auth: githubToken, auth: githubToken,
}); });
return await getReleaseTagNames(octokit); return await getReleaseTagNames(octokit);
} catch (err) { } catch (err) {
if ((err as Error).message.includes("Bad credentials")) { const error = err as Error;
if (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.",
); );
const octokit = new PaginatingOctokit(); const octokit = new PaginatingOctokit();
return await getReleaseTagNames(octokit); return await getReleaseTagNames(octokit);
} }
throw err;
if (isRetryableError(error)) {
throw new RetryableError(
`Failed to get available versions: ${error.message}`,
error,
);
} else {
throw new NonRetryableError(
`Failed to get available versions: ${error.message}`,
error,
);
} }
} }
},
{ maxRetries: 3, timeoutMs: 30000 }, // 30 second timeout for API calls
"get available versions",
);
}
async function getReleaseTagNames( async function getReleaseTagNames(
octokit: InstanceType<typeof PaginatingOctokit>, octokit: InstanceType<typeof PaginatingOctokit>,
): Promise<string[]> { ): Promise<string[]> {
const response = await octokit.paginate(octokit.rest.repos.listReleases, { const response = await withRetry(
async () => {
try {
return await octokit.paginate(octokit.rest.repos.listReleases, {
owner: OWNER, owner: OWNER,
repo: REPO, repo: REPO,
}); });
} catch (error) {
const err = error as Error;
if (isRetryableError(err)) {
throw new RetryableError(
`Failed to list GitHub releases: ${err.message}`,
err,
);
} else {
throw new NonRetryableError(
`Failed to list GitHub releases: ${err.message}`,
err,
);
}
}
},
{ maxRetries: 3, timeoutMs: 30000 },
"list GitHub releases",
);
const releaseTagNames = response.map((release) => release.tag_name); const releaseTagNames = response.map((release) => release.tag_name);
if (releaseTagNames.length === 0) { if (releaseTagNames.length === 0) {
throw Error( throw Error(
@@ -168,6 +232,8 @@ async function getReleaseTagNames(
} }
async function getLatestVersion(githubToken: string) { async function getLatestVersion(githubToken: string) {
return await withRetry(
async () => {
const octokit = new PaginatingOctokit({ const octokit = new PaginatingOctokit({
auth: githubToken, auth: githubToken,
}); });
@@ -176,7 +242,8 @@ 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")) { const error = err as Error;
if (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.",
); );
@@ -186,7 +253,18 @@ async function getLatestVersion(githubToken: string) {
core.error( core.error(
"Github API request failed while getting latest release. Check the GitHub status page for outages. Try again later.", "Github API request failed while getting latest release. Check the GitHub status page for outages. Try again later.",
); );
throw err;
if (isRetryableError(error)) {
throw new RetryableError(
`Failed to get latest version: ${error.message}`,
error,
);
} else {
throw new NonRetryableError(
`Failed to get latest version: ${error.message}`,
error,
);
}
} }
} }
@@ -194,16 +272,42 @@ async function getLatestVersion(githubToken: string) {
throw new Error("Could not determine latest release."); throw new Error("Could not determine latest release.");
} }
return latestRelease.tag_name; return latestRelease.tag_name;
},
{ maxRetries: 3, timeoutMs: 30000 },
"get latest version",
);
} }
async function getLatestRelease( async function getLatestRelease(
octokit: InstanceType<typeof PaginatingOctokit>, octokit: InstanceType<typeof PaginatingOctokit>,
) { ) {
const { data: latestRelease } = await octokit.rest.repos.getLatestRelease({ return await withRetry(
async () => {
try {
const { data: latestRelease } =
await octokit.rest.repos.getLatestRelease({
owner: OWNER, owner: OWNER,
repo: REPO, repo: REPO,
}); });
return latestRelease; return latestRelease;
} catch (error) {
const err = error as Error;
if (isRetryableError(err)) {
throw new RetryableError(
`Failed to get latest release: ${err.message}`,
err,
);
} else {
throw new NonRetryableError(
`Failed to get latest release: ${err.message}`,
err,
);
}
}
},
{ maxRetries: 3, timeoutMs: 30000 },
"get latest release",
);
} }
function maxSatisfying( function maxSatisfying(
+4 -7
View File
@@ -1,3 +1,4 @@
import * as fs from "node:fs";
import * as path from "node:path"; 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 exec from "@actions/exec";
@@ -22,7 +23,6 @@ import {
type Platform, type Platform,
} from "./utils/platforms"; } from "./utils/platforms";
import { getRuffVersionFromRequirementsFile } from "./utils/pyproject"; import { getRuffVersionFromRequirementsFile } from "./utils/pyproject";
import { findPyprojectToml } from "./utils/pyproject-finder";
async function run(): Promise<void> { async function run(): Promise<void> {
const platform = getPlatform(); const platform = getPlatform();
@@ -107,12 +107,9 @@ async function determineVersion(): Promise<string> {
} }
return await resolveVersion(versionFromPyproject || "latest", githubToken); return await resolveVersion(versionFromPyproject || "latest", githubToken);
} }
const pyProjectPath = findPyprojectToml( const pyProjectPath = path.join(src, "pyproject.toml");
src, if (!fs.existsSync(pyProjectPath)) {
process.env.GITHUB_WORKSPACE || ".", core.info(`Could not find ${pyProjectPath}. Using latest version.`);
);
if (!pyProjectPath) {
core.info(`Could not find pyproject.toml. Using latest version.`);
return await resolveVersion("latest", githubToken); return await resolveVersion("latest", githubToken);
} }
const versionFromPyproject = const versionFromPyproject =
+29 -2
View File
@@ -5,6 +5,12 @@ import { restEndpointMethods } from "@octokit/plugin-rest-endpoint-methods";
import * as semver from "semver"; import * as semver from "semver";
import { updateChecksums } from "./download/checksum/update-known-checksums"; import { updateChecksums } from "./download/checksum/update-known-checksums";
import { OWNER, REPO } from "./utils/constants"; import { OWNER, REPO } from "./utils/constants";
import {
isRetryableError,
NonRetryableError,
RetryableError,
withRetry,
} from "./utils/retry";
const PaginatingOctokit = Octokit.plugin(paginateRest, restEndpointMethods); const PaginatingOctokit = Octokit.plugin(paginateRest, restEndpointMethods);
@@ -12,12 +18,33 @@ async function run(): Promise<void> {
const checksumFilePath = process.argv.slice(2)[0]; const checksumFilePath = process.argv.slice(2)[0];
const github_token = process.argv.slice(2)[1]; const github_token = process.argv.slice(2)[1];
const response = await withRetry(
async () => {
try {
const octokit = new PaginatingOctokit({ auth: github_token }); const octokit = new PaginatingOctokit({ auth: github_token });
return await octokit.paginate(octokit.rest.repos.listReleases, {
const response = await octokit.paginate(octokit.rest.repos.listReleases, {
owner: OWNER, owner: OWNER,
repo: REPO, repo: REPO,
}); });
} catch (error) {
const err = error as Error;
if (isRetryableError(err)) {
throw new RetryableError(
`Failed to list releases for checksum update: ${err.message}`,
err,
);
} else {
throw new NonRetryableError(
`Failed to list releases for checksum update: ${err.message}`,
err,
);
}
}
},
{ maxRetries: 3, timeoutMs: 60000 },
"list releases for checksum update",
);
const downloadUrls: string[] = response.flatMap((release) => const downloadUrls: string[] = response.flatMap((release) =>
release.assets release.assets
.filter((asset) => asset.name.endsWith(".sha256")) .filter((asset) => asset.name.endsWith(".sha256"))
-183
View File
@@ -1,183 +0,0 @@
import * as path from "node:path";
import * as core from "@actions/core";
import { findPyprojectToml } from "./pyproject-finder";
jest.mock("@actions/core", () => ({
debug: jest.fn(),
info: jest.fn(),
}));
describe("findPyprojectToml", () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe("when pyproject.toml exists in src directory", () => {
it("should return the exact path", () => {
const fixturesDir = path.join(
__dirname,
"..",
"..",
"__tests__",
"fixtures",
);
const workspaceRoot = path.join(__dirname, "..", "..");
const result = findPyprojectToml(fixturesDir, workspaceRoot);
expect(result).toContain("pyproject.toml");
expect(result).toContain("fixtures");
expect(core.info).toHaveBeenCalled();
});
});
describe("when pyproject.toml exists only in parent directory", () => {
it("should search upwards and find the parent's pyproject.toml", () => {
// subproject doesn't have a pyproject.toml, but its parent (parent-config-project) does
const subprojectDir = path.join(
__dirname,
"..",
"..",
"__tests__",
"fixtures",
"parent-config-project",
"subproject",
);
const workspaceRoot = path.join(__dirname, "..", "..");
const result = findPyprojectToml(subprojectDir, workspaceRoot);
expect(result).toBeTruthy();
expect(result).toContain("pyproject.toml");
expect(result).toContain("parent-config-project");
expect(core.info).toHaveBeenCalled();
});
});
describe("boundary conditions", () => {
it("should stop searching at workspace root and return undefined when not found", () => {
// Create a path that won't have pyproject.toml above it
const nodeModulesDir = path.join(
__dirname,
"..",
"..",
"node_modules",
"@actions",
);
const workspaceRoot = path.join(__dirname, "..", "..");
const result = findPyprojectToml(nodeModulesDir, workspaceRoot);
// Should return undefined since there's no pyproject.toml in the search path
expect(result).toBeUndefined();
expect(core.info).not.toHaveBeenCalledWith(
expect.stringContaining("Found pyproject.toml"),
);
});
it("should find pyproject.toml when it exists at workspace root", () => {
// Use parent-config-project as the "workspace root" for this test
// Start from subproject (which has no pyproject.toml) to search up to workspace root
const subprojectDir = path.join(
__dirname,
"..",
"..",
"__tests__",
"fixtures",
"parent-config-project",
"subproject",
);
const workspaceRoot = path.join(
__dirname,
"..",
"..",
"__tests__",
"fixtures",
"parent-config-project",
);
const result = findPyprojectToml(subprojectDir, workspaceRoot);
expect(result).toBeTruthy();
expect(result).toContain("pyproject.toml");
expect(result).toContain("parent-config-project");
});
it("should stop at workspace root even if searching from it", () => {
const workspaceRoot = path.join(
__dirname,
"..",
"..",
"__tests__",
"fixtures",
);
const result = findPyprojectToml(workspaceRoot, workspaceRoot);
// Should find pyproject.toml at workspace root
expect(result).toBeTruthy();
expect(result).toContain("pyproject.toml");
expect(result).toContain("fixtures");
});
});
describe("edge cases", () => {
it("should handle relative paths", () => {
const srcDir = "./__tests__/fixtures";
const workspaceRoot = ".";
const result = findPyprojectToml(srcDir, workspaceRoot);
// Should work with relative paths
expect(result).toBeTruthy();
expect(result).toContain("pyproject.toml");
});
it("should handle when src equals workspace root", () => {
const workspaceRoot = path.join(
__dirname,
"..",
"..",
"__tests__",
"fixtures",
);
const result = findPyprojectToml(workspaceRoot, workspaceRoot);
expect(result).toBeTruthy();
expect(result).toContain("pyproject.toml");
expect(result).toContain("fixtures");
});
it("should log debug messages for each checked path", () => {
const pythonProjectDir = path.join(
__dirname,
"..",
"..",
"__tests__",
"fixtures",
"python-project",
);
const workspaceRoot = path.join(__dirname, "..", "..");
findPyprojectToml(pythonProjectDir, workspaceRoot);
expect(core.debug).toHaveBeenCalled();
const debugCalls = (core.debug as jest.Mock).mock.calls;
expect(debugCalls.length).toBeGreaterThan(0);
// First debug call should be for the starting directory
expect(debugCalls[0][0]).toContain("Checking for");
expect(debugCalls[0][0]).toContain("python-project");
});
it("should handle paths with trailing slashes", () => {
const fixturesDir = `${path.join(__dirname, "..", "..", "__tests__", "fixtures")}/`;
const workspaceRoot = path.join(__dirname, "..", "..");
const result = findPyprojectToml(fixturesDir, workspaceRoot);
expect(result).toBeTruthy();
expect(result).toContain("pyproject.toml");
});
});
});
-79
View File
@@ -1,79 +0,0 @@
import * as fs from "node:fs";
import * as path from "node:path";
import * as core from "@actions/core";
/**
* Search for a pyproject.toml file starting from the given directory
* and traversing upwards through parent directories until reaching
* the GitHub workspace root.
*
* @param startDir The directory to start the search from (e.g., the src input)
* @param workspaceRoot The GitHub workspace directory (GITHUB_WORKSPACE)
* @returns The path to the found pyproject.toml, or undefined if not found
*/
export function findPyprojectToml(
startDir: string,
workspaceRoot: string,
): string | undefined {
let currentDir = path.resolve(startDir);
const resolvedWorkspaceRoot = path.resolve(workspaceRoot);
while (true) {
const pyprojectPath = path.join(currentDir, "pyproject.toml");
core.debug(`Checking for ${pyprojectPath}`);
if (fs.existsSync(pyprojectPath)) {
core.info(`Found pyproject.toml at ${pyprojectPath}`);
return pyprojectPath;
}
// Check if we've reached the workspace root
if (currentDir === resolvedWorkspaceRoot) {
// If we're at workspace root and didn't find it, stop searching
break;
}
// Move up to parent directory
const parentDir = path.dirname(currentDir);
// If parent is the same as current, we've reached the filesystem root
if (parentDir === currentDir) {
break;
}
currentDir = parentDir;
// If we've gone past the workspace root, stop searching
if (isPathWithinWorkspace(currentDir, resolvedWorkspaceRoot) === false) {
break;
}
}
return undefined;
}
/**
* Check if a given path is within or equal to the workspace root.
*
* @param checkPath The path to check
* @param workspaceRoot The workspace root directory
* @returns true if within or equal to workspace, false if outside, undefined if can't determine
*/
function isPathWithinWorkspace(
checkPath: string,
workspaceRoot: string,
): boolean | undefined {
try {
const checkPathResolved = path.resolve(checkPath);
const workspaceRootResolved = path.resolve(workspaceRoot);
// Check if checkPath starts with workspaceRoot (case-insensitive on Windows)
const relativePath = path.relative(
workspaceRootResolved,
checkPathResolved,
);
return !relativePath.startsWith("..") && !path.isAbsolute(relativePath);
} catch {
return undefined;
}
}
-188
View File
@@ -1,188 +0,0 @@
import * as core from "@actions/core";
import { findRuffVersionInSpec } from "./pyproject";
jest.mock("@actions/core", () => ({
info: jest.fn(),
warning: jest.fn(),
}));
describe("findRuffVersionInSpec", () => {
beforeEach(() => {
jest.clearAllMocks();
});
describe("ruff dependency strings", () => {
it("should extract version from 'ruff==0.9.3'", () => {
const result = findRuffVersionInSpec("ruff==0.9.3");
expect(result).toBe("0.9.3");
expect(core.info).toHaveBeenCalledWith(
"Found ruff version in requirements file: 0.9.3",
);
expect(core.warning).not.toHaveBeenCalled();
});
it("should extract version from 'ruff>=0.14'", () => {
const result = findRuffVersionInSpec("ruff>=0.14");
expect(result).toBe(">=0.14");
expect(core.warning).not.toHaveBeenCalled();
});
it("should extract version from 'ruff ~=1.0.0'", () => {
const result = findRuffVersionInSpec("ruff ~=1.0.0");
expect(result).toBe("~=1.0.0");
expect(core.warning).not.toHaveBeenCalled();
});
it("should extract version from 'ruff>=0.14,<1.0'", () => {
const result = findRuffVersionInSpec("ruff>=0.14,<1.0");
expect(result).toBe(">=0.14,<1.0");
expect(core.warning).not.toHaveBeenCalled();
});
it("should extract version from 'ruff>=0.14,<2.0,!=1.5.0'", () => {
const result = findRuffVersionInSpec("ruff>=0.14,<2.0,!=1.5.0");
expect(result).toBe(">=0.14,<2.0,!=1.5.0");
expect(core.warning).not.toHaveBeenCalled();
});
it("should return undefined for non-ruff dependency 'another-dep 0.1.6'", () => {
const result = findRuffVersionInSpec("another-dep 0.1.6");
expect(result).toBeUndefined();
expect(core.info).not.toHaveBeenCalled();
expect(core.warning).not.toHaveBeenCalled();
});
it("should return undefined for non-ruff dependency 'another-dep==0.1.6'", () => {
const result = findRuffVersionInSpec("another-dep==0.1.6");
expect(result).toBeUndefined();
expect(core.info).not.toHaveBeenCalled();
expect(core.warning).not.toHaveBeenCalled();
});
it("should strip trailing backslash", () => {
const result = findRuffVersionInSpec("ruff==0.9.3 \\");
expect(result).toBe("0.9.3");
expect(core.info).toHaveBeenCalledWith(
"Found ruff version in requirements file: 0.9.3",
);
expect(core.warning).not.toHaveBeenCalled();
});
it("should strip trailing backslash with whitespace", () => {
const result = findRuffVersionInSpec(" ruff==0.9.3 \\ ");
expect(result).toBe("0.9.3");
expect(core.warning).not.toHaveBeenCalled();
});
});
describe("environment markers", () => {
it("should strip python_version environment marker", () => {
const result = findRuffVersionInSpec(
'ruff>=0.14 ; python_version >= "3.11"',
);
expect(result).toBe(">=0.14");
expect(core.info).toHaveBeenCalledWith(
"Found ruff version in requirements file: >=0.14",
);
expect(core.warning).toHaveBeenCalledWith(
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
);
});
it("should strip sys_platform environment marker", () => {
const result = findRuffVersionInSpec(
"ruff==0.9.3 ; sys_platform == 'linux'",
);
expect(result).toBe("0.9.3");
expect(core.warning).toHaveBeenCalledWith(
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
);
});
it("should strip multiple environment markers", () => {
const result = findRuffVersionInSpec(
'ruff>=0.14 ; python_version >= "3.11" and sys_platform == "linux"',
);
expect(result).toBe(">=0.14");
expect(core.warning).toHaveBeenCalledWith(
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
);
});
it("should handle environment markers with multiple constraints", () => {
const result = findRuffVersionInSpec(
'ruff>=0.14,<1.0 ; python_version >= "3.11"',
);
expect(result).toBe(">=0.14,<1.0");
expect(core.warning).toHaveBeenCalledWith(
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
);
});
});
describe("edge cases", () => {
it("should handle whitespace", () => {
const result = findRuffVersionInSpec(" ruff >=0.14 ");
expect(result).toBe(">=0.14");
expect(core.warning).not.toHaveBeenCalled();
});
it("should handle whitespace with environment markers", () => {
const result = findRuffVersionInSpec(
" ruff >=0.14 ; python_version >= '3.11' ",
);
expect(result).toBe(">=0.14");
expect(core.warning).toHaveBeenCalled();
});
it("should return undefined for empty string", () => {
const result = findRuffVersionInSpec("");
expect(result).toBeUndefined();
expect(core.info).not.toHaveBeenCalled();
expect(core.warning).not.toHaveBeenCalled();
});
it("should return undefined for whitespace only", () => {
const result = findRuffVersionInSpec(" ");
expect(result).toBeUndefined();
expect(core.info).not.toHaveBeenCalled();
expect(core.warning).not.toHaveBeenCalled();
});
it("should return undefined for just semicolon", () => {
const result = findRuffVersionInSpec(";");
expect(result).toBeUndefined();
expect(core.info).not.toHaveBeenCalled();
expect(core.warning).not.toHaveBeenCalled();
});
it("should handle exact example from issue #256", () => {
const result = findRuffVersionInSpec(
'ruff>=0.14 ; python_version >= "3.11"',
);
expect(result).toBe(">=0.14");
expect(core.info).toHaveBeenCalledWith(
"Found ruff version in requirements file: >=0.14",
);
expect(core.warning).toHaveBeenCalledWith(
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
);
});
it("should handle single-quoted environment markers", () => {
const result = findRuffVersionInSpec(
"ruff>=0.14 ; python_version >= '3.11'",
);
expect(result).toBe(">=0.14");
expect(core.warning).toHaveBeenCalled();
});
it("should handle double-quoted environment markers", () => {
const result = findRuffVersionInSpec(
'ruff>=0.14 ; python_version >= "3.11"',
);
expect(result).toBe(">=0.14");
expect(core.warning).toHaveBeenCalled();
});
});
});
+17 -52
View File
@@ -2,58 +2,25 @@ import * as fs from "node:fs";
import * as core from "@actions/core"; import * as core from "@actions/core";
import * as toml from "smol-toml"; import * as toml from "smol-toml";
/**
* Find ruff version in a dependency specification.
* Only handles strings that start with "ruff" (e.g., "ruff==0.9.3").
* Returns undefined for non-ruff dependencies.
* Strips environment markers (everything after ';').
* Strips leading '==' from exact version specifiers (PEP 440) for downstream compatibility.
*
* @internal This is exported for testing purposes only.
*/
export function findRuffVersionInSpec(spec: string): string | undefined {
const trimmedSpec = spec.trim();
const fullDepMatch = trimmedSpec.match(/^ruff\s*(.+)$/);
let versionSpec: string;
if (fullDepMatch) {
versionSpec = fullDepMatch[1];
} else {
return undefined;
}
// Strip trailing backslash (line continuation)
versionSpec = versionSpec.replace(/\\$/, "").trim();
// Strip environment markers (everything after ';')
const match = versionSpec.match(/^([^;]+)(?:;.*)?$/);
if (match) {
let version = match[1].trim();
if (version) {
// Strip leading '==' from exact version specifiers for compatibility with semver
if (version.startsWith("==")) {
version = version.slice(2);
}
if (trimmedSpec.includes(";")) {
core.warning(
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
);
}
core.info(`Found ruff version in requirements file: ${version}`);
return version;
}
}
return undefined;
}
function getRuffVersionFromAllDependencies( function getRuffVersionFromAllDependencies(
allDependencies: string[], allDependencies: string[],
): string | undefined { ): string | undefined {
return allDependencies const ruffVersionDefinition = allDependencies.find((dep: string) =>
.map((dep) => findRuffVersionInSpec(dep)) dep.startsWith("ruff"),
.find((version) => version !== undefined); );
if (ruffVersionDefinition) {
const ruffVersion = ruffVersionDefinition
.match(/^ruff([^A-Z0-9._-]+.*)$/)?.[1]
.trim();
if (ruffVersion?.startsWith("==")) {
return ruffVersion.slice(2);
}
core.info(`Found ruff version in pyproject.toml: ${ruffVersion}`);
return ruffVersion;
}
return undefined;
} }
interface Pyproject { interface Pyproject {
@@ -101,9 +68,7 @@ function getRuffVersionFromPoetryGroups(
return poetryGroups return poetryGroups
.flatMap((group) => Object.entries(group.dependencies)) .flatMap((group) => Object.entries(group.dependencies))
.map(([name, spec]) => { .map(([name, spec]) => {
if (typeof spec === "string") { if (name === "ruff" && typeof spec === "string") return spec;
return findRuffVersionInSpec(`${name} ${spec}`);
}
return undefined; return undefined;
}) })
.find((version) => version !== undefined); .find((version) => version !== undefined);
+176
View File
@@ -0,0 +1,176 @@
import * as core from "@actions/core";
export interface RetryOptions {
maxRetries: number;
initialDelayMs: number;
maxDelayMs: number;
backoffMultiplier: number;
timeoutMs?: number;
}
export const DEFAULT_RETRY_OPTIONS: RetryOptions = {
backoffMultiplier: 2,
initialDelayMs: 1000,
maxDelayMs: 10000,
maxRetries: 3,
timeoutMs: 30000, // 30 second timeout
};
export class RetryableError extends Error {
constructor(
message: string,
public readonly cause?: Error,
) {
super(message);
this.name = "RetryableError";
}
}
export class NonRetryableError extends Error {
constructor(
message: string,
public readonly cause?: Error,
) {
super(message);
this.name = "NonRetryableError";
}
}
export async function withRetry<T>(
operation: () => Promise<T>,
options: Partial<RetryOptions> = {},
operationName = "operation",
): Promise<T> {
const opts = { ...DEFAULT_RETRY_OPTIONS, ...options };
let lastError: Error | undefined;
for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
try {
if (attempt > 0) {
const delay = Math.min(
opts.initialDelayMs * opts.backoffMultiplier ** (attempt - 1),
opts.maxDelayMs,
);
core.info(
`Retrying ${operationName} (attempt ${attempt + 1}/${opts.maxRetries + 1}) after ${delay}ms delay...`,
);
await sleep(delay);
}
// Wrap operation with timeout if specified
if (opts.timeoutMs) {
return await withTimeout(operation(), opts.timeoutMs, operationName);
} else {
return await operation();
}
} catch (error) {
lastError = error as Error;
// Don't retry on non-retryable errors
if (lastError instanceof NonRetryableError) {
core.debug(
`Non-retryable error in ${operationName}: ${lastError.message}`,
);
throw lastError.cause || lastError;
}
// Log the error for debugging
core.debug(
`Attempt ${attempt + 1} failed for ${operationName}: ${lastError.message}`,
);
// If this was the last attempt, throw the error
if (attempt === opts.maxRetries) {
core.error(
`${operationName} failed after ${opts.maxRetries + 1} attempts. Last error: ${lastError.message}`,
);
throw lastError;
}
}
}
throw lastError || new Error(`${operationName} failed for unknown reason`);
}
export async function withTimeout<T>(
promise: Promise<T>,
timeoutMs: number,
operationName = "operation",
): Promise<T> {
const timeoutPromise = new Promise<never>((_, reject) => {
setTimeout(() => {
reject(
new RetryableError(`${operationName} timed out after ${timeoutMs}ms`),
);
}, timeoutMs);
});
return Promise.race([promise, timeoutPromise]);
}
function sleep(ms: number): Promise<void> {
return new Promise((resolve) => setTimeout(resolve, ms));
}
export function isRetryableError(error: Error): boolean {
const message = error.message.toLowerCase();
// Network-related errors that should be retried
const retryableMessages = [
"connect timeout",
"connection timeout",
"timeout",
"econnreset",
"econnrefused",
"enotfound",
"network error",
"request timeout",
"socket timeout",
"fetch failed",
"connect etimedout",
];
// HTTP status codes that should be retried
const retryableStatusCodes = [408, 429, 500, 502, 503, 504];
// Check for retryable messages
if (retryableMessages.some((msg) => message.includes(msg))) {
return true;
}
// Check for HTTP status codes in error message
const statusMatch = message.match(/status.*?(\d{3})/);
if (statusMatch) {
const statusCode = parseInt(statusMatch[1], 10);
if (retryableStatusCodes.includes(statusCode)) {
return true;
}
}
return false;
}
export function wrapWithRetryLogic<T>(
operation: () => Promise<T>,
operationName: string,
options: Partial<RetryOptions> = {},
): () => Promise<T> {
return async () => {
try {
return await withRetry(operation, options, operationName);
} catch (error) {
const err = error as Error;
if (isRetryableError(err)) {
throw new RetryableError(
`${operationName} failed: ${err.message}`,
err,
);
} else {
throw new NonRetryableError(
`${operationName} failed: ${err.message}`,
err,
);
}
}
};
}