mirror of
https://github.com/astral-sh/ruff-action.git
synced 2026-08-08 02:07:02 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12172e3cfe | ||
|
|
0e7e01552a | ||
|
|
03f689c6c5 |
@@ -4,15 +4,9 @@
|
||||
"owner": "ruff-format",
|
||||
"pattern": [
|
||||
{
|
||||
"code": 2,
|
||||
"column": 5,
|
||||
"endColumn": 7,
|
||||
"endLine": 6,
|
||||
"file": 3,
|
||||
"line": 4,
|
||||
"message": 8,
|
||||
"regexp": "^(?:(error|warning|notice))\\s+title=([^,]+),file=([^,]+),line=(\\d+),col=(\\d+)(?:,endLine=(\\d+))?(?:,endColumn=(\\d+))?::(.+)$",
|
||||
"severity": 1
|
||||
"file": 2,
|
||||
"message": 1,
|
||||
"regexp": "^(Would reformat):\\s*(.+)$"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -39,13 +39,13 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
|
||||
uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
source-root: src
|
||||
@@ -57,7 +57,7 @@ jobs:
|
||||
# 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)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
|
||||
uses: github/codeql-action/autobuild@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -71,4 +71,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4.32.0
|
||||
uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5
|
||||
|
||||
@@ -17,6 +17,6 @@ jobs:
|
||||
pull-requests: read
|
||||
steps:
|
||||
- name: 🚀 Run Release Drafter
|
||||
uses: release-drafter/release-drafter@6db134d15f3909ccc9eefd369f02bd1e9cffdf97 # v6.2.0
|
||||
uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
+22
-87
@@ -15,21 +15,17 @@ permissions: {}
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
security-events: write # for zizmor
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Actionlint
|
||||
uses: eifinger/actionlint-action@447fbfe7533062b7a9ea55f790f2396fba6d052a # v1.10.0
|
||||
- name: Run zizmor
|
||||
uses: zizmorcore/zizmor-action@135698455da5c3b3e55f73f4419e481ab68cdd95 # v0.4.1
|
||||
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
uses: eifinger/actionlint-action@03ff1f78c0670b71017616a37170f327df932030 # v1.9.2
|
||||
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||
with:
|
||||
node-version: "20"
|
||||
- run: |
|
||||
npm ci --ignore-scripts
|
||||
npm install
|
||||
- run: |
|
||||
npm run all
|
||||
- name: Check all jobs are in all-tests-passed.needs
|
||||
@@ -46,7 +42,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, macos-14, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use latest version
|
||||
@@ -61,7 +57,7 @@ jobs:
|
||||
ruff-version: ["0.1.7", "0.1.8", "0.4.7", "0.4.10", "0.7", "0.7.x", ">=0.7.0"]
|
||||
os: [ ubuntu-latest, ubuntu-24.04-arm, macos-latest, macos-14, windows-latest ]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use version ${{ matrix.ruff-version }}
|
||||
@@ -72,7 +68,7 @@ jobs:
|
||||
test-unsupported-version:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Try install old version
|
||||
@@ -92,7 +88,7 @@ jobs:
|
||||
test-version-from-version-file-pyproject:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use version from pyproject.toml
|
||||
@@ -111,7 +107,7 @@ jobs:
|
||||
test-default-version-from-pyproject:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use default version from pyproject.toml
|
||||
@@ -129,7 +125,7 @@ jobs:
|
||||
test-default-version-from-pyproject-dev-group:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use default version from pyproject.toml dev group
|
||||
@@ -148,7 +144,7 @@ jobs:
|
||||
test-default-version-from-pyproject-dependency-groups:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use default version from pyproject.toml dependency groups
|
||||
@@ -164,30 +160,10 @@ jobs:
|
||||
fi
|
||||
env:
|
||||
RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }}
|
||||
test-default-version-from-pyproject-dependency-groups-with-env-marker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use default version from pyproject.toml with environment marker
|
||||
id: ruff-action
|
||||
uses: ./
|
||||
with:
|
||||
src: __tests__/fixtures/python-project
|
||||
version-file: __tests__/fixtures/pyproject-dependency-groups-with-env-marker/pyproject.toml
|
||||
- name: Correct version gets installed
|
||||
run: |
|
||||
if [ "$RUFF_VERSION" != "0.13.3" ]; then
|
||||
echo "Expected version 0.13.3 but got $RUFF_VERSION"
|
||||
exit 1
|
||||
fi
|
||||
env:
|
||||
RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }}
|
||||
test-default-version-from-pyproject-poetry-groups:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use default version from pyproject.toml poetry group dependencies
|
||||
@@ -206,7 +182,7 @@ jobs:
|
||||
test-default-version-from-pyproject-poetry:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use default version from pyproject.toml poetry dependencies
|
||||
@@ -225,7 +201,7 @@ jobs:
|
||||
test-default-version-from-pyproject-optional-dependencies:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use default version from pyproject.toml optional dependencies
|
||||
@@ -244,7 +220,7 @@ jobs:
|
||||
test-default-version-from-requirements:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use default version from requirements.txt
|
||||
@@ -260,29 +236,10 @@ jobs:
|
||||
fi
|
||||
env:
|
||||
RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }}
|
||||
test-default-version-from-requirements-with-hash:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use default version from requirements-with-hash.txt
|
||||
id: ruff-action
|
||||
uses: ./
|
||||
with:
|
||||
src: __tests__/fixtures/python-project
|
||||
version-file: __tests__/fixtures/requirements-with-hash.txt
|
||||
- name: Correct version gets installed
|
||||
run: |
|
||||
if [ "$RUFF_VERSION" != "0.9.0" ]; then
|
||||
exit 1
|
||||
fi
|
||||
env:
|
||||
RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }}
|
||||
test-semver-range:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use version 0.7
|
||||
@@ -301,7 +258,7 @@ jobs:
|
||||
test-pep440-version-specifier:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Install version 0.9.10
|
||||
@@ -327,7 +284,7 @@ jobs:
|
||||
- os: macos-latest
|
||||
checksum: "af9583bff12afbca5d5670334e0187dd60c4d91bc71317d1b2dde70cb1200ba9"
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Checksum matches expected
|
||||
@@ -339,7 +296,7 @@ jobs:
|
||||
test-with-explicit-token:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use default version
|
||||
@@ -353,7 +310,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use args
|
||||
@@ -364,7 +321,7 @@ jobs:
|
||||
test-failure:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Format should fail
|
||||
@@ -400,7 +357,7 @@ jobs:
|
||||
matrix:
|
||||
os: [ ubuntu-latest, windows-latest ]
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use args
|
||||
@@ -410,25 +367,6 @@ jobs:
|
||||
src: >-
|
||||
__tests__/fixtures/python-project/src/python_project/__init__.py
|
||||
__tests__/fixtures/python-project/src/python_project/hello_world.py
|
||||
test-parent-directory-pyproject:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Use version from parent directory pyproject.toml
|
||||
id: ruff-action
|
||||
uses: ./
|
||||
with:
|
||||
src: __tests__/fixtures/parent-config-project/subproject
|
||||
- name: Correct version gets installed
|
||||
run: |
|
||||
if [ "$RUFF_VERSION" != "0.10.0" ]; then
|
||||
echo "Expected version 0.10.0 but got $RUFF_VERSION"
|
||||
exit 1
|
||||
fi
|
||||
env:
|
||||
RUFF_VERSION: ${{ steps.ruff-action.outputs.ruff-version }}
|
||||
|
||||
all-tests-passed:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -441,12 +379,10 @@ jobs:
|
||||
- test-default-version-from-pyproject
|
||||
- test-default-version-from-pyproject-dev-group
|
||||
- test-default-version-from-pyproject-dependency-groups
|
||||
- test-default-version-from-pyproject-dependency-groups-with-env-marker
|
||||
- test-default-version-from-pyproject-poetry-groups
|
||||
- test-default-version-from-pyproject-poetry
|
||||
- test-default-version-from-pyproject-optional-dependencies
|
||||
- test-default-version-from-requirements
|
||||
- test-default-version-from-requirements-with-hash
|
||||
- test-semver-range
|
||||
- test-pep440-version-specifier
|
||||
- test-checksum
|
||||
@@ -454,7 +390,6 @@ jobs:
|
||||
- test-args
|
||||
- test-failure
|
||||
- test-multiple-src
|
||||
- test-parent-directory-pyproject
|
||||
if: always()
|
||||
steps:
|
||||
- name: All tests passed
|
||||
|
||||
@@ -11,10 +11,10 @@ jobs:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: false
|
||||
- uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
||||
- uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0
|
||||
with:
|
||||
node-version: "20"
|
||||
- name: Update known checksums
|
||||
@@ -22,9 +22,9 @@ jobs:
|
||||
run:
|
||||
node dist/update-known-checksums/index.js
|
||||
src/download/checksum/known-checksums.ts ${{ secrets.GITHUB_TOKEN }}
|
||||
- run: npm ci --ignore-scripts && npm run all
|
||||
- run: npm install && npm run all
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
|
||||
uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8
|
||||
with:
|
||||
commit-message: "chore: update known checksums"
|
||||
title:
|
||||
|
||||
@@ -16,9 +16,9 @@ jobs:
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
|
||||
with:
|
||||
persist-credentials: true
|
||||
persist-credentials: false
|
||||
- name: Update Major Minor Tags
|
||||
run: |
|
||||
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 }}
|
||||
```
|
||||
|
||||
## 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
|
||||
|
||||
| Output | Description |
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
[project]
|
||||
name = "parent-config-project"
|
||||
version = "0.1.0"
|
||||
description = "Test fixture for parent directory pyproject.toml search"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.12"
|
||||
dependencies = [
|
||||
"ruff==0.10.0",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
@@ -1,3 +0,0 @@
|
||||
"""Hello world example."""
|
||||
|
||||
print("Hello, world!")
|
||||
@@ -1,15 +0,0 @@
|
||||
[project]
|
||||
name = "pyproject-dependency-groups-with-env-marker"
|
||||
version = "0.1.0"
|
||||
description = "Test fixture for issue #256 - environment markers"
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.12"
|
||||
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
"ruff~=0.13 ; python_version >= '3.11'",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
@@ -1,2 +0,0 @@
|
||||
ruff==0.9.0 \
|
||||
--hash=sha256:badc0de
|
||||
+1
-2
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"$schema": "https://biomejs.dev/schemas/2.3.2/schema.json",
|
||||
"$schema": "https://biomejs.dev/schemas/2.1.4/schema.json",
|
||||
"assist": {
|
||||
"actions": {
|
||||
"source": {
|
||||
@@ -13,7 +13,6 @@
|
||||
"ignoreUnknown": false,
|
||||
"includes": [
|
||||
"**",
|
||||
"!**/coverage",
|
||||
"!**/dist",
|
||||
"!**/lib",
|
||||
"!**/node_modules",
|
||||
|
||||
+338
-473
File diff suppressed because it is too large
Load Diff
+204
-241
@@ -28205,240 +28205,6 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.KNOWN_CHECKSUMS = void 0;
|
||||
// AUTOGENERATED_DO_NOT_EDIT
|
||||
exports.KNOWN_CHECKSUMS = {
|
||||
"aarch64-apple-darwin-0.14.14": "76a9b0ebe57d0eee56940dbe0b62462578d1369cca8314ed0d2a6f2102292d4f",
|
||||
"aarch64-pc-windows-msvc-0.14.14": "449982699657bd68d170440dad958281b030bc05865fe012d043cd225e78eb79",
|
||||
"aarch64-unknown-linux-gnu-0.14.14": "1eee1ce3467fb5f348738bb5e4598859b55816a79c3cd6a26ca0dae03d7e2672",
|
||||
"aarch64-unknown-linux-musl-0.14.14": "a4d7302aa201a6f8e71dfa217cd8273fddd4e434a93ee3b4b07047fd7a684ac1",
|
||||
"arm-unknown-linux-musleabihf-0.14.14": "c225db82587780d1675e220db02c5209f406b29afb0a525628e11ffaca537068",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.14": "cdc9596d6317e6cb32fbf3fd6c0e5817f96676b215957e6583db28abf4a15427",
|
||||
"armv7-unknown-linux-musleabihf-0.14.14": "0f1938426c50500bac09a09df5396aa19d6ce9f01a3a18a531dfaee5cc0d93e8",
|
||||
"i686-pc-windows-msvc-0.14.14": "4f6af9d82acae3d1308c55b0fa51b84d57eafc380aedf97a53a32314118c9a71",
|
||||
"i686-unknown-linux-gnu-0.14.14": "5ceb5e2f1906d85e444cb71503379e14d96ded423bd68906f1a539b78d9fc2c3",
|
||||
"i686-unknown-linux-musl-0.14.14": "878cebcaf3481295d22a1274cea94ec050455917669ccecac586dcfe6b4a557e",
|
||||
"powerpc64-unknown-linux-gnu-0.14.14": "e01a6db6bbf15db82052269887fb49e6be79923d188f1f60ed74f93b6b9a90d4",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.14": "6048f270a46cce01228a53fde14fa6182a99d9e99169d7c252f706d7ba2a4845",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.14": "6eca650195a22c0a568adc923b645b6317dad3ecc8a3d5c02c08768d6b333393",
|
||||
"s390x-unknown-linux-gnu-0.14.14": "dbde3ba91f84d8c183ed49bca0790777285d21381ad64a290584bd19038b83a4",
|
||||
"x86_64-apple-darwin-0.14.14": "749396c675c6f07205be6c4ef89e2e95123d790062d681059a355030e9d7d119",
|
||||
"x86_64-pc-windows-msvc-0.14.14": "81bfeed34f15296e6c81ecea912b6fff4430b957de8a1181ce9365434e3d6744",
|
||||
"x86_64-unknown-linux-gnu-0.14.14": "9876634f799d933bdaa1de864f47d26f898b2e20aa8f4f85d63235c3a231068d",
|
||||
"x86_64-unknown-linux-musl-0.14.14": "55a1ee65f5ac9416cc40f99c2df62f0d4525d40369fe371caff945c495174d57",
|
||||
"aarch64-apple-darwin-0.14.13": "067d1a90da8add55614eff91990425883a092d8279d9e503258ff8be0f8e9c18",
|
||||
"aarch64-pc-windows-msvc-0.14.13": "f7b5b9740ae893ac6abe9b9f68865073ffb9146a6f352ba9718d53b102ad02ef",
|
||||
"aarch64-unknown-linux-gnu-0.14.13": "84ce8fe1ef9b2eba018ba396fd018ac2bc22865a9e2a02573899ea6ee8e1e5fd",
|
||||
"aarch64-unknown-linux-musl-0.14.13": "25941b777ff712f4d9473d26c1b875034214a3d5de20ea99b2add939dcd0b367",
|
||||
"arm-unknown-linux-musleabihf-0.14.13": "3d833d451accb334f9cb91141083bbee5b835dcf0b49d14e5ccb13e0b6a7c387",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.13": "90aa92a6de0f63eacb2d380c324039c101c6097956690fbaec05ed8d922f8766",
|
||||
"armv7-unknown-linux-musleabihf-0.14.13": "192deb53946b4309c56c1ad7c401ddac7557d0a517da7addfc636f1188bab30d",
|
||||
"i686-pc-windows-msvc-0.14.13": "4ead4d5fc89a1f02aa97dad944e69306ae4177a689a3818d3575fed11aa994fe",
|
||||
"i686-unknown-linux-gnu-0.14.13": "a321fc4862748563a663472a4458fe514e34542d0fe8d767d67b1463d585fb2f",
|
||||
"i686-unknown-linux-musl-0.14.13": "597541ac81d553c2fe97339680bfdb3e926714763ee37f0b5dbcc572d695e376",
|
||||
"powerpc64-unknown-linux-gnu-0.14.13": "cad4c05db54969608ec292b695397ddaef7452f759b976a60b69d9fefc6c5724",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.13": "bc7faa37e496ae0198ee7e1c9e8958df3c55025ccf8be175b74533f87626e726",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.13": "d9c6fd360347b9b0079994246ed08186f64629529e2fd2dc1a97a31da2a214d5",
|
||||
"s390x-unknown-linux-gnu-0.14.13": "1995227a65970cb2c1aa3b03c9a5418ee1fa56210c4577e6f8e1a14d1e79ed5d",
|
||||
"x86_64-apple-darwin-0.14.13": "69e424a42ac3a7c6c7032ad96deb757c35c93c848b6ea329a3f4c605e6d89ef9",
|
||||
"x86_64-pc-windows-msvc-0.14.13": "d2af4376053458f283d74980b49dc0d61d3ef9d9b8684c5b25bd64b73e11634a",
|
||||
"x86_64-unknown-linux-gnu-0.14.13": "b1e03e4cf245411f184106ba3d973b3902021bf5327e2fde0cfad163aacdc2c1",
|
||||
"x86_64-unknown-linux-musl-0.14.13": "2fe394f493318551f271277a2228e56b31ca69a4842483e5709af4548f342bc3",
|
||||
"aarch64-apple-darwin-0.14.11": "c3fab6bcad9cc2f8a342829dd4ea011c54b9671d023b71baac1cbf2b3526cefd",
|
||||
"aarch64-pc-windows-msvc-0.14.11": "43faade7e8f33a8ffab726aa44ee2b6bc1fd9d51407320db797dcb3dac068461",
|
||||
"aarch64-unknown-linux-gnu-0.14.11": "e5c018ac042ddeb9c02c3d96b6efe3a0dcd3406ba9bd695253d6111785f7abf6",
|
||||
"aarch64-unknown-linux-musl-0.14.11": "4779a99b51812b56d56d180174be46ddb2fed98fecaea7565b450d37cff1b8c6",
|
||||
"arm-unknown-linux-musleabihf-0.14.11": "a400347f59192992b61dc0bb9dfdfe640f8063403112d9e3a70f6275d34ae386",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.11": "7938729417dcd33b7078ae0a77440cc152bba33518bb095e19cb108c132b2602",
|
||||
"armv7-unknown-linux-musleabihf-0.14.11": "57da6726050047ff2989554734deb94eb053789fc92c297a1a722a6723106a77",
|
||||
"i686-pc-windows-msvc-0.14.11": "51bec5b8cdc4008fb76e11eba4cbb62b8617ff242d316465fa2247dabfd2dcb9",
|
||||
"i686-unknown-linux-gnu-0.14.11": "9051f2529d36e38b58b03b6e605d77f62b6378d5afe70eba692f9a214794b273",
|
||||
"i686-unknown-linux-musl-0.14.11": "3f94ba805fd14bd8c088b710c950cd89d9968294fa3cff68a618e50ad9dea73d",
|
||||
"powerpc64-unknown-linux-gnu-0.14.11": "eb69c9da0285717f39ed25f666a0860d7d6a50359a1de0bf76fba6f83d59e1ea",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.11": "001b43b7558d32f320fa775c74af0035952a724d323bb5204b6f83017297c6db",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.11": "8901e1a36846c59a94ef468808e4a1af58f74e9c2830f40e045f5f9e70d6867c",
|
||||
"s390x-unknown-linux-gnu-0.14.11": "d29ba2740b7735ab20663225dd420acfb0797b29358d902afc7b87ee0f1f4b08",
|
||||
"x86_64-apple-darwin-0.14.11": "b301d1c04facba1004d180c8fd9ae36d868b780900682c97ecf324015c75f0b3",
|
||||
"x86_64-pc-windows-msvc-0.14.11": "e254f04e054e095215b8f74d5cdb7288f2d3f226bdc42b35cd44751fc7a55b2d",
|
||||
"x86_64-unknown-linux-gnu-0.14.11": "b98f19bb2cc99e0ea4de1625fbc43661902a1db45ff49a72e7f4a58cfedaabfb",
|
||||
"x86_64-unknown-linux-musl-0.14.11": "8e8b7a3f791e0faf3a1728d808133f6f9bd5c1422eccb9956e7e7376ff5404b8",
|
||||
"aarch64-apple-darwin-0.14.10": "dd0f3ec914604d802658ae0d271ff9d767c117d1702a44222170dd2ffbad8d2c",
|
||||
"aarch64-pc-windows-msvc-0.14.10": "a5b5bb9525a47dfff0ce8ad31546549b31dc1184f54027517838b1bbc9d81129",
|
||||
"aarch64-unknown-linux-gnu-0.14.10": "f6c8735bf175d449d79151f6bfe84251770ca6032e86bea0d327bc3789179027",
|
||||
"aarch64-unknown-linux-musl-0.14.10": "0888883f71199ca3af3569052d0cc1aee8b316390ffe75bc19f9a8047ffd0158",
|
||||
"arm-unknown-linux-musleabihf-0.14.10": "5102cff6cbed54953d6cd9c9d920a9dd6fbe283e047136a6e9bc732ae14a5cf3",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.10": "94a3ad56d89c39ed47d4e864a18ea31baf989384840d5e182c3f94d5f35a4c93",
|
||||
"armv7-unknown-linux-musleabihf-0.14.10": "2a051d384d5d5fa84521f843424454620ff5d22580f90cd882512373c36933b0",
|
||||
"i686-pc-windows-msvc-0.14.10": "29e7519db7afed48e3729d16289a467acae7c6c34113d50bdd1e7e1077e1c7b5",
|
||||
"i686-unknown-linux-gnu-0.14.10": "56f98f880933907b809de3180e866e72342971024445144c409a6d0a46237c1a",
|
||||
"i686-unknown-linux-musl-0.14.10": "0cce7104a85d2891a9f62d9ee2decb942b91888d6156e4e858c1cb350a71a57c",
|
||||
"powerpc64-unknown-linux-gnu-0.14.10": "7685d9de6c1b139fd767f70310598a79d5b6c613d744a366b2fe99e420d19c32",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.10": "620476793ed106c1f6bfa15e3b0d7834a55cad048a853d63f0c118b9fb7c7337",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.10": "922872274af2b681381b46a242e77fa9bf427fa745313e818b89a6246be81d77",
|
||||
"s390x-unknown-linux-gnu-0.14.10": "da9cf8172369821dfaabfc8861238f565fdbcec1aebe897d900020ce561572de",
|
||||
"x86_64-apple-darwin-0.14.10": "7d5af84e84a189b49ac235d7970d35588cbed0d087f4237c96e5ac3c392bc6fb",
|
||||
"x86_64-pc-windows-msvc-0.14.10": "9c3340d322fff7a6dc132b8783ba734f5eaf4c46f7dd8bc828abdf850b3bebe1",
|
||||
"x86_64-unknown-linux-gnu-0.14.10": "4695e6375b1fa2b9c5f839218d695d8e701cfccb15d3f622b6a6feedb086bffb",
|
||||
"x86_64-unknown-linux-musl-0.14.10": "e1fac6f2705057f48f3d000694d0f41c95b06e738cf4825315c670f3b9d24933",
|
||||
"aarch64-apple-darwin-0.14.9": "ea132e6d6af23dbcf21c81d7fd8c5a94ccf16b1fb36a8bc60da971e339301f10",
|
||||
"aarch64-pc-windows-msvc-0.14.9": "dcc2c8a687b9682ab345418ba2793bc8594ae1f2bdb78af520b363e17cf2e271",
|
||||
"aarch64-unknown-linux-gnu-0.14.9": "423a07140aca7d007d63a42ff9322c0c2017dfe0ed23efe8bcbc36ed21d1cfd7",
|
||||
"aarch64-unknown-linux-musl-0.14.9": "9bdedf2e8d6398e193c2b2feccb2b4c9f8d37a6dc87cc0b587340a60e87d14e2",
|
||||
"arm-unknown-linux-musleabihf-0.14.9": "5d04fe5dac3a625c576f48d441238896d164128ec5ba64c9964e5d9502e92b1e",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.9": "1404c9aace1216ad5cf8b977be5b967ab507f7245eec7bc9bb3fab80010a7769",
|
||||
"armv7-unknown-linux-musleabihf-0.14.9": "e90707e761fb9ce528c3728e5e12ddbadd60ad45dbacfb1ab9dff4b308f10ae3",
|
||||
"i686-pc-windows-msvc-0.14.9": "a7e19280ec509dbefdffd097e29f0ca411cca7196a7272198d022d22d5fad6c3",
|
||||
"i686-unknown-linux-gnu-0.14.9": "33494807d987983f1a91e486cc6a028364aa3291c96c3784620f75a3f477411a",
|
||||
"i686-unknown-linux-musl-0.14.9": "816e6fdefd899f2dcca7261dc6575ecac82907b94238569cbfef2b1639680865",
|
||||
"powerpc64-unknown-linux-gnu-0.14.9": "6786baf11e8b59c29d19c0da127451606837243472797aa5084eecccd9a74445",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.9": "ba7219c9dce6f2d931d9851ac9623923b3fc5dafeb08c640885c7e33a6074775",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.9": "8f46292b808c5ce0d72d1a4428e189a641d9f41b3af0b077537ddb7631f48b8d",
|
||||
"s390x-unknown-linux-gnu-0.14.9": "d795afb56c7f4ba55a7a08eda03bce1fd8b32d71c9cf1741218ac6b5578d8b84",
|
||||
"x86_64-apple-darwin-0.14.9": "ce980eb4b44a84cbf278686f8cf71a21b353888b29472ca269ffe385ce4f2351",
|
||||
"x86_64-pc-windows-msvc-0.14.9": "98727a845f01782b78efe1a3f0913aa9ec76c9a24e09aca89e26b3b684ca86a0",
|
||||
"x86_64-unknown-linux-gnu-0.14.9": "b012ebe5dee8d8c125f4d553fccda058249fbb1c914c17175c6edda14a1fb7da",
|
||||
"x86_64-unknown-linux-musl-0.14.9": "3bdbdb32f95bcf2c5bc45502a2050f30706f1c205fa0087ee3d4c688f67854fc",
|
||||
"aarch64-apple-darwin-0.14.8": "4efc019832a6b9225f650ee256d31b2e875021cae662963d533c78b5cf865f52",
|
||||
"aarch64-pc-windows-msvc-0.14.8": "965217e69f6d43e4df25abeec7b51a5ea014dbec219b9b2866ca37dcd312405e",
|
||||
"aarch64-unknown-linux-gnu-0.14.8": "9bbce62639bb30abf76202f2ec32c4234498de3c93c21b4c32c99d51c802cc41",
|
||||
"aarch64-unknown-linux-musl-0.14.8": "0b3464f54fa56f514c29e92bcf05867b914ad6c246e2ddbe4cce5c0700f2a3d9",
|
||||
"arm-unknown-linux-musleabihf-0.14.8": "5496ae4d581e7f6cdf509f56d33830056d1f8a432aa489bf9e40fc9754fbf1fa",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.8": "203de1734ffddac18f02e3756ba0c02bd1770665031aba617ccf488ccfe78b25",
|
||||
"armv7-unknown-linux-musleabihf-0.14.8": "5e424ba3ebc90306f73e05914244245b66b27c3a44dcdf9029d97bfc56131491",
|
||||
"i686-pc-windows-msvc-0.14.8": "2bdff511119eb9d94e5a240c15bef668c43b0640e61c549b32242d7b04efd062",
|
||||
"i686-unknown-linux-gnu-0.14.8": "8f0c15e9518d1b9c0423986d3d1045ed5c4005e1037589a6772eee724ec3ba02",
|
||||
"i686-unknown-linux-musl-0.14.8": "55326d64201ff99dc96e93b23de951c2656825089ee581fc8aee099140d4d310",
|
||||
"powerpc64-unknown-linux-gnu-0.14.8": "52ffb3434ca8ada1d2703df0c4b929758444c24d9a47a8608a0775ddf6dbfa6c",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.8": "3a8808f7b02f37e649e1cc1145ad3d2e4d23b4154637525480c7f6536f4152b9",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.8": "8e6f1f660c1145bfe1b13fe41b7e6f4e829be3351bd536acbd41f91478d8932c",
|
||||
"s390x-unknown-linux-gnu-0.14.8": "f3ed19ba06face77e21c682846a4e5b3d4d9bfe5132eea86e30a84522b70d2b3",
|
||||
"x86_64-apple-darwin-0.14.8": "c53af0ba3cbc5e9e8f7768d28a7ff2d0795843e39302891093227bc6df343e94",
|
||||
"x86_64-pc-windows-msvc-0.14.8": "a837e98f5e6a21222a896f60521f563aea2c686a07cad17da9f5b5f2c4e04f8a",
|
||||
"x86_64-unknown-linux-gnu-0.14.8": "dce933cd68e3ca69c64c277ce6671dcdee7adeeaa6ac5a15047a4c973b30741f",
|
||||
"x86_64-unknown-linux-musl-0.14.8": "0f5496a3d2413b3cb85bbf9e4a6f95b5db127ac10989ecb3d8c0c0a0a74a892b",
|
||||
"aarch64-apple-darwin-0.14.7": "24631da81fe9ce5f4112e8caeb71957e81682e752a563f0a50715735f923e3c4",
|
||||
"aarch64-pc-windows-msvc-0.14.7": "24ca141d57fcd5bd303ca51af002cb9a815f072d9076b40ec2813835d46c4a82",
|
||||
"aarch64-unknown-linux-gnu-0.14.7": "8cc84635155dfc11acca297af25ed6c8a30e36146729a90df9e7d348a8fc0a4d",
|
||||
"aarch64-unknown-linux-musl-0.14.7": "8d429dbc2c308377c33874dc71d4c2388728f0d01c0a5869d2c878d21a6ced87",
|
||||
"arm-unknown-linux-musleabihf-0.14.7": "3cf1d9fdfd58a113b0b629e0ef2d247bbadbc8deec25724d6dc7d6f6ca7e7304",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.7": "058f52b31c88056291b0e917ea909eea036570dcdee32af1ce62eacff98c4e2a",
|
||||
"armv7-unknown-linux-musleabihf-0.14.7": "9dddf78485ba0b5da8d8a73b24332ecf759a4de95ca5700c5141067683b5b615",
|
||||
"i686-pc-windows-msvc-0.14.7": "46d16810e1a0e7efd5c25efc60b719225c3a8b8a7fb662b61f293eeb62ccafdb",
|
||||
"i686-unknown-linux-gnu-0.14.7": "29242e501fea264ef4cb03164d9c375e426fad5c298412f64a4d50bc9ea19bc1",
|
||||
"i686-unknown-linux-musl-0.14.7": "5b1eeea3f27745e7e68b19bd214267aa653ef64c62c25ef4cd8bb57af8477171",
|
||||
"powerpc64-unknown-linux-gnu-0.14.7": "3cc47bf9943a46839d847746ccae59a3147982c5bf93bdc786fa5279d7d28681",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.7": "1dabc7d0251f6f11ade20620538daeed1c4d27223576a04ddb2a87adfed2ca11",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.7": "075232dfa5a03ef399d183879848cdb5d71485639c2a07fc62a27f4d4a68af3d",
|
||||
"s390x-unknown-linux-gnu-0.14.7": "a83cb05567dd4bb59fa8fd36b8337b21d475dd6f82fe0600a2364f1de6c295c3",
|
||||
"x86_64-apple-darwin-0.14.7": "c3035811c5354d923f3d7fd6320cfb23de30600f1eb86aa1518bac27c3d7fffd",
|
||||
"x86_64-pc-windows-msvc-0.14.7": "9a54b82e12574ea068e0914cdb1398993cbf78338c0799b6f9003a783fec779b",
|
||||
"x86_64-unknown-linux-gnu-0.14.7": "8a545d346b3f6f979574df96b4fb2a983f2568fe200f1c1f690bd2cbdce5ea51",
|
||||
"x86_64-unknown-linux-musl-0.14.7": "0f6cd59aa2b266758f1083c73f1b8303e3aedde0d953f0e79777faf174d8104f",
|
||||
"aarch64-apple-darwin-0.14.6": "b2ace677f51d0f2b91ca27d312ac8b069658502049015f4891c16f8864136282",
|
||||
"aarch64-pc-windows-msvc-0.14.6": "90518b6d16fe8b705c891dcdd77b20ab41da5e042b085aced7bbc647f6f2fdcd",
|
||||
"aarch64-unknown-linux-gnu-0.14.6": "bf3d592d5f879f072520afaa9c4a76a3ad0f6cf4b7bf7e27fb5d0e728e863f14",
|
||||
"aarch64-unknown-linux-musl-0.14.6": "4d3c113e59c5fbc31f1def566cebf28732bb45ff6b83df8e142bc1c055b3afa3",
|
||||
"arm-unknown-linux-musleabihf-0.14.6": "d0a3ed0a773f8e7edc44d63644b952d446dba771fdbb3eefd02853c323373f90",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.6": "d6b71f6a951963f8dd0f2e099206b0aabf95d9bb49451a607da3e5823b800596",
|
||||
"armv7-unknown-linux-musleabihf-0.14.6": "a048f1e9a97afe8ac2a63785f5733d5736b9d6e6767b4d5b6434916d38f888e1",
|
||||
"i686-pc-windows-msvc-0.14.6": "c7b76311939f0ed7fbf4fe1be7c6c96c05b26a73e500650dff2586cbbe5c0b45",
|
||||
"i686-unknown-linux-gnu-0.14.6": "fe3fbd9227a7f2c1277306c31cf7627ab1dc61c25fa30854d66d8db138a74872",
|
||||
"i686-unknown-linux-musl-0.14.6": "5a184f4c1e6a665f56f980464dd87eeb75f32e37bf67d195efdaa41bba634a5d",
|
||||
"powerpc64-unknown-linux-gnu-0.14.6": "fe54fda27408241e9bee7bc5c9740a9a47a87a073ecd3d9bb166c32329c33958",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.6": "d4296a0f41ed25cbf56a04b04bda7f3661b8be9d3220b89cc342e6cb4e6ee259",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.6": "e06b714ebb8846421ed6b998beac66a7fd1fad09f7bee89e4e6b671c6e8c3fc3",
|
||||
"s390x-unknown-linux-gnu-0.14.6": "2ba3e5b6e66d9ba60d6fac9b699f77dd79402c872fc244259db7fc7815180b3d",
|
||||
"x86_64-apple-darwin-0.14.6": "efe45a6defcf4f1b6de87d56ce94635f53b00f88ddc2fcb8e25e2c4e3a61261c",
|
||||
"x86_64-pc-windows-msvc-0.14.6": "3a8bb3499484c7f9e86060c89d0e61c47dac7f9fb4d7fe46bc59dca400b322c9",
|
||||
"x86_64-unknown-linux-gnu-0.14.6": "b0ee141ada4749c7ee16ba21465b4ef035455b495aa3ab951bbcb9bde9f4d001",
|
||||
"x86_64-unknown-linux-musl-0.14.6": "7ef1743875c7c469cc1c4bb6da6a9bbff3f3a7b89a75632d6cd2944ede470a5e",
|
||||
"aarch64-apple-darwin-0.14.5": "c07616663ac63792c16269d6798a47fb1f45b29997706178d60e90da698a9970",
|
||||
"aarch64-pc-windows-msvc-0.14.5": "c09ff1cdaafd6cc3733586dc517bfd3e0d0ddc39360c90343ab7b610c8ade130",
|
||||
"aarch64-unknown-linux-gnu-0.14.5": "da5692a609e728dd1773aebf087113c5c3561aafdfa9fe574b30de9438c60a23",
|
||||
"aarch64-unknown-linux-musl-0.14.5": "ebef9d7119119e67b1065a5a35128148898e1581037e7d68c3aa9223983af0a4",
|
||||
"arm-unknown-linux-musleabihf-0.14.5": "00c937e44474d21878bdb2e9e214d74005fddc8c43a4c76d8e71a9085c7cc6af",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.5": "aa54fcaba5d7029180139491213f504e5789b36e0017c0a67aff7b6ec0c04c45",
|
||||
"armv7-unknown-linux-musleabihf-0.14.5": "5e06c211d5dc4e85eeafd29e87af4aed690a41b02f9296537d4d4ebe62fded9a",
|
||||
"i686-pc-windows-msvc-0.14.5": "6b54cf61dad3276995d157d000f501917f1aa54735391150bf93282329253c92",
|
||||
"i686-unknown-linux-gnu-0.14.5": "81aadc05c630e7e7c4ca68c510f5ce462e0645fa03650ca3f844cb4d9b2efc27",
|
||||
"i686-unknown-linux-musl-0.14.5": "556c63188c8bc7e253a4eaef8727857a808a81af6fef02f76f27a71e800554a0",
|
||||
"powerpc64-unknown-linux-gnu-0.14.5": "df85081b5e776d934188f9eb67a1d2d17dba1e986f7e76668ffeed6e541858d1",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.5": "4a02aa69a73bc5d9e579b08f5081e0fec412e353bacafa6b4a0705d89b3486e6",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.5": "a1a20ddca6e776a8f38d533da4aa1eeb543ecbfa08813c482e3cb7d5ef0c39fc",
|
||||
"s390x-unknown-linux-gnu-0.14.5": "242bf290de417e8c9e8ca5c844be933e611cca3f3b301dc8537f72d051ceb3b9",
|
||||
"x86_64-apple-darwin-0.14.5": "d7285770c5098be00c9b4ff099d6ef7f8b2a54b4019c9507b628ee9f0d404c06",
|
||||
"x86_64-pc-windows-msvc-0.14.5": "9b998bf1a790a18b829fab3368ee7404a8f1f2cec2acb650aa1fd1b74962d023",
|
||||
"x86_64-unknown-linux-gnu-0.14.5": "5bc52346f81098e42beecd622f49c4336a5361eb38b7b51d466b0a9647e99e33",
|
||||
"x86_64-unknown-linux-musl-0.14.5": "69ddecf374a4f53eeda238399614ed6f92c5e75fe04436c604fb78435d5658eb",
|
||||
"aarch64-apple-darwin-0.14.4": "ab26cd2b03d5b2ec42dc7ac1886a29055eb2003aa2db14b26c7091c7cd6b4c68",
|
||||
"aarch64-pc-windows-msvc-0.14.4": "270773b34836e5b546d3ec9fe3b6cab4057881eff69828566f230baffff7634a",
|
||||
"aarch64-unknown-linux-gnu-0.14.4": "8bf03ef4bb8ce42321ea0e59a505739b29b18d85b1d4f220736e242248b7da31",
|
||||
"aarch64-unknown-linux-musl-0.14.4": "c77b72e565e9044eddce02e71f9214edea045047b786bb2bc973a6d8f94fb13e",
|
||||
"arm-unknown-linux-musleabihf-0.14.4": "5211b338bf1c48faa2fc045bd68c56b50e1e3d898f2255c39a3a7040033738f1",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.4": "62e05c9a4571ea1aca80db377b4a11dd2325100db9ca0d7db16b61b87cb3d0b5",
|
||||
"armv7-unknown-linux-musleabihf-0.14.4": "b20725ed5be925b58120172b2395bdbea9857bc562c3a7a7e47a4d9281bafb7f",
|
||||
"i686-pc-windows-msvc-0.14.4": "bbe517649a5c6134b424b3065db7b5dcfaed72c2f5e848ec87cb2b33be7a133f",
|
||||
"i686-unknown-linux-gnu-0.14.4": "a68939e63f7b384351172ff1535d37e73ecf81a94b0c89f369f3f41aabcccede",
|
||||
"i686-unknown-linux-musl-0.14.4": "ff05a300bbb06211ec9cc43daec05da197ed116b5f6a5ea9ac8fc80fc00df39f",
|
||||
"powerpc64-unknown-linux-gnu-0.14.4": "394eae2ad3485eb3530db3e9b51feacbf0b03e63ec8e93f2134a137c59da4abe",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.4": "b12b41763fa3c1068d2378669fa2740b11e0dd3dea3f667f732241a25fb06c9f",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.4": "c6385274d7a3b1d0c7ed05b36101faf2c7206e8adc0c7c107d32fc8e5d57628c",
|
||||
"s390x-unknown-linux-gnu-0.14.4": "dcbf1dce38298dccfea7edffb1ea237ab2ccf2ea5dbae6d5b2dc4fe88177b094",
|
||||
"x86_64-apple-darwin-0.14.4": "041b9429400bfc3aca8402940fe6fa0ec33f9d79e8f50fbfb3063f70b4327fa3",
|
||||
"x86_64-pc-windows-msvc-0.14.4": "5541af69b1f342d843f8fca6218bd0d5d9064e987d14405a2abf60ce94c615a4",
|
||||
"x86_64-unknown-linux-gnu-0.14.4": "c9120e68e358eb0f850123537afe18945f9095e9f17967944fd23585fc88bb0b",
|
||||
"x86_64-unknown-linux-musl-0.14.4": "dcb5b42fd364c9e837b6800886564a891d023c8b87c967224351399cb1cda154",
|
||||
"aarch64-apple-darwin-0.14.3": "fc4c2c153656bc4082fb6c928fbd6867d5eb932240b663b329365f3f1821fc82",
|
||||
"aarch64-pc-windows-msvc-0.14.3": "b7ed5d2006b1c43559e78d90e65f2fa1982bec3976de74978485660fcdd67548",
|
||||
"aarch64-unknown-linux-gnu-0.14.3": "daa9edc586b669079fbe204bf5f5b48ee05c5dac862d2daf5ad72d3c2777834b",
|
||||
"aarch64-unknown-linux-musl-0.14.3": "571058fe7e3381ad54bec8b3d9d127013e332d822b35978b503722147aa3b9cf",
|
||||
"arm-unknown-linux-musleabihf-0.14.3": "f5e9b79cea63116ad582ffb514a61a506978762b67859b9e9e9cdee4b2ad065d",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.3": "07094c107682c58260d652708a0c8b2f3d38bdffd5e7ec9a81785e665154a137",
|
||||
"armv7-unknown-linux-musleabihf-0.14.3": "edfd2491e25383de77f60aafcbd5451350b2cb6f9af38b6cf5a2e725193333cd",
|
||||
"i686-pc-windows-msvc-0.14.3": "f46525c0684a220c063c1c1f8d516c8cccab8ec9f62417e17e02cd4c1a138417",
|
||||
"i686-unknown-linux-gnu-0.14.3": "c7180e275ccaa97eae1528a15a08828cd9aaa15b57d3828f8722b0edd347046d",
|
||||
"i686-unknown-linux-musl-0.14.3": "60d1db56b1b4064b00f349b5fc8e11f2e63b8fa3bce4679f9c9da91356d6c3f6",
|
||||
"powerpc64-unknown-linux-gnu-0.14.3": "b9bf7191d023fcdd938e51fa53b63226897a23896f82057fe32fde9df10b1649",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.3": "c1f5e497fe183dc1e0b6bb984573a0703182b68ac07587add1cbc370957ebd20",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.3": "909e92469524b80520af17537df55f245d6ba018928bc486fd8418e9983b539f",
|
||||
"s390x-unknown-linux-gnu-0.14.3": "d8c56807e9827f391e1266bd19e0235fa470a0620cf166975365862e5bf9e908",
|
||||
"x86_64-apple-darwin-0.14.3": "076e88da3dcb38d3fef61daccc759bf29b605a490143ae707c0e067ebf8d7050",
|
||||
"x86_64-pc-windows-msvc-0.14.3": "ccc1bd362cca52a7fb7f9ee2cec7317c139ccb86e0964a5c1d4b14efbf2118ff",
|
||||
"x86_64-unknown-linux-gnu-0.14.3": "cb8a88912aa91a1864ad662c24df4514699ddfcbc52e684218aaf5ac57d7de0d",
|
||||
"x86_64-unknown-linux-musl-0.14.3": "58fd05427420df7b7b51bc6bbd5a430f38d2dfd63c74660f27625a4632f12532",
|
||||
"aarch64-apple-darwin-0.14.2": "33225f67ce61188fce91b801ab50a4028f8b0d66abbf81810841dd7d42371e38",
|
||||
"aarch64-pc-windows-msvc-0.14.2": "4fb68c66c719b337c2364aeb8210326a28b8ae046ef9a9c90407d473264515dd",
|
||||
"aarch64-unknown-linux-gnu-0.14.2": "a907d6a13120679b7194eb61beace09103f04b90e32cf7c2ac11979e6f618e35",
|
||||
"aarch64-unknown-linux-musl-0.14.2": "e323e9716661c9e18152aefe62e3fada497c10c9b3ef3095359c31b4df4f866a",
|
||||
"arm-unknown-linux-musleabihf-0.14.2": "2b3ccfd36718b29e0f5d1dcc10540b61205c72ee1c6a43331e6a97f2a17f12d0",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.2": "5539a66c2723670dbf54eadf615e106aa038decbc701b9d47f7ed535ac677e1d",
|
||||
"armv7-unknown-linux-musleabihf-0.14.2": "c59be0daa3144ba317c88dd6cb3af68cff0f8dfbf2f495bebfb5b630d6f4c7cd",
|
||||
"i686-pc-windows-msvc-0.14.2": "125e2010b28ccb01ed2a4596e3db8d8dc0a46ccba2ee08e6038cc56ebbfbcb96",
|
||||
"i686-unknown-linux-gnu-0.14.2": "e2accde14cb371ca1b60935028c72138390f552cd77fc8c52a75f28c68eaa963",
|
||||
"i686-unknown-linux-musl-0.14.2": "d11f67f949e909412c523edcc1944c16dfecde49ed3709bca40631e371300da1",
|
||||
"powerpc64-unknown-linux-gnu-0.14.2": "99cc0f2cf83a7f82bb4e0db9ff1de8bcc5bf966054c0c82d25e189ee4565b0d5",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.2": "81ac087a458bcaac7905c9afe84ef58061394a71264e8dd115889be0bc96fc6e",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.2": "7917eb80fbae72040ad199f634361ce6001bc6225c165caa09c6d983c90692b0",
|
||||
"s390x-unknown-linux-gnu-0.14.2": "e24bfabe70535ffeedbba74ff6ecdf6c6bb09c5d9bf2c6c902e5540b569d6236",
|
||||
"x86_64-apple-darwin-0.14.2": "f119057618599e8983bdeed64e949af54f67d7a62464d11de0ba1237619a9990",
|
||||
"x86_64-pc-windows-msvc-0.14.2": "0a1160f45263cc847acd4b42392bf0484c9420806eeb7f776e1384fb557aeade",
|
||||
"x86_64-unknown-linux-gnu-0.14.2": "b4457ef6c130165655e0fb91081dbef09011ec41955115aaa22c94f7655c97c2",
|
||||
"x86_64-unknown-linux-musl-0.14.2": "e5e177a829b370376abb6a1dc9edc8c59ac519ebe64b1366b65e2952fa524a8d",
|
||||
"aarch64-apple-darwin-0.14.1": "ee12f441b4c14eff354784a52f8a16767573bd6285627cad2ade04551e8a678b",
|
||||
"aarch64-pc-windows-msvc-0.14.1": "3bd0b34cc645faaf88b4010a639d9b0ec6c313359774ad7e48daaef4ddb3c4f7",
|
||||
"aarch64-unknown-linux-gnu-0.14.1": "8203922d5f55a04089005184942f2f449f9736a06e96854230ba5991bb91ee9a",
|
||||
"aarch64-unknown-linux-musl-0.14.1": "ddfc9df5c879a1984fef4e29838e46fa8e979adc3fdab5967f096363427e8790",
|
||||
"arm-unknown-linux-musleabihf-0.14.1": "a29be1acc5f29ee8cb5a5add223a7ed07e8ffd0f9a78219e115e57041c63b416",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.1": "dd8ead33fc3158618a29f02d76fd7ff4f6914272b5d94a65e348b8b8c0753d78",
|
||||
"armv7-unknown-linux-musleabihf-0.14.1": "16d79262e9fc98ceef167577a391d54d9c8a2d8fe90de22266f456bf4644f7e5",
|
||||
"i686-pc-windows-msvc-0.14.1": "ffe525c5e641f3bef31d9bc6e1e3585f9f796dda1254c15e5a18ef51a91917c3",
|
||||
"i686-unknown-linux-gnu-0.14.1": "37f10652706cdf1f107c620970bf37591b0be44111614101509f56e596f866b3",
|
||||
"i686-unknown-linux-musl-0.14.1": "e39c79642ec4e3d95d31a0ae77fb648946f2a639cb3cbf876c0f5e1e2571e94e",
|
||||
"powerpc64-unknown-linux-gnu-0.14.1": "1ec026aef1c670715d5c197bbf18b4edd81e140fbecee51ed169e05b042c6045",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.1": "193d66f5ed6e21a46b244118c983ab91628ed65ae542f7345f8e37a8c555bff0",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.1": "4cbea006f37927abac8c32575212f982b86aaa4f73a32983e4a8934320ef7e9c",
|
||||
"s390x-unknown-linux-gnu-0.14.1": "5cd7f6e6e2de3b03ada4821de444e92bb87ce5c57981c1d8ba8128dc62f02668",
|
||||
"x86_64-apple-darwin-0.14.1": "7fda94bd7fc6114eecb67b858a8c93f1b4aa658aa1f5e887b37a2b95bf6f26a7",
|
||||
"x86_64-pc-windows-msvc-0.14.1": "ab0bc1876a16e1afa4177fe9f58d568fbe85921efb253395bd03d01e1e2c467d",
|
||||
"x86_64-unknown-linux-gnu-0.14.1": "8798f5892db7dc70a3250f89d3ef613f87f1fa5fdb4242921ee31427daf78e87",
|
||||
"x86_64-unknown-linux-musl-0.14.1": "ec5b8eb318ff9e2412988420eb78f965aca02e9f67df34eeea7609e0c5a0fb7f",
|
||||
"aarch64-apple-darwin-0.14.0": "0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec",
|
||||
"aarch64-pc-windows-msvc-0.14.0": "a882d2ec2235c13f63453fde682775d2e1f8a44ccfd1af9e031255b051e30e70",
|
||||
"aarch64-unknown-linux-gnu-0.14.0": "60fc3b464a723456ba1bc8cd91d29806753c885f72e26ac67b718cee6b35aaca",
|
||||
@@ -31080,6 +30846,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.updateChecksums = updateChecksums;
|
||||
const node_fs_1 = __nccwpck_require__(3024);
|
||||
const tc = __importStar(__nccwpck_require__(3472));
|
||||
const retry_1 = __nccwpck_require__(5931);
|
||||
const known_checksums_1 = __nccwpck_require__(2764);
|
||||
async function updateChecksums(filePath, downloadUrls) {
|
||||
await node_fs_1.promises.rm(filePath);
|
||||
@@ -31129,8 +30896,21 @@ async function getOrDownloadChecksum(key, downloadUrl) {
|
||||
return checksum;
|
||||
}
|
||||
async function downloadAssetContent(downloadUrl) {
|
||||
const downloadPath = await tc.downloadTool(downloadUrl);
|
||||
return await node_fs_1.promises.readFile(downloadPath, "utf8");
|
||||
return await (0, retry_1.withRetry)(async () => {
|
||||
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");
|
||||
}
|
||||
|
||||
|
||||
@@ -31182,15 +30962,29 @@ const plugin_rest_endpoint_methods_1 = __nccwpck_require__(9210);
|
||||
const semver = __importStar(__nccwpck_require__(9318));
|
||||
const update_known_checksums_1 = __nccwpck_require__(6182);
|
||||
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);
|
||||
async function run() {
|
||||
const checksumFilePath = process.argv.slice(2)[0];
|
||||
const github_token = process.argv.slice(2)[1];
|
||||
const octokit = new PaginatingOctokit({ auth: github_token });
|
||||
const response = await octokit.paginate(octokit.rest.repos.listReleases, {
|
||||
owner: constants_1.OWNER,
|
||||
repo: constants_1.REPO,
|
||||
});
|
||||
const response = await (0, retry_1.withRetry)(async () => {
|
||||
try {
|
||||
const octokit = new PaginatingOctokit({ auth: github_token });
|
||||
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
|
||||
.filter((asset) => asset.name.endsWith(".sha256"))
|
||||
.map((asset) => asset.browser_download_url));
|
||||
@@ -31217,6 +31011,175 @@ exports.OWNER = "astral-sh";
|
||||
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:
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
/** @type {import('ts-jest').JestConfigWithTsJest} */
|
||||
module.exports = {
|
||||
collectCoverageFrom: ["src/**/*.ts", "!src/**/*.d.ts"],
|
||||
moduleFileExtensions: ["ts", "js"],
|
||||
preset: "ts-jest",
|
||||
roots: ["<rootDir>/src"],
|
||||
testEnvironment: "node",
|
||||
testMatch: ["**/*.test.ts"],
|
||||
transform: {
|
||||
"^.+\\.ts$": "ts-jest",
|
||||
},
|
||||
};
|
||||
Generated
+88
-3950
File diff suppressed because it is too large
Load Diff
+8
-17
@@ -10,41 +10,32 @@
|
||||
"package": "ncc build -o dist/ruff-action src/ruff-action.ts && ncc build -o dist/update-known-checksums src/update-known-checksums.ts",
|
||||
"act": "act pull_request -W .github/workflows/test.yml --container-architecture linux/amd64 -s GITHUB_TOKEN=\"$(gh auth token)\"",
|
||||
"update-known-checksums": "RUNNER_TEMP=known_checksums node dist/update-known-checksums/index.js src/download/checksum/known-checksums.ts \"$(gh auth token)\"",
|
||||
"test": "jest",
|
||||
"all": "npm ci --ignore-scripts && npm run build && npm run check && npm run test && npm run package"
|
||||
"all": "npm install && npm run build && npm run check && npm run package"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/astral-sh/ruff-action.git"
|
||||
},
|
||||
"keywords": [
|
||||
"actions",
|
||||
"python",
|
||||
"ruff",
|
||||
"action"
|
||||
],
|
||||
"keywords": ["actions", "python", "ruff", "action"],
|
||||
"author": "@eifinger",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.11.1",
|
||||
"@actions/exec": "^1.1.1",
|
||||
"@actions/tool-cache": "^2.0.2",
|
||||
"@octokit/core": "^7.0.6",
|
||||
"@octokit/core": "^7.0.3",
|
||||
"@octokit/plugin-paginate-rest": "^13.1.1",
|
||||
"@octokit/plugin-rest-endpoint-methods": "^16.0.0",
|
||||
"@renovatebot/pep440": "^4.2.1",
|
||||
"smol-toml": "^1.6.0"
|
||||
"@renovatebot/pep440": "^4.1.0",
|
||||
"smol-toml": "^1.4.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "2.3.2",
|
||||
"@types/jest": "^29.5.14",
|
||||
"@biomejs/biome": "2.1.4",
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
"@types/node": "^24.10.9",
|
||||
"@types/semver": "^7.7.1",
|
||||
"@types/node": "^24.2.1",
|
||||
"@types/semver": "^7.7.0",
|
||||
"@vercel/ncc": "^0.38.3",
|
||||
"jest": "^29.7.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"ts-jest": "^29.2.5",
|
||||
"typescript": "^5.9.2"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,473 +1,5 @@
|
||||
// AUTOGENERATED_DO_NOT_EDIT
|
||||
export const KNOWN_CHECKSUMS: { [key: string]: string } = {
|
||||
"aarch64-apple-darwin-0.14.14":
|
||||
"76a9b0ebe57d0eee56940dbe0b62462578d1369cca8314ed0d2a6f2102292d4f",
|
||||
"aarch64-pc-windows-msvc-0.14.14":
|
||||
"449982699657bd68d170440dad958281b030bc05865fe012d043cd225e78eb79",
|
||||
"aarch64-unknown-linux-gnu-0.14.14":
|
||||
"1eee1ce3467fb5f348738bb5e4598859b55816a79c3cd6a26ca0dae03d7e2672",
|
||||
"aarch64-unknown-linux-musl-0.14.14":
|
||||
"a4d7302aa201a6f8e71dfa217cd8273fddd4e434a93ee3b4b07047fd7a684ac1",
|
||||
"arm-unknown-linux-musleabihf-0.14.14":
|
||||
"c225db82587780d1675e220db02c5209f406b29afb0a525628e11ffaca537068",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.14":
|
||||
"cdc9596d6317e6cb32fbf3fd6c0e5817f96676b215957e6583db28abf4a15427",
|
||||
"armv7-unknown-linux-musleabihf-0.14.14":
|
||||
"0f1938426c50500bac09a09df5396aa19d6ce9f01a3a18a531dfaee5cc0d93e8",
|
||||
"i686-pc-windows-msvc-0.14.14":
|
||||
"4f6af9d82acae3d1308c55b0fa51b84d57eafc380aedf97a53a32314118c9a71",
|
||||
"i686-unknown-linux-gnu-0.14.14":
|
||||
"5ceb5e2f1906d85e444cb71503379e14d96ded423bd68906f1a539b78d9fc2c3",
|
||||
"i686-unknown-linux-musl-0.14.14":
|
||||
"878cebcaf3481295d22a1274cea94ec050455917669ccecac586dcfe6b4a557e",
|
||||
"powerpc64-unknown-linux-gnu-0.14.14":
|
||||
"e01a6db6bbf15db82052269887fb49e6be79923d188f1f60ed74f93b6b9a90d4",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.14":
|
||||
"6048f270a46cce01228a53fde14fa6182a99d9e99169d7c252f706d7ba2a4845",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.14":
|
||||
"6eca650195a22c0a568adc923b645b6317dad3ecc8a3d5c02c08768d6b333393",
|
||||
"s390x-unknown-linux-gnu-0.14.14":
|
||||
"dbde3ba91f84d8c183ed49bca0790777285d21381ad64a290584bd19038b83a4",
|
||||
"x86_64-apple-darwin-0.14.14":
|
||||
"749396c675c6f07205be6c4ef89e2e95123d790062d681059a355030e9d7d119",
|
||||
"x86_64-pc-windows-msvc-0.14.14":
|
||||
"81bfeed34f15296e6c81ecea912b6fff4430b957de8a1181ce9365434e3d6744",
|
||||
"x86_64-unknown-linux-gnu-0.14.14":
|
||||
"9876634f799d933bdaa1de864f47d26f898b2e20aa8f4f85d63235c3a231068d",
|
||||
"x86_64-unknown-linux-musl-0.14.14":
|
||||
"55a1ee65f5ac9416cc40f99c2df62f0d4525d40369fe371caff945c495174d57",
|
||||
"aarch64-apple-darwin-0.14.13":
|
||||
"067d1a90da8add55614eff91990425883a092d8279d9e503258ff8be0f8e9c18",
|
||||
"aarch64-pc-windows-msvc-0.14.13":
|
||||
"f7b5b9740ae893ac6abe9b9f68865073ffb9146a6f352ba9718d53b102ad02ef",
|
||||
"aarch64-unknown-linux-gnu-0.14.13":
|
||||
"84ce8fe1ef9b2eba018ba396fd018ac2bc22865a9e2a02573899ea6ee8e1e5fd",
|
||||
"aarch64-unknown-linux-musl-0.14.13":
|
||||
"25941b777ff712f4d9473d26c1b875034214a3d5de20ea99b2add939dcd0b367",
|
||||
"arm-unknown-linux-musleabihf-0.14.13":
|
||||
"3d833d451accb334f9cb91141083bbee5b835dcf0b49d14e5ccb13e0b6a7c387",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.13":
|
||||
"90aa92a6de0f63eacb2d380c324039c101c6097956690fbaec05ed8d922f8766",
|
||||
"armv7-unknown-linux-musleabihf-0.14.13":
|
||||
"192deb53946b4309c56c1ad7c401ddac7557d0a517da7addfc636f1188bab30d",
|
||||
"i686-pc-windows-msvc-0.14.13":
|
||||
"4ead4d5fc89a1f02aa97dad944e69306ae4177a689a3818d3575fed11aa994fe",
|
||||
"i686-unknown-linux-gnu-0.14.13":
|
||||
"a321fc4862748563a663472a4458fe514e34542d0fe8d767d67b1463d585fb2f",
|
||||
"i686-unknown-linux-musl-0.14.13":
|
||||
"597541ac81d553c2fe97339680bfdb3e926714763ee37f0b5dbcc572d695e376",
|
||||
"powerpc64-unknown-linux-gnu-0.14.13":
|
||||
"cad4c05db54969608ec292b695397ddaef7452f759b976a60b69d9fefc6c5724",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.13":
|
||||
"bc7faa37e496ae0198ee7e1c9e8958df3c55025ccf8be175b74533f87626e726",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.13":
|
||||
"d9c6fd360347b9b0079994246ed08186f64629529e2fd2dc1a97a31da2a214d5",
|
||||
"s390x-unknown-linux-gnu-0.14.13":
|
||||
"1995227a65970cb2c1aa3b03c9a5418ee1fa56210c4577e6f8e1a14d1e79ed5d",
|
||||
"x86_64-apple-darwin-0.14.13":
|
||||
"69e424a42ac3a7c6c7032ad96deb757c35c93c848b6ea329a3f4c605e6d89ef9",
|
||||
"x86_64-pc-windows-msvc-0.14.13":
|
||||
"d2af4376053458f283d74980b49dc0d61d3ef9d9b8684c5b25bd64b73e11634a",
|
||||
"x86_64-unknown-linux-gnu-0.14.13":
|
||||
"b1e03e4cf245411f184106ba3d973b3902021bf5327e2fde0cfad163aacdc2c1",
|
||||
"x86_64-unknown-linux-musl-0.14.13":
|
||||
"2fe394f493318551f271277a2228e56b31ca69a4842483e5709af4548f342bc3",
|
||||
"aarch64-apple-darwin-0.14.11":
|
||||
"c3fab6bcad9cc2f8a342829dd4ea011c54b9671d023b71baac1cbf2b3526cefd",
|
||||
"aarch64-pc-windows-msvc-0.14.11":
|
||||
"43faade7e8f33a8ffab726aa44ee2b6bc1fd9d51407320db797dcb3dac068461",
|
||||
"aarch64-unknown-linux-gnu-0.14.11":
|
||||
"e5c018ac042ddeb9c02c3d96b6efe3a0dcd3406ba9bd695253d6111785f7abf6",
|
||||
"aarch64-unknown-linux-musl-0.14.11":
|
||||
"4779a99b51812b56d56d180174be46ddb2fed98fecaea7565b450d37cff1b8c6",
|
||||
"arm-unknown-linux-musleabihf-0.14.11":
|
||||
"a400347f59192992b61dc0bb9dfdfe640f8063403112d9e3a70f6275d34ae386",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.11":
|
||||
"7938729417dcd33b7078ae0a77440cc152bba33518bb095e19cb108c132b2602",
|
||||
"armv7-unknown-linux-musleabihf-0.14.11":
|
||||
"57da6726050047ff2989554734deb94eb053789fc92c297a1a722a6723106a77",
|
||||
"i686-pc-windows-msvc-0.14.11":
|
||||
"51bec5b8cdc4008fb76e11eba4cbb62b8617ff242d316465fa2247dabfd2dcb9",
|
||||
"i686-unknown-linux-gnu-0.14.11":
|
||||
"9051f2529d36e38b58b03b6e605d77f62b6378d5afe70eba692f9a214794b273",
|
||||
"i686-unknown-linux-musl-0.14.11":
|
||||
"3f94ba805fd14bd8c088b710c950cd89d9968294fa3cff68a618e50ad9dea73d",
|
||||
"powerpc64-unknown-linux-gnu-0.14.11":
|
||||
"eb69c9da0285717f39ed25f666a0860d7d6a50359a1de0bf76fba6f83d59e1ea",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.11":
|
||||
"001b43b7558d32f320fa775c74af0035952a724d323bb5204b6f83017297c6db",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.11":
|
||||
"8901e1a36846c59a94ef468808e4a1af58f74e9c2830f40e045f5f9e70d6867c",
|
||||
"s390x-unknown-linux-gnu-0.14.11":
|
||||
"d29ba2740b7735ab20663225dd420acfb0797b29358d902afc7b87ee0f1f4b08",
|
||||
"x86_64-apple-darwin-0.14.11":
|
||||
"b301d1c04facba1004d180c8fd9ae36d868b780900682c97ecf324015c75f0b3",
|
||||
"x86_64-pc-windows-msvc-0.14.11":
|
||||
"e254f04e054e095215b8f74d5cdb7288f2d3f226bdc42b35cd44751fc7a55b2d",
|
||||
"x86_64-unknown-linux-gnu-0.14.11":
|
||||
"b98f19bb2cc99e0ea4de1625fbc43661902a1db45ff49a72e7f4a58cfedaabfb",
|
||||
"x86_64-unknown-linux-musl-0.14.11":
|
||||
"8e8b7a3f791e0faf3a1728d808133f6f9bd5c1422eccb9956e7e7376ff5404b8",
|
||||
"aarch64-apple-darwin-0.14.10":
|
||||
"dd0f3ec914604d802658ae0d271ff9d767c117d1702a44222170dd2ffbad8d2c",
|
||||
"aarch64-pc-windows-msvc-0.14.10":
|
||||
"a5b5bb9525a47dfff0ce8ad31546549b31dc1184f54027517838b1bbc9d81129",
|
||||
"aarch64-unknown-linux-gnu-0.14.10":
|
||||
"f6c8735bf175d449d79151f6bfe84251770ca6032e86bea0d327bc3789179027",
|
||||
"aarch64-unknown-linux-musl-0.14.10":
|
||||
"0888883f71199ca3af3569052d0cc1aee8b316390ffe75bc19f9a8047ffd0158",
|
||||
"arm-unknown-linux-musleabihf-0.14.10":
|
||||
"5102cff6cbed54953d6cd9c9d920a9dd6fbe283e047136a6e9bc732ae14a5cf3",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.10":
|
||||
"94a3ad56d89c39ed47d4e864a18ea31baf989384840d5e182c3f94d5f35a4c93",
|
||||
"armv7-unknown-linux-musleabihf-0.14.10":
|
||||
"2a051d384d5d5fa84521f843424454620ff5d22580f90cd882512373c36933b0",
|
||||
"i686-pc-windows-msvc-0.14.10":
|
||||
"29e7519db7afed48e3729d16289a467acae7c6c34113d50bdd1e7e1077e1c7b5",
|
||||
"i686-unknown-linux-gnu-0.14.10":
|
||||
"56f98f880933907b809de3180e866e72342971024445144c409a6d0a46237c1a",
|
||||
"i686-unknown-linux-musl-0.14.10":
|
||||
"0cce7104a85d2891a9f62d9ee2decb942b91888d6156e4e858c1cb350a71a57c",
|
||||
"powerpc64-unknown-linux-gnu-0.14.10":
|
||||
"7685d9de6c1b139fd767f70310598a79d5b6c613d744a366b2fe99e420d19c32",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.10":
|
||||
"620476793ed106c1f6bfa15e3b0d7834a55cad048a853d63f0c118b9fb7c7337",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.10":
|
||||
"922872274af2b681381b46a242e77fa9bf427fa745313e818b89a6246be81d77",
|
||||
"s390x-unknown-linux-gnu-0.14.10":
|
||||
"da9cf8172369821dfaabfc8861238f565fdbcec1aebe897d900020ce561572de",
|
||||
"x86_64-apple-darwin-0.14.10":
|
||||
"7d5af84e84a189b49ac235d7970d35588cbed0d087f4237c96e5ac3c392bc6fb",
|
||||
"x86_64-pc-windows-msvc-0.14.10":
|
||||
"9c3340d322fff7a6dc132b8783ba734f5eaf4c46f7dd8bc828abdf850b3bebe1",
|
||||
"x86_64-unknown-linux-gnu-0.14.10":
|
||||
"4695e6375b1fa2b9c5f839218d695d8e701cfccb15d3f622b6a6feedb086bffb",
|
||||
"x86_64-unknown-linux-musl-0.14.10":
|
||||
"e1fac6f2705057f48f3d000694d0f41c95b06e738cf4825315c670f3b9d24933",
|
||||
"aarch64-apple-darwin-0.14.9":
|
||||
"ea132e6d6af23dbcf21c81d7fd8c5a94ccf16b1fb36a8bc60da971e339301f10",
|
||||
"aarch64-pc-windows-msvc-0.14.9":
|
||||
"dcc2c8a687b9682ab345418ba2793bc8594ae1f2bdb78af520b363e17cf2e271",
|
||||
"aarch64-unknown-linux-gnu-0.14.9":
|
||||
"423a07140aca7d007d63a42ff9322c0c2017dfe0ed23efe8bcbc36ed21d1cfd7",
|
||||
"aarch64-unknown-linux-musl-0.14.9":
|
||||
"9bdedf2e8d6398e193c2b2feccb2b4c9f8d37a6dc87cc0b587340a60e87d14e2",
|
||||
"arm-unknown-linux-musleabihf-0.14.9":
|
||||
"5d04fe5dac3a625c576f48d441238896d164128ec5ba64c9964e5d9502e92b1e",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.9":
|
||||
"1404c9aace1216ad5cf8b977be5b967ab507f7245eec7bc9bb3fab80010a7769",
|
||||
"armv7-unknown-linux-musleabihf-0.14.9":
|
||||
"e90707e761fb9ce528c3728e5e12ddbadd60ad45dbacfb1ab9dff4b308f10ae3",
|
||||
"i686-pc-windows-msvc-0.14.9":
|
||||
"a7e19280ec509dbefdffd097e29f0ca411cca7196a7272198d022d22d5fad6c3",
|
||||
"i686-unknown-linux-gnu-0.14.9":
|
||||
"33494807d987983f1a91e486cc6a028364aa3291c96c3784620f75a3f477411a",
|
||||
"i686-unknown-linux-musl-0.14.9":
|
||||
"816e6fdefd899f2dcca7261dc6575ecac82907b94238569cbfef2b1639680865",
|
||||
"powerpc64-unknown-linux-gnu-0.14.9":
|
||||
"6786baf11e8b59c29d19c0da127451606837243472797aa5084eecccd9a74445",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.9":
|
||||
"ba7219c9dce6f2d931d9851ac9623923b3fc5dafeb08c640885c7e33a6074775",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.9":
|
||||
"8f46292b808c5ce0d72d1a4428e189a641d9f41b3af0b077537ddb7631f48b8d",
|
||||
"s390x-unknown-linux-gnu-0.14.9":
|
||||
"d795afb56c7f4ba55a7a08eda03bce1fd8b32d71c9cf1741218ac6b5578d8b84",
|
||||
"x86_64-apple-darwin-0.14.9":
|
||||
"ce980eb4b44a84cbf278686f8cf71a21b353888b29472ca269ffe385ce4f2351",
|
||||
"x86_64-pc-windows-msvc-0.14.9":
|
||||
"98727a845f01782b78efe1a3f0913aa9ec76c9a24e09aca89e26b3b684ca86a0",
|
||||
"x86_64-unknown-linux-gnu-0.14.9":
|
||||
"b012ebe5dee8d8c125f4d553fccda058249fbb1c914c17175c6edda14a1fb7da",
|
||||
"x86_64-unknown-linux-musl-0.14.9":
|
||||
"3bdbdb32f95bcf2c5bc45502a2050f30706f1c205fa0087ee3d4c688f67854fc",
|
||||
"aarch64-apple-darwin-0.14.8":
|
||||
"4efc019832a6b9225f650ee256d31b2e875021cae662963d533c78b5cf865f52",
|
||||
"aarch64-pc-windows-msvc-0.14.8":
|
||||
"965217e69f6d43e4df25abeec7b51a5ea014dbec219b9b2866ca37dcd312405e",
|
||||
"aarch64-unknown-linux-gnu-0.14.8":
|
||||
"9bbce62639bb30abf76202f2ec32c4234498de3c93c21b4c32c99d51c802cc41",
|
||||
"aarch64-unknown-linux-musl-0.14.8":
|
||||
"0b3464f54fa56f514c29e92bcf05867b914ad6c246e2ddbe4cce5c0700f2a3d9",
|
||||
"arm-unknown-linux-musleabihf-0.14.8":
|
||||
"5496ae4d581e7f6cdf509f56d33830056d1f8a432aa489bf9e40fc9754fbf1fa",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.8":
|
||||
"203de1734ffddac18f02e3756ba0c02bd1770665031aba617ccf488ccfe78b25",
|
||||
"armv7-unknown-linux-musleabihf-0.14.8":
|
||||
"5e424ba3ebc90306f73e05914244245b66b27c3a44dcdf9029d97bfc56131491",
|
||||
"i686-pc-windows-msvc-0.14.8":
|
||||
"2bdff511119eb9d94e5a240c15bef668c43b0640e61c549b32242d7b04efd062",
|
||||
"i686-unknown-linux-gnu-0.14.8":
|
||||
"8f0c15e9518d1b9c0423986d3d1045ed5c4005e1037589a6772eee724ec3ba02",
|
||||
"i686-unknown-linux-musl-0.14.8":
|
||||
"55326d64201ff99dc96e93b23de951c2656825089ee581fc8aee099140d4d310",
|
||||
"powerpc64-unknown-linux-gnu-0.14.8":
|
||||
"52ffb3434ca8ada1d2703df0c4b929758444c24d9a47a8608a0775ddf6dbfa6c",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.8":
|
||||
"3a8808f7b02f37e649e1cc1145ad3d2e4d23b4154637525480c7f6536f4152b9",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.8":
|
||||
"8e6f1f660c1145bfe1b13fe41b7e6f4e829be3351bd536acbd41f91478d8932c",
|
||||
"s390x-unknown-linux-gnu-0.14.8":
|
||||
"f3ed19ba06face77e21c682846a4e5b3d4d9bfe5132eea86e30a84522b70d2b3",
|
||||
"x86_64-apple-darwin-0.14.8":
|
||||
"c53af0ba3cbc5e9e8f7768d28a7ff2d0795843e39302891093227bc6df343e94",
|
||||
"x86_64-pc-windows-msvc-0.14.8":
|
||||
"a837e98f5e6a21222a896f60521f563aea2c686a07cad17da9f5b5f2c4e04f8a",
|
||||
"x86_64-unknown-linux-gnu-0.14.8":
|
||||
"dce933cd68e3ca69c64c277ce6671dcdee7adeeaa6ac5a15047a4c973b30741f",
|
||||
"x86_64-unknown-linux-musl-0.14.8":
|
||||
"0f5496a3d2413b3cb85bbf9e4a6f95b5db127ac10989ecb3d8c0c0a0a74a892b",
|
||||
"aarch64-apple-darwin-0.14.7":
|
||||
"24631da81fe9ce5f4112e8caeb71957e81682e752a563f0a50715735f923e3c4",
|
||||
"aarch64-pc-windows-msvc-0.14.7":
|
||||
"24ca141d57fcd5bd303ca51af002cb9a815f072d9076b40ec2813835d46c4a82",
|
||||
"aarch64-unknown-linux-gnu-0.14.7":
|
||||
"8cc84635155dfc11acca297af25ed6c8a30e36146729a90df9e7d348a8fc0a4d",
|
||||
"aarch64-unknown-linux-musl-0.14.7":
|
||||
"8d429dbc2c308377c33874dc71d4c2388728f0d01c0a5869d2c878d21a6ced87",
|
||||
"arm-unknown-linux-musleabihf-0.14.7":
|
||||
"3cf1d9fdfd58a113b0b629e0ef2d247bbadbc8deec25724d6dc7d6f6ca7e7304",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.7":
|
||||
"058f52b31c88056291b0e917ea909eea036570dcdee32af1ce62eacff98c4e2a",
|
||||
"armv7-unknown-linux-musleabihf-0.14.7":
|
||||
"9dddf78485ba0b5da8d8a73b24332ecf759a4de95ca5700c5141067683b5b615",
|
||||
"i686-pc-windows-msvc-0.14.7":
|
||||
"46d16810e1a0e7efd5c25efc60b719225c3a8b8a7fb662b61f293eeb62ccafdb",
|
||||
"i686-unknown-linux-gnu-0.14.7":
|
||||
"29242e501fea264ef4cb03164d9c375e426fad5c298412f64a4d50bc9ea19bc1",
|
||||
"i686-unknown-linux-musl-0.14.7":
|
||||
"5b1eeea3f27745e7e68b19bd214267aa653ef64c62c25ef4cd8bb57af8477171",
|
||||
"powerpc64-unknown-linux-gnu-0.14.7":
|
||||
"3cc47bf9943a46839d847746ccae59a3147982c5bf93bdc786fa5279d7d28681",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.7":
|
||||
"1dabc7d0251f6f11ade20620538daeed1c4d27223576a04ddb2a87adfed2ca11",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.7":
|
||||
"075232dfa5a03ef399d183879848cdb5d71485639c2a07fc62a27f4d4a68af3d",
|
||||
"s390x-unknown-linux-gnu-0.14.7":
|
||||
"a83cb05567dd4bb59fa8fd36b8337b21d475dd6f82fe0600a2364f1de6c295c3",
|
||||
"x86_64-apple-darwin-0.14.7":
|
||||
"c3035811c5354d923f3d7fd6320cfb23de30600f1eb86aa1518bac27c3d7fffd",
|
||||
"x86_64-pc-windows-msvc-0.14.7":
|
||||
"9a54b82e12574ea068e0914cdb1398993cbf78338c0799b6f9003a783fec779b",
|
||||
"x86_64-unknown-linux-gnu-0.14.7":
|
||||
"8a545d346b3f6f979574df96b4fb2a983f2568fe200f1c1f690bd2cbdce5ea51",
|
||||
"x86_64-unknown-linux-musl-0.14.7":
|
||||
"0f6cd59aa2b266758f1083c73f1b8303e3aedde0d953f0e79777faf174d8104f",
|
||||
"aarch64-apple-darwin-0.14.6":
|
||||
"b2ace677f51d0f2b91ca27d312ac8b069658502049015f4891c16f8864136282",
|
||||
"aarch64-pc-windows-msvc-0.14.6":
|
||||
"90518b6d16fe8b705c891dcdd77b20ab41da5e042b085aced7bbc647f6f2fdcd",
|
||||
"aarch64-unknown-linux-gnu-0.14.6":
|
||||
"bf3d592d5f879f072520afaa9c4a76a3ad0f6cf4b7bf7e27fb5d0e728e863f14",
|
||||
"aarch64-unknown-linux-musl-0.14.6":
|
||||
"4d3c113e59c5fbc31f1def566cebf28732bb45ff6b83df8e142bc1c055b3afa3",
|
||||
"arm-unknown-linux-musleabihf-0.14.6":
|
||||
"d0a3ed0a773f8e7edc44d63644b952d446dba771fdbb3eefd02853c323373f90",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.6":
|
||||
"d6b71f6a951963f8dd0f2e099206b0aabf95d9bb49451a607da3e5823b800596",
|
||||
"armv7-unknown-linux-musleabihf-0.14.6":
|
||||
"a048f1e9a97afe8ac2a63785f5733d5736b9d6e6767b4d5b6434916d38f888e1",
|
||||
"i686-pc-windows-msvc-0.14.6":
|
||||
"c7b76311939f0ed7fbf4fe1be7c6c96c05b26a73e500650dff2586cbbe5c0b45",
|
||||
"i686-unknown-linux-gnu-0.14.6":
|
||||
"fe3fbd9227a7f2c1277306c31cf7627ab1dc61c25fa30854d66d8db138a74872",
|
||||
"i686-unknown-linux-musl-0.14.6":
|
||||
"5a184f4c1e6a665f56f980464dd87eeb75f32e37bf67d195efdaa41bba634a5d",
|
||||
"powerpc64-unknown-linux-gnu-0.14.6":
|
||||
"fe54fda27408241e9bee7bc5c9740a9a47a87a073ecd3d9bb166c32329c33958",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.6":
|
||||
"d4296a0f41ed25cbf56a04b04bda7f3661b8be9d3220b89cc342e6cb4e6ee259",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.6":
|
||||
"e06b714ebb8846421ed6b998beac66a7fd1fad09f7bee89e4e6b671c6e8c3fc3",
|
||||
"s390x-unknown-linux-gnu-0.14.6":
|
||||
"2ba3e5b6e66d9ba60d6fac9b699f77dd79402c872fc244259db7fc7815180b3d",
|
||||
"x86_64-apple-darwin-0.14.6":
|
||||
"efe45a6defcf4f1b6de87d56ce94635f53b00f88ddc2fcb8e25e2c4e3a61261c",
|
||||
"x86_64-pc-windows-msvc-0.14.6":
|
||||
"3a8bb3499484c7f9e86060c89d0e61c47dac7f9fb4d7fe46bc59dca400b322c9",
|
||||
"x86_64-unknown-linux-gnu-0.14.6":
|
||||
"b0ee141ada4749c7ee16ba21465b4ef035455b495aa3ab951bbcb9bde9f4d001",
|
||||
"x86_64-unknown-linux-musl-0.14.6":
|
||||
"7ef1743875c7c469cc1c4bb6da6a9bbff3f3a7b89a75632d6cd2944ede470a5e",
|
||||
"aarch64-apple-darwin-0.14.5":
|
||||
"c07616663ac63792c16269d6798a47fb1f45b29997706178d60e90da698a9970",
|
||||
"aarch64-pc-windows-msvc-0.14.5":
|
||||
"c09ff1cdaafd6cc3733586dc517bfd3e0d0ddc39360c90343ab7b610c8ade130",
|
||||
"aarch64-unknown-linux-gnu-0.14.5":
|
||||
"da5692a609e728dd1773aebf087113c5c3561aafdfa9fe574b30de9438c60a23",
|
||||
"aarch64-unknown-linux-musl-0.14.5":
|
||||
"ebef9d7119119e67b1065a5a35128148898e1581037e7d68c3aa9223983af0a4",
|
||||
"arm-unknown-linux-musleabihf-0.14.5":
|
||||
"00c937e44474d21878bdb2e9e214d74005fddc8c43a4c76d8e71a9085c7cc6af",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.5":
|
||||
"aa54fcaba5d7029180139491213f504e5789b36e0017c0a67aff7b6ec0c04c45",
|
||||
"armv7-unknown-linux-musleabihf-0.14.5":
|
||||
"5e06c211d5dc4e85eeafd29e87af4aed690a41b02f9296537d4d4ebe62fded9a",
|
||||
"i686-pc-windows-msvc-0.14.5":
|
||||
"6b54cf61dad3276995d157d000f501917f1aa54735391150bf93282329253c92",
|
||||
"i686-unknown-linux-gnu-0.14.5":
|
||||
"81aadc05c630e7e7c4ca68c510f5ce462e0645fa03650ca3f844cb4d9b2efc27",
|
||||
"i686-unknown-linux-musl-0.14.5":
|
||||
"556c63188c8bc7e253a4eaef8727857a808a81af6fef02f76f27a71e800554a0",
|
||||
"powerpc64-unknown-linux-gnu-0.14.5":
|
||||
"df85081b5e776d934188f9eb67a1d2d17dba1e986f7e76668ffeed6e541858d1",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.5":
|
||||
"4a02aa69a73bc5d9e579b08f5081e0fec412e353bacafa6b4a0705d89b3486e6",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.5":
|
||||
"a1a20ddca6e776a8f38d533da4aa1eeb543ecbfa08813c482e3cb7d5ef0c39fc",
|
||||
"s390x-unknown-linux-gnu-0.14.5":
|
||||
"242bf290de417e8c9e8ca5c844be933e611cca3f3b301dc8537f72d051ceb3b9",
|
||||
"x86_64-apple-darwin-0.14.5":
|
||||
"d7285770c5098be00c9b4ff099d6ef7f8b2a54b4019c9507b628ee9f0d404c06",
|
||||
"x86_64-pc-windows-msvc-0.14.5":
|
||||
"9b998bf1a790a18b829fab3368ee7404a8f1f2cec2acb650aa1fd1b74962d023",
|
||||
"x86_64-unknown-linux-gnu-0.14.5":
|
||||
"5bc52346f81098e42beecd622f49c4336a5361eb38b7b51d466b0a9647e99e33",
|
||||
"x86_64-unknown-linux-musl-0.14.5":
|
||||
"69ddecf374a4f53eeda238399614ed6f92c5e75fe04436c604fb78435d5658eb",
|
||||
"aarch64-apple-darwin-0.14.4":
|
||||
"ab26cd2b03d5b2ec42dc7ac1886a29055eb2003aa2db14b26c7091c7cd6b4c68",
|
||||
"aarch64-pc-windows-msvc-0.14.4":
|
||||
"270773b34836e5b546d3ec9fe3b6cab4057881eff69828566f230baffff7634a",
|
||||
"aarch64-unknown-linux-gnu-0.14.4":
|
||||
"8bf03ef4bb8ce42321ea0e59a505739b29b18d85b1d4f220736e242248b7da31",
|
||||
"aarch64-unknown-linux-musl-0.14.4":
|
||||
"c77b72e565e9044eddce02e71f9214edea045047b786bb2bc973a6d8f94fb13e",
|
||||
"arm-unknown-linux-musleabihf-0.14.4":
|
||||
"5211b338bf1c48faa2fc045bd68c56b50e1e3d898f2255c39a3a7040033738f1",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.4":
|
||||
"62e05c9a4571ea1aca80db377b4a11dd2325100db9ca0d7db16b61b87cb3d0b5",
|
||||
"armv7-unknown-linux-musleabihf-0.14.4":
|
||||
"b20725ed5be925b58120172b2395bdbea9857bc562c3a7a7e47a4d9281bafb7f",
|
||||
"i686-pc-windows-msvc-0.14.4":
|
||||
"bbe517649a5c6134b424b3065db7b5dcfaed72c2f5e848ec87cb2b33be7a133f",
|
||||
"i686-unknown-linux-gnu-0.14.4":
|
||||
"a68939e63f7b384351172ff1535d37e73ecf81a94b0c89f369f3f41aabcccede",
|
||||
"i686-unknown-linux-musl-0.14.4":
|
||||
"ff05a300bbb06211ec9cc43daec05da197ed116b5f6a5ea9ac8fc80fc00df39f",
|
||||
"powerpc64-unknown-linux-gnu-0.14.4":
|
||||
"394eae2ad3485eb3530db3e9b51feacbf0b03e63ec8e93f2134a137c59da4abe",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.4":
|
||||
"b12b41763fa3c1068d2378669fa2740b11e0dd3dea3f667f732241a25fb06c9f",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.4":
|
||||
"c6385274d7a3b1d0c7ed05b36101faf2c7206e8adc0c7c107d32fc8e5d57628c",
|
||||
"s390x-unknown-linux-gnu-0.14.4":
|
||||
"dcbf1dce38298dccfea7edffb1ea237ab2ccf2ea5dbae6d5b2dc4fe88177b094",
|
||||
"x86_64-apple-darwin-0.14.4":
|
||||
"041b9429400bfc3aca8402940fe6fa0ec33f9d79e8f50fbfb3063f70b4327fa3",
|
||||
"x86_64-pc-windows-msvc-0.14.4":
|
||||
"5541af69b1f342d843f8fca6218bd0d5d9064e987d14405a2abf60ce94c615a4",
|
||||
"x86_64-unknown-linux-gnu-0.14.4":
|
||||
"c9120e68e358eb0f850123537afe18945f9095e9f17967944fd23585fc88bb0b",
|
||||
"x86_64-unknown-linux-musl-0.14.4":
|
||||
"dcb5b42fd364c9e837b6800886564a891d023c8b87c967224351399cb1cda154",
|
||||
"aarch64-apple-darwin-0.14.3":
|
||||
"fc4c2c153656bc4082fb6c928fbd6867d5eb932240b663b329365f3f1821fc82",
|
||||
"aarch64-pc-windows-msvc-0.14.3":
|
||||
"b7ed5d2006b1c43559e78d90e65f2fa1982bec3976de74978485660fcdd67548",
|
||||
"aarch64-unknown-linux-gnu-0.14.3":
|
||||
"daa9edc586b669079fbe204bf5f5b48ee05c5dac862d2daf5ad72d3c2777834b",
|
||||
"aarch64-unknown-linux-musl-0.14.3":
|
||||
"571058fe7e3381ad54bec8b3d9d127013e332d822b35978b503722147aa3b9cf",
|
||||
"arm-unknown-linux-musleabihf-0.14.3":
|
||||
"f5e9b79cea63116ad582ffb514a61a506978762b67859b9e9e9cdee4b2ad065d",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.3":
|
||||
"07094c107682c58260d652708a0c8b2f3d38bdffd5e7ec9a81785e665154a137",
|
||||
"armv7-unknown-linux-musleabihf-0.14.3":
|
||||
"edfd2491e25383de77f60aafcbd5451350b2cb6f9af38b6cf5a2e725193333cd",
|
||||
"i686-pc-windows-msvc-0.14.3":
|
||||
"f46525c0684a220c063c1c1f8d516c8cccab8ec9f62417e17e02cd4c1a138417",
|
||||
"i686-unknown-linux-gnu-0.14.3":
|
||||
"c7180e275ccaa97eae1528a15a08828cd9aaa15b57d3828f8722b0edd347046d",
|
||||
"i686-unknown-linux-musl-0.14.3":
|
||||
"60d1db56b1b4064b00f349b5fc8e11f2e63b8fa3bce4679f9c9da91356d6c3f6",
|
||||
"powerpc64-unknown-linux-gnu-0.14.3":
|
||||
"b9bf7191d023fcdd938e51fa53b63226897a23896f82057fe32fde9df10b1649",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.3":
|
||||
"c1f5e497fe183dc1e0b6bb984573a0703182b68ac07587add1cbc370957ebd20",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.3":
|
||||
"909e92469524b80520af17537df55f245d6ba018928bc486fd8418e9983b539f",
|
||||
"s390x-unknown-linux-gnu-0.14.3":
|
||||
"d8c56807e9827f391e1266bd19e0235fa470a0620cf166975365862e5bf9e908",
|
||||
"x86_64-apple-darwin-0.14.3":
|
||||
"076e88da3dcb38d3fef61daccc759bf29b605a490143ae707c0e067ebf8d7050",
|
||||
"x86_64-pc-windows-msvc-0.14.3":
|
||||
"ccc1bd362cca52a7fb7f9ee2cec7317c139ccb86e0964a5c1d4b14efbf2118ff",
|
||||
"x86_64-unknown-linux-gnu-0.14.3":
|
||||
"cb8a88912aa91a1864ad662c24df4514699ddfcbc52e684218aaf5ac57d7de0d",
|
||||
"x86_64-unknown-linux-musl-0.14.3":
|
||||
"58fd05427420df7b7b51bc6bbd5a430f38d2dfd63c74660f27625a4632f12532",
|
||||
"aarch64-apple-darwin-0.14.2":
|
||||
"33225f67ce61188fce91b801ab50a4028f8b0d66abbf81810841dd7d42371e38",
|
||||
"aarch64-pc-windows-msvc-0.14.2":
|
||||
"4fb68c66c719b337c2364aeb8210326a28b8ae046ef9a9c90407d473264515dd",
|
||||
"aarch64-unknown-linux-gnu-0.14.2":
|
||||
"a907d6a13120679b7194eb61beace09103f04b90e32cf7c2ac11979e6f618e35",
|
||||
"aarch64-unknown-linux-musl-0.14.2":
|
||||
"e323e9716661c9e18152aefe62e3fada497c10c9b3ef3095359c31b4df4f866a",
|
||||
"arm-unknown-linux-musleabihf-0.14.2":
|
||||
"2b3ccfd36718b29e0f5d1dcc10540b61205c72ee1c6a43331e6a97f2a17f12d0",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.2":
|
||||
"5539a66c2723670dbf54eadf615e106aa038decbc701b9d47f7ed535ac677e1d",
|
||||
"armv7-unknown-linux-musleabihf-0.14.2":
|
||||
"c59be0daa3144ba317c88dd6cb3af68cff0f8dfbf2f495bebfb5b630d6f4c7cd",
|
||||
"i686-pc-windows-msvc-0.14.2":
|
||||
"125e2010b28ccb01ed2a4596e3db8d8dc0a46ccba2ee08e6038cc56ebbfbcb96",
|
||||
"i686-unknown-linux-gnu-0.14.2":
|
||||
"e2accde14cb371ca1b60935028c72138390f552cd77fc8c52a75f28c68eaa963",
|
||||
"i686-unknown-linux-musl-0.14.2":
|
||||
"d11f67f949e909412c523edcc1944c16dfecde49ed3709bca40631e371300da1",
|
||||
"powerpc64-unknown-linux-gnu-0.14.2":
|
||||
"99cc0f2cf83a7f82bb4e0db9ff1de8bcc5bf966054c0c82d25e189ee4565b0d5",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.2":
|
||||
"81ac087a458bcaac7905c9afe84ef58061394a71264e8dd115889be0bc96fc6e",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.2":
|
||||
"7917eb80fbae72040ad199f634361ce6001bc6225c165caa09c6d983c90692b0",
|
||||
"s390x-unknown-linux-gnu-0.14.2":
|
||||
"e24bfabe70535ffeedbba74ff6ecdf6c6bb09c5d9bf2c6c902e5540b569d6236",
|
||||
"x86_64-apple-darwin-0.14.2":
|
||||
"f119057618599e8983bdeed64e949af54f67d7a62464d11de0ba1237619a9990",
|
||||
"x86_64-pc-windows-msvc-0.14.2":
|
||||
"0a1160f45263cc847acd4b42392bf0484c9420806eeb7f776e1384fb557aeade",
|
||||
"x86_64-unknown-linux-gnu-0.14.2":
|
||||
"b4457ef6c130165655e0fb91081dbef09011ec41955115aaa22c94f7655c97c2",
|
||||
"x86_64-unknown-linux-musl-0.14.2":
|
||||
"e5e177a829b370376abb6a1dc9edc8c59ac519ebe64b1366b65e2952fa524a8d",
|
||||
"aarch64-apple-darwin-0.14.1":
|
||||
"ee12f441b4c14eff354784a52f8a16767573bd6285627cad2ade04551e8a678b",
|
||||
"aarch64-pc-windows-msvc-0.14.1":
|
||||
"3bd0b34cc645faaf88b4010a639d9b0ec6c313359774ad7e48daaef4ddb3c4f7",
|
||||
"aarch64-unknown-linux-gnu-0.14.1":
|
||||
"8203922d5f55a04089005184942f2f449f9736a06e96854230ba5991bb91ee9a",
|
||||
"aarch64-unknown-linux-musl-0.14.1":
|
||||
"ddfc9df5c879a1984fef4e29838e46fa8e979adc3fdab5967f096363427e8790",
|
||||
"arm-unknown-linux-musleabihf-0.14.1":
|
||||
"a29be1acc5f29ee8cb5a5add223a7ed07e8ffd0f9a78219e115e57041c63b416",
|
||||
"armv7-unknown-linux-gnueabihf-0.14.1":
|
||||
"dd8ead33fc3158618a29f02d76fd7ff4f6914272b5d94a65e348b8b8c0753d78",
|
||||
"armv7-unknown-linux-musleabihf-0.14.1":
|
||||
"16d79262e9fc98ceef167577a391d54d9c8a2d8fe90de22266f456bf4644f7e5",
|
||||
"i686-pc-windows-msvc-0.14.1":
|
||||
"ffe525c5e641f3bef31d9bc6e1e3585f9f796dda1254c15e5a18ef51a91917c3",
|
||||
"i686-unknown-linux-gnu-0.14.1":
|
||||
"37f10652706cdf1f107c620970bf37591b0be44111614101509f56e596f866b3",
|
||||
"i686-unknown-linux-musl-0.14.1":
|
||||
"e39c79642ec4e3d95d31a0ae77fb648946f2a639cb3cbf876c0f5e1e2571e94e",
|
||||
"powerpc64-unknown-linux-gnu-0.14.1":
|
||||
"1ec026aef1c670715d5c197bbf18b4edd81e140fbecee51ed169e05b042c6045",
|
||||
"powerpc64le-unknown-linux-gnu-0.14.1":
|
||||
"193d66f5ed6e21a46b244118c983ab91628ed65ae542f7345f8e37a8c555bff0",
|
||||
"riscv64gc-unknown-linux-gnu-0.14.1":
|
||||
"4cbea006f37927abac8c32575212f982b86aaa4f73a32983e4a8934320ef7e9c",
|
||||
"s390x-unknown-linux-gnu-0.14.1":
|
||||
"5cd7f6e6e2de3b03ada4821de444e92bb87ce5c57981c1d8ba8128dc62f02668",
|
||||
"x86_64-apple-darwin-0.14.1":
|
||||
"7fda94bd7fc6114eecb67b858a8c93f1b4aa658aa1f5e887b37a2b95bf6f26a7",
|
||||
"x86_64-pc-windows-msvc-0.14.1":
|
||||
"ab0bc1876a16e1afa4177fe9f58d568fbe85921efb253395bd03d01e1e2c467d",
|
||||
"x86_64-unknown-linux-gnu-0.14.1":
|
||||
"8798f5892db7dc70a3250f89d3ef613f87f1fa5fdb4242921ee31427daf78e87",
|
||||
"x86_64-unknown-linux-musl-0.14.1":
|
||||
"ec5b8eb318ff9e2412988420eb78f965aca02e9f67df34eeea7609e0c5a0fb7f",
|
||||
"aarch64-apple-darwin-0.14.0":
|
||||
"0b7c193d5c45eda02226720eb75239fabeca995d5a0eb3830fd2973caa3030ec",
|
||||
"aarch64-pc-windows-msvc-0.14.0":
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
import { promises as fs } from "node:fs";
|
||||
import * as tc from "@actions/tool-cache";
|
||||
import {
|
||||
isRetryableError,
|
||||
NonRetryableError,
|
||||
RetryableError,
|
||||
withRetry,
|
||||
} from "../../utils/retry";
|
||||
import { KNOWN_CHECKSUMS } from "./known-checksums";
|
||||
export async function updateChecksums(
|
||||
filePath: string,
|
||||
@@ -60,6 +66,27 @@ async function getOrDownloadChecksum(
|
||||
}
|
||||
|
||||
async function downloadAssetContent(downloadUrl: string): Promise<string> {
|
||||
const downloadPath = await tc.downloadTool(downloadUrl);
|
||||
return await fs.readFile(downloadPath, "utf8");
|
||||
return await withRetry(
|
||||
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 { OWNER, REPO, TOOL_CACHE_NAME } from "../utils/constants";
|
||||
import type { Architecture, Platform } from "../utils/platforms";
|
||||
import {
|
||||
isRetryableError,
|
||||
NonRetryableError,
|
||||
RetryableError,
|
||||
withRetry,
|
||||
} from "../utils/retry";
|
||||
import { validateChecksum } from "./checksum/checksum";
|
||||
|
||||
const PaginatingOctokit = Octokit.plugin(paginateRest, restEndpointMethods);
|
||||
@@ -43,11 +49,29 @@ export async function downloadVersion(
|
||||
const downloadUrl = constructDownloadUrl(version, platform, arch);
|
||||
core.debug(`Downloading ruff from "${downloadUrl}" ...`);
|
||||
|
||||
const downloadPath = await tc.downloadTool(
|
||||
downloadUrl,
|
||||
undefined,
|
||||
githubToken,
|
||||
const downloadPath = await withRetry(
|
||||
async () => {
|
||||
try {
|
||||
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}"`);
|
||||
await validateChecksum(checkSum, downloadPath, arch, platform, version);
|
||||
|
||||
@@ -134,30 +158,70 @@ export async function resolveVersion(
|
||||
}
|
||||
|
||||
async function getAvailableVersions(githubToken: string): Promise<string[]> {
|
||||
try {
|
||||
const octokit = new PaginatingOctokit({
|
||||
auth: githubToken,
|
||||
});
|
||||
return await getReleaseTagNames(octokit);
|
||||
} catch (err) {
|
||||
if ((err as Error).message.includes("Bad credentials")) {
|
||||
core.info(
|
||||
"No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.",
|
||||
);
|
||||
const octokit = new PaginatingOctokit();
|
||||
return await getReleaseTagNames(octokit);
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
return await withRetry(
|
||||
async () => {
|
||||
try {
|
||||
const octokit = new PaginatingOctokit({
|
||||
auth: githubToken,
|
||||
});
|
||||
return await getReleaseTagNames(octokit);
|
||||
} catch (err) {
|
||||
const error = err as Error;
|
||||
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 (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(
|
||||
octokit: InstanceType<typeof PaginatingOctokit>,
|
||||
): Promise<string[]> {
|
||||
const response = await octokit.paginate(octokit.rest.repos.listReleases, {
|
||||
owner: OWNER,
|
||||
repo: REPO,
|
||||
});
|
||||
const response = await withRetry(
|
||||
async () => {
|
||||
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);
|
||||
if (releaseTagNames.length === 0) {
|
||||
throw Error(
|
||||
@@ -168,42 +232,82 @@ async function getReleaseTagNames(
|
||||
}
|
||||
|
||||
async function getLatestVersion(githubToken: string) {
|
||||
const octokit = new PaginatingOctokit({
|
||||
auth: githubToken,
|
||||
});
|
||||
return await withRetry(
|
||||
async () => {
|
||||
const octokit = new PaginatingOctokit({
|
||||
auth: githubToken,
|
||||
});
|
||||
|
||||
let latestRelease: { tag_name: string } | undefined;
|
||||
try {
|
||||
latestRelease = await getLatestRelease(octokit);
|
||||
} catch (err) {
|
||||
if ((err as Error).message.includes("Bad credentials")) {
|
||||
core.info(
|
||||
"No (valid) GitHub token provided. Falling back to anonymous. Requests might be rate limited.",
|
||||
);
|
||||
const octokit = new PaginatingOctokit();
|
||||
latestRelease = await getLatestRelease(octokit);
|
||||
} else {
|
||||
core.error(
|
||||
"Github API request failed while getting latest release. Check the GitHub status page for outages. Try again later.",
|
||||
);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
let latestRelease: { tag_name: string } | undefined;
|
||||
try {
|
||||
latestRelease = await getLatestRelease(octokit);
|
||||
} catch (err) {
|
||||
const error = err as Error;
|
||||
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 (!latestRelease) {
|
||||
throw new Error("Could not determine latest release.");
|
||||
}
|
||||
return latestRelease.tag_name;
|
||||
if (isRetryableError(error)) {
|
||||
throw new RetryableError(
|
||||
`Failed to get latest version: ${error.message}`,
|
||||
error,
|
||||
);
|
||||
} else {
|
||||
throw new NonRetryableError(
|
||||
`Failed to get latest version: ${error.message}`,
|
||||
error,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!latestRelease) {
|
||||
throw new Error("Could not determine latest release.");
|
||||
}
|
||||
return latestRelease.tag_name;
|
||||
},
|
||||
{ maxRetries: 3, timeoutMs: 30000 },
|
||||
"get latest version",
|
||||
);
|
||||
}
|
||||
|
||||
async function getLatestRelease(
|
||||
octokit: InstanceType<typeof PaginatingOctokit>,
|
||||
) {
|
||||
const { data: latestRelease } = await octokit.rest.repos.getLatestRelease({
|
||||
owner: OWNER,
|
||||
repo: REPO,
|
||||
});
|
||||
return latestRelease;
|
||||
return await withRetry(
|
||||
async () => {
|
||||
try {
|
||||
const { data: 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(
|
||||
|
||||
+4
-7
@@ -1,3 +1,4 @@
|
||||
import * as fs from "node:fs";
|
||||
import * as path from "node:path";
|
||||
import * as core from "@actions/core";
|
||||
import * as exec from "@actions/exec";
|
||||
@@ -22,7 +23,6 @@ import {
|
||||
type Platform,
|
||||
} from "./utils/platforms";
|
||||
import { getRuffVersionFromRequirementsFile } from "./utils/pyproject";
|
||||
import { findPyprojectToml } from "./utils/pyproject-finder";
|
||||
|
||||
async function run(): Promise<void> {
|
||||
const platform = getPlatform();
|
||||
@@ -107,12 +107,9 @@ async function determineVersion(): Promise<string> {
|
||||
}
|
||||
return await resolveVersion(versionFromPyproject || "latest", githubToken);
|
||||
}
|
||||
const pyProjectPath = findPyprojectToml(
|
||||
src,
|
||||
process.env.GITHUB_WORKSPACE || ".",
|
||||
);
|
||||
if (!pyProjectPath) {
|
||||
core.info(`Could not find pyproject.toml. Using latest version.`);
|
||||
const pyProjectPath = path.join(src, "pyproject.toml");
|
||||
if (!fs.existsSync(pyProjectPath)) {
|
||||
core.info(`Could not find ${pyProjectPath}. Using latest version.`);
|
||||
return await resolveVersion("latest", githubToken);
|
||||
}
|
||||
const versionFromPyproject =
|
||||
|
||||
@@ -5,6 +5,12 @@ import { restEndpointMethods } from "@octokit/plugin-rest-endpoint-methods";
|
||||
import * as semver from "semver";
|
||||
import { updateChecksums } from "./download/checksum/update-known-checksums";
|
||||
import { OWNER, REPO } from "./utils/constants";
|
||||
import {
|
||||
isRetryableError,
|
||||
NonRetryableError,
|
||||
RetryableError,
|
||||
withRetry,
|
||||
} from "./utils/retry";
|
||||
|
||||
const PaginatingOctokit = Octokit.plugin(paginateRest, restEndpointMethods);
|
||||
|
||||
@@ -12,12 +18,33 @@ async function run(): Promise<void> {
|
||||
const checksumFilePath = process.argv.slice(2)[0];
|
||||
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) =>
|
||||
release.assets
|
||||
.filter((asset) => asset.name.endsWith(".sha256"))
|
||||
|
||||
@@ -1,183 +0,0 @@
|
||||
import * as path from "node:path";
|
||||
import * as core from "@actions/core";
|
||||
import { findPyprojectToml } from "./pyproject-finder";
|
||||
|
||||
jest.mock("@actions/core", () => ({
|
||||
debug: jest.fn(),
|
||||
info: jest.fn(),
|
||||
}));
|
||||
|
||||
describe("findPyprojectToml", () => {
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
describe("when pyproject.toml exists in src directory", () => {
|
||||
it("should return the exact path", () => {
|
||||
const fixturesDir = path.join(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"__tests__",
|
||||
"fixtures",
|
||||
);
|
||||
const workspaceRoot = path.join(__dirname, "..", "..");
|
||||
|
||||
const result = findPyprojectToml(fixturesDir, workspaceRoot);
|
||||
|
||||
expect(result).toContain("pyproject.toml");
|
||||
expect(result).toContain("fixtures");
|
||||
expect(core.info).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe("when pyproject.toml exists only in parent directory", () => {
|
||||
it("should search upwards and find the parent's pyproject.toml", () => {
|
||||
// subproject doesn't have a pyproject.toml, but its parent (parent-config-project) does
|
||||
const subprojectDir = path.join(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"__tests__",
|
||||
"fixtures",
|
||||
"parent-config-project",
|
||||
"subproject",
|
||||
);
|
||||
const workspaceRoot = path.join(__dirname, "..", "..");
|
||||
|
||||
const result = findPyprojectToml(subprojectDir, workspaceRoot);
|
||||
|
||||
expect(result).toBeTruthy();
|
||||
expect(result).toContain("pyproject.toml");
|
||||
expect(result).toContain("parent-config-project");
|
||||
expect(core.info).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe("boundary conditions", () => {
|
||||
it("should stop searching at workspace root and return undefined when not found", () => {
|
||||
// Create a path that won't have pyproject.toml above it
|
||||
const nodeModulesDir = path.join(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"node_modules",
|
||||
"@actions",
|
||||
);
|
||||
const workspaceRoot = path.join(__dirname, "..", "..");
|
||||
|
||||
const result = findPyprojectToml(nodeModulesDir, workspaceRoot);
|
||||
|
||||
// Should return undefined since there's no pyproject.toml in the search path
|
||||
expect(result).toBeUndefined();
|
||||
expect(core.info).not.toHaveBeenCalledWith(
|
||||
expect.stringContaining("Found pyproject.toml"),
|
||||
);
|
||||
});
|
||||
|
||||
it("should find pyproject.toml when it exists at workspace root", () => {
|
||||
// Use parent-config-project as the "workspace root" for this test
|
||||
// Start from subproject (which has no pyproject.toml) to search up to workspace root
|
||||
const subprojectDir = path.join(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"__tests__",
|
||||
"fixtures",
|
||||
"parent-config-project",
|
||||
"subproject",
|
||||
);
|
||||
const workspaceRoot = path.join(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"__tests__",
|
||||
"fixtures",
|
||||
"parent-config-project",
|
||||
);
|
||||
|
||||
const result = findPyprojectToml(subprojectDir, workspaceRoot);
|
||||
|
||||
expect(result).toBeTruthy();
|
||||
expect(result).toContain("pyproject.toml");
|
||||
expect(result).toContain("parent-config-project");
|
||||
});
|
||||
|
||||
it("should stop at workspace root even if searching from it", () => {
|
||||
const workspaceRoot = path.join(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"__tests__",
|
||||
"fixtures",
|
||||
);
|
||||
|
||||
const result = findPyprojectToml(workspaceRoot, workspaceRoot);
|
||||
|
||||
// Should find pyproject.toml at workspace root
|
||||
expect(result).toBeTruthy();
|
||||
expect(result).toContain("pyproject.toml");
|
||||
expect(result).toContain("fixtures");
|
||||
});
|
||||
});
|
||||
|
||||
describe("edge cases", () => {
|
||||
it("should handle relative paths", () => {
|
||||
const srcDir = "./__tests__/fixtures";
|
||||
const workspaceRoot = ".";
|
||||
|
||||
const result = findPyprojectToml(srcDir, workspaceRoot);
|
||||
|
||||
// Should work with relative paths
|
||||
expect(result).toBeTruthy();
|
||||
expect(result).toContain("pyproject.toml");
|
||||
});
|
||||
|
||||
it("should handle when src equals workspace root", () => {
|
||||
const workspaceRoot = path.join(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"__tests__",
|
||||
"fixtures",
|
||||
);
|
||||
const result = findPyprojectToml(workspaceRoot, workspaceRoot);
|
||||
|
||||
expect(result).toBeTruthy();
|
||||
expect(result).toContain("pyproject.toml");
|
||||
expect(result).toContain("fixtures");
|
||||
});
|
||||
|
||||
it("should log debug messages for each checked path", () => {
|
||||
const pythonProjectDir = path.join(
|
||||
__dirname,
|
||||
"..",
|
||||
"..",
|
||||
"__tests__",
|
||||
"fixtures",
|
||||
"python-project",
|
||||
);
|
||||
const workspaceRoot = path.join(__dirname, "..", "..");
|
||||
|
||||
findPyprojectToml(pythonProjectDir, workspaceRoot);
|
||||
|
||||
expect(core.debug).toHaveBeenCalled();
|
||||
const debugCalls = (core.debug as jest.Mock).mock.calls;
|
||||
expect(debugCalls.length).toBeGreaterThan(0);
|
||||
|
||||
// First debug call should be for the starting directory
|
||||
expect(debugCalls[0][0]).toContain("Checking for");
|
||||
expect(debugCalls[0][0]).toContain("python-project");
|
||||
});
|
||||
|
||||
it("should handle paths with trailing slashes", () => {
|
||||
const fixturesDir = `${path.join(__dirname, "..", "..", "__tests__", "fixtures")}/`;
|
||||
const workspaceRoot = path.join(__dirname, "..", "..");
|
||||
|
||||
const result = findPyprojectToml(fixturesDir, workspaceRoot);
|
||||
|
||||
expect(result).toBeTruthy();
|
||||
expect(result).toContain("pyproject.toml");
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -1,79 +0,0 @@
|
||||
import * as fs from "node:fs";
|
||||
import * as path from "node:path";
|
||||
import * as core from "@actions/core";
|
||||
|
||||
/**
|
||||
* Search for a pyproject.toml file starting from the given directory
|
||||
* and traversing upwards through parent directories until reaching
|
||||
* the GitHub workspace root.
|
||||
*
|
||||
* @param startDir The directory to start the search from (e.g., the src input)
|
||||
* @param workspaceRoot The GitHub workspace directory (GITHUB_WORKSPACE)
|
||||
* @returns The path to the found pyproject.toml, or undefined if not found
|
||||
*/
|
||||
export function findPyprojectToml(
|
||||
startDir: string,
|
||||
workspaceRoot: string,
|
||||
): string | undefined {
|
||||
let currentDir = path.resolve(startDir);
|
||||
const resolvedWorkspaceRoot = path.resolve(workspaceRoot);
|
||||
|
||||
while (true) {
|
||||
const pyprojectPath = path.join(currentDir, "pyproject.toml");
|
||||
core.debug(`Checking for ${pyprojectPath}`);
|
||||
|
||||
if (fs.existsSync(pyprojectPath)) {
|
||||
core.info(`Found pyproject.toml at ${pyprojectPath}`);
|
||||
return pyprojectPath;
|
||||
}
|
||||
|
||||
// Check if we've reached the workspace root
|
||||
if (currentDir === resolvedWorkspaceRoot) {
|
||||
// If we're at workspace root and didn't find it, stop searching
|
||||
break;
|
||||
}
|
||||
|
||||
// Move up to parent directory
|
||||
const parentDir = path.dirname(currentDir);
|
||||
|
||||
// If parent is the same as current, we've reached the filesystem root
|
||||
if (parentDir === currentDir) {
|
||||
break;
|
||||
}
|
||||
|
||||
currentDir = parentDir;
|
||||
|
||||
// If we've gone past the workspace root, stop searching
|
||||
if (isPathWithinWorkspace(currentDir, resolvedWorkspaceRoot) === false) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a given path is within or equal to the workspace root.
|
||||
*
|
||||
* @param checkPath The path to check
|
||||
* @param workspaceRoot The workspace root directory
|
||||
* @returns true if within or equal to workspace, false if outside, undefined if can't determine
|
||||
*/
|
||||
function isPathWithinWorkspace(
|
||||
checkPath: string,
|
||||
workspaceRoot: string,
|
||||
): boolean | undefined {
|
||||
try {
|
||||
const checkPathResolved = path.resolve(checkPath);
|
||||
const workspaceRootResolved = path.resolve(workspaceRoot);
|
||||
|
||||
// Check if checkPath starts with workspaceRoot (case-insensitive on Windows)
|
||||
const relativePath = path.relative(
|
||||
workspaceRootResolved,
|
||||
checkPathResolved,
|
||||
);
|
||||
return !relativePath.startsWith("..") && !path.isAbsolute(relativePath);
|
||||
} catch {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
@@ -1,188 +0,0 @@
|
||||
import * as core from "@actions/core";
|
||||
import { findRuffVersionInSpec } from "./pyproject";
|
||||
|
||||
jest.mock("@actions/core", () => ({
|
||||
info: jest.fn(),
|
||||
warning: jest.fn(),
|
||||
}));
|
||||
|
||||
describe("findRuffVersionInSpec", () => {
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
describe("ruff dependency strings", () => {
|
||||
it("should extract version from 'ruff==0.9.3'", () => {
|
||||
const result = findRuffVersionInSpec("ruff==0.9.3");
|
||||
expect(result).toBe("0.9.3");
|
||||
expect(core.info).toHaveBeenCalledWith(
|
||||
"Found ruff version in requirements file: 0.9.3",
|
||||
);
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should extract version from 'ruff>=0.14'", () => {
|
||||
const result = findRuffVersionInSpec("ruff>=0.14");
|
||||
expect(result).toBe(">=0.14");
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should extract version from 'ruff ~=1.0.0'", () => {
|
||||
const result = findRuffVersionInSpec("ruff ~=1.0.0");
|
||||
expect(result).toBe("~=1.0.0");
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should extract version from 'ruff>=0.14,<1.0'", () => {
|
||||
const result = findRuffVersionInSpec("ruff>=0.14,<1.0");
|
||||
expect(result).toBe(">=0.14,<1.0");
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should extract version from 'ruff>=0.14,<2.0,!=1.5.0'", () => {
|
||||
const result = findRuffVersionInSpec("ruff>=0.14,<2.0,!=1.5.0");
|
||||
expect(result).toBe(">=0.14,<2.0,!=1.5.0");
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should return undefined for non-ruff dependency 'another-dep 0.1.6'", () => {
|
||||
const result = findRuffVersionInSpec("another-dep 0.1.6");
|
||||
expect(result).toBeUndefined();
|
||||
expect(core.info).not.toHaveBeenCalled();
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should return undefined for non-ruff dependency 'another-dep==0.1.6'", () => {
|
||||
const result = findRuffVersionInSpec("another-dep==0.1.6");
|
||||
expect(result).toBeUndefined();
|
||||
expect(core.info).not.toHaveBeenCalled();
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should strip trailing backslash", () => {
|
||||
const result = findRuffVersionInSpec("ruff==0.9.3 \\");
|
||||
expect(result).toBe("0.9.3");
|
||||
expect(core.info).toHaveBeenCalledWith(
|
||||
"Found ruff version in requirements file: 0.9.3",
|
||||
);
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should strip trailing backslash with whitespace", () => {
|
||||
const result = findRuffVersionInSpec(" ruff==0.9.3 \\ ");
|
||||
expect(result).toBe("0.9.3");
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe("environment markers", () => {
|
||||
it("should strip python_version environment marker", () => {
|
||||
const result = findRuffVersionInSpec(
|
||||
'ruff>=0.14 ; python_version >= "3.11"',
|
||||
);
|
||||
expect(result).toBe(">=0.14");
|
||||
expect(core.info).toHaveBeenCalledWith(
|
||||
"Found ruff version in requirements file: >=0.14",
|
||||
);
|
||||
expect(core.warning).toHaveBeenCalledWith(
|
||||
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
|
||||
);
|
||||
});
|
||||
|
||||
it("should strip sys_platform environment marker", () => {
|
||||
const result = findRuffVersionInSpec(
|
||||
"ruff==0.9.3 ; sys_platform == 'linux'",
|
||||
);
|
||||
expect(result).toBe("0.9.3");
|
||||
expect(core.warning).toHaveBeenCalledWith(
|
||||
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
|
||||
);
|
||||
});
|
||||
|
||||
it("should strip multiple environment markers", () => {
|
||||
const result = findRuffVersionInSpec(
|
||||
'ruff>=0.14 ; python_version >= "3.11" and sys_platform == "linux"',
|
||||
);
|
||||
expect(result).toBe(">=0.14");
|
||||
expect(core.warning).toHaveBeenCalledWith(
|
||||
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
|
||||
);
|
||||
});
|
||||
|
||||
it("should handle environment markers with multiple constraints", () => {
|
||||
const result = findRuffVersionInSpec(
|
||||
'ruff>=0.14,<1.0 ; python_version >= "3.11"',
|
||||
);
|
||||
expect(result).toBe(">=0.14,<1.0");
|
||||
expect(core.warning).toHaveBeenCalledWith(
|
||||
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("edge cases", () => {
|
||||
it("should handle whitespace", () => {
|
||||
const result = findRuffVersionInSpec(" ruff >=0.14 ");
|
||||
expect(result).toBe(">=0.14");
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should handle whitespace with environment markers", () => {
|
||||
const result = findRuffVersionInSpec(
|
||||
" ruff >=0.14 ; python_version >= '3.11' ",
|
||||
);
|
||||
expect(result).toBe(">=0.14");
|
||||
expect(core.warning).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should return undefined for empty string", () => {
|
||||
const result = findRuffVersionInSpec("");
|
||||
expect(result).toBeUndefined();
|
||||
expect(core.info).not.toHaveBeenCalled();
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should return undefined for whitespace only", () => {
|
||||
const result = findRuffVersionInSpec(" ");
|
||||
expect(result).toBeUndefined();
|
||||
expect(core.info).not.toHaveBeenCalled();
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should return undefined for just semicolon", () => {
|
||||
const result = findRuffVersionInSpec(";");
|
||||
expect(result).toBeUndefined();
|
||||
expect(core.info).not.toHaveBeenCalled();
|
||||
expect(core.warning).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should handle exact example from issue #256", () => {
|
||||
const result = findRuffVersionInSpec(
|
||||
'ruff>=0.14 ; python_version >= "3.11"',
|
||||
);
|
||||
expect(result).toBe(">=0.14");
|
||||
expect(core.info).toHaveBeenCalledWith(
|
||||
"Found ruff version in requirements file: >=0.14",
|
||||
);
|
||||
expect(core.warning).toHaveBeenCalledWith(
|
||||
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
|
||||
);
|
||||
});
|
||||
|
||||
it("should handle single-quoted environment markers", () => {
|
||||
const result = findRuffVersionInSpec(
|
||||
"ruff>=0.14 ; python_version >= '3.11'",
|
||||
);
|
||||
expect(result).toBe(">=0.14");
|
||||
expect(core.warning).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("should handle double-quoted environment markers", () => {
|
||||
const result = findRuffVersionInSpec(
|
||||
'ruff>=0.14 ; python_version >= "3.11"',
|
||||
);
|
||||
expect(result).toBe(">=0.14");
|
||||
expect(core.warning).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
+17
-52
@@ -2,58 +2,25 @@ import * as fs from "node:fs";
|
||||
import * as core from "@actions/core";
|
||||
import * as toml from "smol-toml";
|
||||
|
||||
/**
|
||||
* Find ruff version in a dependency specification.
|
||||
* Only handles strings that start with "ruff" (e.g., "ruff==0.9.3").
|
||||
* Returns undefined for non-ruff dependencies.
|
||||
* Strips environment markers (everything after ';').
|
||||
* Strips leading '==' from exact version specifiers (PEP 440) for downstream compatibility.
|
||||
*
|
||||
* @internal This is exported for testing purposes only.
|
||||
*/
|
||||
export function findRuffVersionInSpec(spec: string): string | undefined {
|
||||
const trimmedSpec = spec.trim();
|
||||
|
||||
const fullDepMatch = trimmedSpec.match(/^ruff\s*(.+)$/);
|
||||
let versionSpec: string;
|
||||
if (fullDepMatch) {
|
||||
versionSpec = fullDepMatch[1];
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// Strip trailing backslash (line continuation)
|
||||
versionSpec = versionSpec.replace(/\\$/, "").trim();
|
||||
|
||||
// Strip environment markers (everything after ';')
|
||||
const match = versionSpec.match(/^([^;]+)(?:;.*)?$/);
|
||||
|
||||
if (match) {
|
||||
let version = match[1].trim();
|
||||
if (version) {
|
||||
// Strip leading '==' from exact version specifiers for compatibility with semver
|
||||
if (version.startsWith("==")) {
|
||||
version = version.slice(2);
|
||||
}
|
||||
if (trimmedSpec.includes(";")) {
|
||||
core.warning(
|
||||
"Environment markers are ignored. ruff is a standalone tool that works independently of Python version.",
|
||||
);
|
||||
}
|
||||
core.info(`Found ruff version in requirements file: ${version}`);
|
||||
return version;
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function getRuffVersionFromAllDependencies(
|
||||
allDependencies: string[],
|
||||
): string | undefined {
|
||||
return allDependencies
|
||||
.map((dep) => findRuffVersionInSpec(dep))
|
||||
.find((version) => version !== undefined);
|
||||
const ruffVersionDefinition = allDependencies.find((dep: string) =>
|
||||
dep.startsWith("ruff"),
|
||||
);
|
||||
|
||||
if (ruffVersionDefinition) {
|
||||
const ruffVersion = ruffVersionDefinition
|
||||
.match(/^ruff([^A-Z0-9._-]+.*)$/)?.[1]
|
||||
.trim();
|
||||
if (ruffVersion?.startsWith("==")) {
|
||||
return ruffVersion.slice(2);
|
||||
}
|
||||
core.info(`Found ruff version in pyproject.toml: ${ruffVersion}`);
|
||||
return ruffVersion;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
interface Pyproject {
|
||||
@@ -101,9 +68,7 @@ function getRuffVersionFromPoetryGroups(
|
||||
return poetryGroups
|
||||
.flatMap((group) => Object.entries(group.dependencies))
|
||||
.map(([name, spec]) => {
|
||||
if (typeof spec === "string") {
|
||||
return findRuffVersionInSpec(`${name} ${spec}`);
|
||||
}
|
||||
if (name === "ruff" && typeof spec === "string") return spec;
|
||||
return undefined;
|
||||
})
|
||||
.find((version) => version !== undefined);
|
||||
|
||||
@@ -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