Fix merge conflicts with main

This commit is contained in:
Luc Perkins 2024-05-22 15:53:51 -03:00
commit db2913f100
No known key found for this signature in database
GPG key ID: 16DB1108FB591835
7 changed files with 375 additions and 308 deletions

View file

@ -32,6 +32,8 @@ jobs:
- uses: actions/checkout@v4
- name: Check flake.lock
uses: ./
with:
_internal-strict-mode: true
run-x86_64-linux-dirty:
name: Run x86_64 Linux (dirty)
@ -43,6 +45,7 @@ jobs:
uses: ./
with:
flake-lock-path: flake.dirty.lock
_internal-strict-mode: true
run-x86_64-darwin-clean:
name: Run x86_64 Darwin (clean)
@ -52,6 +55,8 @@ jobs:
- uses: actions/checkout@v4
- name: Check flake.lock
uses: ./
with:
_internal-strict-mode: true
run-x86_64-darwin-dirty:
name: Run x86_64 Darwin (dirty)
@ -63,3 +68,4 @@ jobs:
uses: ./
with:
flake-lock-path: flake.dirty.lock
_internal-strict-mode: true

View file

@ -47,6 +47,9 @@ inputs:
description: |
Run a version of flake-checker from somewhere already on disk. Intended only for testing the Action.
required: false
_internal-strict-mode:
description: Whether to fail when any errors are thrown. Used only to test the Action; do not set this in your own workflows.
default: false
runs:
using: "node20"
main: "dist/index.js"

317
dist/index.js generated vendored
View file

