Compare commits

...
6 Commits
Author SHA1 Message Date
Pavel Zwerschke 307e5e5842 fix: Multiple invokations of setup-pixi (#211) 2025-07-18 09:43:49 +02:00
Yannik TauschandPavel Zwerschke 273e4808c8 feat: Add pixi-url-bearer-token to authenticate when downloading from pixi-url (#210)
Co-authored-by: Pavel Zwerschke <pavelzw@gmail.com>
2025-07-11 18:38:08 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> c690703e5f Bump softprops/action-gh-release from 2.2.2 to 2.3.2 in the gh-actions group (#209)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-08 13:28:17 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Pavel Zwerschke
29045c2e67 Bump the nodejs group with 7 updates (#208)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Pavel Zwerschke <pavelzw@gmail.com>
2025-07-01 07:41:26 +00:00
github-actions[bot] 2fd23d90b5 Reference latest Pixi version in README (#207) 2025-07-01 07:03:47 +00:00
Daniel Elsner 14c8aabd75 fix: Forcefully remove empty parents directory on post-cleanup (#205) 2025-06-12 17:01:57 +02:00
14 changed files with 438 additions and 346 deletions
@@ -0,0 +1,7 @@
:8080 {
@unauthorized not header Authorization "Bearer s3cr3tT0k3nABC123"
respond @unauthorized "Unauthorized: Invalid token" 401
root * ./assets
file_server
}
+1 -1
View File
@@ -47,7 +47,7 @@ jobs:
run: |
set -euo pipefail
latest_version="$(jq -r '.version' package.json)"
count_expected=17
count_expected=18
count_actual="$(grep -c "setup-pixi@v$latest_version" README.md || true)"
if [ "$count_actual" -ne "$count_expected" ]; then
echo "::error file=README.md::Expected $count_expected mentions of \`setup-pixi@v$latest_version\` in README.md, but found $count_actual."
+1 -1
View File
@@ -24,7 +24,7 @@ jobs:
TAG_NAME: v${{ steps.version-metadata.outputs.newVersion }}
- name: Create release
if: steps.version-metadata.outputs.changed == 'true'
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2
uses: softprops/action-gh-release@72f2c25fcb47643c292f7107632f7a47c1df5cd8 # v2.3.2
with:
generate_release_notes: true
tag_name: v${{ steps.version-metadata.outputs.newVersion }}
+59
View File
@@ -190,6 +190,47 @@ jobs:
pixi-url: https://github.com/prefix-dev/pixi/releases/download/v0.14.0/pixi-x86_64-unknown-linux-musl
- run: pixi --version | grep -q "pixi 0.14.0"
pixi-url-bearer-token:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/old-pixi-lockfiles/* .
- name: Setup caddy
run: |
set -euo pipefail
curl -Ls -o caddy.tar.gz https://github.com/caddyserver/caddy/releases/download/v2.10.0/caddy_2.10.0_linux_amd64.tar.gz
tar -xzf caddy.tar.gz
chmod +x caddy
mkdir -p assets
curl -Ls -o assets/pixi https://github.com/prefix-dev/pixi/releases/download/v0.14.0/pixi-x86_64-unknown-linux-musl
cp .github/assets/pixi-url-auth-test/Caddyfile .
./caddy run --config Caddyfile &
- run: ps -aux | grep caddy
- name: Run with wrong token
uses: ./
id: wrongtoken
with:
cache: false
pixi-url: http://localhost:8080/pixi
pixi-url-bearer-token: wrongtoken
continue-on-error: true
- name: Fail if wrong token did not fail
run: |
echo "Unexpected success!"
exit 1
if: ${{ steps.wrongtoken.outcome != 'failure' }}
- name: Run with correct token
uses: ./
with:
cache: false
pixi-url: http://localhost:8080/pixi
pixi-url-bearer-token: s3cr3tT0k3nABC123
- run: pixi --version | grep -q "pixi 0.14.0"
custom-manifest-path:
strategy:
matrix:
@@ -884,6 +925,24 @@ jobs:
- run: which python | grep '.pixi/envs/py311/bin/python'
- run: '[[ $PIXI_ENVIRONMENT_NAME = "py311" ]]'
multiple-invokations:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Move pixi.toml
run: mv test/multiple-environments/* .
- uses: ./
with:
run-install: false
- uses: ./
with:
environments: >-
py311 py312
activate-environment: py311
# not properly testable
# https://github.com/actions/runner/issues/2347
# https://github.com/orgs/community/discussions/15452
+1
View File
@@ -1,2 +1,3 @@
dist
pnpm-lock.yaml
pixi.lock
+30 -18
View File
@@ -23,9 +23,9 @@ GitHub Action to set up the [pixi](https://github.com/prefix-dev/pixi) package m
## Usage
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
pixi-version: v0.44.0
pixi-version: v0.49.0
cache: true
auth-host: prefix.dev
@@ -35,7 +35,7 @@ GitHub Action to set up the [pixi](https://github.com/prefix-dev/pixi) package m
> [!WARNING]
> Since pixi is not yet stable, the API of this action may change between minor versions.
> Please pin the versions of this action to a specific version (i.e., `prefix-dev/setup-pixi@v0.8.9`) to avoid breaking changes.
> Please pin the versions of this action to a specific version (i.e., `prefix-dev/setup-pixi@v0.8.12`) to avoid breaking changes.
> You can automatically update the version of this action by using [Dependabot](https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot).
>
> Put the following in your `.github/dependabot.yml` file to enable Dependabot for your GitHub Actions:
@@ -74,7 +74,7 @@ In order to not exceed the [10 GB cache size limit](https://docs.github.com/en/a
This can be done by setting the `cache-write` argument.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
cache: true
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }}
@@ -119,7 +119,7 @@ test:
environment: [py311, py312]
steps:
- uses: actions/checkout@v4
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
environments: ${{ matrix.environment }}
```
@@ -129,7 +129,7 @@ test:
The following example will install both the `py311` and the `py312` environment on the runner.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
# separated by spaces
environments: >-
@@ -165,7 +165,7 @@ Specify the token using the `auth-token` input argument.
This form of authentication (bearer token in the request headers) is mainly used at [prefix.dev](https://prefix.dev).
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
auth-host: prefix.dev
auth-token: ${{ secrets.PREFIX_DEV_TOKEN }}
@@ -177,7 +177,7 @@ Specify the username and password using the `auth-username` and `auth-password`
This form of authentication (HTTP Basic Auth) is used in some enterprise environments with [artifactory](https://jfrog.com/artifactory) for example.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
auth-host: custom-artifactory.com
auth-username: ${{ secrets.PIXI_USERNAME }}
@@ -190,7 +190,7 @@ Specify the conda-token using the `auth-conda-token` input argument.
This form of authentication (token is encoded in URL: `https://my-quetz-instance.com/t/<token>/get/custom-channel`) is used at [anaconda.org](https://anaconda.org) or with [quetz instances](https://github.com/mamba-org/quetz).
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
auth-host: anaconda.org # or my-quetz-instance.com
auth-conda-token: ${{ secrets.CONDA_TOKEN }}
@@ -202,7 +202,7 @@ Specify the S3 key pair using the `auth-access-key-id` and `auth-secret-access-k
You can also specify the session token using the `auth-session-token` input argument.
```yaml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
auth-host: s3://my-s3-bucket
auth-s3-access-key-id: ${{ secrets.ACCESS_KEY_ID }}
@@ -274,7 +274,7 @@ To this end, `setup-pixi` adds all environment variables set when executing `pix
As a result, all installed binaries can be accessed without having to call `pixi run`.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
activate-environment: true
```
@@ -282,7 +282,7 @@ As a result, all installed binaries can be accessed without having to call `pixi
If you are installing multiple environments, you will need to specify the name of the environment that you want to be activated.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
environments: >-
py311
@@ -299,7 +299,7 @@ You can specify whether `setup-pixi` should run `pixi install --frozen` or `pixi
See the [official documentation](https://prefix.dev/docs/pixi/cli#install) for more information about the `--frozen` and `--locked` flags.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
locked: true
# or
@@ -318,7 +318,7 @@ The first one is the debug logging of the action itself.
This can be enabled by running the action with the `RUNNER_DEBUG` environment variable set to `true`.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
env:
RUNNER_DEBUG: true
```
@@ -336,7 +336,7 @@ The second type is the debug logging of the pixi executable.
This can be specified by setting the `log-level` input.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
# one of `q`, `default`, `v`, `vv`, or `vvv`.
log-level: vvv
@@ -362,7 +362,7 @@ If nothing is specified, `post-cleanup` will default to `true`.
On self-hosted runners, you also might want to alter the default pixi install location to a temporary location. You can use `pixi-bin-path: ${{ runner.temp }}/bin/pixi` to do this.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
post-cleanup: true
# ${{ runner.temp }}\Scripts\pixi.exe on Windows
@@ -378,7 +378,7 @@ You can also use a preinstalled local version of pixi on the runner by not setti
This can be overwritten by setting the `manifest-path` input argument.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
manifest-path: pyproject.toml
```
@@ -388,11 +388,23 @@ This can be overwritten by setting the `manifest-path` input argument.
If you only want to install pixi and not install the current project, you can use the `run-install` option.
```yml
- uses: prefix-dev/setup-pixi@v0.8.9
- uses: prefix-dev/setup-pixi@v0.8.12
with:
run-install: false
```
### Download pixi from a custom URL
You can also download pixi from a custom URL by setting the `pixi-url` input argument.
Optionally, you can combine this with the `pixi-url-bearer-token` input argument to authenticate the download request.
```yml
- uses: prefix-dev/setup-pixi@v0.8.12
with:
pixi-url: https://pixi-mirror.example.com/releases/download/v0.48.0/pixi-x86_64-unknown-linux-musl
pixi-url-bearer-token: ${{ secrets.PIXI_MIRROR_BEARER_TOKEN }}
```
## More examples
If you want to see more examples, you can take a look at the [GitHub Workflows of this repository](.github/workflows/test.yml).
+2
View File
@@ -10,6 +10,8 @@ inputs:
description: Version of pixi to install
pixi-url:
description: URL of pixi to install
pixi-url-bearer-token:
description: Bearer token to use for authentication when downloading pixi from a URL.
log-level:
description: |
Log level for the pixi CLI.
Generated Vendored
+54 -52
View File
@@ -22425,9 +22425,9 @@ var require_balanced_match = __commonJS({
}
});
// node_modules/.pnpm/brace-expansion@1.1.11/node_modules/brace-expansion/index.js
// node_modules/.pnpm/brace-expansion@1.1.12/node_modules/brace-expansion/index.js
var require_brace_expansion = __commonJS({
"node_modules/.pnpm/brace-expansion@1.1.11/node_modules/brace-expansion/index.js"(exports2, module2) {
"node_modules/.pnpm/brace-expansion@1.1.12/node_modules/brace-expansion/index.js"(exports2, module2) {
"use strict";
var concatMap = require_concat_map();
var balanced = require_balanced_match();
@@ -22495,7 +22495,7 @@ var require_brace_expansion = __commonJS({
var isSequence = isNumericSequence || isAlphaSequence;
var isOptions = m.body.indexOf(",") >= 0;
if (!isSequence && !isOptions) {
if (m.post.match(/,.*\}/)) {
if (m.post.match(/,(?!,).*\}/)) {
str = m.pre + "{" + m.body + escClose + m.post;
return expand(str);
}
@@ -64246,7 +64246,7 @@ var import_process = require("process");
var import_fs = require("fs");
var core = __toESM(require_core());
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/helpers/util.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/helpers/util.js
var util;
(function(util4) {
util4.assertEqual = (_) => {
@@ -64380,7 +64380,7 @@ var getParsedType = (data) => {
}
};
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/ZodError.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/ZodError.js
var ZodIssueCode = util.arrayToEnum([
"invalid_type",
"invalid_literal",
@@ -64493,7 +64493,7 @@ ZodError.create = (issues) => {
return error3;
};
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/locales/en.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/locales/en.js
var errorMap = (issue, _ctx) => {
let message;
switch (issue.code) {
@@ -64594,13 +64594,13 @@ var errorMap = (issue, _ctx) => {
};
var en_default = errorMap;
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/errors.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/errors.js
var overrideErrorMap = en_default;
function getErrorMap() {
return overrideErrorMap;
}
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/helpers/parseUtil.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/helpers/parseUtil.js
var makeIssue = (params) => {
const { data, path: path4, errorMaps, issueData } = params;
const fullPath = [...path4, ...issueData.path || []];
@@ -64709,14 +64709,14 @@ var isDirty = (x) => x.status === "dirty";
var isValid = (x) => x.status === "valid";
var isAsync = (x) => typeof Promise !== "undefined" && x instanceof Promise;
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/helpers/errorUtil.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/helpers/errorUtil.js
var errorUtil;
(function(errorUtil2) {
errorUtil2.errToObj = (message) => typeof message === "string" ? { message } : message || {};
errorUtil2.toString = (message) => typeof message === "string" ? message : message?.message;
})(errorUtil || (errorUtil = {}));
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/types.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/types.js
var ParseInputLazyPath = class {
constructor(parent, value, path4, key) {
this._cachedPath = [];
@@ -68128,7 +68128,7 @@ function untildify(pathWithTilde) {
return homeDirectory ? pathWithTilde.replace(/^~(?=$|\/|\\)/, homeDirectory) : pathWithTilde;
}
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/error.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/error.js
function getLineColFromPtr(string, ptr) {
let lines = string.slice(0, ptr).split(/\r\n|\n|\r/g);
return [lines.length, lines.pop().length + 1];
@@ -68168,7 +68168,7 @@ ${codeblock}`, options2);
}
};
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/util.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/util.js
function indexOfNewline(str, start = 0, end = str.length) {
let idx = str.indexOf("\n", start);
if (str[idx - 1] === "\r")
@@ -68236,7 +68236,7 @@ function getStringEnd(str, seek) {
return seek;
}
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/date.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/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 _hasDate, _hasTime, _offset;
var _TomlDate = class _TomlDate extends Date {
@@ -68333,7 +68333,7 @@ _hasTime = new WeakMap();
_offset = new WeakMap();
var TomlDate = _TomlDate;
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/primitive.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/primitive.js
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 LEADING_ZERO = /^[+-]?0[0-9_]/;
@@ -68420,7 +68420,7 @@ function parseString(str, ptr = 0, endPtr = str.length) {
}
return parsed + str.slice(sliceStart, endPtr - 1);
}
function parseValue(value, toml, ptr) {
function parseValue(value, toml, ptr, integersAsBigInt) {
if (value === "true")
return true;
if (value === "false")
@@ -68432,31 +68432,36 @@ function parseValue(value, toml, ptr) {
if (value === "nan" || value === "+nan" || value === "-nan")
return NaN;
if (value === "-0")
return 0;
let isInt;
if ((isInt = INT_REGEX.test(value)) || FLOAT_REGEX.test(value)) {
return integersAsBigInt ? 0n : 0;
let isInt = INT_REGEX.test(value);
if (isInt || FLOAT_REGEX.test(value)) {
if (LEADING_ZERO.test(value)) {
throw new TomlError("leading zeroes are not allowed", {
toml,
ptr
});
}
let numeric = +value.replace(/_/g, "");
value = value.replace(/_/g, "");
let numeric = +value;
if (isNaN(numeric)) {
throw new TomlError("invalid number", {
toml,
ptr
});
}
if (isInt && !Number.isSafeInteger(numeric)) {
throw new TomlError("integer value cannot be represented losslessly", {
toml,
ptr
});
if (isInt) {
if ((isInt = !Number.isSafeInteger(numeric)) && !integersAsBigInt) {
throw new TomlError("integer value cannot be represented losslessly", {
toml,
ptr
});
}
if (isInt || integersAsBigInt)
numeric = BigInt(value);
}
return numeric;
}
let date = new TomlDate(value);
const date = new TomlDate(value);
if (!date.isValid()) {
throw new TomlError("invalid value", {
toml,
@@ -68466,7 +68471,7 @@ function parseValue(value, toml, ptr) {
return date;
}
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/extract.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/extract.js
function sliceAndTrimEndOf(str, startPtr, endPtr, allowNewLines) {
let value = str.slice(startPtr, endPtr);
let commentIdx = value.indexOf("#");
@@ -68486,7 +68491,7 @@ function sliceAndTrimEndOf(str, startPtr, endPtr, allowNewLines) {
}
return [trimmed, commentIdx];
}
function extractValue(str, ptr, end, depth = -1) {
function extractValue(str, ptr, end, depth, integersAsBigInt) {
if (depth === 0) {
throw new TomlError("document contains excessively nested structures. aborting.", {
toml: str,
@@ -68495,7 +68500,7 @@ function extractValue(str, ptr, end, depth = -1) {
}
let c = str[ptr];
if (c === "[" || c === "{") {
let [value, endPtr2] = c === "[" ? parseArray(str, ptr, depth) : parseInlineTable(str, ptr, depth);
let [value, endPtr2] = c === "[" ? parseArray(str, ptr, depth, integersAsBigInt) : parseInlineTable(str, ptr, depth, integersAsBigInt);
let newPtr = end ? skipUntil(str, endPtr2, ",", end) : endPtr2;
if (endPtr2 - newPtr && end === "}") {
let nextNewLine = indexOfNewline(str, endPtr2, newPtr);
@@ -68537,12 +68542,12 @@ function extractValue(str, ptr, end, depth = -1) {
endPtr += +(str[endPtr] === ",");
}
return [
parseValue(slice[0], str, ptr),
parseValue(slice[0], str, ptr, integersAsBigInt),
endPtr
];
}
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/struct.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/struct.js
var KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \t]*$/;
function parseKey(str, ptr, end = "=") {
let dot = ptr - 1;
@@ -68611,28 +68616,20 @@ function parseKey(str, ptr, end = "=") {
} while (dot + 1 && dot < endPtr);
return [parsed, skipVoid(str, endPtr + 1, true, true)];
}
function parseInlineTable(str, ptr, depth = -1) {
function parseInlineTable(str, ptr, depth, integersAsBigInt) {
let res = {};
let seen = /* @__PURE__ */ new Set();
let c;
let comma = 0;
ptr++;
while ((c = str[ptr++]) !== "}" && c) {
let err = { toml: str, ptr: ptr - 1 };
if (c === "\n") {
throw new TomlError("newlines are not allowed in inline tables", {
toml: str,
ptr: ptr - 1
});
throw new TomlError("newlines are not allowed in inline tables", err);
} else if (c === "#") {
throw new TomlError("inline tables cannot contain comments", {
toml: str,
ptr: ptr - 1
});
throw new TomlError("inline tables cannot contain comments", err);
} else if (c === ",") {
throw new TomlError("expected key-value, found comma", {
toml: str,
ptr: ptr - 1
});
throw new TomlError("expected key-value, found comma", err);
} else if (c !== " " && c !== " ") {
let k;
let t = res;
@@ -68658,7 +68655,7 @@ function parseInlineTable(str, ptr, depth = -1) {
ptr
});
}
let [value, valueEndPtr] = extractValue(str, keyEndPtr, "}", depth - 1);
let [value, valueEndPtr] = extractValue(str, keyEndPtr, "}", depth - 1, integersAsBigInt);
seen.add(value);
t[k] = value;
ptr = valueEndPtr;
@@ -68679,7 +68676,7 @@ function parseInlineTable(str, ptr, depth = -1) {
}
return [res, ptr];
}
function parseArray(str, ptr, depth = -1) {
function parseArray(str, ptr, depth, integersAsBigInt) {
let res = [];
let c;
ptr++;
@@ -68692,7 +68689,7 @@ function parseArray(str, ptr, depth = -1) {
} else if (c === "#")
ptr = skipComment(str, ptr);
else if (c !== " " && c !== " " && c !== "\n" && c !== "\r") {
let e = extractValue(str, ptr - 1, "]", depth - 1);
let e = extractValue(str, ptr - 1, "]", depth - 1, integersAsBigInt);
res.push(e[0]);
ptr = e[1];
}
@@ -68706,7 +68703,7 @@ function parseArray(str, ptr, depth = -1) {
return [res, ptr];
}
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/parse.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/parse.js
function peekTable(key, table, meta, type2) {
let t = table;
let m = meta;
@@ -68766,8 +68763,7 @@ function peekTable(key, table, meta, type2) {
}
return [k, t, state3.c];
}
function parse(toml, opts) {
let maxDepth = opts?.maxDepth ?? 1e3;
function parse(toml, { maxDepth = 1e3, integersAsBigInt } = {}) {
let res = {};
let meta = {};
let tbl = res;
@@ -68816,7 +68812,7 @@ function parse(toml, opts) {
ptr
});
}
let v = extractValue(toml, k[1], void 0, maxDepth);
let v = extractValue(toml, k[1], void 0, maxDepth, integersAsBigInt);
p[1][p[0]] = v[0];
ptr = v[1];
}
@@ -68872,6 +68868,9 @@ var validateInputs = (inputs) => {
if (inputs.pixiVersion && inputs.pixiUrl) {
throw new Error("You need to specify either pixi-version or pixi-url");
}
if (inputs.pixiUrlBearerToken && !inputs.pixiUrl) {
throw new Error("You need to specify pixi-url when using pixi-url-bearer-token");
}
if (inputs.cacheKey !== void 0 && inputs.cache === false) {
throw new Error("Cannot specify cache key without caching");
}
@@ -68950,7 +68949,7 @@ var determinePixiInstallation = (pixiUrlOrVersionSet, pixiBinPath) => {
};
var inferOptions = (inputs) => {
const runInstall = inputs.runInstall ?? true;
const pixiSource = inputs.pixiVersion ? { version: inputs.pixiVersion } : inputs.pixiUrl ? { url: inputs.pixiUrl } : { version: "latest" };
const pixiSource = inputs.pixiVersion ? { version: inputs.pixiVersion } : inputs.pixiUrl ? { url: inputs.pixiUrl, bearerToken: inputs.pixiUrlBearerToken } : { version: "latest" };
const { downloadPixi: downloadPixi2, pixiBinPath } = determinePixiInstallation(
!!inputs.pixiVersion || !!inputs.pixiUrl,
inputs.pixiBinPath
@@ -69041,6 +69040,7 @@ var getOptions = () => {
"pixi-version must either be `latest` or a version string matching `vX.Y.Z`."
),
pixiUrl: parseOrUndefined("pixi-url", stringType().url()),
pixiUrlBearerToken: parseOrUndefined("pixi-url-bearer-token", stringType()),
logLevel: parseOrUndefined(
"log-level",
logLevelSchema,
@@ -69306,10 +69306,12 @@ var activateEnvironment = async (environment) => {
// src/main.ts
var downloadPixi = (source) => {
const url2 = "version" in source ? getPixiUrlFromVersion(source.version) : source.url;
const auth = "bearerToken" in source && source.bearerToken ? `Bearer ${source.bearerToken}` : "";
return core5.group("Downloading Pixi", () => {
core5.debug("Installing pixi");
core5.debug(`Downloading pixi from ${url2}`);
return import_promises2.default.mkdir(import_path3.default.dirname(options.pixiBinPath), { recursive: true }).then(() => (0, import_tool_cache.downloadTool)(url2, options.pixiBinPath)).then((_downloadPath) => import_promises2.default.chmod(options.pixiBinPath, 493)).then(() => {
core5.debug(`Using Bearer auth: ${auth ? "yes" : "no"}`);
return import_promises2.default.mkdir(import_path3.default.dirname(options.pixiBinPath), { recursive: true }).then(() => (0, import_tool_cache.downloadTool)(url2, options.pixiBinPath, auth)).then((_downloadPath) => import_promises2.default.chmod(options.pixiBinPath, 493)).then(() => {
core5.info(`Pixi installed to ${options.pixiBinPath}`);
});
});
Generated Vendored
+68 -66
View File
@@ -20110,6 +20110,7 @@ var require_lib2 = __commonJS({
// src/post.ts
var import_promises = __toESM(require("fs/promises"));
var import_fs2 = require("fs");
var import_path2 = __toESM(require("path"));
var import_os2 = __toESM(require("os"));
var import_process2 = require("process");
@@ -20122,7 +20123,7 @@ var import_process = require("process");
var import_fs = require("fs");
var core = __toESM(require_core());
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/helpers/util.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/helpers/util.js
var util;
(function(util2) {
util2.assertEqual = (_) => {
@@ -20256,7 +20257,7 @@ var getParsedType = (data) => {
}
};
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/ZodError.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/ZodError.js
var ZodIssueCode = util.arrayToEnum([
"invalid_type",
"invalid_literal",
@@ -20369,7 +20370,7 @@ ZodError.create = (issues) => {
return error2;
};
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/locales/en.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/locales/en.js
var errorMap = (issue, _ctx) => {
let message;
switch (issue.code) {
@@ -20470,13 +20471,13 @@ var errorMap = (issue, _ctx) => {
};
var en_default = errorMap;
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/errors.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/errors.js
var overrideErrorMap = en_default;
function getErrorMap() {
return overrideErrorMap;
}
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/helpers/parseUtil.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/helpers/parseUtil.js
var makeIssue = (params) => {
const { data, path: path3, errorMaps, issueData } = params;
const fullPath = [...path3, ...issueData.path || []];
@@ -20585,14 +20586,14 @@ var isDirty = (x) => x.status === "dirty";
var isValid = (x) => x.status === "valid";
var isAsync = (x) => typeof Promise !== "undefined" && x instanceof Promise;
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/helpers/errorUtil.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/helpers/errorUtil.js
var errorUtil;
(function(errorUtil2) {
errorUtil2.errToObj = (message) => typeof message === "string" ? { message } : message || {};
errorUtil2.toString = (message) => typeof message === "string" ? message : message?.message;
})(errorUtil || (errorUtil = {}));
// node_modules/.pnpm/zod@3.25.45/node_modules/zod/dist/esm/v3/types.js
// node_modules/.pnpm/zod@3.25.67/node_modules/zod/dist/esm/v3/types.js
var ParseInputLazyPath = class {
constructor(parent, value, path3, key) {
this._cachedPath = [];
@@ -24004,7 +24005,7 @@ function untildify(pathWithTilde) {
return homeDirectory ? pathWithTilde.replace(/^~(?=$|\/|\\)/, homeDirectory) : pathWithTilde;
}
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/error.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/error.js
function getLineColFromPtr(string, ptr) {
let lines = string.slice(0, ptr).split(/\r\n|\n|\r/g);
return [lines.length, lines.pop().length + 1];
@@ -24044,7 +24045,7 @@ ${codeblock}`, options2);
}
};
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/util.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/util.js
function indexOfNewline(str, start = 0, end = str.length) {
let idx = str.indexOf("\n", start);
if (str[idx - 1] === "\r")
@@ -24112,7 +24113,7 @@ function getStringEnd(str, seek) {
return seek;
}
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/date.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/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 _hasDate, _hasTime, _offset;
var _TomlDate = class _TomlDate extends Date {
@@ -24209,7 +24210,7 @@ _hasTime = new WeakMap();
_offset = new WeakMap();
var TomlDate = _TomlDate;
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/primitive.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/primitive.js
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 LEADING_ZERO = /^[+-]?0[0-9_]/;
@@ -24296,7 +24297,7 @@ function parseString(str, ptr = 0, endPtr = str.length) {
}
return parsed + str.slice(sliceStart, endPtr - 1);
}
function parseValue(value, toml, ptr) {
function parseValue(value, toml, ptr, integersAsBigInt) {
if (value === "true")
return true;
if (value === "false")
@@ -24308,31 +24309,36 @@ function parseValue(value, toml, ptr) {
if (value === "nan" || value === "+nan" || value === "-nan")
return NaN;
if (value === "-0")
return 0;
let isInt;
if ((isInt = INT_REGEX.test(value)) || FLOAT_REGEX.test(value)) {
return integersAsBigInt ? 0n : 0;
let isInt = INT_REGEX.test(value);
if (isInt || FLOAT_REGEX.test(value)) {
if (LEADING_ZERO.test(value)) {
throw new TomlError("leading zeroes are not allowed", {
toml,
ptr
});
}
let numeric = +value.replace(/_/g, "");
value = value.replace(/_/g, "");
let numeric = +value;
if (isNaN(numeric)) {
throw new TomlError("invalid number", {
toml,
ptr
});
}
if (isInt && !Number.isSafeInteger(numeric)) {
throw new TomlError("integer value cannot be represented losslessly", {
toml,
ptr
});
if (isInt) {
if ((isInt = !Number.isSafeInteger(numeric)) && !integersAsBigInt) {
throw new TomlError("integer value cannot be represented losslessly", {
toml,
ptr
});
}
if (isInt || integersAsBigInt)
numeric = BigInt(value);
}
return numeric;
}
let date = new TomlDate(value);
const date = new TomlDate(value);
if (!date.isValid()) {
throw new TomlError("invalid value", {
toml,
@@ -24342,7 +24348,7 @@ function parseValue(value, toml, ptr) {
return date;
}
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/extract.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/extract.js
function sliceAndTrimEndOf(str, startPtr, endPtr, allowNewLines) {
let value = str.slice(startPtr, endPtr);
let commentIdx = value.indexOf("#");
@@ -24362,7 +24368,7 @@ function sliceAndTrimEndOf(str, startPtr, endPtr, allowNewLines) {
}
return [trimmed, commentIdx];
}
function extractValue(str, ptr, end, depth = -1) {
function extractValue(str, ptr, end, depth, integersAsBigInt) {
if (depth === 0) {
throw new TomlError("document contains excessively nested structures. aborting.", {
toml: str,
@@ -24371,7 +24377,7 @@ function extractValue(str, ptr, end, depth = -1) {
}
let c = str[ptr];
if (c === "[" || c === "{") {
let [value, endPtr2] = c === "[" ? parseArray(str, ptr, depth) : parseInlineTable(str, ptr, depth);
let [value, endPtr2] = c === "[" ? parseArray(str, ptr, depth, integersAsBigInt) : parseInlineTable(str, ptr, depth, integersAsBigInt);
let newPtr = end ? skipUntil(str, endPtr2, ",", end) : endPtr2;
if (endPtr2 - newPtr && end === "}") {
let nextNewLine = indexOfNewline(str, endPtr2, newPtr);
@@ -24413,12 +24419,12 @@ function extractValue(str, ptr, end, depth = -1) {
endPtr += +(str[endPtr] === ",");
}
return [
parseValue(slice[0], str, ptr),
parseValue(slice[0], str, ptr, integersAsBigInt),
endPtr
];
}
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/struct.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/struct.js
var KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \t]*$/;
function parseKey(str, ptr, end = "=") {
let dot = ptr - 1;
@@ -24487,28 +24493,20 @@ function parseKey(str, ptr, end = "=") {
} while (dot + 1 && dot < endPtr);
return [parsed, skipVoid(str, endPtr + 1, true, true)];
}
function parseInlineTable(str, ptr, depth = -1) {
function parseInlineTable(str, ptr, depth, integersAsBigInt) {
let res = {};
let seen = /* @__PURE__ */ new Set();
let c;
let comma = 0;
ptr++;
while ((c = str[ptr++]) !== "}" && c) {
let err = { toml: str, ptr: ptr - 1 };
if (c === "\n") {
throw new TomlError("newlines are not allowed in inline tables", {
toml: str,
ptr: ptr - 1
});
throw new TomlError("newlines are not allowed in inline tables", err);
} else if (c === "#") {
throw new TomlError("inline tables cannot contain comments", {
toml: str,
ptr: ptr - 1
});
throw new TomlError("inline tables cannot contain comments", err);
} else if (c === ",") {
throw new TomlError("expected key-value, found comma", {
toml: str,
ptr: ptr - 1
});
throw new TomlError("expected key-value, found comma", err);
} else if (c !== " " && c !== " ") {
let k;
let t = res;
@@ -24534,7 +24532,7 @@ function parseInlineTable(str, ptr, depth = -1) {
ptr
});
}
let [value, valueEndPtr] = extractValue(str, keyEndPtr, "}", depth - 1);
let [value, valueEndPtr] = extractValue(str, keyEndPtr, "}", depth - 1, integersAsBigInt);
seen.add(value);
t[k] = value;
ptr = valueEndPtr;
@@ -24555,7 +24553,7 @@ function parseInlineTable(str, ptr, depth = -1) {
}
return [res, ptr];
}
function parseArray(str, ptr, depth = -1) {
function parseArray(str, ptr, depth, integersAsBigInt) {
let res = [];
let c;
ptr++;
@@ -24568,7 +24566,7 @@ function parseArray(str, ptr, depth = -1) {
} else if (c === "#")
ptr = skipComment(str, ptr);
else if (c !== " " && c !== " " && c !== "\n" && c !== "\r") {
let e = extractValue(str, ptr - 1, "]", depth - 1);
let e = extractValue(str, ptr - 1, "]", depth - 1, integersAsBigInt);
res.push(e[0]);
ptr = e[1];
}
@@ -24582,7 +24580,7 @@ function parseArray(str, ptr, depth = -1) {
return [res, ptr];
}
// node_modules/.pnpm/smol-toml@1.3.4/node_modules/smol-toml/dist/parse.js
// node_modules/.pnpm/smol-toml@1.4.0/node_modules/smol-toml/dist/parse.js
function peekTable(key, table, meta, type) {
let t = table;
let m = meta;
@@ -24642,8 +24640,7 @@ function peekTable(key, table, meta, type) {
}
return [k, t, state.c];
}
function parse(toml, opts) {
let maxDepth = opts?.maxDepth ?? 1e3;
function parse(toml, { maxDepth = 1e3, integersAsBigInt } = {}) {
let res = {};
let meta = {};
let tbl = res;
@@ -24692,7 +24689,7 @@ function parse(toml, opts) {
ptr
});
}
let v = extractValue(toml, k[1], void 0, maxDepth);
let v = extractValue(toml, k[1], void 0, maxDepth, integersAsBigInt);
p[1][p[0]] = v[0];
ptr = v[1];
}
@@ -24748,6 +24745,9 @@ var validateInputs = (inputs) => {
if (inputs.pixiVersion && inputs.pixiUrl) {
throw new Error("You need to specify either pixi-version or pixi-url");
}
if (inputs.pixiUrlBearerToken && !inputs.pixiUrl) {
throw new Error("You need to specify pixi-url when using pixi-url-bearer-token");
}
if (inputs.cacheKey !== void 0 && inputs.cache === false) {
throw new Error("Cannot specify cache key without caching");
}
@@ -24826,7 +24826,7 @@ var determinePixiInstallation = (pixiUrlOrVersionSet, pixiBinPath) => {
};
var inferOptions = (inputs) => {
const runInstall = inputs.runInstall ?? true;
const pixiSource = inputs.pixiVersion ? { version: inputs.pixiVersion } : inputs.pixiUrl ? { url: inputs.pixiUrl } : { version: "latest" };
const pixiSource = inputs.pixiVersion ? { version: inputs.pixiVersion } : inputs.pixiUrl ? { url: inputs.pixiUrl, bearerToken: inputs.pixiUrlBearerToken } : { version: "latest" };
const { downloadPixi, pixiBinPath } = determinePixiInstallation(
!!inputs.pixiVersion || !!inputs.pixiUrl,
inputs.pixiBinPath
@@ -24917,6 +24917,7 @@ var getOptions = () => {
"pixi-version must either be `latest` or a version string matching `vX.Y.Z`."
),
pixiUrl: parseOrUndefined("pixi-url", stringType().url()),
pixiUrlBearerToken: parseOrUndefined("pixi-url-bearer-token", stringType()),
logLevel: parseOrUndefined(
"log-level",
logLevelSchema,
@@ -24969,29 +24970,30 @@ var options = _options;
// src/post.ts
var removeEmptyParentDirs = (dirPath) => {
return import_promises.default.readdir(dirPath).then((files) => {
if (files.length === 0) {
core2.debug(`Removing empty directory ${dirPath}.`);
return import_promises.default.rm(dirPath, { recursive: true }).then(() => {
const parentDir = import_path2.default.dirname(dirPath);
if (parentDir !== dirPath) {
return removeEmptyParentDirs(parentDir);
}
});
}
return Promise.resolve();
});
if ((0, import_fs2.existsSync)(dirPath)) {
return import_promises.default.readdir(dirPath).then((files) => {
if (files.length === 0) {
core2.debug(`Removing empty directory ${dirPath}.`);
return import_promises.default.rm(dirPath, { recursive: true, force: true }).then(() => {
const parentDir = import_path2.default.dirname(dirPath);
if (parentDir !== dirPath) {
return removeEmptyParentDirs(parentDir);
}
});
}
});
}
return Promise.resolve();
};
var cleanupPixiBin = () => {
const pixiBinPath = options.pixiBinPath;
const pixiBinDir = import_path2.default.dirname(pixiBinPath);
core2.debug(`Cleaning up pixi binary ${pixiBinPath}.`);
return import_promises.default.rm(pixiBinPath, {
// Ignore exceptions if pixi binary does not exist anymore,
// to avoid errors if setup-pixi is used multiple times within the same workflow.
// This could, for instance, be the case for composite actions using setup-pixi.
force: true
}).then(() => removeEmptyParentDirs(pixiBinDir));
if ((0, import_fs2.existsSync)(pixiBinPath)) {
return import_promises.default.rm(pixiBinPath).then(() => removeEmptyParentDirs(pixiBinDir));
} else {
return removeEmptyParentDirs(pixiBinDir);
}
};
var cleanupEnv = () => {
if (!options.runInstall) {
+8 -8
View File
@@ -1,6 +1,6 @@
{
"name": "setup-pixi",
"version": "0.8.9",
"version": "0.8.12",
"private": true,
"description": "Action to set up the pixi package manager.",
"scripts": {
@@ -27,20 +27,20 @@
"@actions/exec": "^1.1.1",
"@actions/io": "^1.1.3",
"@actions/tool-cache": "^2.0.2",
"smol-toml": "^1.3.4",
"smol-toml": "^1.4.0",
"untildify": "^5.0.0",
"which": "^5.0.0",
"zod": "^3.24.2"
"zod": "^3.25.67"
},
"devDependencies": {
"@eslint/js": "^9.23.0",
"@eslint/js": "^9.30.0",
"@types/eslint__js": "^9.14.0",
"@types/node": "^22.13.14",
"@types/node": "^24.0.8",
"@types/which": "^3.0.4",
"eslint": "^9.23.0",
"prettier": "^3.5.3",
"eslint": "^9.30.0",
"prettier": "^3.6.2",
"tsup": "^8.4.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.29.0"
"typescript-eslint": "^8.35.1"
}
}
+177 -178
View File
@@ -24,8 +24,8 @@ importers:
specifier: ^2.0.2
version: 2.0.2
smol-toml:
specifier: ^1.3.4
version: 1.3.4
specifier: ^1.4.0
version: 1.4.0
untildify:
specifier: ^5.0.0
version: 5.0.0
@@ -33,27 +33,27 @@ importers:
specifier: ^5.0.0
version: 5.0.0
zod:
specifier: ^3.24.2
version: 3.25.45
specifier: ^3.25.67
version: 3.25.67
devDependencies:
'@eslint/js':
specifier: ^9.23.0
version: 9.28.0
specifier: ^9.30.0
version: 9.30.0
'@types/eslint__js':
specifier: ^9.14.0
version: 9.14.0
'@types/node':
specifier: ^22.13.14
version: 22.15.29
specifier: ^24.0.8
version: 24.0.8
'@types/which':
specifier: ^3.0.4
version: 3.0.4
eslint:
specifier: ^9.23.0
version: 9.28.0
specifier: ^9.30.0
version: 9.30.0
prettier:
specifier: ^3.5.3
version: 3.5.3
specifier: ^3.6.2
version: 3.6.2
tsup:
specifier: ^8.4.0
version: 8.5.0(typescript@5.8.3)
@@ -61,8 +61,8 @@ importers:
specifier: ^5.8.2
version: 5.8.3
typescript-eslint:
specifier: ^8.29.0
version: 8.33.0(eslint@9.28.0)(typescript@5.8.3)
specifier: ^8.35.1
version: 8.35.1(eslint@9.30.0)(typescript@5.8.3)
packages:
@@ -292,12 +292,6 @@ packages:
cpu: [x64]
os: [win32]
'@eslint-community/eslint-utils@4.5.1':
resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/eslint-utils@4.7.0':
resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -308,32 +302,36 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/config-array@0.20.0':
resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==}
'@eslint/config-array@0.21.0':
resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/config-helpers@0.2.2':
resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
'@eslint/config-helpers@0.3.0':
resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.14.0':
resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/core@0.15.1':
resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.28.0':
resolution: {integrity: sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==}
'@eslint/js@9.30.0':
resolution: {integrity: sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/plugin-kit@0.3.1':
resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==}
'@eslint/plugin-kit@0.3.3':
resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@fastify/busboy@2.1.1':
@@ -356,8 +354,8 @@ packages:
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
engines: {node: '>=18.18'}
'@humanwhocodes/retry@0.4.2':
resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
'@humanwhocodes/retry@0.4.3':
resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
engines: {node: '>=18.18'}
'@isaacs/cliui@8.0.2':
@@ -517,73 +515,75 @@ packages:
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
'@types/estree@1.0.7':
resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/node@22.15.29':
resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==}
'@types/node@24.0.8':
resolution: {integrity: sha512-WytNrFSgWO/esSH9NbpWUfTMGQwCGIKfCmNlmFDNiI5gGhgMmEA+V1AEvKLeBNvvtBnailJtkrEa2OIISwrVAA==}
'@types/which@3.0.4':
resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==}
'@typescript-eslint/eslint-plugin@8.33.0':
resolution: {integrity: sha512-CACyQuqSHt7ma3Ns601xykeBK/rDeZa3w6IS6UtMQbixO5DWy+8TilKkviGDH6jtWCo8FGRKEK5cLLkPvEammQ==}
'@typescript-eslint/eslint-plugin@8.35.1':
resolution: {integrity: sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.33.0
'@typescript-eslint/parser': ^8.35.1
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/parser@8.33.0':
resolution: {integrity: sha512-JaehZvf6m0yqYp34+RVnihBAChkqeH+tqqhS0GuX1qgPpwLvmTPheKEs6OeCK6hVJgXZHJ2vbjnC9j119auStQ==}
'@typescript-eslint/parser@8.35.1':
resolution: {integrity: sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/project-service@8.33.0':
resolution: {integrity: sha512-d1hz0u9l6N+u/gcrk6s6gYdl7/+pp8yHheRTqP6X5hVDKALEaTn8WfGiit7G511yueBEL3OpOEpD+3/MBdoN+A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/scope-manager@8.33.0':
resolution: {integrity: sha512-LMi/oqrzpqxyO72ltP+dBSP6V0xiUb4saY7WLtxSfiNEBI8m321LLVFU9/QDJxjDQG9/tjSqKz/E3380TEqSTw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.33.0':
resolution: {integrity: sha512-sTkETlbqhEoiFmGr1gsdq5HyVbSOF0145SYDJ/EQmXHtKViCaGvnyLqWFFHtEXoS0J1yU8Wyou2UGmgW88fEug==}
'@typescript-eslint/project-service@8.35.1':
resolution: {integrity: sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/type-utils@8.33.0':
resolution: {integrity: sha512-lScnHNCBqL1QayuSrWeqAL5GmqNdVUQAAMTaCwdYEdWfIrSrOGzyLGRCHXcCixa5NK6i5l0AfSO2oBSjCjf4XQ==}
'@typescript-eslint/scope-manager@8.35.1':
resolution: {integrity: sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.35.1':
resolution: {integrity: sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/type-utils@8.35.1':
resolution: {integrity: sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/types@8.33.0':
resolution: {integrity: sha512-DKuXOKpM5IDT1FA2g9x9x1Ug81YuKrzf4mYX8FAVSNu5Wo/LELHWQyM1pQaDkI42bX15PWl0vNPt1uGiIFUOpg==}
'@typescript-eslint/types@8.35.1':
resolution: {integrity: sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.33.0':
resolution: {integrity: sha512-vegY4FQoB6jL97Tu/lWRsAiUUp8qJTqzAmENH2k59SJhw0Th1oszb9Idq/FyyONLuNqT1OADJPXfyUNOR8SzAQ==}
'@typescript-eslint/typescript-estree@8.35.1':
resolution: {integrity: sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/utils@8.33.0':
resolution: {integrity: sha512-lPFuQaLA9aSNa7D5u2EpRiqdAUhzShwGg/nhpBlc4GR6kcTABttCuyjFs8BcEZ8VWrjCBof/bePhP3Q3fS+Yrw==}
'@typescript-eslint/utils@8.35.1':
resolution: {integrity: sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/visitor-keys@8.33.0':
resolution: {integrity: sha512-7RW7CMYoskiz5OOGAWjJFxgb7c5UNjTG292gYhWeOAcFmYCtVCSqjqSBj5zMhxbXo2JOW95YYrUWJfU0zrpaGQ==}
'@typescript-eslint/visitor-keys@8.35.1':
resolution: {integrity: sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
abort-controller@3.0.0:
@@ -595,8 +595,8 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
acorn@8.14.1:
resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
hasBin: true
@@ -635,11 +635,11 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
brace-expansion@1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
brace-expansion@2.0.1:
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
brace-expansion@2.0.2:
resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@@ -763,20 +763,20 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
eslint-scope@8.3.0:
resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
eslint-scope@8.4.0:
resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint-visitor-keys@3.4.3:
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
eslint-visitor-keys@4.2.0:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
eslint-visitor-keys@4.2.1:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.28.0:
resolution: {integrity: sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==}
eslint@9.30.0:
resolution: {integrity: sha512-iN/SiPxmQu6EVkf+m1qpBxzUhE12YqFLOSySuOyVLJLEF9nzTf+h/1AJYc1JWzCnktggeNrjvQGLngDzXirU6g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -785,8 +785,8 @@ packages:
jiti:
optional: true
espree@10.3.0:
resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
espree@10.4.0:
resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
esquery@1.6.0:
@@ -1157,8 +1157,8 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
prettier@3.5.3:
resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==}
prettier@3.6.2:
resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
engines: {node: '>=14'}
hasBin: true
@@ -1220,8 +1220,8 @@ packages:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
engines: {node: '>=14'}
smol-toml@1.3.4:
resolution: {integrity: sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==}
smol-toml@1.4.0:
resolution: {integrity: sha512-IMxaDA/58wBvkvX77ykQ6e9r6fjs8xbxpz8bMCyVQ/fEFWbA5uJrnaVwDuhLrrANGdd7apRyTPDBvI893Bxu9g==}
engines: {node: '>= 18'}
source-map@0.8.0-beta.0:
@@ -1330,8 +1330,8 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
typescript-eslint@8.33.0:
resolution: {integrity: sha512-5YmNhF24ylCsvdNW2oJwMzTbaeO4bg90KeGtMjUw0AGtHksgEPLRTUil+coHwCfiu4QjVJFnjp94DmU6zV7DhQ==}
typescript-eslint@8.35.1:
resolution: {integrity: sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -1350,8 +1350,8 @@ packages:
ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
undici-types@7.8.0:
resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==}
undici@5.29.0:
resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==}
@@ -1414,8 +1414,8 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
zod@3.25.45:
resolution: {integrity: sha512-kv1swJBZqv98NQibL0oVvkQE8rXT+6qGNM1FpZkFcJG2jnz4vbtu48bgaitp85CaBPLSKXibrEsU7MzJoVoZAA==}
zod@3.25.67:
resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==}
snapshots:
@@ -1646,37 +1646,36 @@ snapshots:
'@esbuild/win32-x64@0.25.0':
optional: true
'@eslint-community/eslint-utils@4.5.1(eslint@9.28.0)':
'@eslint-community/eslint-utils@4.7.0(eslint@9.30.0)':
dependencies:
eslint: 9.28.0
eslint-visitor-keys: 3.4.3
'@eslint-community/eslint-utils@4.7.0(eslint@9.28.0)':
dependencies:
eslint: 9.28.0
eslint: 9.30.0
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
'@eslint/config-array@0.20.0':
'@eslint/config-array@0.21.0':
dependencies:
'@eslint/object-schema': 2.1.6
debug: 4.4.0
debug: 4.4.1
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
'@eslint/config-helpers@0.2.2': {}
'@eslint/config-helpers@0.3.0': {}
'@eslint/core@0.14.0':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/core@0.15.1':
dependencies:
'@types/json-schema': 7.0.15
'@eslint/eslintrc@3.3.1':
dependencies:
ajv: 6.12.6
debug: 4.4.0
espree: 10.3.0
debug: 4.4.1
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
@@ -1686,13 +1685,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@eslint/js@9.28.0': {}
'@eslint/js@9.30.0': {}
'@eslint/object-schema@2.1.6': {}
'@eslint/plugin-kit@0.3.1':
'@eslint/plugin-kit@0.3.3':
dependencies:
'@eslint/core': 0.14.0
'@eslint/core': 0.15.1
levn: 0.4.1
'@fastify/busboy@2.1.1': {}
@@ -1708,7 +1707,7 @@ snapshots:
'@humanwhocodes/retry@0.3.1': {}
'@humanwhocodes/retry@0.4.2': {}
'@humanwhocodes/retry@0.4.3': {}
'@isaacs/cliui@8.0.2':
dependencies:
@@ -1831,29 +1830,29 @@ snapshots:
'@types/eslint__js@9.14.0':
dependencies:
'@eslint/js': 9.28.0
'@eslint/js': 9.30.0
'@types/estree@1.0.6': {}
'@types/estree@1.0.7': {}
'@types/estree@1.0.8': {}
'@types/json-schema@7.0.15': {}
'@types/node@22.15.29':
'@types/node@24.0.8':
dependencies:
undici-types: 6.21.0
undici-types: 7.8.0
'@types/which@3.0.4': {}
'@typescript-eslint/eslint-plugin@8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3)':
'@typescript-eslint/eslint-plugin@8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.33.0(eslint@9.28.0)(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.33.0
'@typescript-eslint/type-utils': 8.33.0(eslint@9.28.0)(typescript@5.8.3)
'@typescript-eslint/utils': 8.33.0(eslint@9.28.0)(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.33.0
eslint: 9.28.0
'@typescript-eslint/parser': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.35.1
'@typescript-eslint/type-utils': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
'@typescript-eslint/utils': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.35.1
eslint: 9.30.0
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
@@ -1862,55 +1861,55 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3)':
'@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.33.0
'@typescript-eslint/types': 8.33.0
'@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.33.0
'@typescript-eslint/scope-manager': 8.35.1
'@typescript-eslint/types': 8.35.1
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
'@typescript-eslint/visitor-keys': 8.35.1
debug: 4.4.1
eslint: 9.28.0
eslint: 9.30.0
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/project-service@8.33.0(typescript@5.8.3)':
'@typescript-eslint/project-service@8.35.1(typescript@5.8.3)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3)
'@typescript-eslint/types': 8.33.0
'@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3)
'@typescript-eslint/types': 8.35.1
debug: 4.4.1
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/scope-manager@8.33.0':
'@typescript-eslint/scope-manager@8.35.1':
dependencies:
'@typescript-eslint/types': 8.33.0
'@typescript-eslint/visitor-keys': 8.33.0
'@typescript-eslint/types': 8.35.1
'@typescript-eslint/visitor-keys': 8.35.1
'@typescript-eslint/tsconfig-utils@8.33.0(typescript@5.8.3)':
'@typescript-eslint/tsconfig-utils@8.35.1(typescript@5.8.3)':
dependencies:
typescript: 5.8.3
'@typescript-eslint/type-utils@8.33.0(eslint@9.28.0)(typescript@5.8.3)':
'@typescript-eslint/type-utils@8.35.1(eslint@9.30.0)(typescript@5.8.3)':
dependencies:
'@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3)
'@typescript-eslint/utils': 8.33.0(eslint@9.28.0)(typescript@5.8.3)
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
'@typescript-eslint/utils': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
debug: 4.4.1
eslint: 9.28.0
eslint: 9.30.0
ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@8.33.0': {}
'@typescript-eslint/types@8.35.1': {}
'@typescript-eslint/typescript-estree@8.33.0(typescript@5.8.3)':
'@typescript-eslint/typescript-estree@8.35.1(typescript@5.8.3)':
dependencies:
'@typescript-eslint/project-service': 8.33.0(typescript@5.8.3)
'@typescript-eslint/tsconfig-utils': 8.33.0(typescript@5.8.3)
'@typescript-eslint/types': 8.33.0
'@typescript-eslint/visitor-keys': 8.33.0
'@typescript-eslint/project-service': 8.35.1(typescript@5.8.3)
'@typescript-eslint/tsconfig-utils': 8.35.1(typescript@5.8.3)
'@typescript-eslint/types': 8.35.1
'@typescript-eslint/visitor-keys': 8.35.1
debug: 4.4.1
fast-glob: 3.3.3
is-glob: 4.0.3
@@ -1921,31 +1920,31 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.33.0(eslint@9.28.0)(typescript@5.8.3)':
'@typescript-eslint/utils@8.35.1(eslint@9.30.0)(typescript@5.8.3)':
dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.28.0)
'@typescript-eslint/scope-manager': 8.33.0
'@typescript-eslint/types': 8.33.0
'@typescript-eslint/typescript-estree': 8.33.0(typescript@5.8.3)
eslint: 9.28.0
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0)
'@typescript-eslint/scope-manager': 8.35.1
'@typescript-eslint/types': 8.35.1
'@typescript-eslint/typescript-estree': 8.35.1(typescript@5.8.3)
eslint: 9.30.0
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/visitor-keys@8.33.0':
'@typescript-eslint/visitor-keys@8.35.1':
dependencies:
'@typescript-eslint/types': 8.33.0
eslint-visitor-keys: 4.2.0
'@typescript-eslint/types': 8.35.1
eslint-visitor-keys: 4.2.1
abort-controller@3.0.0:
dependencies:
event-target-shim: 5.0.1
acorn-jsx@5.3.2(acorn@8.14.1):
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.14.1
acorn: 8.15.0
acorn@8.14.1: {}
acorn@8.15.0: {}
agent-base@7.1.3: {}
@@ -1974,12 +1973,12 @@ snapshots:
balanced-match@1.0.2: {}
brace-expansion@1.1.11:
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
brace-expansion@2.0.1:
brace-expansion@2.0.2:
dependencies:
balanced-match: 1.0.2
@@ -2103,38 +2102,38 @@ snapshots:
escape-string-regexp@4.0.0: {}
eslint-scope@8.3.0:
eslint-scope@8.4.0:
dependencies:
esrecurse: 4.3.0
estraverse: 5.3.0
eslint-visitor-keys@3.4.3: {}
eslint-visitor-keys@4.2.0: {}
eslint-visitor-keys@4.2.1: {}
eslint@9.28.0:
eslint@9.30.0:
dependencies:
'@eslint-community/eslint-utils': 4.5.1(eslint@9.28.0)
'@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0)
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.20.0
'@eslint/config-helpers': 0.2.2
'@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.0
'@eslint/core': 0.14.0
'@eslint/eslintrc': 3.3.1
'@eslint/js': 9.28.0
'@eslint/plugin-kit': 0.3.1
'@eslint/js': 9.30.0
'@eslint/plugin-kit': 0.3.3
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.2
'@types/estree': 1.0.7
'@humanwhocodes/retry': 0.4.3
'@types/estree': 1.0.8
'@types/json-schema': 7.0.15
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.6
debug: 4.4.0
debug: 4.4.1
escape-string-regexp: 4.0.0
eslint-scope: 8.3.0
eslint-visitor-keys: 4.2.0
espree: 10.3.0
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
esquery: 1.6.0
esutils: 2.0.3
fast-deep-equal: 3.1.3
@@ -2152,11 +2151,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
espree@10.3.0:
espree@10.4.0:
dependencies:
acorn: 8.14.1
acorn-jsx: 5.3.2(acorn@8.14.1)
eslint-visitor-keys: 4.2.0
acorn: 8.15.0
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 4.2.1
esquery@1.6.0:
dependencies:
@@ -2400,17 +2399,17 @@ snapshots:
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.11
brace-expansion: 1.1.12
minimatch@9.0.5:
dependencies:
brace-expansion: 2.0.1
brace-expansion: 2.0.2
minipass@7.1.2: {}
mlly@1.7.4:
dependencies:
acorn: 8.14.1
acorn: 8.15.0
pathe: 2.0.3
pkg-types: 1.3.1
ufo: 1.6.1
@@ -2485,7 +2484,7 @@ snapshots:
prelude-ls@1.2.1: {}
prettier@3.5.3: {}
prettier@3.6.2: {}
punycode@2.3.1: {}
@@ -2544,7 +2543,7 @@ snapshots:
signal-exit@4.1.0: {}
smol-toml@1.3.4: {}
smol-toml@1.4.0: {}
source-map@0.8.0-beta.0:
dependencies:
@@ -2658,12 +2657,12 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
typescript-eslint@8.33.0(eslint@9.28.0)(typescript@5.8.3):
typescript-eslint@8.35.1(eslint@9.30.0)(typescript@5.8.3):
dependencies:
'@typescript-eslint/eslint-plugin': 8.33.0(@typescript-eslint/parser@8.33.0(eslint@9.28.0)(typescript@5.8.3))(eslint@9.28.0)(typescript@5.8.3)
'@typescript-eslint/parser': 8.33.0(eslint@9.28.0)(typescript@5.8.3)
'@typescript-eslint/utils': 8.33.0(eslint@9.28.0)(typescript@5.8.3)
eslint: 9.28.0
'@typescript-eslint/eslint-plugin': 8.35.1(@typescript-eslint/parser@8.35.1(eslint@9.30.0)(typescript@5.8.3))(eslint@9.30.0)(typescript@5.8.3)
'@typescript-eslint/parser': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
'@typescript-eslint/utils': 8.35.1(eslint@9.30.0)(typescript@5.8.3)
eslint: 9.30.0
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
@@ -2674,7 +2673,7 @@ snapshots:
ufo@1.6.1: {}
undici-types@6.21.0: {}
undici-types@7.8.0: {}
undici@5.29.0:
dependencies:
@@ -2734,4 +2733,4 @@ snapshots:
yocto-queue@0.1.0: {}
zod@3.25.45: {}
zod@3.25.67: {}
+3 -1
View File
@@ -12,12 +12,14 @@ import { activateEnvironment } from './activate'
const downloadPixi = (source: PixiSource) => {
const url = 'version' in source ? getPixiUrlFromVersion(source.version) : source.url
const auth = 'bearerToken' in source && source.bearerToken ? `Bearer ${source.bearerToken}` : ''
return core.group('Downloading Pixi', () => {
core.debug('Installing pixi')
core.debug(`Downloading pixi from ${url}`)
core.debug(`Using Bearer auth: ${auth ? 'yes' : 'no'}`)
return fs
.mkdir(path.dirname(options.pixiBinPath), { recursive: true })
.then(() => downloadTool(url, options.pixiBinPath))
.then(() => downloadTool(url, options.pixiBinPath, auth))
.then((_downloadPath) => fs.chmod(options.pixiBinPath, 0o755))
.then(() => {
core.info(`Pixi installed to ${options.pixiBinPath}`)
+7 -1
View File
@@ -11,6 +11,7 @@ import which from 'which'
type Inputs = Readonly<{
pixiVersion?: string
pixiUrl?: string
pixiUrlBearerToken?: string
logLevel?: LogLevel
manifestPath?: string
runInstall?: boolean
@@ -39,6 +40,7 @@ export type PixiSource =
}
| {
url: string
bearerToken?: string
}
type Auth = {
@@ -133,6 +135,9 @@ const validateInputs = (inputs: Inputs): void => {
if (inputs.pixiVersion && inputs.pixiUrl) {
throw new Error('You need to specify either pixi-version or pixi-url')
}
if (inputs.pixiUrlBearerToken && !inputs.pixiUrl) {
throw new Error('You need to specify pixi-url when using pixi-url-bearer-token')
}
if (inputs.cacheKey !== undefined && inputs.cache === false) {
throw new Error('Cannot specify cache key without caching')
}
@@ -223,7 +228,7 @@ const inferOptions = (inputs: Inputs): Options => {
const pixiSource = inputs.pixiVersion
? { version: inputs.pixiVersion }
: inputs.pixiUrl
? { url: inputs.pixiUrl }
? { url: inputs.pixiUrl, bearerToken: inputs.pixiUrlBearerToken }
: { version: 'latest' }
const { downloadPixi, pixiBinPath } = determinePixiInstallation(
@@ -340,6 +345,7 @@ const getOptions = () => {
'pixi-version must either be `latest` or a version string matching `vX.Y.Z`.'
),
pixiUrl: parseOrUndefined('pixi-url', z.string().url()),
pixiUrlBearerToken: parseOrUndefined('pixi-url-bearer-token', z.string()),
logLevel: parseOrUndefined(
'log-level',
logLevelSchema,
+20 -20
View File
@@ -1,4 +1,5 @@
import fs from 'fs/promises'
import { existsSync } from 'fs'
import path from 'path'
import os from 'os'
import { exit } from 'process'
@@ -6,32 +7,31 @@ import * as core from '@actions/core'
import { options } from './options'
const removeEmptyParentDirs = (dirPath: string): Promise<void> => {
return fs.readdir(dirPath).then((files) => {
if (files.length === 0) {
core.debug(`Removing empty directory ${dirPath}.`)
return fs.rm(dirPath, { recursive: true }).then(() => {
const parentDir = path.dirname(dirPath)
if (parentDir !== dirPath) {
return removeEmptyParentDirs(parentDir)
}
})
}
return Promise.resolve()
})
if (existsSync(dirPath)) {
return fs.readdir(dirPath).then((files) => {
if (files.length === 0) {
core.debug(`Removing empty directory ${dirPath}.`)
return fs.rm(dirPath, { recursive: true, force: true }).then(() => {
const parentDir = path.dirname(dirPath)
if (parentDir !== dirPath) {
return removeEmptyParentDirs(parentDir)
}
})
}
})
}
return Promise.resolve()
}
const cleanupPixiBin = () => {
const pixiBinPath = options.pixiBinPath
const pixiBinDir = path.dirname(pixiBinPath)
core.debug(`Cleaning up pixi binary ${pixiBinPath}.`)
return fs
.rm(pixiBinPath, {
// Ignore exceptions if pixi binary does not exist anymore,
// to avoid errors if setup-pixi is used multiple times within the same workflow.
// This could, for instance, be the case for composite actions using setup-pixi.
force: true
})
.then(() => removeEmptyParentDirs(pixiBinDir))
if (existsSync(pixiBinPath)) {
return fs.rm(pixiBinPath).then(() => removeEmptyParentDirs(pixiBinDir))
} else {
return removeEmptyParentDirs(pixiBinDir)
}
}
const cleanupEnv = () => {