mirror of
https://github.com/astral-sh/ruff-action.git
synced 2026-08-08 10:17:03 +00:00
Compare commits
18
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12172e3cfe | ||
|
|
0e7e01552a | ||
|
|
03f689c6c5 | ||
|
|
5ad29210b1 | ||
|
|
e46bd63c5f | ||
|
|
bfff570296 | ||
|
|
6576144cee | ||
|
|
7af5f13130 | ||
|
|
c48d3eaf66 | ||
|
|
f18f95d449 | ||
|
|
15a82c0309 | ||
|
|
5071c37a33 | ||
|
|
c397d0cf88 | ||
|
|
16fb2a8927 | ||
|
|
421486e990 | ||
|
|
6d8460e4e6 | ||
|
|
74b1866cee | ||
|
|
fbc7e4525b |
@@ -39,11 +39,13 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v3
|
uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
source-root: src
|
source-root: src
|
||||||
@@ -55,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@v3
|
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
|
||||||
@@ -69,4 +71,4 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v3
|
uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
|
||||||
|
|||||||
@@ -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@v6.1.0
|
uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|||||||
+72
-26
@@ -10,14 +10,18 @@ concurrency:
|
|||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Actionlint
|
- name: Actionlint
|
||||||
uses: eifinger/actionlint-action@23c85443d840cd73bbecb9cddfc933cc21649a38 # v1.9.1
|
uses: eifinger/actionlint-action@03ff1f78c0670b71017616a37170f327df932030 # v1.9.2
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version: "20"
|
||||||
- run: |
|
- run: |
|
||||||
@@ -38,7 +42,9 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use latest version
|
- name: Use latest version
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -51,7 +57,9 @@ 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@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use version ${{ matrix.ruff-version }}
|
- name: Use version ${{ matrix.ruff-version }}
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -60,7 +68,9 @@ jobs:
|
|||||||
test-unsupported-version:
|
test-unsupported-version:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Try install old version
|
- name: Try install old version
|
||||||
id: install
|
id: install
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
@@ -70,13 +80,17 @@ jobs:
|
|||||||
src: __tests__/fixtures/python-project
|
src: __tests__/fixtures/python-project
|
||||||
- name: Check if the action failed
|
- name: Check if the action failed
|
||||||
run: |
|
run: |
|
||||||
if [ ${{ steps.install.outcome }} == "success" ]; then
|
if [ "${INSTALL_OUTCOME}" == "success" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
env:
|
||||||
|
INSTALL_OUTCOME: ${{ steps.install.outcome }}
|
||||||
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@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use version from pyproject.toml
|
- name: Use version from pyproject.toml
|
||||||
id: ruff-action
|
id: ruff-action
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -93,7 +107,9 @@ jobs:
|
|||||||
test-default-version-from-pyproject:
|
test-default-version-from-pyproject:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use default version from pyproject.toml
|
- name: Use default version from pyproject.toml
|
||||||
id: ruff-action
|
id: ruff-action
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -109,7 +125,9 @@ 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@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use default version from pyproject.toml dev group
|
- name: Use default version from pyproject.toml dev group
|
||||||
id: ruff-action
|
id: ruff-action
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -126,7 +144,9 @@ 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@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use default version from pyproject.toml dependency groups
|
- name: Use default version from pyproject.toml dependency groups
|
||||||
id: ruff-action
|
id: ruff-action
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -143,7 +163,9 @@ jobs:
|
|||||||
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@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use default version from pyproject.toml poetry group dependencies
|
- name: Use default version from pyproject.toml poetry group dependencies
|
||||||
id: ruff-action
|
id: ruff-action
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -160,7 +182,9 @@ 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@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use default version from pyproject.toml poetry dependencies
|
- name: Use default version from pyproject.toml poetry dependencies
|
||||||
id: ruff-action
|
id: ruff-action
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -177,7 +201,9 @@ 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@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use default version from pyproject.toml optional dependencies
|
- name: Use default version from pyproject.toml optional dependencies
|
||||||
id: ruff-action
|
id: ruff-action
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -194,7 +220,9 @@ jobs:
|
|||||||
test-default-version-from-requirements:
|
test-default-version-from-requirements:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use default version from requirements.txt
|
- name: Use default version from requirements.txt
|
||||||
id: ruff-action
|
id: ruff-action
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -211,7 +239,9 @@ jobs:
|
|||||||
test-semver-range:
|
test-semver-range:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use version 0.7
|
- name: Use version 0.7
|
||||||
id: ruff-action
|
id: ruff-action
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -228,7 +258,9 @@ jobs:
|
|||||||
test-pep440-version-specifier:
|
test-pep440-version-specifier:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Install version 0.9.10
|
- name: Install version 0.9.10
|
||||||
id: ruff-action
|
id: ruff-action
|
||||||
uses: ./
|
uses: ./
|
||||||
@@ -252,7 +284,9 @@ jobs:
|
|||||||
- os: macos-latest
|
- os: macos-latest
|
||||||
checksum: "af9583bff12afbca5d5670334e0187dd60c4d91bc71317d1b2dde70cb1200ba9"
|
checksum: "af9583bff12afbca5d5670334e0187dd60c4d91bc71317d1b2dde70cb1200ba9"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Checksum matches expected
|
- name: Checksum matches expected
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -262,7 +296,9 @@ jobs:
|
|||||||
test-with-explicit-token:
|
test-with-explicit-token:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use default version
|
- name: Use default version
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -274,7 +310,9 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest]
|
os: [ubuntu-latest, windows-latest]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use args
|
- name: Use args
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -283,7 +321,9 @@ jobs:
|
|||||||
test-failure:
|
test-failure:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Format should fail
|
- name: Format should fail
|
||||||
id: format-should-fail
|
id: format-should-fail
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
@@ -293,9 +333,11 @@ jobs:
|
|||||||
src: __tests__/fixtures/malformed-python-project
|
src: __tests__/fixtures/malformed-python-project
|
||||||
- name: Check if the action failed
|
- name: Check if the action failed
|
||||||
run: |
|
run: |
|
||||||
if [ ${{ steps.format-should-fail.outcome }} == "success" ]; then
|
if [ "${FORMAT_SHOULD_FAIL_OUTCOME}" == "success" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
env:
|
||||||
|
FORMAT_SHOULD_FAIL_OUTCOME: ${{ steps.format-should-fail.outcome }}
|
||||||
- name: Check should fail
|
- name: Check should fail
|
||||||
id: check-should-fail
|
id: check-should-fail
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
@@ -304,16 +346,20 @@ jobs:
|
|||||||
src: __tests__/fixtures/malformed-python-project
|
src: __tests__/fixtures/malformed-python-project
|
||||||
- name: Check if the action failed
|
- name: Check if the action failed
|
||||||
run: |
|
run: |
|
||||||
if [ ${{ steps.check-should-fail.outcome }} == "success" ]; then
|
if [ "${CHECK_SHOULD_FAIL_OUTCOME}" == "success" ]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
env:
|
||||||
|
CHECK_SHOULD_FAIL_OUTCOME: ${{ steps.check-should-fail.outcome }}
|
||||||
test-multiple-src:
|
test-multiple-src:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ ubuntu-latest, windows-latest ]
|
os: [ ubuntu-latest, windows-latest ]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Use args
|
- name: Use args
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
@@ -348,6 +394,6 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: All tests passed
|
- name: All tests passed
|
||||||
run: |
|
run: |
|
||||||
echo "All jobs passed: ${{ !contains(needs.*.result, 'failure') }}"
|
echo "All jobs passed: ${{ !(contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')) }}"
|
||||||
# shellcheck disable=SC2242
|
# shellcheck disable=SC2242
|
||||||
exit ${{ contains(needs.*.result, 'failure') && 1 || 0 }}
|
exit ${{ (contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')) && 1 || 0 }}
|
||||||
|
|||||||
@@ -11,8 +11,10 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
- uses: actions/setup-node@v4
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||||
with:
|
with:
|
||||||
node-version: "20"
|
node-version: "20"
|
||||||
- name: Update known checksums
|
- name: Update known checksums
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
- name: Update Major Minor Tags
|
- name: Update Major Minor Tags
|
||||||
run: |
|
run: |
|
||||||
set -x
|
set -x
|
||||||
|
|||||||
@@ -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 |
|
||||||
|
|||||||
+431
-42
@@ -29071,6 +29071,168 @@ 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.0": "0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec",
|
||||||
|
"aarch64-pc-windows-msvc-0.14.0": "a882d2ec2235c13f63453fde682775d2e1f8a44ccfd1af9e031255b051e30e70",
|
||||||
|
"aarch64-unknown-linux-gnu-0.14.0": "60fc3b464a723456ba1bc8cd91d29806753c885f72e26ac67b718cee6b35aaca",
|
||||||
|
"aarch64-unknown-linux-musl-0.14.0": "34a25398f03e7d32a4ec406c5c841c6e183fa0a96fbdd40b7e7eec1f177b360e",
|
||||||
|
"arm-unknown-linux-musleabihf-0.14.0": "7fd422231c9f34ccf8afed3e11db7add9aaedb25e8f5086e856e1f405f8b6625",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.14.0": "994f029a927373d9039319775971ae04aaf07cfe2b2d0eed2e1f4817437441dc",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.14.0": "dad98aa125f6c164e1dec2401dc67661128725f17d7a2d17021254ad47f29a69",
|
||||||
|
"i686-pc-windows-msvc-0.14.0": "75326418f1728e83ff615143beb32d203c73272621c4fec402dfd9c4ca0a403d",
|
||||||
|
"i686-unknown-linux-gnu-0.14.0": "5005907c511b455ff6f617805ddd6363e648240fe639134f93190e8c20496c75",
|
||||||
|
"i686-unknown-linux-musl-0.14.0": "58831bbc23d69541643796922197e3f145f556283409683f8a19624e89f13956",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.14.0": "7c892d6dd348b8a01ba07c6a819f3f68996b5e73a1dc9b8f0858f4f3788d89b1",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.14.0": "b66f376d7a19808ab5760f98c1cdf577e7dab666340437fb665a863baf701c02",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.14.0": "7126a36d39b58d2bb45a241e490c5b6f9e6f9f32880a0c50f65f6545b73b570c",
|
||||||
|
"s390x-unknown-linux-gnu-0.14.0": "d6160cda15380eed80c4512b4c577e105e3f00a5a6d6e5c5f6dcc1199a91396a",
|
||||||
|
"x86_64-apple-darwin-0.14.0": "880ae046b435eb306cd557a7481eed6da463b85f283ba1f2c1e2ad7c139ed6c5",
|
||||||
|
"x86_64-pc-windows-msvc-0.14.0": "f81f957c862f310ac0be70ae7cef2e99afb4cc09648e40c039432e11465c2c1c",
|
||||||
|
"x86_64-unknown-linux-gnu-0.14.0": "28fe06f700caf99eee235f90e6e349f48b7f9a4b0d42e3ee5b3686f9259649a3",
|
||||||
|
"x86_64-unknown-linux-musl-0.14.0": "ed6d1b8407a1d228dc332fb19057e86e04a6cd3c2beacdb324ad6ff2a3f9071b",
|
||||||
|
"aarch64-apple-darwin-0.13.3": "a170ead9a9f03527dba3d2fb3e9e445f73d9efe3584c3307f3d30c6d5f31c487",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.3": "382c0c3948330f8abe0b5349c41aa80a01a6c54201f2312ef41152a057008bce",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.3": "bbc9e73e8e302ec2f6175165374aadfb15f5210ec12660aa444c1cc1e3058cfc",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.3": "4301d51fd2fbce6d4cc55613e5f8f96ee4fcb8dcaec8419023fe555575cf78f6",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.3": "377dc72597e3760b25c3b18616bf69966aed963e68b51f94a12c63207da286ba",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.3": "86c4411773e21fa4bc1969da3a62d9f795205d83908d94a0bf3d91b577a6edaf",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.3": "8c981482f90a9bc4bed9c8f5b51ea272fb70baf239998a8ae13d7a57c8eeeb09",
|
||||||
|
"i686-pc-windows-msvc-0.13.3": "f8800f124929cac319ec13be1d5a3941a0ba986e3c2e8bb31eee962098eb5e0c",
|
||||||
|
"i686-unknown-linux-gnu-0.13.3": "77502c38f90e583bcc8e713007fcb5ec669c872252850028e01e98893e8bd6be",
|
||||||
|
"i686-unknown-linux-musl-0.13.3": "e6f740d1b8eb8c14adab59abfe1fcf0ba97ebd34c92c65611de001e28edb697d",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.3": "f402e5e49bcfc3b4bcc54a093c908a5798fb61890a96a9aa034ecb79bebcf398",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.3": "eb22f5bcf2f7e4cbec894423c00b31169ac6df0898fccfb465f0e29d1370f9bc",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.3": "83c62e1b880ffd36020b50fd9d2c5169ed3eba984b59f5347ea3301636f747da",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.3": "2e8cbf501f913fe809e9fc382229d214ed7ba0ddaa556d9cb3ca4b254865d1ac",
|
||||||
|
"x86_64-apple-darwin-0.13.3": "1c3a291a595ddd08398eb1e06fba883b7d8d715bd4255af5972f858fec8b4e57",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.3": "01e7ce81e052ad8788d6a9bffbce74524d80fbf0659e6194165d1e1d3ded9f39",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.3": "65667601e41bc669b5b52e0e52cb778d4a982381c9b92423279e8ca43f11268a",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.3": "8d24d74171772c67366d3187b990a3dc706022aa3a631b2a612d12e362f226c7",
|
||||||
|
"aarch64-apple-darwin-0.13.2": "96738ad0b9decb981f53790949487650255a9da0375524b02dcdd862de9f2efa",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.2": "58b946ceaa220052bcb919d1a64ce3fd216ab24ae121fd0484513dd518ff5a40",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.2": "6aabf5f6d12d981d5b6d0759b118bd52ad4de77695f573c96d74de78fb2b1820",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.2": "a225f352214340d50882ede447fb8eea6a0a5a77233a2e03cda194aa19e5e514",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.2": "5dc57704c05c4e583b1b98aacc70ca900f9bb15abb3def1ae9d178905f2fa0f3",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.2": "5b16463eb53cc2189c46c9b40c1596fa28d0a657681594ca42afc5606fac732e",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.2": "4c852003d3b9841fb61910bfb0dd2588bff51db647f759b23fcfd637811d379e",
|
||||||
|
"i686-pc-windows-msvc-0.13.2": "cc498f637cca87e1a87ba35f66e020797e514959bf74932d87d9b8c8a5d733b1",
|
||||||
|
"i686-unknown-linux-gnu-0.13.2": "a951df6892005b6f5c8264b531f2ddf253dec9097dbcee9594295227eb93455d",
|
||||||
|
"i686-unknown-linux-musl-0.13.2": "ad6b9933e4b43d509aa686b4e915aa132a8537ee2fe86753ca29d1efac8270c9",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.2": "3f656a654fc7f19a9dd9b6f4e17f8b181fca2d8eb36036d4c44a7d747ca4f834",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.2": "cb6aab61485a32c24e334c005106775c94dad10a687dd31a3e2e9ddc65682776",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.2": "a1ea659d0aab60dc3aa308d1ebf27abb3e95b4bbd89b836d9e8fb91dcc9b1b45",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.2": "8ba0c6d8ad5e102d9d4e6d3fbdabdf4cd1a894add52bc8b238bd675a03abc9b7",
|
||||||
|
"x86_64-apple-darwin-0.13.2": "ed848ebd0a8d7d96a88686c5fc86e8bb6a4c1b831ace2dfa252777f9c69460c6",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.2": "dea59c3440e59e4dbfa17ec8e51c10fb6f7586650cf30aad8dd8674ee4cb3f3c",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.2": "882a9b37e9fde0835ea67f98ad240c16abee6a2d374bc2429fee45a25b4a0738",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.2": "60755c060181b8d3649d5b568ebc80f76df49dd03249445627f2ceae552c21b6",
|
||||||
|
"aarch64-apple-darwin-0.13.1": "1cfb3a7455a83602d474044243b618989edf58c2edda45eb4d3331ab550d52c1",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.1": "17c8ec337b61c014c0d1d090e379f28181d34c3d29edf528de3cf006f944bb18",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.1": "a2c2063a82428abe654cc8cdd7427db0b5790ccdd6b8ab505af17e328b0e7d32",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.1": "3ad26d4a7a736e00373e635f03d7427e20183b0fe99b003a494bd5cdbc3c9c12",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.1": "810e2f052b66c86836c6fcb88b888f6731047537d38e97afc4d43787363bddfe",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.1": "c603565c9e1b13acadf54c02ff7a42b32787c6b60f45971e2519547d77535df4",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.1": "1d120eef7b14b5d141e77ffb3e3eaf161e597e7b55cc7d45977f1960b5be2d08",
|
||||||
|
"i686-pc-windows-msvc-0.13.1": "f95615a35a87d7f8f6fb501feb01bc419e6d268ecd4af4f18777efac603a7d2a",
|
||||||
|
"i686-unknown-linux-gnu-0.13.1": "2d332ec4da0b211a34a65c9f89dfd482907b35dfa82b95964fba82acb9db7948",
|
||||||
|
"i686-unknown-linux-musl-0.13.1": "8e0f53b0ef11ef1a328a9c33dd565d16149397c33ac5bf9b1218373dad896e0f",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.1": "5f122167cb3719ae116421a6d2ff30a6dbf7f06649a998b7ea25a0450e3a4285",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.1": "b2af20eb2a3a976c6bb5573a98e577334a366bc6a15a06dee165ae85ad7efe5d",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.1": "48af0ab64584ee9b3c2b44e3c311e5c9ccce56af16234b7c916cc22068b1494e",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.1": "08cd47492750a58546d799b4774fcf21e62b8d9a5015d3bf1751d69a19659eea",
|
||||||
|
"x86_64-apple-darwin-0.13.1": "9c4d53f20f5bae4d4e664cc91c26d57c1d0a67fb5fd16af6cffdac0db88474c2",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.1": "d9a89413459698f4b1a3803fe76ce1f5976c7d058ed33a081dcc570aca20ced7",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.1": "ed653acecf38654fb2e0e45c760a2a12fabf84b390230efa0529896576fcb84a",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.1": "917c300e001a86d9a5d9aaa275dc49b20a7438e3f298e071b7b695a4092f1898",
|
||||||
|
"aarch64-apple-darwin-0.13.0": "0d706798534537b6655b79fd95c2955c0a0013d4c54d36679d3306825a6bd6aa",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.0": "7131186a9e946ed5ef6bc90724b549b05317bbb7919b19927bfdf23df4434249",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.0": "7aae1ff1a049bca087aabacf05dc7a13fcca4616efe1b7f031c3397d52f25e82",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.0": "bdee6f1376470b74b1dc5ed48eca52ec9c3e4512bd7f3204e0df100f0bed4741",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.0": "9d118582cb4b2bb803be19b24b12ce74c78d450fbd9b6b3ca0bb1a8d626add89",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.0": "eddb2dc55df67cca755b6e9006a28d709f6d565c8925dbe73569be195fe2ed35",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.0": "9b9f0e9926966b6f7227ff5eb115f0ce9fa00e70173a5ba52a4498cce9ccda49",
|
||||||
|
"i686-pc-windows-msvc-0.13.0": "2cfb5ee1214ce8e5d8bbeefd7f48571b98f03dfb4f226fdebf879af82f912d7c",
|
||||||
|
"i686-unknown-linux-gnu-0.13.0": "ec837f0fd6c2bdae082ac6af0417b235fdc500de56cecad9b1969c683a3c1126",
|
||||||
|
"i686-unknown-linux-musl-0.13.0": "f1a4fd05eceee516eea520ae13fa9b496fa34563cadcc6b77f3f1bdd39b22dd6",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.0": "da2b5c82d2f68a5c52997d4557c7d399af8fa541e7691ccc5b4f44156c4389e2",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.0": "55754ba31237cc0b4ce8156cfd76498a4478784568b200cd6a910de5931b84cf",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.0": "41efed62a6c46f3e267763d481c223db96179a2eea203ad429f7af9986af1994",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.0": "a425d93ed5f3fd3d0e842c34fc26caf0226380c5c1feb953dc5143d32270833b",
|
||||||
|
"x86_64-apple-darwin-0.13.0": "ac47ad1ac90f3070c064d2f5fceef4fe609fec7c073fd29d0814ed126c492e6d",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.0": "3a8d8cb96333671f78a5d209ddb4f830287e3eb2796fe01dd043b02ec1c1c7f1",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.0": "19152c46d147cf0d3bf8486628fa1de4a8a33cdc5a1b263c4ed31c949de992d7",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.0": "b56ac90cc6987401bafdcf1b931ef044074c5b9451286afa4606a983f64f4fdd",
|
||||||
|
"aarch64-apple-darwin-0.12.12": "fcf7bf04fcd4de79c5a4046ac4dd5eef6ad82f584f8656c2ab1da218639d386d",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.12": "b55d13ad63c8f48c623adb0290b5e02fa5cb65dc76b4bbcff649d7f1d4273af8",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.12": "e8e508419940fd33c657b8abd3c0ede7ec04006619476e22f02d78ccd9476b44",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.12": "1fe423a0dba3d441bbd5e5cb46a635a8fcbe9812488524235e4f1bb725754f01",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.12": "60d90844366feb2a3014f05440c229b8e916f4d197e38cb5e4f8149a39aebc92",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.12": "273e73c140816c188399f4364b698998d1aba1e4b682696729c4e54de3670772",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.12": "3fabdcdde82870e53623f634a43d5bb543e7cfa8bc3b6e24149cbf19ab6436a2",
|
||||||
|
"i686-pc-windows-msvc-0.12.12": "6121d1e2b0a5a37821aaa2c2d21e81da80e94c942fa12b6f752531b882cd0c51",
|
||||||
|
"i686-unknown-linux-gnu-0.12.12": "7420224b8a5f7283147f72284de649a297a762bb8984ddc1ffda56f623748938",
|
||||||
|
"i686-unknown-linux-musl-0.12.12": "75ed6520296f67e9b0cd82e26d3897896a24747e41dfa33786458208a7a491fd",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.12": "3308e5a680189793bfd408e52c724124c9cf01787f13da31c4d8e5d5bb02c620",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.12": "3cb063448a9acf92d5e234b4af2cc8800808e0c9d09078dc66f2ca64dffa9a0e",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.12": "140ba0ebddd736b793c80ec36dc870fa11974cf194921fefb6aab303afe1a696",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.12": "13777acab7da68b180912e3933249ee069378b8f768e95ff0d2359d43f9e549a",
|
||||||
|
"x86_64-apple-darwin-0.12.12": "92231ffd1448909f09ce2675ea674e5c51e1984cb64b99919fff60b861b4f5d9",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.12": "bd10f42b2d580e2fd4af2757d68df34e6483dbee5d57263b33b2198cc11058a8",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.12": "1baad5d4282fcad356925d45b84b5c0a9c8a814c1b7919027651b8f83bd78828",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.12": "dd4840045c585ebc982530b9a8b687787dd6f3c099da93a6c1ff495471ab937b",
|
||||||
|
"aarch64-apple-darwin-0.12.11": "09690b35cac07d5bb096b291b88b8adcbf7750163c20ada2dfd33aa02acd3d88",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.11": "758d7da795fca758ca82b3b657f71dda92ef090bbb581bce189dde5412eafcc6",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.11": "4664bec73806c4b9a30a56510281004dcccfac4f1877a60fcd87e07b01ab7463",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.11": "9848a6f91b0aa292063c04a74f5a8984a83bb1f4c9c21518e6f9eda4ec810d44",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.11": "f82835161ff591489ed270781154ea78b0e4b55f98229892f7efa200be3cff74",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.11": "e231c22937bf53d399a0f10e6b7e418c7e69462c0ce2b6a51a49e51a8a3e060d",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.11": "7d94766a23e40a6c351aa803cf868247a006bbe5ee08385edf8d02889ba1ddaa",
|
||||||
|
"i686-pc-windows-msvc-0.12.11": "5f44870463efc6c8b16eb07f2b6fc8209c75f5c1050ef83b2c66305a6dd0839c",
|
||||||
|
"i686-unknown-linux-gnu-0.12.11": "e2b7c746c40aaacb0f8eeef4bf04c520479ecf3b162edb7c836e8873c68b099c",
|
||||||
|
"i686-unknown-linux-musl-0.12.11": "a644834a42e13b3768c151152f154e3ab12154e5566dfb46edea0bf3862d6e43",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.11": "99736afef3ea165aae8800411a1c058a0037f774691400c1679bd609a5bc0419",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.11": "c01aef8b1f20878952399a1a71011be2ab14471c44d94b652be1e41ee3e07315",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.11": "88d0604b40b523b208e68669512bc8a6d2ea7043d745976ff6530de79bce9385",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.11": "cc16d30ba5a4544c75d608ac78cf59ebb27f657c7e92ea853398ed63794a7319",
|
||||||
|
"x86_64-apple-darwin-0.12.11": "b6627363e52f6b49466f032894c3c395c4bbc645f6c520069050debbbaf8204f",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.11": "a9246d32c62999747cd0671e7d11ad4ebfb36a5f658fe63de583c7a5e9e2f306",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.11": "c127b7ccc292ad4489440e90e3ef314113cda79f3add3acd687a0db235f1692c",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.11": "8e1631dc9b662759d08ab7bc0e4643636e36c450479006711bfe0d83b659686f",
|
||||||
|
"aarch64-apple-darwin-0.12.10": "72c6abf39f5e87c57faa2d191baf2582e437ff72cdc0f52b7c7e50f26d41b807",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.10": "b157b393f368f9f1f646f573066e0cbf81fa852be3ba15fdd3a76c75a0b45c6e",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.10": "f58ea47d6d482712a8338056541fb604956d8c81f37323d29c7920a88179e542",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.10": "10b43a88fb948aaae538ec9f35e93b4433f144d0379fb3a67d88282595b969f7",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.10": "a6d94f838d4a2720199ea530172b63280860f9f92cae1eaaa3041899e62664e2",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.10": "4e1a7330cebebd3f4e4e0dc1f5b8d4f768f0dc1cff0e199e8425eb8ebe8bf799",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.10": "4f0b1cd3ea250c87abc766c341225e12c465fc4622272e621e9fb64b4b00ac19",
|
||||||
|
"i686-pc-windows-msvc-0.12.10": "b5d58c3b59aebe46626116721498bb7f88605f0085ebc23d3a75b78724ecc687",
|
||||||
|
"i686-unknown-linux-gnu-0.12.10": "759096182f5e767efc6b7f3ac2a3df2dceb26c5091604b03a305f3882fb80ae4",
|
||||||
|
"i686-unknown-linux-musl-0.12.10": "c7b6d22586642a3f2f6ce051a75783874cb7f3f3626e28b92fbf22fbbfd2329d",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.10": "49e52b6ee3edef681e1d28127ef990b504996b97d8e1ee30a000a72c9486c31e",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.10": "0c562f790640b6d128867af254a646b86d1975a7ae426b3a61e332c08ad9db6c",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.10": "9ca0ecf7a7b93a7d3348cbc10989a4779a9a79bc47b5ab47f510fde74abe88d5",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.10": "a71fe85458fb0e1df2e73abb03a945a90eda722162fe13e1b326bd6807b83192",
|
||||||
|
"x86_64-apple-darwin-0.12.10": "8619f277921b3e2e56d850c3e203fd4ef10b457bc50f93ab6fe85743eb324de6",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.10": "a639e4dee10cb2900bffa7165457766671c59c744ce6b61cc658c35ab33a91fd",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.10": "a3e1757c16f3feffab6faf22140d57e5528c91c7b338d4fa542dc50f95b857fb",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.10": "dd4e5b8f81547a48975489913a80e0dce6be7f1c455912fe3a5bd5a1f5f1a35d",
|
||||||
|
"aarch64-apple-darwin-0.12.9": "68cb47f9a98e17c59e861c3b635b32c5212defd21a4ec0b5c1d56950d06076e5",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.9": "c747d2ca1bd3bb6df0a2af31f39a53180f2bf556242e5380c495cbd7056c10be",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.9": "302dcca660fb843f4cebff7ae57e1f4177c5cbc3d760aea419cead8a741a77b7",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.9": "dca567860383bb6a7b021dab76c616b02ed9a268516a0a1a1dce56ee482740d7",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.9": "d58c9b2a5f92494a5765a22feaf4704eede88a97105d60a0436d3af9b88db335",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.9": "062242367b6a3e72f436e6f913b1c1afa2cc161dc270128366b3f0e27e14f2f6",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.9": "aee8c90b621d339bb10fa53a88e3f3d33881ddaa7a5d04a398b3c2eb42769f3c",
|
||||||
|
"i686-pc-windows-msvc-0.12.9": "3a043c3f3b5dfd2bd074a6bc86ee83f218dad59dc47b2dcea23ef27ac9b973eb",
|
||||||
|
"i686-unknown-linux-gnu-0.12.9": "5f5a3ae7b21e09b2fca7a950e466f56769845b93a851bc354f2811c6483041dd",
|
||||||
|
"i686-unknown-linux-musl-0.12.9": "66e5db26cc7bf20edc8be2e89dfceb25bd5828ea7405009ad0c5edaa7019e47f",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.9": "0a520d5bc483ef02c4d37d716d8ed276e08d5df8e85b5cce8cdb5a2cefe31777",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.9": "ac9c786cc9bb6c84aa3a5ea5f5a2135349f3e3a28068f307863d8d72c83b11e3",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.9": "cf7bf473d85ceb289b0e51619cf07d3b854976dc6f99213c869c1e4710264bc7",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.9": "2d67952a2f5b4fff530e89f969cd4075b7086032135829ae82221b2d2bd2bab0",
|
||||||
|
"x86_64-apple-darwin-0.12.9": "cc8195f89146268086e99225316b4214100eb78010aa84b9e650f8322d5790f0",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.9": "9d360dfd4ca5f688aabf542c570644fab8b02a3c0e71460cf51fc4869df03ba6",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.9": "db126272c8473979d744c9be0fd9410ca431dc0cc9daa67286f4f206dd715957",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.9": "c177d59d4c6347abbf08c8943eff919432d5c70229a0dd6390e5697d393a9c05",
|
||||||
"aarch64-apple-darwin-0.12.8": "d7ddfc029858b97452e728c229b0378e3dde5300b23df5cc5c77296025971379",
|
"aarch64-apple-darwin-0.12.8": "d7ddfc029858b97452e728c229b0378e3dde5300b23df5cc5c77296025971379",
|
||||||
"aarch64-pc-windows-msvc-0.12.8": "99cedac1f9b7a321a0e2b81ded68bbaf5dbff6aedac528766eda50d3871ccce9",
|
"aarch64-pc-windows-msvc-0.12.8": "99cedac1f9b7a321a0e2b81ded68bbaf5dbff6aedac528766eda50d3871ccce9",
|
||||||
"aarch64-unknown-linux-gnu-0.12.8": "fc4a79cfe90c8e4f7bfdad2198e939b70416916a7e90f687f30490b25e2171d6",
|
"aarch64-unknown-linux-gnu-0.12.8": "fc4a79cfe90c8e4f7bfdad2198e939b70416916a7e90f687f30490b25e2171d6",
|
||||||
@@ -31560,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) {
|
||||||
@@ -31581,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);
|
||||||
@@ -31637,26 +31814,48 @@ async function resolveVersion(versionInput, githubToken) {
|
|||||||
return resolvedVersion;
|
return resolvedVersion;
|
||||||
}
|
}
|
||||||
async function getAvailableVersions(githubToken) {
|
async function getAvailableVersions(githubToken) {
|
||||||
try {
|
return await (0, retry_1.withRetry)(async () => {
|
||||||
const octokit = new PaginatingOctokit({
|
try {
|
||||||
auth: githubToken,
|
const octokit = new PaginatingOctokit({
|
||||||
});
|
auth: githubToken,
|
||||||
return await getReleaseTagNames(octokit);
|
});
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
if (err.message.includes("Bad credentials")) {
|
|
||||||
core.info("No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.");
|
|
||||||
const octokit = new PaginatingOctokit();
|
|
||||||
return await getReleaseTagNames(octokit);
|
return await getReleaseTagNames(octokit);
|
||||||
}
|
}
|
||||||
throw err;
|
catch (err) {
|
||||||
}
|
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.");
|
||||||
|
const octokit = new PaginatingOctokit();
|
||||||
|
return await getReleaseTagNames(octokit);
|
||||||
|
}
|
||||||
|
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 () => {
|
||||||
owner: constants_1.OWNER,
|
try {
|
||||||
repo: constants_1.REPO,
|
return await octokit.paginate(octokit.rest.repos.listReleases, {
|
||||||
});
|
owner: constants_1.OWNER,
|
||||||
|
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.");
|
||||||
@@ -31664,35 +31863,56 @@ 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) {
|
||||||
const octokit = new PaginatingOctokit({
|
return await (0, retry_1.withRetry)(async () => {
|
||||||
auth: githubToken,
|
const octokit = new PaginatingOctokit({
|
||||||
});
|
auth: githubToken,
|
||||||
let latestRelease;
|
});
|
||||||
try {
|
let latestRelease;
|
||||||
latestRelease = await getLatestRelease(octokit);
|
try {
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
if (err.message.includes("Bad credentials")) {
|
|
||||||
core.info("No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.");
|
|
||||||
const octokit = new PaginatingOctokit();
|
|
||||||
latestRelease = await getLatestRelease(octokit);
|
latestRelease = await getLatestRelease(octokit);
|
||||||
}
|
}
|
||||||
else {
|
catch (err) {
|
||||||
core.error("Github API request failed while getting latest release. Check the GitHub status page for outages. Try again later.");
|
const error = err;
|
||||||
throw err;
|
if (error.message.includes("Bad credentials")) {
|
||||||
|
core.info("No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.");
|
||||||
|
const octokit = new PaginatingOctokit();
|
||||||
|
latestRelease = await getLatestRelease(octokit);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
core.error("Github API request failed while getting latest release. Check the GitHub status page for outages. Try again later.");
|
||||||
|
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) {
|
||||||
const { data: latestRelease } = await octokit.rest.repos.getLatestRelease({
|
return await (0, retry_1.withRetry)(async () => {
|
||||||
owner: constants_1.OWNER,
|
try {
|
||||||
repo: constants_1.REPO,
|
const { data: latestRelease } = await octokit.rest.repos.getLatestRelease({
|
||||||
});
|
owner: constants_1.OWNER,
|
||||||
return latestRelease;
|
repo: constants_1.REPO,
|
||||||
|
});
|
||||||
|
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);
|
||||||
@@ -31822,7 +32042,7 @@ async function determineVersion() {
|
|||||||
}
|
}
|
||||||
const versionFromPyproject = (0, pyproject_1.getRuffVersionFromRequirementsFile)(pyProjectPath);
|
const versionFromPyproject = (0, pyproject_1.getRuffVersionFromRequirementsFile)(pyProjectPath);
|
||||||
if (versionFromPyproject === undefined) {
|
if (versionFromPyproject === undefined) {
|
||||||
core.warning(`Could not parse version from ${pyProjectPath}. Using latest version.`);
|
core.info(`Could not parse version from ${pyProjectPath}. Using latest version.`);
|
||||||
}
|
}
|
||||||
return await (0, download_version_1.resolveVersion)(versionFromPyproject || "latest", inputs_1.githubToken);
|
return await (0, download_version_1.resolveVersion)(versionFromPyproject || "latest", inputs_1.githubToken);
|
||||||
}
|
}
|
||||||
@@ -32050,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:
|
||||||
|
|||||||
+366
-7
@@ -28205,6 +28205,168 @@ 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.0": "0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec",
|
||||||
|
"aarch64-pc-windows-msvc-0.14.0": "a882d2ec2235c13f63453fde682775d2e1f8a44ccfd1af9e031255b051e30e70",
|
||||||
|
"aarch64-unknown-linux-gnu-0.14.0": "60fc3b464a723456ba1bc8cd91d29806753c885f72e26ac67b718cee6b35aaca",
|
||||||
|
"aarch64-unknown-linux-musl-0.14.0": "34a25398f03e7d32a4ec406c5c841c6e183fa0a96fbdd40b7e7eec1f177b360e",
|
||||||
|
"arm-unknown-linux-musleabihf-0.14.0": "7fd422231c9f34ccf8afed3e11db7add9aaedb25e8f5086e856e1f405f8b6625",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.14.0": "994f029a927373d9039319775971ae04aaf07cfe2b2d0eed2e1f4817437441dc",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.14.0": "dad98aa125f6c164e1dec2401dc67661128725f17d7a2d17021254ad47f29a69",
|
||||||
|
"i686-pc-windows-msvc-0.14.0": "75326418f1728e83ff615143beb32d203c73272621c4fec402dfd9c4ca0a403d",
|
||||||
|
"i686-unknown-linux-gnu-0.14.0": "5005907c511b455ff6f617805ddd6363e648240fe639134f93190e8c20496c75",
|
||||||
|
"i686-unknown-linux-musl-0.14.0": "58831bbc23d69541643796922197e3f145f556283409683f8a19624e89f13956",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.14.0": "7c892d6dd348b8a01ba07c6a819f3f68996b5e73a1dc9b8f0858f4f3788d89b1",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.14.0": "b66f376d7a19808ab5760f98c1cdf577e7dab666340437fb665a863baf701c02",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.14.0": "7126a36d39b58d2bb45a241e490c5b6f9e6f9f32880a0c50f65f6545b73b570c",
|
||||||
|
"s390x-unknown-linux-gnu-0.14.0": "d6160cda15380eed80c4512b4c577e105e3f00a5a6d6e5c5f6dcc1199a91396a",
|
||||||
|
"x86_64-apple-darwin-0.14.0": "880ae046b435eb306cd557a7481eed6da463b85f283ba1f2c1e2ad7c139ed6c5",
|
||||||
|
"x86_64-pc-windows-msvc-0.14.0": "f81f957c862f310ac0be70ae7cef2e99afb4cc09648e40c039432e11465c2c1c",
|
||||||
|
"x86_64-unknown-linux-gnu-0.14.0": "28fe06f700caf99eee235f90e6e349f48b7f9a4b0d42e3ee5b3686f9259649a3",
|
||||||
|
"x86_64-unknown-linux-musl-0.14.0": "ed6d1b8407a1d228dc332fb19057e86e04a6cd3c2beacdb324ad6ff2a3f9071b",
|
||||||
|
"aarch64-apple-darwin-0.13.3": "a170ead9a9f03527dba3d2fb3e9e445f73d9efe3584c3307f3d30c6d5f31c487",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.3": "382c0c3948330f8abe0b5349c41aa80a01a6c54201f2312ef41152a057008bce",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.3": "bbc9e73e8e302ec2f6175165374aadfb15f5210ec12660aa444c1cc1e3058cfc",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.3": "4301d51fd2fbce6d4cc55613e5f8f96ee4fcb8dcaec8419023fe555575cf78f6",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.3": "377dc72597e3760b25c3b18616bf69966aed963e68b51f94a12c63207da286ba",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.3": "86c4411773e21fa4bc1969da3a62d9f795205d83908d94a0bf3d91b577a6edaf",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.3": "8c981482f90a9bc4bed9c8f5b51ea272fb70baf239998a8ae13d7a57c8eeeb09",
|
||||||
|
"i686-pc-windows-msvc-0.13.3": "f8800f124929cac319ec13be1d5a3941a0ba986e3c2e8bb31eee962098eb5e0c",
|
||||||
|
"i686-unknown-linux-gnu-0.13.3": "77502c38f90e583bcc8e713007fcb5ec669c872252850028e01e98893e8bd6be",
|
||||||
|
"i686-unknown-linux-musl-0.13.3": "e6f740d1b8eb8c14adab59abfe1fcf0ba97ebd34c92c65611de001e28edb697d",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.3": "f402e5e49bcfc3b4bcc54a093c908a5798fb61890a96a9aa034ecb79bebcf398",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.3": "eb22f5bcf2f7e4cbec894423c00b31169ac6df0898fccfb465f0e29d1370f9bc",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.3": "83c62e1b880ffd36020b50fd9d2c5169ed3eba984b59f5347ea3301636f747da",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.3": "2e8cbf501f913fe809e9fc382229d214ed7ba0ddaa556d9cb3ca4b254865d1ac",
|
||||||
|
"x86_64-apple-darwin-0.13.3": "1c3a291a595ddd08398eb1e06fba883b7d8d715bd4255af5972f858fec8b4e57",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.3": "01e7ce81e052ad8788d6a9bffbce74524d80fbf0659e6194165d1e1d3ded9f39",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.3": "65667601e41bc669b5b52e0e52cb778d4a982381c9b92423279e8ca43f11268a",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.3": "8d24d74171772c67366d3187b990a3dc706022aa3a631b2a612d12e362f226c7",
|
||||||
|
"aarch64-apple-darwin-0.13.2": "96738ad0b9decb981f53790949487650255a9da0375524b02dcdd862de9f2efa",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.2": "58b946ceaa220052bcb919d1a64ce3fd216ab24ae121fd0484513dd518ff5a40",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.2": "6aabf5f6d12d981d5b6d0759b118bd52ad4de77695f573c96d74de78fb2b1820",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.2": "a225f352214340d50882ede447fb8eea6a0a5a77233a2e03cda194aa19e5e514",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.2": "5dc57704c05c4e583b1b98aacc70ca900f9bb15abb3def1ae9d178905f2fa0f3",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.2": "5b16463eb53cc2189c46c9b40c1596fa28d0a657681594ca42afc5606fac732e",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.2": "4c852003d3b9841fb61910bfb0dd2588bff51db647f759b23fcfd637811d379e",
|
||||||
|
"i686-pc-windows-msvc-0.13.2": "cc498f637cca87e1a87ba35f66e020797e514959bf74932d87d9b8c8a5d733b1",
|
||||||
|
"i686-unknown-linux-gnu-0.13.2": "a951df6892005b6f5c8264b531f2ddf253dec9097dbcee9594295227eb93455d",
|
||||||
|
"i686-unknown-linux-musl-0.13.2": "ad6b9933e4b43d509aa686b4e915aa132a8537ee2fe86753ca29d1efac8270c9",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.2": "3f656a654fc7f19a9dd9b6f4e17f8b181fca2d8eb36036d4c44a7d747ca4f834",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.2": "cb6aab61485a32c24e334c005106775c94dad10a687dd31a3e2e9ddc65682776",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.2": "a1ea659d0aab60dc3aa308d1ebf27abb3e95b4bbd89b836d9e8fb91dcc9b1b45",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.2": "8ba0c6d8ad5e102d9d4e6d3fbdabdf4cd1a894add52bc8b238bd675a03abc9b7",
|
||||||
|
"x86_64-apple-darwin-0.13.2": "ed848ebd0a8d7d96a88686c5fc86e8bb6a4c1b831ace2dfa252777f9c69460c6",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.2": "dea59c3440e59e4dbfa17ec8e51c10fb6f7586650cf30aad8dd8674ee4cb3f3c",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.2": "882a9b37e9fde0835ea67f98ad240c16abee6a2d374bc2429fee45a25b4a0738",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.2": "60755c060181b8d3649d5b568ebc80f76df49dd03249445627f2ceae552c21b6",
|
||||||
|
"aarch64-apple-darwin-0.13.1": "1cfb3a7455a83602d474044243b618989edf58c2edda45eb4d3331ab550d52c1",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.1": "17c8ec337b61c014c0d1d090e379f28181d34c3d29edf528de3cf006f944bb18",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.1": "a2c2063a82428abe654cc8cdd7427db0b5790ccdd6b8ab505af17e328b0e7d32",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.1": "3ad26d4a7a736e00373e635f03d7427e20183b0fe99b003a494bd5cdbc3c9c12",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.1": "810e2f052b66c86836c6fcb88b888f6731047537d38e97afc4d43787363bddfe",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.1": "c603565c9e1b13acadf54c02ff7a42b32787c6b60f45971e2519547d77535df4",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.1": "1d120eef7b14b5d141e77ffb3e3eaf161e597e7b55cc7d45977f1960b5be2d08",
|
||||||
|
"i686-pc-windows-msvc-0.13.1": "f95615a35a87d7f8f6fb501feb01bc419e6d268ecd4af4f18777efac603a7d2a",
|
||||||
|
"i686-unknown-linux-gnu-0.13.1": "2d332ec4da0b211a34a65c9f89dfd482907b35dfa82b95964fba82acb9db7948",
|
||||||
|
"i686-unknown-linux-musl-0.13.1": "8e0f53b0ef11ef1a328a9c33dd565d16149397c33ac5bf9b1218373dad896e0f",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.1": "5f122167cb3719ae116421a6d2ff30a6dbf7f06649a998b7ea25a0450e3a4285",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.1": "b2af20eb2a3a976c6bb5573a98e577334a366bc6a15a06dee165ae85ad7efe5d",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.1": "48af0ab64584ee9b3c2b44e3c311e5c9ccce56af16234b7c916cc22068b1494e",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.1": "08cd47492750a58546d799b4774fcf21e62b8d9a5015d3bf1751d69a19659eea",
|
||||||
|
"x86_64-apple-darwin-0.13.1": "9c4d53f20f5bae4d4e664cc91c26d57c1d0a67fb5fd16af6cffdac0db88474c2",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.1": "d9a89413459698f4b1a3803fe76ce1f5976c7d058ed33a081dcc570aca20ced7",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.1": "ed653acecf38654fb2e0e45c760a2a12fabf84b390230efa0529896576fcb84a",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.1": "917c300e001a86d9a5d9aaa275dc49b20a7438e3f298e071b7b695a4092f1898",
|
||||||
|
"aarch64-apple-darwin-0.13.0": "0d706798534537b6655b79fd95c2955c0a0013d4c54d36679d3306825a6bd6aa",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.0": "7131186a9e946ed5ef6bc90724b549b05317bbb7919b19927bfdf23df4434249",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.0": "7aae1ff1a049bca087aabacf05dc7a13fcca4616efe1b7f031c3397d52f25e82",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.0": "bdee6f1376470b74b1dc5ed48eca52ec9c3e4512bd7f3204e0df100f0bed4741",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.0": "9d118582cb4b2bb803be19b24b12ce74c78d450fbd9b6b3ca0bb1a8d626add89",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.0": "eddb2dc55df67cca755b6e9006a28d709f6d565c8925dbe73569be195fe2ed35",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.0": "9b9f0e9926966b6f7227ff5eb115f0ce9fa00e70173a5ba52a4498cce9ccda49",
|
||||||
|
"i686-pc-windows-msvc-0.13.0": "2cfb5ee1214ce8e5d8bbeefd7f48571b98f03dfb4f226fdebf879af82f912d7c",
|
||||||
|
"i686-unknown-linux-gnu-0.13.0": "ec837f0fd6c2bdae082ac6af0417b235fdc500de56cecad9b1969c683a3c1126",
|
||||||
|
"i686-unknown-linux-musl-0.13.0": "f1a4fd05eceee516eea520ae13fa9b496fa34563cadcc6b77f3f1bdd39b22dd6",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.0": "da2b5c82d2f68a5c52997d4557c7d399af8fa541e7691ccc5b4f44156c4389e2",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.0": "55754ba31237cc0b4ce8156cfd76498a4478784568b200cd6a910de5931b84cf",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.0": "41efed62a6c46f3e267763d481c223db96179a2eea203ad429f7af9986af1994",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.0": "a425d93ed5f3fd3d0e842c34fc26caf0226380c5c1feb953dc5143d32270833b",
|
||||||
|
"x86_64-apple-darwin-0.13.0": "ac47ad1ac90f3070c064d2f5fceef4fe609fec7c073fd29d0814ed126c492e6d",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.0": "3a8d8cb96333671f78a5d209ddb4f830287e3eb2796fe01dd043b02ec1c1c7f1",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.0": "19152c46d147cf0d3bf8486628fa1de4a8a33cdc5a1b263c4ed31c949de992d7",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.0": "b56ac90cc6987401bafdcf1b931ef044074c5b9451286afa4606a983f64f4fdd",
|
||||||
|
"aarch64-apple-darwin-0.12.12": "fcf7bf04fcd4de79c5a4046ac4dd5eef6ad82f584f8656c2ab1da218639d386d",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.12": "b55d13ad63c8f48c623adb0290b5e02fa5cb65dc76b4bbcff649d7f1d4273af8",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.12": "e8e508419940fd33c657b8abd3c0ede7ec04006619476e22f02d78ccd9476b44",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.12": "1fe423a0dba3d441bbd5e5cb46a635a8fcbe9812488524235e4f1bb725754f01",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.12": "60d90844366feb2a3014f05440c229b8e916f4d197e38cb5e4f8149a39aebc92",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.12": "273e73c140816c188399f4364b698998d1aba1e4b682696729c4e54de3670772",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.12": "3fabdcdde82870e53623f634a43d5bb543e7cfa8bc3b6e24149cbf19ab6436a2",
|
||||||
|
"i686-pc-windows-msvc-0.12.12": "6121d1e2b0a5a37821aaa2c2d21e81da80e94c942fa12b6f752531b882cd0c51",
|
||||||
|
"i686-unknown-linux-gnu-0.12.12": "7420224b8a5f7283147f72284de649a297a762bb8984ddc1ffda56f623748938",
|
||||||
|
"i686-unknown-linux-musl-0.12.12": "75ed6520296f67e9b0cd82e26d3897896a24747e41dfa33786458208a7a491fd",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.12": "3308e5a680189793bfd408e52c724124c9cf01787f13da31c4d8e5d5bb02c620",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.12": "3cb063448a9acf92d5e234b4af2cc8800808e0c9d09078dc66f2ca64dffa9a0e",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.12": "140ba0ebddd736b793c80ec36dc870fa11974cf194921fefb6aab303afe1a696",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.12": "13777acab7da68b180912e3933249ee069378b8f768e95ff0d2359d43f9e549a",
|
||||||
|
"x86_64-apple-darwin-0.12.12": "92231ffd1448909f09ce2675ea674e5c51e1984cb64b99919fff60b861b4f5d9",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.12": "bd10f42b2d580e2fd4af2757d68df34e6483dbee5d57263b33b2198cc11058a8",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.12": "1baad5d4282fcad356925d45b84b5c0a9c8a814c1b7919027651b8f83bd78828",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.12": "dd4840045c585ebc982530b9a8b687787dd6f3c099da93a6c1ff495471ab937b",
|
||||||
|
"aarch64-apple-darwin-0.12.11": "09690b35cac07d5bb096b291b88b8adcbf7750163c20ada2dfd33aa02acd3d88",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.11": "758d7da795fca758ca82b3b657f71dda92ef090bbb581bce189dde5412eafcc6",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.11": "4664bec73806c4b9a30a56510281004dcccfac4f1877a60fcd87e07b01ab7463",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.11": "9848a6f91b0aa292063c04a74f5a8984a83bb1f4c9c21518e6f9eda4ec810d44",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.11": "f82835161ff591489ed270781154ea78b0e4b55f98229892f7efa200be3cff74",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.11": "e231c22937bf53d399a0f10e6b7e418c7e69462c0ce2b6a51a49e51a8a3e060d",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.11": "7d94766a23e40a6c351aa803cf868247a006bbe5ee08385edf8d02889ba1ddaa",
|
||||||
|
"i686-pc-windows-msvc-0.12.11": "5f44870463efc6c8b16eb07f2b6fc8209c75f5c1050ef83b2c66305a6dd0839c",
|
||||||
|
"i686-unknown-linux-gnu-0.12.11": "e2b7c746c40aaacb0f8eeef4bf04c520479ecf3b162edb7c836e8873c68b099c",
|
||||||
|
"i686-unknown-linux-musl-0.12.11": "a644834a42e13b3768c151152f154e3ab12154e5566dfb46edea0bf3862d6e43",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.11": "99736afef3ea165aae8800411a1c058a0037f774691400c1679bd609a5bc0419",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.11": "c01aef8b1f20878952399a1a71011be2ab14471c44d94b652be1e41ee3e07315",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.11": "88d0604b40b523b208e68669512bc8a6d2ea7043d745976ff6530de79bce9385",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.11": "cc16d30ba5a4544c75d608ac78cf59ebb27f657c7e92ea853398ed63794a7319",
|
||||||
|
"x86_64-apple-darwin-0.12.11": "b6627363e52f6b49466f032894c3c395c4bbc645f6c520069050debbbaf8204f",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.11": "a9246d32c62999747cd0671e7d11ad4ebfb36a5f658fe63de583c7a5e9e2f306",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.11": "c127b7ccc292ad4489440e90e3ef314113cda79f3add3acd687a0db235f1692c",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.11": "8e1631dc9b662759d08ab7bc0e4643636e36c450479006711bfe0d83b659686f",
|
||||||
|
"aarch64-apple-darwin-0.12.10": "72c6abf39f5e87c57faa2d191baf2582e437ff72cdc0f52b7c7e50f26d41b807",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.10": "b157b393f368f9f1f646f573066e0cbf81fa852be3ba15fdd3a76c75a0b45c6e",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.10": "f58ea47d6d482712a8338056541fb604956d8c81f37323d29c7920a88179e542",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.10": "10b43a88fb948aaae538ec9f35e93b4433f144d0379fb3a67d88282595b969f7",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.10": "a6d94f838d4a2720199ea530172b63280860f9f92cae1eaaa3041899e62664e2",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.10": "4e1a7330cebebd3f4e4e0dc1f5b8d4f768f0dc1cff0e199e8425eb8ebe8bf799",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.10": "4f0b1cd3ea250c87abc766c341225e12c465fc4622272e621e9fb64b4b00ac19",
|
||||||
|
"i686-pc-windows-msvc-0.12.10": "b5d58c3b59aebe46626116721498bb7f88605f0085ebc23d3a75b78724ecc687",
|
||||||
|
"i686-unknown-linux-gnu-0.12.10": "759096182f5e767efc6b7f3ac2a3df2dceb26c5091604b03a305f3882fb80ae4",
|
||||||
|
"i686-unknown-linux-musl-0.12.10": "c7b6d22586642a3f2f6ce051a75783874cb7f3f3626e28b92fbf22fbbfd2329d",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.10": "49e52b6ee3edef681e1d28127ef990b504996b97d8e1ee30a000a72c9486c31e",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.10": "0c562f790640b6d128867af254a646b86d1975a7ae426b3a61e332c08ad9db6c",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.10": "9ca0ecf7a7b93a7d3348cbc10989a4779a9a79bc47b5ab47f510fde74abe88d5",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.10": "a71fe85458fb0e1df2e73abb03a945a90eda722162fe13e1b326bd6807b83192",
|
||||||
|
"x86_64-apple-darwin-0.12.10": "8619f277921b3e2e56d850c3e203fd4ef10b457bc50f93ab6fe85743eb324de6",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.10": "a639e4dee10cb2900bffa7165457766671c59c744ce6b61cc658c35ab33a91fd",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.10": "a3e1757c16f3feffab6faf22140d57e5528c91c7b338d4fa542dc50f95b857fb",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.10": "dd4e5b8f81547a48975489913a80e0dce6be7f1c455912fe3a5bd5a1f5f1a35d",
|
||||||
|
"aarch64-apple-darwin-0.12.9": "68cb47f9a98e17c59e861c3b635b32c5212defd21a4ec0b5c1d56950d06076e5",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.9": "c747d2ca1bd3bb6df0a2af31f39a53180f2bf556242e5380c495cbd7056c10be",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.9": "302dcca660fb843f4cebff7ae57e1f4177c5cbc3d760aea419cead8a741a77b7",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.9": "dca567860383bb6a7b021dab76c616b02ed9a268516a0a1a1dce56ee482740d7",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.9": "d58c9b2a5f92494a5765a22feaf4704eede88a97105d60a0436d3af9b88db335",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.9": "062242367b6a3e72f436e6f913b1c1afa2cc161dc270128366b3f0e27e14f2f6",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.9": "aee8c90b621d339bb10fa53a88e3f3d33881ddaa7a5d04a398b3c2eb42769f3c",
|
||||||
|
"i686-pc-windows-msvc-0.12.9": "3a043c3f3b5dfd2bd074a6bc86ee83f218dad59dc47b2dcea23ef27ac9b973eb",
|
||||||
|
"i686-unknown-linux-gnu-0.12.9": "5f5a3ae7b21e09b2fca7a950e466f56769845b93a851bc354f2811c6483041dd",
|
||||||
|
"i686-unknown-linux-musl-0.12.9": "66e5db26cc7bf20edc8be2e89dfceb25bd5828ea7405009ad0c5edaa7019e47f",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.9": "0a520d5bc483ef02c4d37d716d8ed276e08d5df8e85b5cce8cdb5a2cefe31777",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.9": "ac9c786cc9bb6c84aa3a5ea5f5a2135349f3e3a28068f307863d8d72c83b11e3",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.9": "cf7bf473d85ceb289b0e51619cf07d3b854976dc6f99213c869c1e4710264bc7",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.9": "2d67952a2f5b4fff530e89f969cd4075b7086032135829ae82221b2d2bd2bab0",
|
||||||
|
"x86_64-apple-darwin-0.12.9": "cc8195f89146268086e99225316b4214100eb78010aa84b9e650f8322d5790f0",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.9": "9d360dfd4ca5f688aabf542c570644fab8b02a3c0e71460cf51fc4869df03ba6",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.9": "db126272c8473979d744c9be0fd9410ca431dc0cc9daa67286f4f206dd715957",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.9": "c177d59d4c6347abbf08c8943eff919432d5c70229a0dd6390e5697d393a9c05",
|
||||||
"aarch64-apple-darwin-0.12.8": "d7ddfc029858b97452e728c229b0378e3dde5300b23df5cc5c77296025971379",
|
"aarch64-apple-darwin-0.12.8": "d7ddfc029858b97452e728c229b0378e3dde5300b23df5cc5c77296025971379",
|
||||||
"aarch64-pc-windows-msvc-0.12.8": "99cedac1f9b7a321a0e2b81ded68bbaf5dbff6aedac528766eda50d3871ccce9",
|
"aarch64-pc-windows-msvc-0.12.8": "99cedac1f9b7a321a0e2b81ded68bbaf5dbff6aedac528766eda50d3871ccce9",
|
||||||
"aarch64-unknown-linux-gnu-0.12.8": "fc4a79cfe90c8e4f7bfdad2198e939b70416916a7e90f687f30490b25e2171d6",
|
"aarch64-unknown-linux-gnu-0.12.8": "fc4a79cfe90c8e4f7bfdad2198e939b70416916a7e90f687f30490b25e2171d6",
|
||||||
@@ -30684,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);
|
||||||
@@ -30733,8 +30896,21 @@ async function getOrDownloadChecksum(key, downloadUrl) {
|
|||||||
return checksum;
|
return checksum;
|
||||||
}
|
}
|
||||||
async function downloadAssetContent(downloadUrl) {
|
async function downloadAssetContent(downloadUrl) {
|
||||||
const downloadPath = await tc.downloadTool(downloadUrl);
|
return await (0, retry_1.withRetry)(async () => {
|
||||||
return await node_fs_1.promises.readFile(downloadPath, "utf8");
|
try {
|
||||||
|
const downloadPath = await tc.downloadTool(downloadUrl);
|
||||||
|
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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -30786,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 octokit = new PaginatingOctokit({ auth: github_token });
|
const response = await (0, retry_1.withRetry)(async () => {
|
||||||
const response = await octokit.paginate(octokit.rest.repos.listReleases, {
|
try {
|
||||||
owner: constants_1.OWNER,
|
const octokit = new PaginatingOctokit({ auth: github_token });
|
||||||
repo: constants_1.REPO,
|
return await octokit.paginate(octokit.rest.repos.listReleases, {
|
||||||
});
|
owner: constants_1.OWNER,
|
||||||
|
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));
|
||||||
@@ -30821,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:
|
||||||
|
|||||||
@@ -1,5 +1,329 @@
|
|||||||
// 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.0":
|
||||||
|
"0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec",
|
||||||
|
"aarch64-pc-windows-msvc-0.14.0":
|
||||||
|
"a882d2ec2235c13f63453fde682775d2e1f8a44ccfd1af9e031255b051e30e70",
|
||||||
|
"aarch64-unknown-linux-gnu-0.14.0":
|
||||||
|
"60fc3b464a723456ba1bc8cd91d29806753c885f72e26ac67b718cee6b35aaca",
|
||||||
|
"aarch64-unknown-linux-musl-0.14.0":
|
||||||
|
"34a25398f03e7d32a4ec406c5c841c6e183fa0a96fbdd40b7e7eec1f177b360e",
|
||||||
|
"arm-unknown-linux-musleabihf-0.14.0":
|
||||||
|
"7fd422231c9f34ccf8afed3e11db7add9aaedb25e8f5086e856e1f405f8b6625",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.14.0":
|
||||||
|
"994f029a927373d9039319775971ae04aaf07cfe2b2d0eed2e1f4817437441dc",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.14.0":
|
||||||
|
"dad98aa125f6c164e1dec2401dc67661128725f17d7a2d17021254ad47f29a69",
|
||||||
|
"i686-pc-windows-msvc-0.14.0":
|
||||||
|
"75326418f1728e83ff615143beb32d203c73272621c4fec402dfd9c4ca0a403d",
|
||||||
|
"i686-unknown-linux-gnu-0.14.0":
|
||||||
|
"5005907c511b455ff6f617805ddd6363e648240fe639134f93190e8c20496c75",
|
||||||
|
"i686-unknown-linux-musl-0.14.0":
|
||||||
|
"58831bbc23d69541643796922197e3f145f556283409683f8a19624e89f13956",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.14.0":
|
||||||
|
"7c892d6dd348b8a01ba07c6a819f3f68996b5e73a1dc9b8f0858f4f3788d89b1",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.14.0":
|
||||||
|
"b66f376d7a19808ab5760f98c1cdf577e7dab666340437fb665a863baf701c02",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.14.0":
|
||||||
|
"7126a36d39b58d2bb45a241e490c5b6f9e6f9f32880a0c50f65f6545b73b570c",
|
||||||
|
"s390x-unknown-linux-gnu-0.14.0":
|
||||||
|
"d6160cda15380eed80c4512b4c577e105e3f00a5a6d6e5c5f6dcc1199a91396a",
|
||||||
|
"x86_64-apple-darwin-0.14.0":
|
||||||
|
"880ae046b435eb306cd557a7481eed6da463b85f283ba1f2c1e2ad7c139ed6c5",
|
||||||
|
"x86_64-pc-windows-msvc-0.14.0":
|
||||||
|
"f81f957c862f310ac0be70ae7cef2e99afb4cc09648e40c039432e11465c2c1c",
|
||||||
|
"x86_64-unknown-linux-gnu-0.14.0":
|
||||||
|
"28fe06f700caf99eee235f90e6e349f48b7f9a4b0d42e3ee5b3686f9259649a3",
|
||||||
|
"x86_64-unknown-linux-musl-0.14.0":
|
||||||
|
"ed6d1b8407a1d228dc332fb19057e86e04a6cd3c2beacdb324ad6ff2a3f9071b",
|
||||||
|
"aarch64-apple-darwin-0.13.3":
|
||||||
|
"a170ead9a9f03527dba3d2fb3e9e445f73d9efe3584c3307f3d30c6d5f31c487",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.3":
|
||||||
|
"382c0c3948330f8abe0b5349c41aa80a01a6c54201f2312ef41152a057008bce",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.3":
|
||||||
|
"bbc9e73e8e302ec2f6175165374aadfb15f5210ec12660aa444c1cc1e3058cfc",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.3":
|
||||||
|
"4301d51fd2fbce6d4cc55613e5f8f96ee4fcb8dcaec8419023fe555575cf78f6",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.3":
|
||||||
|
"377dc72597e3760b25c3b18616bf69966aed963e68b51f94a12c63207da286ba",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.3":
|
||||||
|
"86c4411773e21fa4bc1969da3a62d9f795205d83908d94a0bf3d91b577a6edaf",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.3":
|
||||||
|
"8c981482f90a9bc4bed9c8f5b51ea272fb70baf239998a8ae13d7a57c8eeeb09",
|
||||||
|
"i686-pc-windows-msvc-0.13.3":
|
||||||
|
"f8800f124929cac319ec13be1d5a3941a0ba986e3c2e8bb31eee962098eb5e0c",
|
||||||
|
"i686-unknown-linux-gnu-0.13.3":
|
||||||
|
"77502c38f90e583bcc8e713007fcb5ec669c872252850028e01e98893e8bd6be",
|
||||||
|
"i686-unknown-linux-musl-0.13.3":
|
||||||
|
"e6f740d1b8eb8c14adab59abfe1fcf0ba97ebd34c92c65611de001e28edb697d",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.3":
|
||||||
|
"f402e5e49bcfc3b4bcc54a093c908a5798fb61890a96a9aa034ecb79bebcf398",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.3":
|
||||||
|
"eb22f5bcf2f7e4cbec894423c00b31169ac6df0898fccfb465f0e29d1370f9bc",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.3":
|
||||||
|
"83c62e1b880ffd36020b50fd9d2c5169ed3eba984b59f5347ea3301636f747da",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.3":
|
||||||
|
"2e8cbf501f913fe809e9fc382229d214ed7ba0ddaa556d9cb3ca4b254865d1ac",
|
||||||
|
"x86_64-apple-darwin-0.13.3":
|
||||||
|
"1c3a291a595ddd08398eb1e06fba883b7d8d715bd4255af5972f858fec8b4e57",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.3":
|
||||||
|
"01e7ce81e052ad8788d6a9bffbce74524d80fbf0659e6194165d1e1d3ded9f39",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.3":
|
||||||
|
"65667601e41bc669b5b52e0e52cb778d4a982381c9b92423279e8ca43f11268a",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.3":
|
||||||
|
"8d24d74171772c67366d3187b990a3dc706022aa3a631b2a612d12e362f226c7",
|
||||||
|
"aarch64-apple-darwin-0.13.2":
|
||||||
|
"96738ad0b9decb981f53790949487650255a9da0375524b02dcdd862de9f2efa",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.2":
|
||||||
|
"58b946ceaa220052bcb919d1a64ce3fd216ab24ae121fd0484513dd518ff5a40",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.2":
|
||||||
|
"6aabf5f6d12d981d5b6d0759b118bd52ad4de77695f573c96d74de78fb2b1820",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.2":
|
||||||
|
"a225f352214340d50882ede447fb8eea6a0a5a77233a2e03cda194aa19e5e514",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.2":
|
||||||
|
"5dc57704c05c4e583b1b98aacc70ca900f9bb15abb3def1ae9d178905f2fa0f3",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.2":
|
||||||
|
"5b16463eb53cc2189c46c9b40c1596fa28d0a657681594ca42afc5606fac732e",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.2":
|
||||||
|
"4c852003d3b9841fb61910bfb0dd2588bff51db647f759b23fcfd637811d379e",
|
||||||
|
"i686-pc-windows-msvc-0.13.2":
|
||||||
|
"cc498f637cca87e1a87ba35f66e020797e514959bf74932d87d9b8c8a5d733b1",
|
||||||
|
"i686-unknown-linux-gnu-0.13.2":
|
||||||
|
"a951df6892005b6f5c8264b531f2ddf253dec9097dbcee9594295227eb93455d",
|
||||||
|
"i686-unknown-linux-musl-0.13.2":
|
||||||
|
"ad6b9933e4b43d509aa686b4e915aa132a8537ee2fe86753ca29d1efac8270c9",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.2":
|
||||||
|
"3f656a654fc7f19a9dd9b6f4e17f8b181fca2d8eb36036d4c44a7d747ca4f834",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.2":
|
||||||
|
"cb6aab61485a32c24e334c005106775c94dad10a687dd31a3e2e9ddc65682776",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.2":
|
||||||
|
"a1ea659d0aab60dc3aa308d1ebf27abb3e95b4bbd89b836d9e8fb91dcc9b1b45",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.2":
|
||||||
|
"8ba0c6d8ad5e102d9d4e6d3fbdabdf4cd1a894add52bc8b238bd675a03abc9b7",
|
||||||
|
"x86_64-apple-darwin-0.13.2":
|
||||||
|
"ed848ebd0a8d7d96a88686c5fc86e8bb6a4c1b831ace2dfa252777f9c69460c6",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.2":
|
||||||
|
"dea59c3440e59e4dbfa17ec8e51c10fb6f7586650cf30aad8dd8674ee4cb3f3c",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.2":
|
||||||
|
"882a9b37e9fde0835ea67f98ad240c16abee6a2d374bc2429fee45a25b4a0738",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.2":
|
||||||
|
"60755c060181b8d3649d5b568ebc80f76df49dd03249445627f2ceae552c21b6",
|
||||||
|
"aarch64-apple-darwin-0.13.1":
|
||||||
|
"1cfb3a7455a83602d474044243b618989edf58c2edda45eb4d3331ab550d52c1",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.1":
|
||||||
|
"17c8ec337b61c014c0d1d090e379f28181d34c3d29edf528de3cf006f944bb18",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.1":
|
||||||
|
"a2c2063a82428abe654cc8cdd7427db0b5790ccdd6b8ab505af17e328b0e7d32",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.1":
|
||||||
|
"3ad26d4a7a736e00373e635f03d7427e20183b0fe99b003a494bd5cdbc3c9c12",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.1":
|
||||||
|
"810e2f052b66c86836c6fcb88b888f6731047537d38e97afc4d43787363bddfe",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.1":
|
||||||
|
"c603565c9e1b13acadf54c02ff7a42b32787c6b60f45971e2519547d77535df4",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.1":
|
||||||
|
"1d120eef7b14b5d141e77ffb3e3eaf161e597e7b55cc7d45977f1960b5be2d08",
|
||||||
|
"i686-pc-windows-msvc-0.13.1":
|
||||||
|
"f95615a35a87d7f8f6fb501feb01bc419e6d268ecd4af4f18777efac603a7d2a",
|
||||||
|
"i686-unknown-linux-gnu-0.13.1":
|
||||||
|
"2d332ec4da0b211a34a65c9f89dfd482907b35dfa82b95964fba82acb9db7948",
|
||||||
|
"i686-unknown-linux-musl-0.13.1":
|
||||||
|
"8e0f53b0ef11ef1a328a9c33dd565d16149397c33ac5bf9b1218373dad896e0f",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.1":
|
||||||
|
"5f122167cb3719ae116421a6d2ff30a6dbf7f06649a998b7ea25a0450e3a4285",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.1":
|
||||||
|
"b2af20eb2a3a976c6bb5573a98e577334a366bc6a15a06dee165ae85ad7efe5d",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.1":
|
||||||
|
"48af0ab64584ee9b3c2b44e3c311e5c9ccce56af16234b7c916cc22068b1494e",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.1":
|
||||||
|
"08cd47492750a58546d799b4774fcf21e62b8d9a5015d3bf1751d69a19659eea",
|
||||||
|
"x86_64-apple-darwin-0.13.1":
|
||||||
|
"9c4d53f20f5bae4d4e664cc91c26d57c1d0a67fb5fd16af6cffdac0db88474c2",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.1":
|
||||||
|
"d9a89413459698f4b1a3803fe76ce1f5976c7d058ed33a081dcc570aca20ced7",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.1":
|
||||||
|
"ed653acecf38654fb2e0e45c760a2a12fabf84b390230efa0529896576fcb84a",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.1":
|
||||||
|
"917c300e001a86d9a5d9aaa275dc49b20a7438e3f298e071b7b695a4092f1898",
|
||||||
|
"aarch64-apple-darwin-0.13.0":
|
||||||
|
"0d706798534537b6655b79fd95c2955c0a0013d4c54d36679d3306825a6bd6aa",
|
||||||
|
"aarch64-pc-windows-msvc-0.13.0":
|
||||||
|
"7131186a9e946ed5ef6bc90724b549b05317bbb7919b19927bfdf23df4434249",
|
||||||
|
"aarch64-unknown-linux-gnu-0.13.0":
|
||||||
|
"7aae1ff1a049bca087aabacf05dc7a13fcca4616efe1b7f031c3397d52f25e82",
|
||||||
|
"aarch64-unknown-linux-musl-0.13.0":
|
||||||
|
"bdee6f1376470b74b1dc5ed48eca52ec9c3e4512bd7f3204e0df100f0bed4741",
|
||||||
|
"arm-unknown-linux-musleabihf-0.13.0":
|
||||||
|
"9d118582cb4b2bb803be19b24b12ce74c78d450fbd9b6b3ca0bb1a8d626add89",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.13.0":
|
||||||
|
"eddb2dc55df67cca755b6e9006a28d709f6d565c8925dbe73569be195fe2ed35",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.13.0":
|
||||||
|
"9b9f0e9926966b6f7227ff5eb115f0ce9fa00e70173a5ba52a4498cce9ccda49",
|
||||||
|
"i686-pc-windows-msvc-0.13.0":
|
||||||
|
"2cfb5ee1214ce8e5d8bbeefd7f48571b98f03dfb4f226fdebf879af82f912d7c",
|
||||||
|
"i686-unknown-linux-gnu-0.13.0":
|
||||||
|
"ec837f0fd6c2bdae082ac6af0417b235fdc500de56cecad9b1969c683a3c1126",
|
||||||
|
"i686-unknown-linux-musl-0.13.0":
|
||||||
|
"f1a4fd05eceee516eea520ae13fa9b496fa34563cadcc6b77f3f1bdd39b22dd6",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.13.0":
|
||||||
|
"da2b5c82d2f68a5c52997d4557c7d399af8fa541e7691ccc5b4f44156c4389e2",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.13.0":
|
||||||
|
"55754ba31237cc0b4ce8156cfd76498a4478784568b200cd6a910de5931b84cf",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.13.0":
|
||||||
|
"41efed62a6c46f3e267763d481c223db96179a2eea203ad429f7af9986af1994",
|
||||||
|
"s390x-unknown-linux-gnu-0.13.0":
|
||||||
|
"a425d93ed5f3fd3d0e842c34fc26caf0226380c5c1feb953dc5143d32270833b",
|
||||||
|
"x86_64-apple-darwin-0.13.0":
|
||||||
|
"ac47ad1ac90f3070c064d2f5fceef4fe609fec7c073fd29d0814ed126c492e6d",
|
||||||
|
"x86_64-pc-windows-msvc-0.13.0":
|
||||||
|
"3a8d8cb96333671f78a5d209ddb4f830287e3eb2796fe01dd043b02ec1c1c7f1",
|
||||||
|
"x86_64-unknown-linux-gnu-0.13.0":
|
||||||
|
"19152c46d147cf0d3bf8486628fa1de4a8a33cdc5a1b263c4ed31c949de992d7",
|
||||||
|
"x86_64-unknown-linux-musl-0.13.0":
|
||||||
|
"b56ac90cc6987401bafdcf1b931ef044074c5b9451286afa4606a983f64f4fdd",
|
||||||
|
"aarch64-apple-darwin-0.12.12":
|
||||||
|
"fcf7bf04fcd4de79c5a4046ac4dd5eef6ad82f584f8656c2ab1da218639d386d",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.12":
|
||||||
|
"b55d13ad63c8f48c623adb0290b5e02fa5cb65dc76b4bbcff649d7f1d4273af8",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.12":
|
||||||
|
"e8e508419940fd33c657b8abd3c0ede7ec04006619476e22f02d78ccd9476b44",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.12":
|
||||||
|
"1fe423a0dba3d441bbd5e5cb46a635a8fcbe9812488524235e4f1bb725754f01",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.12":
|
||||||
|
"60d90844366feb2a3014f05440c229b8e916f4d197e38cb5e4f8149a39aebc92",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.12":
|
||||||
|
"273e73c140816c188399f4364b698998d1aba1e4b682696729c4e54de3670772",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.12":
|
||||||
|
"3fabdcdde82870e53623f634a43d5bb543e7cfa8bc3b6e24149cbf19ab6436a2",
|
||||||
|
"i686-pc-windows-msvc-0.12.12":
|
||||||
|
"6121d1e2b0a5a37821aaa2c2d21e81da80e94c942fa12b6f752531b882cd0c51",
|
||||||
|
"i686-unknown-linux-gnu-0.12.12":
|
||||||
|
"7420224b8a5f7283147f72284de649a297a762bb8984ddc1ffda56f623748938",
|
||||||
|
"i686-unknown-linux-musl-0.12.12":
|
||||||
|
"75ed6520296f67e9b0cd82e26d3897896a24747e41dfa33786458208a7a491fd",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.12":
|
||||||
|
"3308e5a680189793bfd408e52c724124c9cf01787f13da31c4d8e5d5bb02c620",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.12":
|
||||||
|
"3cb063448a9acf92d5e234b4af2cc8800808e0c9d09078dc66f2ca64dffa9a0e",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.12":
|
||||||
|
"140ba0ebddd736b793c80ec36dc870fa11974cf194921fefb6aab303afe1a696",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.12":
|
||||||
|
"13777acab7da68b180912e3933249ee069378b8f768e95ff0d2359d43f9e549a",
|
||||||
|
"x86_64-apple-darwin-0.12.12":
|
||||||
|
"92231ffd1448909f09ce2675ea674e5c51e1984cb64b99919fff60b861b4f5d9",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.12":
|
||||||
|
"bd10f42b2d580e2fd4af2757d68df34e6483dbee5d57263b33b2198cc11058a8",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.12":
|
||||||
|
"1baad5d4282fcad356925d45b84b5c0a9c8a814c1b7919027651b8f83bd78828",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.12":
|
||||||
|
"dd4840045c585ebc982530b9a8b687787dd6f3c099da93a6c1ff495471ab937b",
|
||||||
|
"aarch64-apple-darwin-0.12.11":
|
||||||
|
"09690b35cac07d5bb096b291b88b8adcbf7750163c20ada2dfd33aa02acd3d88",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.11":
|
||||||
|
"758d7da795fca758ca82b3b657f71dda92ef090bbb581bce189dde5412eafcc6",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.11":
|
||||||
|
"4664bec73806c4b9a30a56510281004dcccfac4f1877a60fcd87e07b01ab7463",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.11":
|
||||||
|
"9848a6f91b0aa292063c04a74f5a8984a83bb1f4c9c21518e6f9eda4ec810d44",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.11":
|
||||||
|
"f82835161ff591489ed270781154ea78b0e4b55f98229892f7efa200be3cff74",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.11":
|
||||||
|
"e231c22937bf53d399a0f10e6b7e418c7e69462c0ce2b6a51a49e51a8a3e060d",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.11":
|
||||||
|
"7d94766a23e40a6c351aa803cf868247a006bbe5ee08385edf8d02889ba1ddaa",
|
||||||
|
"i686-pc-windows-msvc-0.12.11":
|
||||||
|
"5f44870463efc6c8b16eb07f2b6fc8209c75f5c1050ef83b2c66305a6dd0839c",
|
||||||
|
"i686-unknown-linux-gnu-0.12.11":
|
||||||
|
"e2b7c746c40aaacb0f8eeef4bf04c520479ecf3b162edb7c836e8873c68b099c",
|
||||||
|
"i686-unknown-linux-musl-0.12.11":
|
||||||
|
"a644834a42e13b3768c151152f154e3ab12154e5566dfb46edea0bf3862d6e43",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.11":
|
||||||
|
"99736afef3ea165aae8800411a1c058a0037f774691400c1679bd609a5bc0419",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.11":
|
||||||
|
"c01aef8b1f20878952399a1a71011be2ab14471c44d94b652be1e41ee3e07315",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.11":
|
||||||
|
"88d0604b40b523b208e68669512bc8a6d2ea7043d745976ff6530de79bce9385",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.11":
|
||||||
|
"cc16d30ba5a4544c75d608ac78cf59ebb27f657c7e92ea853398ed63794a7319",
|
||||||
|
"x86_64-apple-darwin-0.12.11":
|
||||||
|
"b6627363e52f6b49466f032894c3c395c4bbc645f6c520069050debbbaf8204f",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.11":
|
||||||
|
"a9246d32c62999747cd0671e7d11ad4ebfb36a5f658fe63de583c7a5e9e2f306",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.11":
|
||||||
|
"c127b7ccc292ad4489440e90e3ef314113cda79f3add3acd687a0db235f1692c",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.11":
|
||||||
|
"8e1631dc9b662759d08ab7bc0e4643636e36c450479006711bfe0d83b659686f",
|
||||||
|
"aarch64-apple-darwin-0.12.10":
|
||||||
|
"72c6abf39f5e87c57faa2d191baf2582e437ff72cdc0f52b7c7e50f26d41b807",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.10":
|
||||||
|
"b157b393f368f9f1f646f573066e0cbf81fa852be3ba15fdd3a76c75a0b45c6e",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.10":
|
||||||
|
"f58ea47d6d482712a8338056541fb604956d8c81f37323d29c7920a88179e542",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.10":
|
||||||
|
"10b43a88fb948aaae538ec9f35e93b4433f144d0379fb3a67d88282595b969f7",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.10":
|
||||||
|
"a6d94f838d4a2720199ea530172b63280860f9f92cae1eaaa3041899e62664e2",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.10":
|
||||||
|
"4e1a7330cebebd3f4e4e0dc1f5b8d4f768f0dc1cff0e199e8425eb8ebe8bf799",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.10":
|
||||||
|
"4f0b1cd3ea250c87abc766c341225e12c465fc4622272e621e9fb64b4b00ac19",
|
||||||
|
"i686-pc-windows-msvc-0.12.10":
|
||||||
|
"b5d58c3b59aebe46626116721498bb7f88605f0085ebc23d3a75b78724ecc687",
|
||||||
|
"i686-unknown-linux-gnu-0.12.10":
|
||||||
|
"759096182f5e767efc6b7f3ac2a3df2dceb26c5091604b03a305f3882fb80ae4",
|
||||||
|
"i686-unknown-linux-musl-0.12.10":
|
||||||
|
"c7b6d22586642a3f2f6ce051a75783874cb7f3f3626e28b92fbf22fbbfd2329d",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.10":
|
||||||
|
"49e52b6ee3edef681e1d28127ef990b504996b97d8e1ee30a000a72c9486c31e",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.10":
|
||||||
|
"0c562f790640b6d128867af254a646b86d1975a7ae426b3a61e332c08ad9db6c",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.10":
|
||||||
|
"9ca0ecf7a7b93a7d3348cbc10989a4779a9a79bc47b5ab47f510fde74abe88d5",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.10":
|
||||||
|
"a71fe85458fb0e1df2e73abb03a945a90eda722162fe13e1b326bd6807b83192",
|
||||||
|
"x86_64-apple-darwin-0.12.10":
|
||||||
|
"8619f277921b3e2e56d850c3e203fd4ef10b457bc50f93ab6fe85743eb324de6",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.10":
|
||||||
|
"a639e4dee10cb2900bffa7165457766671c59c744ce6b61cc658c35ab33a91fd",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.10":
|
||||||
|
"a3e1757c16f3feffab6faf22140d57e5528c91c7b338d4fa542dc50f95b857fb",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.10":
|
||||||
|
"dd4e5b8f81547a48975489913a80e0dce6be7f1c455912fe3a5bd5a1f5f1a35d",
|
||||||
|
"aarch64-apple-darwin-0.12.9":
|
||||||
|
"68cb47f9a98e17c59e861c3b635b32c5212defd21a4ec0b5c1d56950d06076e5",
|
||||||
|
"aarch64-pc-windows-msvc-0.12.9":
|
||||||
|
"c747d2ca1bd3bb6df0a2af31f39a53180f2bf556242e5380c495cbd7056c10be",
|
||||||
|
"aarch64-unknown-linux-gnu-0.12.9":
|
||||||
|
"302dcca660fb843f4cebff7ae57e1f4177c5cbc3d760aea419cead8a741a77b7",
|
||||||
|
"aarch64-unknown-linux-musl-0.12.9":
|
||||||
|
"dca567860383bb6a7b021dab76c616b02ed9a268516a0a1a1dce56ee482740d7",
|
||||||
|
"arm-unknown-linux-musleabihf-0.12.9":
|
||||||
|
"d58c9b2a5f92494a5765a22feaf4704eede88a97105d60a0436d3af9b88db335",
|
||||||
|
"armv7-unknown-linux-gnueabihf-0.12.9":
|
||||||
|
"062242367b6a3e72f436e6f913b1c1afa2cc161dc270128366b3f0e27e14f2f6",
|
||||||
|
"armv7-unknown-linux-musleabihf-0.12.9":
|
||||||
|
"aee8c90b621d339bb10fa53a88e3f3d33881ddaa7a5d04a398b3c2eb42769f3c",
|
||||||
|
"i686-pc-windows-msvc-0.12.9":
|
||||||
|
"3a043c3f3b5dfd2bd074a6bc86ee83f218dad59dc47b2dcea23ef27ac9b973eb",
|
||||||
|
"i686-unknown-linux-gnu-0.12.9":
|
||||||
|
"5f5a3ae7b21e09b2fca7a950e466f56769845b93a851bc354f2811c6483041dd",
|
||||||
|
"i686-unknown-linux-musl-0.12.9":
|
||||||
|
"66e5db26cc7bf20edc8be2e89dfceb25bd5828ea7405009ad0c5edaa7019e47f",
|
||||||
|
"powerpc64-unknown-linux-gnu-0.12.9":
|
||||||
|
"0a520d5bc483ef02c4d37d716d8ed276e08d5df8e85b5cce8cdb5a2cefe31777",
|
||||||
|
"powerpc64le-unknown-linux-gnu-0.12.9":
|
||||||
|
"ac9c786cc9bb6c84aa3a5ea5f5a2135349f3e3a28068f307863d8d72c83b11e3",
|
||||||
|
"riscv64gc-unknown-linux-gnu-0.12.9":
|
||||||
|
"cf7bf473d85ceb289b0e51619cf07d3b854976dc6f99213c869c1e4710264bc7",
|
||||||
|
"s390x-unknown-linux-gnu-0.12.9":
|
||||||
|
"2d67952a2f5b4fff530e89f969cd4075b7086032135829ae82221b2d2bd2bab0",
|
||||||
|
"x86_64-apple-darwin-0.12.9":
|
||||||
|
"cc8195f89146268086e99225316b4214100eb78010aa84b9e650f8322d5790f0",
|
||||||
|
"x86_64-pc-windows-msvc-0.12.9":
|
||||||
|
"9d360dfd4ca5f688aabf542c570644fab8b02a3c0e71460cf51fc4869df03ba6",
|
||||||
|
"x86_64-unknown-linux-gnu-0.12.9":
|
||||||
|
"db126272c8473979d744c9be0fd9410ca431dc0cc9daa67286f4f206dd715957",
|
||||||
|
"x86_64-unknown-linux-musl-0.12.9":
|
||||||
|
"c177d59d4c6347abbf08c8943eff919432d5c70229a0dd6390e5697d393a9c05",
|
||||||
"aarch64-apple-darwin-0.12.8":
|
"aarch64-apple-darwin-0.12.8":
|
||||||
"d7ddfc029858b97452e728c229b0378e3dde5300b23df5cc5c77296025971379",
|
"d7ddfc029858b97452e728c229b0378e3dde5300b23df5cc5c77296025971379",
|
||||||
"aarch64-pc-windows-msvc-0.12.8":
|
"aarch64-pc-windows-msvc-0.12.8":
|
||||||
|
|||||||
@@ -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> {
|
||||||
const downloadPath = await tc.downloadTool(downloadUrl);
|
return await withRetry(
|
||||||
return await fs.readFile(downloadPath, "utf8");
|
async () => {
|
||||||
|
try {
|
||||||
|
const downloadPath = await tc.downloadTool(downloadUrl);
|
||||||
|
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",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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[]> {
|
||||||
try {
|
return await withRetry(
|
||||||
const octokit = new PaginatingOctokit({
|
async () => {
|
||||||
auth: githubToken,
|
try {
|
||||||
});
|
const octokit = new PaginatingOctokit({
|
||||||
return await getReleaseTagNames(octokit);
|
auth: githubToken,
|
||||||
} catch (err) {
|
});
|
||||||
if ((err as Error).message.includes("Bad credentials")) {
|
return await getReleaseTagNames(octokit);
|
||||||
core.info(
|
} catch (err) {
|
||||||
"No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.",
|
const error = err as Error;
|
||||||
);
|
if (error.message.includes("Bad credentials")) {
|
||||||
const octokit = new PaginatingOctokit();
|
core.info(
|
||||||
return await getReleaseTagNames(octokit);
|
"No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.",
|
||||||
}
|
);
|
||||||
throw err;
|
const octokit = new PaginatingOctokit();
|
||||||
}
|
return await getReleaseTagNames(octokit);
|
||||||
|
}
|
||||||
|
|
||||||
|
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(
|
||||||
owner: OWNER,
|
async () => {
|
||||||
repo: REPO,
|
try {
|
||||||
});
|
return await octokit.paginate(octokit.rest.repos.listReleases, {
|
||||||
|
owner: OWNER,
|
||||||
|
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,42 +232,82 @@ async function getReleaseTagNames(
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function getLatestVersion(githubToken: string) {
|
async function getLatestVersion(githubToken: string) {
|
||||||
const octokit = new PaginatingOctokit({
|
return await withRetry(
|
||||||
auth: githubToken,
|
async () => {
|
||||||
});
|
const octokit = new PaginatingOctokit({
|
||||||
|
auth: githubToken,
|
||||||
|
});
|
||||||
|
|
||||||
let latestRelease: { tag_name: string } | undefined;
|
let latestRelease: { tag_name: string } | undefined;
|
||||||
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;
|
||||||
core.info(
|
if (error.message.includes("Bad credentials")) {
|
||||||
"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();
|
);
|
||||||
latestRelease = await getLatestRelease(octokit);
|
const octokit = new PaginatingOctokit();
|
||||||
} else {
|
latestRelease = await getLatestRelease(octokit);
|
||||||
core.error(
|
} else {
|
||||||
"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 (!latestRelease) {
|
if (isRetryableError(error)) {
|
||||||
throw new Error("Could not determine latest release.");
|
throw new RetryableError(
|
||||||
}
|
`Failed to get latest version: ${error.message}`,
|
||||||
return latestRelease.tag_name;
|
error,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw new NonRetryableError(
|
||||||
|
`Failed to get latest version: ${error.message}`,
|
||||||
|
error,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!latestRelease) {
|
||||||
|
throw new Error("Could not determine latest release.");
|
||||||
|
}
|
||||||
|
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(
|
||||||
owner: OWNER,
|
async () => {
|
||||||
repo: REPO,
|
try {
|
||||||
});
|
const { data: latestRelease } =
|
||||||
return latestRelease;
|
await octokit.rest.repos.getLatestRelease({
|
||||||
|
owner: OWNER,
|
||||||
|
repo: REPO,
|
||||||
|
});
|
||||||
|
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(
|
||||||
|
|||||||
+1
-1
@@ -115,7 +115,7 @@ async function determineVersion(): Promise<string> {
|
|||||||
const versionFromPyproject =
|
const versionFromPyproject =
|
||||||
getRuffVersionFromRequirementsFile(pyProjectPath);
|
getRuffVersionFromRequirementsFile(pyProjectPath);
|
||||||
if (versionFromPyproject === undefined) {
|
if (versionFromPyproject === undefined) {
|
||||||
core.warning(
|
core.info(
|
||||||
`Could not parse version from ${pyProjectPath}. Using latest version.`,
|
`Could not parse version from ${pyProjectPath}. Using latest version.`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 octokit = new PaginatingOctokit({ auth: github_token });
|
const response = await withRetry(
|
||||||
|
async () => {
|
||||||
|
try {
|
||||||
|
const octokit = new PaginatingOctokit({ auth: github_token });
|
||||||
|
return await octokit.paginate(octokit.rest.repos.listReleases, {
|
||||||
|
owner: OWNER,
|
||||||
|
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 response = await octokit.paginate(octokit.rest.repos.listReleases, {
|
|
||||||
owner: OWNER,
|
|
||||||
repo: REPO,
|
|
||||||
});
|
|
||||||
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"))
|
||||||
|
|||||||
@@ -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,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user