@ -39513,7 +39513,7 @@ module.exports =
{
parallel : __nccwpck_require__(644),
serial : __nccwpck_require__(4501),
serialOrdered : __nccwpck_require__(2362)
serialOrdered : __nccwpck_require__(3958)
};
@ -39844,7 +39844,7 @@ function parallel(list, iterator, callback)
/***/ 4501:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
var serialOrdered = __nccwpck_require__(2362);
var serialOrdered = __nccwpck_require__(3958);
// Public API
module.exports = serial;
@ -39865,7 +39865,7 @@ function serial(list, iterator, callback)
/***/ }),
/***/ 2362:
/***/ 3958:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
var iterate = __nccwpck_require__(5748)
@ -93700,6 +93700,8 @@ const got = source_create(defaults);
;// CONCATENATED MODULE: external "node:child_process"
const external_node_child_process_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:child_process");
;// CONCATENATED MODULE: external "node:fs/promises"
const promises_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:fs/promises");
;// CONCATENATED MODULE: external "node:path"
@ -93708,7 +93710,7 @@ const external_node_path_namespaceObject = __WEBPACK_EXTERNAL_createRequire(impo
const external_node_stream_promises_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:stream/promises");
;// CONCATENATED MODULE: external "node:zlib"
const external_node_zlib_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:zlib");
;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@97979f48241e807d76bd9b8cbfc69a245f04894b_pj2fuot4efihj4fvjjgwov2aue/node_modules/detsys-ts/dist/index.js
;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@ed02129aed8e4d6402d920152652877189bece70_3whmnlhrx56zhgtsjnkrhnutfu/node_modules/detsys-ts/dist/index.js
var __defProp = Object.defineProperty;
var __export = (target, all) => {
for (var name in all)
@ -94012,45 +94014,6 @@ function hashEnvironmentVariables(prefix, variables) {
return `${prefix}-${hash.digest("hex")}`;
}
// src/platform.ts
var platform_exports = {};
__export(platform_exports, {
getArchOs: () => getArchOs,
getNixPlatform: () => getNixPlatform
});
function getArchOs() {
const envArch = process.env.RUNNER_ARCH;
const envOs = process.env.RUNNER_OS;
if (envArch && envOs) {
return `${envArch}-${envOs}`;
} else {
core.error(
`Can't identify the platform: RUNNER_ARCH or RUNNER_OS undefined (${envArch}-${envOs})`
);
throw new Error("RUNNER_ARCH and/or RUNNER_OS is not defined");
}
}
function getNixPlatform(archOs) {
const archOsMap = /* @__PURE__ */ new Map([
["X64-macOS", "x86_64-darwin"],
["ARM64-macOS", "aarch64-darwin"],
["X64-Linux", "x86_64-linux"],
["ARM64-Linux", "aarch64-linux"]
]);
const mappedTo = archOsMap.get(archOs);
if (mappedTo) {
return mappedTo;
} else {
core.error(
`ArchOs (${archOs}) doesn't map to a supported Nix platform.`
);
throw new Error(
`Cannot convert ArchOs (${archOs}) to a supported Nix platform.`
);
}
}
// src/inputs.ts
var inputs_exports = {};
__export(inputs_exports, {
@ -94115,6 +94078,45 @@ var getStringOrUndefined = (name) => {
}
};
// src/platform.ts
var platform_exports = {};
__export(platform_exports, {
getArchOs: () => getArchOs,
getNixPlatform: () => getNixPlatform
});
function getArchOs() {
const envArch = process.env.RUNNER_ARCH;
const envOs = process.env.RUNNER_OS;
if (envArch && envOs) {
return `${envArch}-${envOs}`;
} else {
core.error(
`Can't identify the platform: RUNNER_ARCH or RUNNER_OS undefined (${envArch}-${envOs})`
);
throw new Error("RUNNER_ARCH and/or RUNNER_OS is not defined");
}
}
function getNixPlatform(archOs) {
const archOsMap = /* @__PURE__ */ new Map([
["X64-macOS", "x86_64-darwin"],
["ARM64-macOS", "aarch64-darwin"],
["X64-Linux", "x86_64-linux"],
["ARM64-Linux", "aarch64-linux"]
]);
const mappedTo = archOsMap.get(archOs);
if (mappedTo) {
return mappedTo;
} else {
core.error(
`ArchOs (${archOs}) doesn't map to a supported Nix platform.`
);
throw new Error(
`Cannot convert ArchOs (${archOs}) to a supported Nix platform.`
);
}
}
// src/sourcedef.ts
function constructSourceParameters(legacyPrefix) {
@ -94161,27 +94163,44 @@ function noisilyGetInput(suffix, legacyPrefix) {
var DEFAULT_IDS_HOST = "https://install.determinate.systems";
var IDS_HOST = process.env["IDS_HOST"] ?? DEFAULT_IDS_HOST;
var EVENT_EXCEPTION = "exception";
var EVENT_ARTIFACT_CACHE_HIT = "artifact_cache_hit";
var EVENT_ARTIFACT_CACHE_MISS = "artifact_cache_miss";
var EVENT_ARTIFACT_CACHE_PERSIST = "artifact_cache_persist";
var EVENT_PREFLIGHT_REQUIRE_NIX_DENIED = "preflight-require-nix-denied";
var FACT_ENDED_WITH_EXCEPTION = "ended_with_exception";
var FACT_FINAL_EXCEPTION = "final_exception";
var FACT_OS = "$os";
var FACT_OS_VERSION = "$os_version";
var FACT_SOURCE_URL = "source_url";
var FACT_SOURCE_URL_ETAG = "source_url_etag";
var FACT_NIX_LOCATION = "nix_location";
var FACT_NIX_STORE_TRUST = "nix_store_trusted";
var FACT_NIX_STORE_VERSION = "nix_store_version";
var FACT_NIX_STORE_CHECK_METHOD = "nix_store_check_method";
var FACT_NIX_STORE_CHECK_ERROR = "nix_store_check_error";
var IdsToolbox = class {
var STATE_KEY_EXECUTION_PHASE = "detsys_action_execution_phase";
var STATE_KEY_NIX_NOT_FOUND = "detsys_action_nix_not_found";
var STATE_NOT_FOUND = "not-found";
var DetSysAction = class {
determineExecutionPhase() {
const currentPhase = core.getState(STATE_KEY_EXECUTION_PHASE);
if (currentPhase === "") {
core.saveState(STATE_KEY_EXECUTION_PHASE, "post");
return "main";
} else {
return "post";
}
}
constructor(actionOptions) {
this.actionOptions = makeOptionsConfident(actionOptions);
this.hookMain = void 0;
this.hookPost = void 0;
this.exceptionAttachments = /* @__PURE__ */ new Map();
this.nixStoreTrust = "unknown";
this.strictMode = getBool("_internal-strict-mode");
this.events = [];
this.client = got_dist_source.extend({
retry: {
@ -94225,25 +94244,19 @@ var IdsToolbox = class {
{
getDetails().then((details) => {
if (details.name !== "unknown") {
this.addFact("$os", details.name);
this.addFact(FACT_OS, details.name);
}
if (details.version !== "unknown") {
this.addFact("$os_version", details.version);
this.addFact(FACT_OS_VERSION, details.version);
}
}).catch((e) => {
core.debug(`Failure getting platform details: ${e}`);
core.debug(
`Failure getting platform details: ${stringifyError(e)}`
);
});
}
{
const phase = core.getState("idstoolbox_execution_phase");
if (phase === "") {
core.saveState("idstoolbox_execution_phase", "post");
this.executionPhase = "main";
} else {
this.executionPhase = "post";
}
this.executionPhase = this.determineExecutionPhase();
this.facts.execution_phase = this.executionPhase;
}
if (this.actionOptions.fetchStyle === "gh-env-style") {
this.architectureFetchSuffix = this.archOs;
} else if (this.actionOptions.fetchStyle === "nix-style") {
@ -94271,20 +94284,31 @@ var IdsToolbox = class {
stapleFile(name, location) {
this.exceptionAttachments.set(name, location);
}
onMain(callback) {
this.hookMain = callback;
setExecutionPhase() {
const phase = core.getState(STATE_KEY_EXECUTION_PHASE);
if (phase === "") {
core.saveState(STATE_KEY_EXECUTION_PHASE, "post");
this.executionPhase = "main";
} else {
this.executionPhase = "post";
}
onPost(callback) {
this.hookPost = callback;
this.facts.execution_phase = this.executionPhase;
}
/**
* Execute the Action as defined.
*/
execute() {
this.executeAsync().catch((error2) => {
console.log(error2);
process.exitCode = 1;
});
}
stringifyError(error2) {
return error2 instanceof Error || typeof error2 == "string" ? error2.toString() : JSON.stringify(error2);
// Whether the
get isMain() {
return this.executionPhase === "main";
}
get isPost() {
return this.executionPhase === "post";
}
async executeAsync() {
try {
@ -94292,41 +94316,41 @@ var IdsToolbox = class {
this.getCorrelationHashes()
);
if (!await this.preflightRequireNix()) {
this.recordEvent("preflight-require-nix-denied");
this.recordEvent(EVENT_PREFLIGHT_REQUIRE_NIX_DENIED);
return;
} else {
await this.preflightNixStoreInfo();
this.addFact(FACT_NIX_STORE_TRUST, this.nixStoreTrust);
}
if (this.executionPhase === "main" && this.hookMain) {
await this.hookMain();
} else if (this.executionPhase === "post" && this.hookPost) {
await this.hookPost();
if (this.isMain) {
await this.main();
} else if (this.isPost) {
await this.post();
}
this.addFact(FACT_ENDED_WITH_EXCEPTION, false);
} catch (error2) {
} catch (e) {
this.addFact(FACT_ENDED_WITH_EXCEPTION, true);
const reportable = this.stringifyError(error2);
const reportable = stringifyError(e);
this.addFact(FACT_FINAL_EXCEPTION, reportable);
if (this.executionPhase === "post") {
if (this.isPost) {
core.warning(reportable);
} else {
core.setFailed(reportable);
}
const do_gzip = (0,external_node_util_.promisify)(external_node_zlib_namespaceObject.gzip);
const doGzip = (0,external_node_util_.promisify)(external_node_zlib_namespaceObject.gzip);
const exceptionContext = /* @__PURE__ */ new Map();
for (const [attachmentLabel, filePath] of this.exceptionAttachments) {
try {
const logText = (0,external_node_fs_namespaceObject.readFileSync)(filePath);
const buf = await do_gzip(logText);
const buf = await doGzip(logText);
exceptionContext.set(
`staple_value_${attachmentLabel}`,
buf.toString("base64")
);
} catch (e) {
} catch (innerError) {
exceptionContext.set(
`staple_failure_${attachmentLabel}`,
this.stringifyError(e)
stringifyError(innerError)
);
}
}
@ -94357,7 +94381,24 @@ var IdsToolbox = class {
uuid: (0,external_node_crypto_namespaceObject.randomUUID)()
});
}
async fetch() {
/**
* Fetches a file in `.xz` format, imports its contents into the Nix store,
* and returns the path of the executable at `/nix/store/STORE_PATH/bin/${bin}`.
*/
async unpackClosure(bin) {
const artifact = this.fetchArtifact();
const { stdout } = await (0,external_node_util_.promisify)(external_node_child_process_namespaceObject.exec)(
`cat "${artifact}" | xz -d | nix-store --import`
);
const paths = stdout.split(external_node_os_.EOL);
const lastPath = paths.at(-2);
return `${lastPath}/bin/${bin}`;
}
/**
* Fetch an artifact, such as a tarball, from the URL determined by the `source-*`
* inputs and other factors.
*/
async fetchArtifact() {
core.startGroup(
`Downloading ${this.actionOptions.name} for ${this.architectureFetchSuffix}`
);
@ -94401,7 +94442,7 @@ var IdsToolbox = class {
try {
await this.saveCachedVersion(v, destFile);
} catch (e) {
core.debug(`Error caching the artifact: ${e}`);
core.debug(`Error caching the artifact: ${stringifyError(e)}`);
}
}
return destFile;
@ -94409,11 +94450,24 @@ var IdsToolbox = class {
core.endGroup();
}
}
/**
* Fetches the executable at the URL determined by the `source-*` inputs and
* other facts, `chmod`s it, and returns the path to the executable on disk.
*/
async fetchExecutable() {
const binaryPath = await this.fetch();
const binaryPath = await this.fetchArtifact();
await (0,promises_namespaceObject.chmod)(binaryPath, promises_namespaceObject.constants.S_IXUSR | promises_namespaceObject.constants.S_IXGRP);
return binaryPath;
}
/**
* A helper function for failing on error only if strict mode is enabled.
* This is intended only for CI environments testing Actions themselves.
*/
failOnError(msg) {
if (this.strictMode) {
core.setFailed(`strict mode failure: ${msg}`);
}
}
async complete() {
this.recordEvent(`complete_${this.executionPhase}`);
await this.submitEvents();
@ -94507,29 +94561,33 @@ var IdsToolbox = class {
core.debug(`Nix not at ${candidateNix}`);
}
}
this.addFact("nix_location", nixLocation || "");
this.addFact(FACT_NIX_LOCATION, nixLocation || "");
if (this.actionOptions.requireNix === "ignore") {
return true;
}
const currentNotFoundState = core.getState(
"idstoolbox_nix_not_found"
);
if (currentNotFoundState === "not-found") {
const currentNotFoundState = core.getState(STATE_KEY_NIX_NOT_FOUND);
if (currentNotFoundState === STATE_NOT_FOUND) {
return false;
}
if (nixLocation !== void 0) {
return true;
}
core.saveState("idstoolbox_nix_not_found", "not-found");
core.saveState(STATE_KEY_NIX_NOT_FOUND, STATE_NOT_FOUND);
switch (this.actionOptions.requireNix) {
case "fail":
core.setFailed(
"This action can only be used when Nix is installed. Add `- uses: DeterminateSystems/nix-installer-action@main` earlier in your workflow."
[
"This action can only be used when Nix is installed.",
"Add `- uses: DeterminateSystems/nix-installer-action@main` earlier in your workflow."
].join(" ")
);
break;
case "warn":
core.warning(
"This action is in no-op mode because Nix is not installed. Add `- uses: DeterminateSystems/nix-installer-action@main` earlier in your workflow."
[
"This action is in no-op mode because Nix is not installed.",
"Add `- uses: DeterminateSystems/nix-installer-action@main` earlier in your workflow."
].join(" ")
);
break;
}
@ -94572,11 +94630,11 @@ var IdsToolbox = class {
}
this.addFact(FACT_NIX_STORE_VERSION, JSON.stringify(parsed.version));
} catch (e) {
this.addFact(FACT_NIX_STORE_CHECK_ERROR, this.stringifyError(e));
this.addFact(FACT_NIX_STORE_CHECK_ERROR, stringifyError(e));
}
}
async submitEvents() {
if (!this.actionOptions.diagnosticsUrl) {
if (this.actionOptions.diagnosticsUrl === void 0) {
core.debug(
"Diagnostics are disabled. Not sending the following events:"
);
@ -94592,8 +94650,10 @@ var IdsToolbox = class {
await this.client.post(this.actionOptions.diagnosticsUrl, {
json: batch
});
} catch (error2) {
core.debug(`Error submitting diagnostics event: ${error2}`);
} catch (e) {
core.debug(
`Error submitting diagnostics event: ${stringifyError(e)}`
);
}
this.events = [];
}
@ -94602,6 +94662,9 @@ var IdsToolbox = class {
return external_node_path_namespaceObject.join(_tmpdir, `${this.actionOptions.name}-${(0,external_node_crypto_namespaceObject.randomUUID)()}`);
}
};
function stringifyError(error2) {
return error2 instanceof Error || typeof error2 == "string" ? error2.toString() : JSON.stringify(error2);
}
function makeOptionsConfident(actionOptions) {
const idsProjectName = actionOptions.idsProjectName ?? actionOptions.name;
const finalOpts = {
@ -94637,7 +94700,7 @@ function determineDiagnosticsUrl(idsProjectName, urlOption) {
return mungeDiagnosticEndpoint(new URL(providedDiagnosticEndpoint));
} catch (e) {
core.info(
`User-provided diagnostic endpoint ignored: not a valid URL: ${e}`
`User-provided diagnostic endpoint ignored: not a valid URL: ${stringifyError(e)}`
);
}
}
@ -94649,7 +94712,7 @@ function determineDiagnosticsUrl(idsProjectName, urlOption) {
return diagnosticUrl;
} catch (e) {
core.info(
`Generated diagnostic endpoint ignored: not a valid URL: ${e}`
`Generated diagnostic endpoint ignored: not a valid URL: ${stringifyError(e)}`
);
}
return void 0;
@ -94670,7 +94733,9 @@ function mungeDiagnosticEndpoint(inputUrl) {
inputUrl.password = currentIdsHost.password;
return inputUrl;
} catch (e) {
core.info(`Default or overridden IDS host isn't a valid URL: ${e}`);
core.info(
`Default or overridden IDS host isn't a valid URL: ${stringifyError(e)}`
);
}
return inputUrl;
}
@ -94692,9 +94757,9 @@ function mungeDiagnosticEndpoint(inputUrl) {
var EVENT_EXECUTION_FAILURE = "execution_failure";
var FlakeCheckerAction = class {
var FlakeCheckerAction = class extends DetSysAction {
constructor() {
const options = {
super({
name: "flake-checker",
fetchStyle: "gh-env-style",
diagnosticsUrl: new URL(
@ -94702,8 +94767,7 @@ var FlakeCheckerAction = class {
),
// We don't need Nix in this Action because we fetch a static binary using curl and run it
requireNix: "ignore"
};
this.idslib = new IdsToolbox(options);
});
this.flakeLockPath = inputs_exports.getString("flake-lock-path");
this.nixpkgsKeys = inputs_exports.getString("nixpkgs-keys");
this.checkOutdated = inputs_exports.getBool("check-outdated");
@ -94713,6 +94777,34 @@ var FlakeCheckerAction = class {
this.failMode = inputs_exports.getBool("fail-mode");
this.sendStatistics = inputs_exports.getBool("send-statistics");
}
async main() {
await this.checkFlake();
}
// No post step
async post() {
}
async checkFlake() {
const binaryPath = await this.fetchExecutable();
const executionEnv = await this.executionEnvironment();
core.debug(
`Execution environment: ${JSON.stringify(executionEnv, null, 4)}`
);
const exitCode = await exec.exec(binaryPath, [], {
env: {
...executionEnv,
...process.env
// To get $PATH, etc
},
ignoreReturnCode: true
});
if (exitCode !== 0) {
this.recordEvent(EVENT_EXECUTION_FAILURE, {
exitCode
});
core.setFailed(`Non-zero exit code of \`${exitCode}\`.`);
}
return exitCode;
}
async executionEnvironment() {
const executionEnv = {};
executionEnv.NIX_FLAKE_CHECKER_FLAKE_LOCK_PATH = this.flakeLockPath;
@ -94737,36 +94829,9 @@ var FlakeCheckerAction = class {
}
return executionEnv;
}
async check() {
const sourceBinary = inputs_exports.getStringOrNull("source-binary");
const binaryPath = sourceBinary !== null && sourceBinary !== "" ? sourceBinary : await this.idslib.fetchExecutable();
const executionEnv = await this.executionEnvironment();
core.debug(
`Execution environment: ${JSON.stringify(executionEnv, null, 4)}`
);
const exitCode = await exec.exec(binaryPath, [], {
env: {
...executionEnv,
...process.env
// To get $PATH, etc
},
ignoreReturnCode: true
});
if (exitCode !== 0) {
this.idslib.recordEvent(EVENT_EXECUTION_FAILURE, {
exitCode
});
core.setFailed(`Non-zero exit code of \`${exitCode}\`.`);
}
return exitCode;
}
};
function main() {
const checker = new FlakeCheckerAction();
checker.idslib.onMain(async () => {
await checker.check();
});
checker.idslib.execute();
new FlakeCheckerAction().execute();
}
main();
//# sourceMappingURL=index.js.map

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

View file

@ -31,7 +31,7 @@
"devDependencies": {
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
"@types/node": "^20.12.12",
"@typescript-eslint/eslint-plugin": "^7.9.0",
"@typescript-eslint/eslint-plugin": "^7.10.0",
"@vercel/ncc": "^0.38.1",
"eslint": "^8.57.0",
"eslint-import-resolver-typescript": "^3.6.1",

260
pnpm-lock.yaml generated
View file

@ -13,7 +13,7 @@ dependencies:
version: 1.1.1
detsys-ts:
specifier: github:DeterminateSystems/detsys-ts
version: github.com/DeterminateSystems/detsys-ts/97979f48241e807d76bd9b8cbfc69a245f04894b
version: github.com/DeterminateSystems/detsys-ts/ed02129aed8e4d6402d920152652877189bece70
devDependencies:
'@trivago/prettier-plugin-sort-imports':
@ -23,8 +23,8 @@ devDependencies:
specifier: ^20.12.12
version: 20.12.12
'@typescript-eslint/eslint-plugin':
specifier: ^7.9.0
version: 7.9.0(@typescript-eslint/parser@7.9.0)(eslint@8.57.0)(typescript@5.4.5)
specifier: ^7.10.0
version: 7.10.0(@typescript-eslint/parser@7.10.0)(eslint@8.57.0)(typescript@5.4.5)
'@vercel/ncc':
specifier: ^0.38.1
version: 0.38.1
@ -33,13 +33,13 @@ devDependencies:
version: 8.57.0
eslint-import-resolver-typescript:
specifier: ^3.6.1
version: 3.6.1(@typescript-eslint/parser@7.9.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
version: 3.6.1(@typescript-eslint/parser@7.10.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
eslint-plugin-github:
specifier: ^4.10.2
version: 4.10.2(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)(typescript@5.4.5)
eslint-plugin-import:
specifier: ^2.29.1
version: 2.29.1(@typescript-eslint/parser@7.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
version: 2.29.1(@typescript-eslint/parser@7.10.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-prettier:
specifier: ^5.1.3
version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5)
@ -705,128 +705,128 @@ packages:
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
dev: true
/@rollup/rollup-android-arm-eabi@4.17.2:
resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==}
/@rollup/rollup-android-arm-eabi@4.18.0:
resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-android-arm64@4.17.2:
resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==}
/@rollup/rollup-android-arm64@4.18.0:
resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-darwin-arm64@4.17.2:
resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==}
/@rollup/rollup-darwin-arm64@4.18.0:
resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-darwin-x64@4.17.2:
resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==}
/@rollup/rollup-darwin-x64@4.18.0:
resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm-gnueabihf@4.17.2:
resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==}
/@rollup/rollup-linux-arm-gnueabihf@4.18.0:
resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm-musleabihf@4.17.2:
resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==}
/@rollup/rollup-linux-arm-musleabihf@4.18.0:
resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm64-gnu@4.17.2:
resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==}
/@rollup/rollup-linux-arm64-gnu@4.18.0:
resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-arm64-musl@4.17.2:
resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==}
/@rollup/rollup-linux-arm64-musl@4.18.0:
resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-powerpc64le-gnu@4.17.2:
resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==}
/@rollup/rollup-linux-powerpc64le-gnu@4.18.0:
resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==}
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-riscv64-gnu@4.17.2:
resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==}
/@rollup/rollup-linux-riscv64-gnu@4.18.0:
resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-s390x-gnu@4.17.2:
resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==}
/@rollup/rollup-linux-s390x-gnu@4.18.0:
resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==}
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-x64-gnu@4.17.2:
resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==}
/@rollup/rollup-linux-x64-gnu@4.18.0:
resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-linux-x64-musl@4.17.2:
resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==}
/@rollup/rollup-linux-x64-musl@4.18.0:
resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-arm64-msvc@4.17.2:
resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==}
/@rollup/rollup-win32-arm64-msvc@4.18.0:
resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-ia32-msvc@4.17.2:
resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==}
/@rollup/rollup-win32-ia32-msvc@4.18.0:
resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/@rollup/rollup-win32-x64-msvc@4.17.2:
resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==}
/@rollup/rollup-win32-x64-msvc@4.18.0:
resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==}
cpu: [x64]
os: [win32]
requiresBuild: true
@ -899,8 +899,8 @@ packages:
'@types/node': 20.12.12
dev: false
/@typescript-eslint/eslint-plugin@7.9.0(@typescript-eslint/parser@7.9.0)(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==}
/@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0)(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
@ -911,11 +911,11 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/type-utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.9.0
'@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.10.0
'@typescript-eslint/type-utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.10.0
eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.1
@ -926,8 +926,8 @@ packages:
- supports-color
dev: true
/@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==}
/@typescript-eslint/parser@7.10.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@ -936,10 +936,10 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.9.0
'@typescript-eslint/scope-manager': 7.10.0
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.10.0
debug: 4.3.4
eslint: 8.57.0
typescript: 5.4.5
@ -947,16 +947,16 @@ packages:
- supports-color
dev: true
/@typescript-eslint/scope-manager@7.9.0:
resolution: {integrity: sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==}
/@typescript-eslint/scope-manager@7.10.0:
resolution: {integrity: sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==}
engines: {node: ^18.18.0 || >=20.0.0}
dependencies:
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/visitor-keys': 7.9.0
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/visitor-keys': 7.10.0
dev: true
/@typescript-eslint/type-utils@7.9.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==}
/@typescript-eslint/type-utils@7.10.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@ -965,8 +965,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
debug: 4.3.4
eslint: 8.57.0
ts-api-utils: 1.3.0(typescript@5.4.5)
@ -975,13 +975,13 @@ packages:
- supports-color
dev: true
/@typescript-eslint/types@7.9.0:
resolution: {integrity: sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==}
/@typescript-eslint/types@7.10.0:
resolution: {integrity: sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==}
engines: {node: ^18.18.0 || >=20.0.0}
dev: true
/@typescript-eslint/typescript-estree@7.9.0(typescript@5.4.5):
resolution: {integrity: sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==}
/@typescript-eslint/typescript-estree@7.10.0(typescript@5.4.5):
resolution: {integrity: sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
@ -989,8 +989,8 @@ packages:
typescript:
optional: true
dependencies:
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/visitor-keys': 7.9.0
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/visitor-keys': 7.10.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
@ -1002,27 +1002,27 @@ packages:
- supports-color
dev: true
/@typescript-eslint/utils@7.9.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==}
/@typescript-eslint/utils@7.10.0(eslint@8.57.0)(typescript@5.4.5):
resolution: {integrity: sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@typescript-eslint/scope-manager': 7.9.0
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.10.0
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
eslint: 8.57.0
transitivePeerDependencies:
- supports-color
- typescript
dev: true
/@typescript-eslint/visitor-keys@7.9.0:
resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==}
/@typescript-eslint/visitor-keys@7.10.0:
resolution: {integrity: sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==}
engines: {node: ^18.18.0 || >=20.0.0}
dependencies:
'@typescript-eslint/types': 7.9.0
'@typescript-eslint/types': 7.10.0
eslint-visitor-keys: 3.4.3
dev: true
@ -1233,11 +1233,11 @@ packages:
balanced-match: 1.0.2
dev: true
/braces@3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
/braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
dependencies:
fill-range: 7.0.1
fill-range: 7.1.1
dev: true
/browserslist@4.23.0:
@ -1245,8 +1245,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001620
electron-to-chromium: 1.4.774
caniuse-lite: 1.0.30001621
electron-to-chromium: 1.4.777
node-releases: 2.0.14
update-browserslist-db: 1.0.16(browserslist@4.23.0)
dev: true
@ -1300,8 +1300,8 @@ packages:
engines: {node: '>=6'}
dev: true
/caniuse-lite@1.0.30001620:
resolution: {integrity: sha512-WJvYsOjd1/BYUY6SNGUosK9DUidBPDTnOARHp3fSmFO1ekdxaY6nKRttEVrfMmYi80ctS0kz1wiWmm14fVc3ew==}
/caniuse-lite@1.0.30001621:
resolution: {integrity: sha512-+NLXZiviFFKX0fk8Piwv3PfLPGtRqJeq2TiNoUff/qB5KJgwecJTvCXDpmlyP/eCI/GUEmp/h/y5j0yckiiZrA==}
dev: true
/chalk@2.4.2:
@ -1326,7 +1326,7 @@ packages:
engines: {node: '>= 8.10.0'}
dependencies:
anymatch: 3.1.3
braces: 3.0.2
braces: 3.0.3
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
@ -1504,8 +1504,8 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: true
/electron-to-chromium@1.4.774:
resolution: {integrity: sha512-132O1XCd7zcTkzS3FgkAzKmnBuNJjK8WjcTtNuoylj7MYbqw5eXehjQ5OK91g0zm7OTKIPeaAG4CPoRfD9M1Mg==}
/electron-to-chromium@1.4.777:
resolution: {integrity: sha512-n02NCwLJ3wexLfK/yQeqfywCblZqLcXphzmid5e8yVPdtEcida7li0A5WQKghHNG0FeOMCzeFOzEbtAh5riXFw==}
dev: true
/emoji-regex@8.0.0:
@ -1704,7 +1704,7 @@ packages:
- supports-color
dev: true
/eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.9.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0):
/eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.10.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0):
resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@ -1714,8 +1714,8 @@ packages:
debug: 4.3.4
enhanced-resolve: 5.16.1
eslint: 8.57.0
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.10.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.10.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
fast-glob: 3.3.2
get-tsconfig: 4.7.5
is-core-module: 2.13.1
@ -1727,7 +1727,7 @@ packages:
- supports-color
dev: true
/eslint-module-utils@2.8.1(@typescript-eslint/parser@7.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
/eslint-module-utils@2.8.1(@typescript-eslint/parser@7.10.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
engines: {node: '>=4'}
peerDependencies:
@ -1748,11 +1748,11 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
'@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
debug: 3.2.7
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.9.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.10.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
transitivePeerDependencies:
- supports-color
dev: true
@ -1796,8 +1796,8 @@ packages:
eslint: ^8.0.1
dependencies:
'@github/browserslist-config': 1.0.0
'@typescript-eslint/eslint-plugin': 7.9.0(@typescript-eslint/parser@7.9.0)(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/eslint-plugin': 7.10.0(@typescript-eslint/parser@7.10.0)(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
aria-query: 5.3.0
eslint: 8.57.0
eslint-config-prettier: 9.1.0(eslint@8.57.0)
@ -1805,7 +1805,7 @@ packages:
eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0)
eslint-plugin-filenames: 1.3.2(eslint@8.57.0)
eslint-plugin-i18n-text: 1.0.1(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.10.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0)
eslint-plugin-no-only-tests: 3.1.0
eslint-plugin-prettier: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5)
@ -1829,7 +1829,7 @@ packages:
eslint: 8.57.0
dev: true
/eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.9.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
/eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.10.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
engines: {node: '>=4'}
peerDependencies:
@ -1839,7 +1839,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
'@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.10.0(eslint@8.57.0)(typescript@5.4.5)
array-includes: 3.1.8
array.prototype.findlastindex: 1.2.5
array.prototype.flat: 1.3.2
@ -1848,7 +1848,7 @@ packages:
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.9.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.10.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
hasown: 2.0.2
is-core-module: 2.13.1
is-glob: 4.0.3
@ -2054,7 +2054,7 @@ packages:
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
micromatch: 4.0.7
dev: true
/fast-json-stable-stringify@2.1.0:
@ -2078,8 +2078,8 @@ packages:
flat-cache: 3.2.0
dev: true
/fill-range@7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
/fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
dependencies:
to-regex-range: 5.0.1
@ -2231,13 +2231,13 @@ packages:
is-glob: 4.0.3
dev: true
/glob@10.3.15:
resolution: {integrity: sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==}
/glob@10.3.16:
resolution: {integrity: sha512-JDKXl1DiuuHJ6fVS2FXjownaavciiHNUU4mOvV/B793RLh05vZL1rcPnCSaOgv1hDT6RDlY7AB7ZUvFYAtPgAw==}
engines: {node: '>=16 || 14 >=14.18'}
hasBin: true
dependencies:
foreground-child: 3.1.1
jackspeak: 2.3.6
jackspeak: 3.1.2
minimatch: 9.0.4
minipass: 7.1.1
path-scurry: 1.11.1
@ -2622,8 +2622,8 @@ packages:
set-function-name: 2.0.2
dev: true
/jackspeak@2.3.6:
resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
/jackspeak@3.1.2:
resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==}
engines: {node: '>=14'}
dependencies:
'@isaacs/cliui': 8.0.2
@ -2690,15 +2690,15 @@ packages:
dependencies:
json-buffer: 3.0.1
/language-subtag-registry@0.3.22:
resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
/language-subtag-registry@0.3.23:
resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
dev: true
/language-tags@1.0.9:
resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
engines: {node: '>=0.10'}
dependencies:
language-subtag-registry: 0.3.22
language-subtag-registry: 0.3.23
dev: true
/levn@0.4.1:
@ -2777,11 +2777,11 @@ packages:
engines: {node: '>= 8'}
dev: true
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
/micromatch@4.0.7:
resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
engines: {node: '>=8.6'}
dependencies:
braces: 3.0.2
braces: 3.0.3
picomatch: 2.3.1
dev: true
@ -3182,29 +3182,29 @@ packages:
glob: 7.2.3
dev: true
/rollup@4.17.2:
resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==}
/rollup@4.18.0:
resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
dependencies:
'@types/estree': 1.0.5
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.17.2
'@rollup/rollup-android-arm64': 4.17.2
'@rollup/rollup-darwin-arm64': 4.17.2
'@rollup/rollup-darwin-x64': 4.17.2
'@rollup/rollup-linux-arm-gnueabihf': 4.17.2
'@rollup/rollup-linux-arm-musleabihf': 4.17.2
'@rollup/rollup-linux-arm64-gnu': 4.17.2
'@rollup/rollup-linux-arm64-musl': 4.17.2
'@rollup/rollup-linux-powerpc64le-gnu': 4.17.2
'@rollup/rollup-linux-riscv64-gnu': 4.17.2
'@rollup/rollup-linux-s390x-gnu': 4.17.2
'@rollup/rollup-linux-x64-gnu': 4.17.2
'@rollup/rollup-linux-x64-musl': 4.17.2
'@rollup/rollup-win32-arm64-msvc': 4.17.2
'@rollup/rollup-win32-ia32-msvc': 4.17.2
'@rollup/rollup-win32-x64-msvc': 4.17.2
'@rollup/rollup-android-arm-eabi': 4.18.0
'@rollup/rollup-android-arm64': 4.18.0
'@rollup/rollup-darwin-arm64': 4.18.0
'@rollup/rollup-darwin-x64': 4.18.0
'@rollup/rollup-linux-arm-gnueabihf': 4.18.0
'@rollup/rollup-linux-arm-musleabihf': 4.18.0
'@rollup/rollup-linux-arm64-gnu': 4.18.0
'@rollup/rollup-linux-arm64-musl': 4.18.0
'@rollup/rollup-linux-powerpc64le-gnu': 4.18.0
'@rollup/rollup-linux-riscv64-gnu': 4.18.0
'@rollup/rollup-linux-s390x-gnu': 4.18.0
'@rollup/rollup-linux-x64-gnu': 4.18.0
'@rollup/rollup-linux-x64-musl': 4.18.0
'@rollup/rollup-win32-arm64-msvc': 4.18.0
'@rollup/rollup-win32-ia32-msvc': 4.18.0
'@rollup/rollup-win32-x64-msvc': 4.18.0
fsevents: 2.3.3
dev: true
@ -3398,7 +3398,7 @@ packages:
dependencies:
'@jridgewell/gen-mapping': 0.3.5
commander: 4.1.1
glob: 10.3.15
glob: 10.3.16
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.6
@ -3543,7 +3543,7 @@ packages:
joycon: 3.1.1
postcss-load-config: 4.0.2
resolve-from: 5.0.0
rollup: 4.17.2
rollup: 4.18.0
source-map: 0.8.0-beta.0
sucrase: 3.35.0
tree-kill: 1.2.2
@ -3798,8 +3798,8 @@ packages:
engines: {node: '>=10'}
dev: true
github.com/DeterminateSystems/detsys-ts/97979f48241e807d76bd9b8cbfc69a245f04894b:
resolution: {tarball: https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/97979f48241e807d76bd9b8cbfc69a245f04894b}
github.com/DeterminateSystems/detsys-ts/ed02129aed8e4d6402d920152652877189bece70:
resolution: {tarball: https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/ed02129aed8e4d6402d920152652877189bece70}
name: detsys-ts
version: 1.0.0
dependencies:

View file

@ -1,11 +1,10 @@
import * as actionsCore from "@actions/core";
import * as actionsExec from "@actions/exec";
import { ActionOptions, IdsToolbox, inputs } from "detsys-ts";
import { DetSysAction, inputs } from "detsys-ts";
const EVENT_EXECUTION_FAILURE = "execution_failure";
class FlakeCheckerAction {
idslib: IdsToolbox;
class FlakeCheckerAction extends DetSysAction {
flakeLockPath: string;
nixpkgsKeys: string;
checkOutdated: boolean;
@ -16,7 +15,7 @@ class FlakeCheckerAction {
sendStatistics: boolean;
constructor() {
const options: ActionOptions = {
super({
name: "flake-checker",
fetchStyle: "gh-env-style",
diagnosticsUrl: new URL(
@ -24,9 +23,7 @@ class FlakeCheckerAction {
),
// We don't need Nix in this Action because we fetch a static binary using curl and run it
requireNix: "ignore",
};
this.idslib = new IdsToolbox(options);
});
this.flakeLockPath = inputs.getString("flake-lock-path");
this.nixpkgsKeys = inputs.getString("nixpkgs-keys");
@ -38,8 +35,41 @@ class FlakeCheckerAction {
this.sendStatistics = inputs.getBool("send-statistics");
}
private async executionEnvironment(): Promise<ExecuteEnvironment> {
const executionEnv: ExecuteEnvironment = {};
async main(): Promise<void> {
await this.checkFlake();
}
// No post step
async post(): Promise<void> {}
private async checkFlake(): Promise<number> {
const binaryPath = await this.fetchExecutable();
const executionEnv = await this.executionEnvironment();
actionsCore.debug(
`Execution environment: ${JSON.stringify(executionEnv, null, 4)}`,
);
const exitCode = await actionsExec.exec(binaryPath, [], {
env: {
...executionEnv,
...process.env, // To get $PATH, etc
},
ignoreReturnCode: true,
});
if (exitCode !== 0) {
this.recordEvent(EVENT_EXECUTION_FAILURE, {
exitCode,
});
actionsCore.setFailed(`Non-zero exit code of \`${exitCode}\`.`);
}
return exitCode;
}
private async executionEnvironment(): Promise<ExecutionEnvironment> {
const executionEnv: ExecutionEnvironment = {};
executionEnv.NIX_FLAKE_CHECKER_FLAKE_LOCK_PATH = this.flakeLockPath;
executionEnv.NIX_FLAKE_CHECKER_NIXPKGS_KEYS = this.nixpkgsKeys;
@ -70,40 +100,9 @@ class FlakeCheckerAction {
return executionEnv;
}
async check(): Promise<number> {
const sourceBinary = inputs.getStringOrNull("source-binary");
const binaryPath =
sourceBinary !== null && sourceBinary !== ""
? sourceBinary
: await this.idslib.fetchExecutable();
const executionEnv = await this.executionEnvironment();
actionsCore.debug(
`Execution environment: ${JSON.stringify(executionEnv, null, 4)}`,
);
const exitCode = await actionsExec.exec(binaryPath, [], {
env: {
...executionEnv,
...process.env, // To get $PATH, etc
},
ignoreReturnCode: true,
});
if (exitCode !== 0) {
this.idslib.recordEvent(EVENT_EXECUTION_FAILURE, {
exitCode,
});
actionsCore.setFailed(`Non-zero exit code of \`${exitCode}\`.`);
}
return exitCode;
}
}
type ExecuteEnvironment = {
type ExecutionEnvironment = {
// All env vars are strings, no fanciness here.
RUST_BACKTRACE?: string;
NIX_FLAKE_CHECKER_FLAKE_LOCK_PATH?: string;
@ -117,13 +116,7 @@ type ExecuteEnvironment = {
};
function main(): void {
const checker = new FlakeCheckerAction();
checker.idslib.onMain(async () => {
await checker.check();
});
checker.idslib.execute();
new FlakeCheckerAction().execute();
}
main();