Compare commits

..
Author SHA1 Message Date
eifinger-botandGitHub 4919ec5cf1 fix: persist credentials for git push in update-major-minor-tags workflow (#312)
## Problem

After upgrading to `actions/checkout@v6`, the `update-major-minor-tags`
workflow fails with:

```
fatal: could not read Username for 'https://github.com': No such device or address
```

Example:
https://github.com/astral-sh/ruff-action/actions/runs/21509988231/job/61974754475

## Root Cause

`actions/checkout@v6` changed the behavior of `persist-credentials:
false`. In v6, credentials are immediately cleaned up after checkout,
whereas in v5 they remained available during the job.

The workflow sets `persist-credentials: false` and then tries to `git
push` — but the auth credentials are already gone.

## Fix

Explicitly set `persist-credentials: true` (removing the `false` value).
The workflow already has minimal permissions (`contents: write`) scoped
only to this job, so this is safe.

Added a `zizmor: ignore[artipacked]` comment in case the security linter
flags this pattern.
2026-01-30 19:43:42 +01:00
eifinger-botandGitHub 1977806bc6 ci: add zizmor security linting (#313)
## Summary

Adds [zizmor](https://github.com/woodruffw/zizmor) security linting to
the CI workflow to scan GitHub Actions workflows for security issues.

## Changes

- Added `permissions: security-events: write` to the `lint` job
(required for zizmor)
- Added `zizmorcore/zizmor-action@v0.4.1` step after actionlint

Mirrors the setup in
[astral-sh/setup-uv](https://github.com/astral-sh/setup-uv/blob/803947b9bd8e9f986429fa0c5a41c367cd732b41/.github/workflows/test.yml#L29-L30).
2026-01-30 18:37:28 +00:00
Kevin StillhammerandGitHub aedff8d295 Bump dependencies and actions (#311) 2026-01-30 09:31:31 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
191187a20a Bump actions/checkout from 5.0.0 to 6.0.1 (#278)
Bumps [actions/checkout](https://github.com/actions/checkout) from 5.0.0
to 6.0.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/releases">actions/checkout's
releases</a>.</em></p>
<blockquote>
<h2>v6.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Update all references from v5 and v4 to v6 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2314">actions/checkout#2314</a></li>
<li>Add worktree support for persist-credentials includeIf by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li>
<li>Clarify v6 README by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2328">actions/checkout#2328</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v6...v6.0.1">https://github.com/actions/checkout/compare/v6...v6.0.1</a></p>
<h2>v6.0.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>v6-beta by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2298">actions/checkout#2298</a></li>
<li>update readme/changelog for v6 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2311">actions/checkout#2311</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v5.0.0...v6.0.0">https://github.com/actions/checkout/compare/v5.0.0...v6.0.0</a></p>
<h2>v6-beta</h2>
<h2>What's Changed</h2>
<p>Updated persist-credentials to store the credentials under
<code>$RUNNER_TEMP</code> instead of directly in the local git
config.</p>
<p>This requires a minimum Actions Runner version of <a
href="https://github.com/actions/runner/releases/tag/v2.329.0">v2.329.0</a>
to access the persisted credentials for <a
href="https://docs.github.com/en/actions/tutorials/use-containerized-services/create-a-docker-container-action">Docker
container action</a> scenarios.</p>
<h2>v5.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/checkout/compare/v5...v5.0.1">https://github.com/actions/checkout/compare/v5...v5.0.1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/actions/checkout/blob/main/CHANGELOG.md">actions/checkout's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>v6.0.0</h2>
<ul>
<li>Persist creds to a separate file by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2286">actions/checkout#2286</a></li>
<li>Update README to include Node.js 24 support details and requirements
by <a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2248">actions/checkout#2248</a></li>
</ul>
<h2>v5.0.1</h2>
<ul>
<li>Port v6 cleanup to v5 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2301">actions/checkout#2301</a></li>
</ul>
<h2>v5.0.0</h2>
<ul>
<li>Update actions checkout to use node 24 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2226">actions/checkout#2226</a></li>
</ul>
<h2>v4.3.1</h2>
<ul>
<li>Port v6 cleanup to v4 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2305">actions/checkout#2305</a></li>
</ul>
<h2>v4.3.0</h2>
<ul>
<li>docs: update README.md by <a
href="https://github.com/motss"><code>@​motss</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1971">actions/checkout#1971</a></li>
<li>Add internal repos for checking out multiple repositories by <a
href="https://github.com/mouismail"><code>@​mouismail</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1977">actions/checkout#1977</a></li>
<li>Documentation update - add recommended permissions to Readme by <a
href="https://github.com/benwells"><code>@​benwells</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2043">actions/checkout#2043</a></li>
<li>Adjust positioning of user email note and permissions heading by <a
href="https://github.com/joshmgross"><code>@​joshmgross</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2044">actions/checkout#2044</a></li>
<li>Update README.md by <a
href="https://github.com/nebuk89"><code>@​nebuk89</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2194">actions/checkout#2194</a></li>
<li>Update CODEOWNERS for actions by <a
href="https://github.com/TingluoHuang"><code>@​TingluoHuang</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/2224">actions/checkout#2224</a></li>
<li>Update package dependencies by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/2236">actions/checkout#2236</a></li>
</ul>
<h2>v4.2.2</h2>
<ul>
<li><code>url-helper.ts</code> now leverages well-known environment
variables by <a href="https://github.com/jww3"><code>@​jww3</code></a>
in <a
href="https://redirect.github.com/actions/checkout/pull/1941">actions/checkout#1941</a></li>
<li>Expand unit test coverage for <code>isGhes</code> by <a
href="https://github.com/jww3"><code>@​jww3</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1946">actions/checkout#1946</a></li>
</ul>
<h2>v4.2.1</h2>
<ul>
<li>Check out other refs/* by commit if provided, fall back to ref by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1924">actions/checkout#1924</a></li>
</ul>
<h2>v4.2.0</h2>
<ul>
<li>Add Ref and Commit outputs by <a
href="https://github.com/lucacome"><code>@​lucacome</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1180">actions/checkout#1180</a></li>
<li>Dependency updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>- <a
href="https://redirect.github.com/actions/checkout/pull/1777">actions/checkout#1777</a>,
<a
href="https://redirect.github.com/actions/checkout/pull/1872">actions/checkout#1872</a></li>
</ul>
<h2>v4.1.7</h2>
<ul>
<li>Bump the minor-npm-dependencies group across 1 directory with 4
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1739">actions/checkout#1739</a></li>
<li>Bump actions/checkout from 3 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1697">actions/checkout#1697</a></li>
<li>Check out other refs/* by commit by <a
href="https://github.com/orhantoy"><code>@​orhantoy</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1774">actions/checkout#1774</a></li>
<li>Pin actions/checkout's own workflows to a known, good, stable
version. by <a href="https://github.com/jww3"><code>@​jww3</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1776">actions/checkout#1776</a></li>
</ul>
<h2>v4.1.6</h2>
<ul>
<li>Check platform to set archive extension appropriately by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1732">actions/checkout#1732</a></li>
</ul>
<h2>v4.1.5</h2>
<ul>
<li>Update NPM dependencies by <a
href="https://github.com/cory-miller"><code>@​cory-miller</code></a> in
<a
href="https://redirect.github.com/actions/checkout/pull/1703">actions/checkout#1703</a></li>
<li>Bump github/codeql-action from 2 to 3 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1694">actions/checkout#1694</a></li>
<li>Bump actions/setup-node from 1 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1696">actions/checkout#1696</a></li>
<li>Bump actions/upload-artifact from 2 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/actions/checkout/pull/1695">actions/checkout#1695</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/checkout/commit/8e8c483db84b4bee98b60c0593521ed34d9990e8"><code>8e8c483</code></a>
Clarify v6 README (<a
href="https://redirect.github.com/actions/checkout/issues/2328">#2328</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/033fa0dc0b82693d8986f1016a0ec2c5e7d9cbb1"><code>033fa0d</code></a>
Add worktree support for persist-credentials includeIf (<a
href="https://redirect.github.com/actions/checkout/issues/2327">#2327</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/c2d88d3ecc89a9ef08eebf45d9637801dcee7eb5"><code>c2d88d3</code></a>
Update all references from v5 and v4 to v6 (<a
href="https://redirect.github.com/actions/checkout/issues/2314">#2314</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/1af3b93b6815bc44a9784bd300feb67ff0d1eeb3"><code>1af3b93</code></a>
update readme/changelog for v6 (<a
href="https://redirect.github.com/actions/checkout/issues/2311">#2311</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/71cf2267d89c5cb81562390fa70a37fa40b1305e"><code>71cf226</code></a>
v6-beta (<a
href="https://redirect.github.com/actions/checkout/issues/2298">#2298</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/069c6959146423d11cd0184e6accf28f9d45f06e"><code>069c695</code></a>
Persist creds to a separate file (<a
href="https://redirect.github.com/actions/checkout/issues/2286">#2286</a>)</li>
<li><a
href="https://github.com/actions/checkout/commit/ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493"><code>ff7abcd</code></a>
Update README to include Node.js 24 support details and requirements (<a
href="https://redirect.github.com/actions/checkout/issues/2248">#2248</a>)</li>
<li>See full diff in <a
href="https://github.com/actions/checkout/compare/08c6903cd8c0fde910a37f88322edcfb5dd907a8...8e8c483db84b4bee98b60c0593521ed34d9990e8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/checkout&package-manager=github_actions&previous-version=5.0.0&new-version=6.0.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

You can trigger a rebase of this PR by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

> **Note**
> Automatic rebases have been disabled on this pull request as it has
been open for over 30 days.

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-28 18:31:29 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ecac2cc03c Bump github/codeql-action from 3.30.5 to 4.31.10 (#294)
Bumps [github/codeql-action](https://github.com/github/codeql-action)
from 3.30.5 to 4.31.10.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/releases">github/codeql-action's
releases</a>.</em></p>
<blockquote>
<h2>v4.31.10</h2>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>4.31.10 - 12 Jan 2026</h2>
<ul>
<li>Update default CodeQL bundle version to 2.23.9. <a
href="https://redirect.github.com/github/codeql-action/pull/3393">#3393</a></li>
</ul>
<p>See the full <a
href="https://github.com/github/codeql-action/blob/v4.31.10/CHANGELOG.md">CHANGELOG.md</a>
for more information.</p>
<h2>v4.31.9</h2>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>4.31.9 - 16 Dec 2025</h2>
<p>No user facing changes.</p>
<p>See the full <a
href="https://github.com/github/codeql-action/blob/v4.31.9/CHANGELOG.md">CHANGELOG.md</a>
for more information.</p>
<h2>v4.31.8</h2>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>4.31.8 - 11 Dec 2025</h2>
<ul>
<li>Update default CodeQL bundle version to 2.23.8. <a
href="https://redirect.github.com/github/codeql-action/pull/3354">#3354</a></li>
</ul>
<p>See the full <a
href="https://github.com/github/codeql-action/blob/v4.31.8/CHANGELOG.md">CHANGELOG.md</a>
for more information.</p>
<h2>v4.31.7</h2>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>4.31.7 - 05 Dec 2025</h2>
<ul>
<li>Update default CodeQL bundle version to 2.23.7. <a
href="https://redirect.github.com/github/codeql-action/pull/3343">#3343</a></li>
</ul>
<p>See the full <a
href="https://github.com/github/codeql-action/blob/v4.31.7/CHANGELOG.md">CHANGELOG.md</a>
for more information.</p>
<h2>v4.31.6</h2>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>4.31.6 - 01 Dec 2025</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/github/codeql-action/blob/main/CHANGELOG.md">github/codeql-action's
changelog</a>.</em></p>
<blockquote>
<h1>CodeQL Action Changelog</h1>
<p>See the <a
href="https://github.com/github/codeql-action/releases">releases
page</a> for the relevant changes to the CodeQL CLI and language
packs.</p>
<h2>[UNRELEASED]</h2>
<p>No user facing changes.</p>
<h2>4.31.10 - 12 Jan 2026</h2>
<ul>
<li>Update default CodeQL bundle version to 2.23.9. <a
href="https://redirect.github.com/github/codeql-action/pull/3393">#3393</a></li>
</ul>
<h2>4.31.9 - 16 Dec 2025</h2>
<p>No user facing changes.</p>
<h2>4.31.8 - 11 Dec 2025</h2>
<ul>
<li>Update default CodeQL bundle version to 2.23.8. <a
href="https://redirect.github.com/github/codeql-action/pull/3354">#3354</a></li>
</ul>
<h2>4.31.7 - 05 Dec 2025</h2>
<ul>
<li>Update default CodeQL bundle version to 2.23.7. <a
href="https://redirect.github.com/github/codeql-action/pull/3343">#3343</a></li>
</ul>
<h2>4.31.6 - 01 Dec 2025</h2>
<p>No user facing changes.</p>
<h2>4.31.5 - 24 Nov 2025</h2>
<ul>
<li>Update default CodeQL bundle version to 2.23.6. <a
href="https://redirect.github.com/github/codeql-action/pull/3321">#3321</a></li>
</ul>
<h2>4.31.4 - 18 Nov 2025</h2>
<p>No user facing changes.</p>
<h2>4.31.3 - 13 Nov 2025</h2>
<ul>
<li>CodeQL Action v3 will be deprecated in December 2026. The Action now
logs a warning for customers who are running v3 but could be running v4.
For more information, see <a
href="https://github.blog/changelog/2025-10-28-upcoming-deprecation-of-codeql-action-v3/">Upcoming
deprecation of CodeQL Action v3</a>.</li>
<li>Update default CodeQL bundle version to 2.23.5. <a
href="https://redirect.github.com/github/codeql-action/pull/3288">#3288</a></li>
</ul>
<h2>4.31.2 - 30 Oct 2025</h2>
<p>No user facing changes.</p>
<h2>4.31.1 - 30 Oct 2025</h2>
<ul>
<li>The <code>add-snippets</code> input has been removed from the
<code>analyze</code> action. This input has been deprecated since CodeQL
Action 3.26.4 in August 2024 when this removal was announced.</li>
</ul>
<h2>4.31.0 - 24 Oct 2025</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/github/codeql-action/commit/cdefb33c0f6224e58673d9004f47f7cb3e328b89"><code>cdefb33</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/3394">#3394</a>
from github/update-v4.31.10-0fa411efd</li>
<li><a
href="https://github.com/github/codeql-action/commit/cfa77c6b134886357b1c716fbe58a7708833bf31"><code>cfa77c6</code></a>
Update changelog for v4.31.10</li>
<li><a
href="https://github.com/github/codeql-action/commit/0fa411efd0628aefdf9d03a0faa20a1e0edafc4a"><code>0fa411e</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/3393">#3393</a>
from github/update-bundle/codeql-bundle-v2.23.9</li>
<li><a
href="https://github.com/github/codeql-action/commit/c2843242125c2fb8dcd892f204eb2f8622886b78"><code>c284324</code></a>
Add changelog note</li>
<li><a
href="https://github.com/github/codeql-action/commit/83e7d0046cd548fe4cb5d55f5b2ce30b0de62304"><code>83e7d00</code></a>
Update default bundle to codeql-bundle-v2.23.9</li>
<li><a
href="https://github.com/github/codeql-action/commit/f6a16bef8e5c39e398e4da16862d381f76824ac6"><code>f6a16be</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/3391">#3391</a>
from github/dependabot/npm_and_yarn/npm-minor-f1cdf5...</li>
<li><a
href="https://github.com/github/codeql-action/commit/c1f5f1a8b57e6da99af540e7c2f23ed33152e270"><code>c1f5f1a</code></a>
Rebuild</li>
<li><a
href="https://github.com/github/codeql-action/commit/1805d8d0a48bdde6eb34e4427b3c00c431427f89"><code>1805d8d</code></a>
Bump the npm-minor group with 2 updates</li>
<li><a
href="https://github.com/github/codeql-action/commit/b2951d2a1ed70de8ec57301118b487b35c13595a"><code>b2951d2</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/3353">#3353</a>
from github/kaspersv/bump-min-cli-v-for-overlay</li>
<li><a
href="https://github.com/github/codeql-action/commit/41448d92b9e7bb3a481b3134031a56e52f85528f"><code>41448d9</code></a>
Merge pull request <a
href="https://redirect.github.com/github/codeql-action/issues/3287">#3287</a>
from github/henrymercer/generate-mergeback-last</li>
<li>Additional commits viewable in <a
href="https://github.com/github/codeql-action/compare/3599b3baa15b485a2e49ef411a7a4bb2452e7f93...cdefb33c0f6224e58673d9004f47f7cb3e328b89">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github/codeql-action&package-manager=github_actions&previous-version=3.30.5&new-version=4.31.10)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-28 18:30:14 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ddb8c29960 Bump actions/setup-node from 6.0.0 to 6.2.0 (#296)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from
6.0.0 to 6.2.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-node/releases">actions/setup-node's
releases</a>.</em></p>
<blockquote>
<h2>v6.2.0</h2>
<h2>What's Changed</h2>
<h3>Documentation</h3>
<ul>
<li>Documentation update related to absence of Lockfile by <a
href="https://github.com/mahabaleshwars"><code>@​mahabaleshwars</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1454">actions/setup-node#1454</a></li>
<li>Correct mirror option typos by <a
href="https://github.com/MikeMcC399"><code>@​MikeMcC399</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1442">actions/setup-node#1442</a></li>
<li>Readme update on checkout version v6 by <a
href="https://github.com/deining"><code>@​deining</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1446">actions/setup-node#1446</a></li>
<li>Readme typo fixes <a
href="https://github.com/munyari"><code>@​munyari</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1226">actions/setup-node#1226</a></li>
<li>Advanced document update on checkout version v6 by <a
href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1468">actions/setup-node#1468</a></li>
</ul>
<h3>Dependency updates:</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> to v5.0.1 by <a
href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a> in <a
href="https://redirect.github.com/actions/setup-node/pull/1449">actions/setup-node#1449</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/mahabaleshwars"><code>@​mahabaleshwars</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1454">actions/setup-node#1454</a></li>
<li><a
href="https://github.com/MikeMcC399"><code>@​MikeMcC399</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1442">actions/setup-node#1442</a></li>
<li><a href="https://github.com/deining"><code>@​deining</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1446">actions/setup-node#1446</a></li>
<li><a href="https://github.com/munyari"><code>@​munyari</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-node/pull/1226">actions/setup-node#1226</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v6...v6.2.0">https://github.com/actions/setup-node/compare/v6...v6.2.0</a></p>
<h2>v6.1.0</h2>
<h2>What's Changed</h2>
<h3>Enhancement:</h3>
<ul>
<li>Remove always-auth configuration handling by <a
href="https://github.com/priyagupta108"><code>@​priyagupta108</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1436">actions/setup-node#1436</a></li>
</ul>
<h3>Dependency updates:</h3>
<ul>
<li>Upgrade <code>@​actions/cache</code> from 4.0.3 to 4.1.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1384">actions/setup-node#1384</a></li>
<li>Upgrade actions/checkout from 5 to 6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1439">actions/setup-node#1439</a></li>
<li>Upgrade js-yaml from 3.14.1 to 3.14.2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-node/pull/1435">actions/setup-node#1435</a></li>
</ul>
<h3>Documentation update:</h3>
<ul>
<li>Add example for restore-only cache in documentation by <a
href="https://github.com/aparnajyothi-y"><code>@​aparnajyothi-y</code></a>
in <a
href="https://redirect.github.com/actions/setup-node/pull/1419">actions/setup-node#1419</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-node/compare/v6...v6.1.0">https://github.com/actions/setup-node/compare/v6...v6.1.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/actions/setup-node/commit/6044e13b5dc448c55e2357c09f80417699197238"><code>6044e13</code></a>
Docs: bump actions/checkout from v5 to v6 (<a
href="https://redirect.github.com/actions/setup-node/issues/1468">#1468</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/8e494633d082d609d1e9ff931be32f8a44f1f657"><code>8e49463</code></a>
Fix README typo (<a
href="https://redirect.github.com/actions/setup-node/issues/1226">#1226</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/621ac41091d4227ef8fda5009c1ced96d8d36f7e"><code>621ac41</code></a>
README.md: bump to latest released checkout version v6 (<a
href="https://redirect.github.com/actions/setup-node/issues/1446">#1446</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/2951748f4c016b747952f8ca7e75fc64f2f62b53"><code>2951748</code></a>
Bump <code>@​actions/cache</code> to v5.0.1 (<a
href="https://redirect.github.com/actions/setup-node/issues/1449">#1449</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/21ddc7bc1fef4bd313efce0335fdcbf81827182c"><code>21ddc7b</code></a>
Correct mirror option typos (<a
href="https://redirect.github.com/actions/setup-node/issues/1442">#1442</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/65d868f8d4d85d7d4abb7de0875cde3fcc8798f5"><code>65d868f</code></a>
Update Documentation for Lockfile (<a
href="https://redirect.github.com/actions/setup-node/issues/1454">#1454</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/395ad3262231945c25e8478fd5baf05154b1d79f"><code>395ad32</code></a>
Bump js-yaml from 3.14.1 to 3.14.2 (<a
href="https://redirect.github.com/actions/setup-node/issues/1435">#1435</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/a4d2e2bbca97c78789c5b6f8b2092769fdd8005c"><code>a4d2e2b</code></a>
Bump actions/checkout from 5 to 6 (<a
href="https://redirect.github.com/actions/setup-node/issues/1439">#1439</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/b9b25d45f70a5d94d88496aa4896bf9ed8f49b67"><code>b9b25d4</code></a>
Remove always-auth configuration handling from action (<a
href="https://redirect.github.com/actions/setup-node/issues/1436">#1436</a>)</li>
<li><a
href="https://github.com/actions/setup-node/commit/633bb92bc0aabcae06e8ea93b85aecddd374c402"><code>633bb92</code></a>
Bump <code>@​actions/cache</code> from 4.0.3 to 4.1.0 (<a
href="https://redirect.github.com/actions/setup-node/issues/1384">#1384</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/setup-node/compare/2028fbc5c25fe9cf00d9f06a71cc4710d4507903...6044e13b5dc448c55e2357c09f80417699197238">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-node&package-manager=github_actions&previous-version=6.0.0&new-version=6.2.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-28 18:30:02 +01:00
5eee2a4332 search in parent dir (#306)
Fixes:  #164

---------

Co-authored-by: Clawdbot <clawdbot@users.noreply.github.com>
2026-01-28 11:38:26 +01:00
github-actions[bot]andGitHub 1d756c4b80 chore: update known checksums for 0.14.13/0.14.14 (#297) 2026-01-25 21:45:15 +00:00
Kevin StillhammerandGitHub fde82cb611 Fix CI: Pin ruff version to stable 0.13.x in test fixture (#305)
The test was using ruff>=0.14 which is under active development,
 causing failures as new versions like 0.14.13 are released. This
 changes the fixture to use ruff>=0.13 (where 0.13.3 is the final
 release) and updates the expected version in the test accordingly.
2026-01-25 21:39:11 +00:00
Kevin StillhammerandGitHub deb632007b ignore environment markers in dep specs (#295)
Contributes to: #256
2026-01-15 13:58:24 +01:00
Kevin StillhammerandGitHub 90ea8a399c Update the ruff-format matcher to properly extract all info (#293)
Now that format also supports the github output format all info is
available
2026-01-12 18:20:59 +01:00
7840fe30a7 chore: update known checksums for 0.14.11 (#292)
chore: update known checksums for 0.14.11

Co-authored-by: eifinger <1481961+eifinger@users.noreply.github.com>
2026-01-09 07:24:10 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
56403b4f7c Bump eifinger/actionlint-action from 1.9.3 to 1.10.0 (#291)
Bumps
[eifinger/actionlint-action](https://github.com/eifinger/actionlint-action)
from 1.9.3 to 1.10.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eifinger/actionlint-action/commit/447fbfe7533062b7a9ea55f790f2396fba6d052a"><code>447fbfe</code></a>
build(deps): bump actions/checkout from 6.0.0 to 6.0.1 (<a
href="https://redirect.github.com/eifinger/actionlint-action/issues/30">#30</a>)</li>
<li><a
href="https://github.com/eifinger/actionlint-action/commit/9e2be07ed11ff8dabc99cc0ff06398b51836c192"><code>9e2be07</code></a>
set default actionlint version to 1.7.10 (<a
href="https://redirect.github.com/eifinger/actionlint-action/issues/31">#31</a>)</li>
<li>See full diff in <a
href="https://github.com/eifinger/actionlint-action/compare/213860089b7cf97d640aa67567898fabeb132746...447fbfe7533062b7a9ea55f790f2396fba6d052a">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eifinger/actionlint-action&package-manager=github_actions&previous-version=1.9.3&new-version=1.10.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-05 09:51:03 +01:00
eacaa6bf71 chore: update known checksums for 0.14.10 (#289)
chore: update known checksums for 0.14.10

Co-authored-by: eifinger <1481961+eifinger@users.noreply.github.com>
2025-12-19 16:42:28 +00:00
Mattias LandGitHub e85c033ebc Support hashes in requirement files for version-file (#287) 2025-12-17 16:29:06 +01:00
8b935c8722 chore: update known checksums for 0.14.9 (#284)
chore: update known checksums for 0.14.9

Co-authored-by: eifinger <1481961+eifinger@users.noreply.github.com>
2025-12-12 07:06:49 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
c03f335068 Bump peter-evans/create-pull-request from 7.0.9 to 8.0.0 (#283)
Bumps
[peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request)
from 7.0.9 to 8.0.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/peter-evans/create-pull-request/releases">peter-evans/create-pull-request's
releases</a>.</em></p>
<blockquote>
<h2>Create Pull Request v8.0.0</h2>
<h2>What's new in v8</h2>
<ul>
<li>Requires <a
href="https://github.com/actions/runner/releases/tag/v2.327.1">Actions
Runner v2.327.1</a> or later if you are using a self-hosted runner for
Node 24 support.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>chore: Update checkout action version to v6 by <a
href="https://github.com/yonas"><code>@​yonas</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li>
<li>Update actions/checkout references to <a
href="https://github.com/v6"><code>@​v6</code></a> in docs by <a
href="https://github.com/Copilot"><code>@​Copilot</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li>
<li>feat: v8 by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4260">peter-evans/create-pull-request#4260</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/yonas"><code>@​yonas</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4258">peter-evans/create-pull-request#4258</a></li>
<li><a href="https://github.com/Copilot"><code>@​Copilot</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4259">peter-evans/create-pull-request#4259</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0">https://github.com/peter-evans/create-pull-request/compare/v7.0.11...v8.0.0</a></p>
<h2>Create Pull Request v7.0.11</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: restrict remote prune to self-hosted runners by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4250">peter-evans/create-pull-request#4250</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11">https://github.com/peter-evans/create-pull-request/compare/v7.0.10...v7.0.11</a></p>
<h2>Create Pull Request v7.0.10</h2>
<p>⚙️ Fixes an issue where updating a pull request failed when targeting
a forked repository with the same owner as its parent.</p>
<h2>What's Changed</h2>
<ul>
<li>build(deps): bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4235">peter-evans/create-pull-request#4235</a></li>
<li>build(deps-dev): bump prettier from 3.6.2 to 3.7.3 in the npm group
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4240">peter-evans/create-pull-request#4240</a></li>
<li>fix: provider list pulls fallback for multi fork same owner by <a
href="https://github.com/peter-evans"><code>@​peter-evans</code></a> in
<a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4245">peter-evans/create-pull-request#4245</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/obnyis"><code>@​obnyis</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4064">peter-evans/create-pull-request#4064</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10">https://github.com/peter-evans/create-pull-request/compare/v7.0.9...v7.0.10</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/98357b18bf14b5342f975ff684046ec3b2a07725"><code>98357b1</code></a>
feat: v8 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4260">#4260</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/41c0e4b7899a4a0922bf899d64c5f25738cfe356"><code>41c0e4b</code></a>
Update actions/checkout references to <a
href="https://github.com/v6"><code>@​v6</code></a> in docs (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4259">#4259</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/994332de4c8124517167807167073cf397678768"><code>994332d</code></a>
chore: Update checkout action version to v6 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4258">#4258</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/22a9089034f40e5a961c8808d113e2c98fb63676"><code>22a9089</code></a>
fix: restrict remote prune to self-hosted runners (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4250">#4250</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/d4f3be6ce6f4083b7ac7490ab98b48a62db1ee41"><code>d4f3be6</code></a>
fix: provider list pulls fallback for multi fork same owner (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4245">#4245</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/bc8a47f5657f110049f4afd030c95529a9c62b76"><code>bc8a47f</code></a>
build(deps-dev): bump prettier from 3.6.2 to 3.7.3 in the npm group (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4240">#4240</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/a67ef28ca5df73d51a15007068e5931257943b0d"><code>a67ef28</code></a>
build(deps): bump the github-actions group with 2 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4235">#4235</a>)</li>
<li>See full diff in <a
href="https://github.com/peter-evans/create-pull-request/compare/84ae59a2cdc2258d6fa0732dd66352dddae2a412...98357b18bf14b5342f975ff684046ec3b2a07725">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=peter-evans/create-pull-request&package-manager=github_actions&previous-version=7.0.9&new-version=8.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 08:19:04 +01:00
7b97a6d66e chore: update known checksums for 0.14.8 (#280)
chore: update known checksums for 0.14.8

Co-authored-by: eifinger <1481961+eifinger@users.noreply.github.com>
2025-12-05 06:33:42 +00:00
William WoodruffandGitHub 5960f93ec0 chore: use npm ci --ignore-scripts in CI and scripts (#276)
Replaces various uses of `npm install` with `npm ci --ignore-scripts`.
This should both be more hermetic (it'll always use the locked versions
rather than re-resolving) and will partially mitigate some build-time
code execution risk.

There should be no breakage risk, as the current dependency footprint is
small and shouldn't include anything that uses build scripts 🙂

Signed-off-by: William Woodruff <william@astral.sh>
2025-12-02 08:09:27 +01:00
1e133b7ccc chore: update known checksums for 0.14.7 (#275)
chore: update known checksums for 0.14.7

Co-authored-by: eifinger <1481961+eifinger@users.noreply.github.com>
2025-11-30 20:03:04 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
cd51da8b6c Bump peter-evans/create-pull-request from 7.0.8 to 7.0.9 (#273)
Bumps
[peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request)
from 7.0.8 to 7.0.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/peter-evans/create-pull-request/releases">peter-evans/create-pull-request's
releases</a>.</em></p>
<blockquote>
<h2>Create Pull Request v7.0.9</h2>
<p>⚙️ Fixes an <a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4228">incompatibility</a>
with the recently released <code>actions/checkout@v6</code>.</p>
<h2>What's Changed</h2>
<ul>
<li>~70 dependency updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a></li>
<li>docs: fix workaround description about <code>ready_for_review</code>
by <a href="https://github.com/ybiquitous"><code>@​ybiquitous</code></a>
in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/3939">peter-evans/create-pull-request#3939</a></li>
<li>Docs: <code>add-paths</code> default behavior by <a
href="https://github.com/joeflack4"><code>@​joeflack4</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/3928">peter-evans/create-pull-request#3928</a></li>
<li>docs: update to create-github-app-token v2 by <a
href="https://github.com/Goooler"><code>@​Goooler</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4063">peter-evans/create-pull-request#4063</a></li>
<li>Fix compatibility with actions/checkout@v6 by <a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4230">peter-evans/create-pull-request#4230</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/joeflack4"><code>@​joeflack4</code></a>
made their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/3928">peter-evans/create-pull-request#3928</a></li>
<li><a href="https://github.com/Goooler"><code>@​Goooler</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4063">peter-evans/create-pull-request#4063</a></li>
<li><a
href="https://github.com/ericsciple"><code>@​ericsciple</code></a> made
their first contribution in <a
href="https://redirect.github.com/peter-evans/create-pull-request/pull/4230">peter-evans/create-pull-request#4230</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/peter-evans/create-pull-request/compare/v7.0.8...v7.0.9">https://github.com/peter-evans/create-pull-request/compare/v7.0.8...v7.0.9</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/84ae59a2cdc2258d6fa0732dd66352dddae2a412"><code>84ae59a</code></a>
fix: compatibility with actions/checkout@v6 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4230">#4230</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/b4733b9419fd47bbfa1807b15627e17cd70b5b22"><code>b4733b9</code></a>
build(deps-dev): bump js-yaml from 4.1.0 to 4.1.1 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4222">#4222</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/0edc001d28a2959cd7a6b505629f1d82f0a6e67d"><code>0edc001</code></a>
build(deps-dev): bump the npm group with 2 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4201">#4201</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/430aea0fb112656c3ac187e7a22b3604508ba3a7"><code>430aea0</code></a>
build(deps): bump the github-actions group with 3 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4200">#4200</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/46cdba753c74545733b821043d64bd6925fc4da9"><code>46cdba7</code></a>
build(deps-dev): bump the npm group with 3 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4185">#4185</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/b937339b17ca3e45ec14ebcafb879873b1ee8564"><code>b937339</code></a>
build(deps): bump the github-actions group with 2 updates (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4184">#4184</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/e9af275c3778a67411fcac2d613e8d4e9be452fd"><code>e9af275</code></a>
ci: update dependabot config</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/d3e081a03ae8d69301ed924bae10d70ea4af94d9"><code>d3e081a</code></a>
build(deps-dev): bump <code>@​types/node</code> from 18.19.127 to
18.19.128 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4178">#4178</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/9ec683ee07f9121fdf529b923931dd78d977a5c9"><code>9ec683e</code></a>
build(deps-dev): bump <code>@​types/node</code> from 18.19.125 to
18.19.127 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4165">#4165</a>)</li>
<li><a
href="https://github.com/peter-evans/create-pull-request/commit/65d8d10bf76513796c0f69457c2567b5da3b9626"><code>65d8d10</code></a>
build(deps-dev): bump ts-jest from 29.4.2 to 29.4.4 (<a
href="https://redirect.github.com/peter-evans/create-pull-request/issues/4163">#4163</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/peter-evans/create-pull-request/compare/271a8d0340265f705b14b6d32b9829c1cb33d45e...84ae59a2cdc2258d6fa0732dd66352dddae2a412">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=peter-evans/create-pull-request&package-manager=github_actions&previous-version=7.0.8&new-version=7.0.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 09:02:11 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
27c6fcea11 Bump eifinger/actionlint-action from 1.9.2 to 1.9.3 (#272)
Bumps
[eifinger/actionlint-action](https://github.com/eifinger/actionlint-action)
from 1.9.2 to 1.9.3.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/eifinger/actionlint-action/commit/213860089b7cf97d640aa67567898fabeb132746"><code>2138600</code></a>
set default actionlint version to 1.7.9 (<a
href="https://redirect.github.com/eifinger/actionlint-action/issues/29">#29</a>)</li>
<li><a
href="https://github.com/eifinger/actionlint-action/commit/9eac110dcad8d93d091a2c04fcd168439221ef2a"><code>9eac110</code></a>
build(deps): bump actions/checkout from 5.0.0 to 6.0.0 (<a
href="https://redirect.github.com/eifinger/actionlint-action/issues/28">#28</a>)</li>
<li>See full diff in <a
href="https://github.com/eifinger/actionlint-action/compare/03ff1f78c0670b71017616a37170f327df932030...213860089b7cf97d640aa67567898fabeb132746">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=eifinger/actionlint-action&package-manager=github_actions&previous-version=1.9.2&new-version=1.9.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-24 08:32:18 +01:00
b08f7b47e5 chore: update known checksums for 0.14.6 (#271)
chore: update known checksums for 0.14.6

Co-authored-by: eifinger <1481961+eifinger@users.noreply.github.com>
2025-11-22 07:51:24 +00:00
e7baf99fcc chore: update known checksums for 0.14.5 (#266)
chore: update known checksums for 0.14.5

Co-authored-by: eifinger <1481961+eifinger@users.noreply.github.com>
2025-11-13 22:27:21 +00:00
4f45dfa46b chore: update known checksums for 0.14.4 (#265)
chore: update known checksums for 0.14.4

Co-authored-by: eifinger <1481961+eifinger@users.noreply.github.com>
2025-11-07 06:40:57 +00:00
4ac3c5ec56 chore: update known checksums for 0.14.3 (#263)
chore: update known checksums for 0.14.3

Co-authored-by: eifinger <1481961+eifinger@users.noreply.github.com>
2025-10-31 07:28:46 +00:00
7f084f337e chore: update known checksums for 0.14.2 (#258)
chore: update known checksums for 0.14.2

Co-authored-by: eifinger <1481961+eifinger@users.noreply.github.com>
2025-10-24 06:41:15 +00:00
87990efc6b chore: update known checksums for 0.14.1 (#252)
chore: update known checksums for 0.14.1

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