Preflight nix, or don't fail

This commit is contained in:
Graham Christensen 2024-04-18 13:08:15 -04:00
parent 5e58ce0108
commit 40128c21ab
4 changed files with 133 additions and 21 deletions

143
dist/index.js generated vendored
View file

@ -94412,7 +94412,7 @@ const got = source_create(defaults);
;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@3a315cdffd83d4b229d4fb16548d22a3756baf28_lprtsns3vmnabnzqpk64lag6gi/node_modules/detsys-ts/dist/correlation.js ;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@d0549728861cc4c4797fddc2c931739ff5f7c819_aivncslwkd46yrth3vskk4g6rm/node_modules/detsys-ts/dist/correlation.js
function identify(projectName) { function identify(projectName) {
@ -94494,10 +94494,17 @@ function hashEnvironmentVariables(prefix, variables) {
return `${prefix}-${hash.digest("hex")}`; return `${prefix}-${hash.digest("hex")}`;
} }
;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@3a315cdffd83d4b229d4fb16548d22a3756baf28_lprtsns3vmnabnzqpk64lag6gi/node_modules/detsys-ts/dist/package.json ;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@d0549728861cc4c4797fddc2c931739ff5f7c819_aivncslwkd46yrth3vskk4g6rm/node_modules/detsys-ts/dist/package.json
const package_namespaceObject = {"i8":"1.0.0"}; const package_namespaceObject = {"i8":"1.0.0"};
;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@3a315cdffd83d4b229d4fb16548d22a3756baf28_lprtsns3vmnabnzqpk64lag6gi/node_modules/detsys-ts/dist/platform.js ;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@d0549728861cc4c4797fddc2c931739ff5f7c819_aivncslwkd46yrth3vskk4g6rm/node_modules/detsys-ts/dist/platform.js
/**
* @packageDocumentation
* Helpers for determining system attributes of the current runner.
*/
/**
* Get the current architecture plus OS. Examples include `X64-Linux` and `ARM64-macOS`.
*/
function getArchOs() { function getArchOs() {
const envArch = process.env.RUNNER_ARCH; const envArch = process.env.RUNNER_ARCH;
const envOs = process.env.RUNNER_OS; const envOs = process.env.RUNNER_OS;
@ -94509,6 +94516,9 @@ function getArchOs() {
throw new Error("RUNNER_ARCH and/or RUNNER_OS is not defined"); throw new Error("RUNNER_ARCH and/or RUNNER_OS is not defined");
} }
} }
/**
* Get the current Nix system. Examples include `x86_64-linux` and `aarch64-darwin`.
*/
function getNixPlatform(archOs) { function getNixPlatform(archOs) {
const archOsMap = new Map([ const archOsMap = new Map([
["X64-macOS", "x86_64-darwin"], ["X64-macOS", "x86_64-darwin"],
@ -94526,17 +94536,86 @@ function getNixPlatform(archOs) {
} }
} }
;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@3a315cdffd83d4b229d4fb16548d22a3756baf28_lprtsns3vmnabnzqpk64lag6gi/node_modules/detsys-ts/dist/sourcedef.js ;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@d0549728861cc4c4797fddc2c931739ff5f7c819_aivncslwkd46yrth3vskk4g6rm/node_modules/detsys-ts/dist/inputs.js
/**
* @packageDocumentation
* Helpers for getting values from an Action's configuration.
*/
/**
* Get a Boolean input from the Action's configuration by name.
*/
const getBool = (name) => {
return actionsCore.getBooleanInput(name);
};
/**
* Get a multi-line string input from the Action's configuration by name or return `null` if not set.
*/
const getMultilineStringOrNull = (name) => {
const value = actionsCore.getMultilineInput(name);
if (value.length === 0) {
return null;
}
else {
return value;
}
};
/**
* Get a number input from the Action's configuration by name or return `null` if not set.
*/
const getNumberOrNull = (name) => {
const value = actionsCore.getInput(name);
if (value === "") {
return null;
}
else {
return Number(value);
}
};
/**
* Get a string input from the Action's configuration.
*/
const getString = (name) => {
return actionsCore.getInput(name);
};
/**
* Get a string input from the Action's configuration by name or return `null` if not set.
*/
const getStringOrNull = (name) => {
const value = actionsCore.getInput(name);
if (value === "") {
return null;
}
else {
return value;
}
};
/**
* Get a string input from the Action's configuration by name or return `undefined` if not set.
*/
const getStringOrUndefined = (name) => {
const value = core.getInput(name);
if (value === "") {
return undefined;
}
else {
return value;
}
};
;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@d0549728861cc4c4797fddc2c931739ff5f7c819_aivncslwkd46yrth3vskk4g6rm/node_modules/detsys-ts/dist/sourcedef.js
function constructSourceParameters(legacyPrefix) { function constructSourceParameters(legacyPrefix) {
const noisilyGetInput = (suffix) => { const noisilyGetInput = (suffix) => {
const preferredInput = inputStringOrUndef(`source-${suffix}`); const preferredInput = getStringOrUndefined(`source-${suffix}`);
if (!legacyPrefix) { if (!legacyPrefix) {
return preferredInput; return preferredInput;
} }
// Remaining is for handling cases where the legacy prefix // Remaining is for handling cases where the legacy prefix
// should be examined. // should be examined.
const legacyInput = inputStringOrUndef(`${legacyPrefix}-${suffix}`); const legacyInput = getStringOrUndefined(`${legacyPrefix}-${suffix}`);
if (preferredInput && legacyInput) { if (preferredInput && legacyInput) {
core.warning(`The supported option source-${suffix} and the legacy option ${legacyPrefix}-${suffix} are both set. Preferring source-${suffix}. Please stop setting ${legacyPrefix}-${suffix}.`); core.warning(`The supported option source-${suffix} and the legacy option ${legacyPrefix}-${suffix} are both set. Preferring source-${suffix}. Please stop setting ${legacyPrefix}-${suffix}.`);
return preferredInput; return preferredInput;
@ -94558,15 +94637,6 @@ function constructSourceParameters(legacyPrefix) {
revision: noisilyGetInput("revision"), revision: noisilyGetInput("revision"),
}; };
} }
function inputStringOrUndef(name) {
const value = core.getInput(name);
if (value === "") {
return undefined;
}
else {
return value;
}
}
// EXTERNAL MODULE: ./node_modules/.pnpm/@actions+cache@3.2.4/node_modules/@actions/cache/lib/cache.js // EXTERNAL MODULE: ./node_modules/.pnpm/@actions+cache@3.2.4/node_modules/@actions/cache/lib/cache.js
var cache = __nccwpck_require__(6878); var cache = __nccwpck_require__(6878);
@ -94586,7 +94656,11 @@ const validate = uuid_dist/* validate */.Gu;
const stringify = uuid_dist/* stringify */.Pz; const stringify = uuid_dist/* stringify */.Pz;
const parse = uuid_dist/* parse */.Qc; const parse = uuid_dist/* parse */.Qc;
;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@3a315cdffd83d4b229d4fb16548d22a3756baf28_lprtsns3vmnabnzqpk64lag6gi/node_modules/detsys-ts/dist/main.js ;// CONCATENATED MODULE: ./node_modules/.pnpm/github.com+DeterminateSystems+detsys-ts@d0549728861cc4c4797fddc2c931739ff5f7c819_aivncslwkd46yrth3vskk4g6rm/node_modules/detsys-ts/dist/main.js
/**
* @packageDocumentation
* Determinate Systems' TypeScript library for creating GitHub Actions logic.
*/
// eslint-disable-next-line import/extensions // eslint-disable-next-line import/extensions
@ -94695,6 +94769,10 @@ class IdsToolbox {
async executeAsync() { async executeAsync() {
try { try {
process.env.DETSYS_CORRELATION = JSON.stringify(this.getCorrelationHashes()); process.env.DETSYS_CORRELATION = JSON.stringify(this.getCorrelationHashes());
if (!(await this.preflightRequireNix())) {
this.recordEvent("preflight-require-nix-denied");
return;
}
if (this.executionPhase === "main" && this.hookMain) { if (this.executionPhase === "main" && this.hookMain) {
await this.hookMain(); await this.hookMain();
} }
@ -94858,6 +94936,34 @@ class IdsToolbox {
process.chdir(startCwd); process.chdir(startCwd);
} }
} }
async preflightRequireNix() {
let nixLocation;
const pathParts = (process.env["PATH"] || "").split(":");
for (const location of pathParts) {
const candidateNix = external_node_path_namespaceObject.join(location, "nix");
try {
await promises_namespaceObject.access(candidateNix, promises_namespaceObject.constants.X_OK);
core.debug(`Found Nix at ${candidateNix}`);
nixLocation = candidateNix;
}
catch {
core.debug(`Nix not at ${candidateNix}`);
}
}
this.addFact("nix_location", nixLocation || "");
const currentNotFoundState = core.getState("idstoolbox_nix_not_found");
if (this.actionOptions.requireNix && currentNotFoundState === "not-found") {
// It was previously not found, so don't run subsequent actions
return false;
}
if (this.actionOptions.requireNix && nixLocation === undefined) {
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.");
core.saveState("idstoolbox_nix_not_found", "not-found");
return false;
}
return true;
}
async submitEvents() { async submitEvents() {
if (!this.actionOptions.diagnosticsUrl) { if (!this.actionOptions.diagnosticsUrl) {
core.debug("Diagnostics are disabled. Not sending the following events:"); core.debug("Diagnostics are disabled. Not sending the following events:");
@ -94892,6 +94998,7 @@ function makeOptionsConfident(actionOptions) {
eventPrefix: actionOptions.eventPrefix || "action:", eventPrefix: actionOptions.eventPrefix || "action:",
fetchStyle: actionOptions.fetchStyle, fetchStyle: actionOptions.fetchStyle,
legacySourcePrefix: actionOptions.legacySourcePrefix, legacySourcePrefix: actionOptions.legacySourcePrefix,
requireNix: actionOptions.requireNix,
diagnosticsUrl: determineDiagnosticsUrl(idsProjectName, actionOptions.diagnosticsUrl), diagnosticsUrl: determineDiagnosticsUrl(idsProjectName, actionOptions.diagnosticsUrl),
}; };
core.debug("idslib options:"); core.debug("idslib options:");
@ -94957,6 +95064,9 @@ function mungeDiagnosticEndpoint(inputUrl) {
} }
return inputUrl; return inputUrl;
} }
// Public exports from other files
;// CONCATENATED MODULE: ./dist/index.js ;// CONCATENATED MODULE: ./dist/index.js
@ -95220,6 +95330,7 @@ const idslib = new IdsToolbox({
name: "magic-nix-cache", name: "magic-nix-cache",
fetchStyle: "gh-env-style", fetchStyle: "gh-env-style",
idsProjectName: "magic-nix-cache-closure", idsProjectName: "magic-nix-cache-closure",
requireNix: true,
}); });
idslib.onMain(async () => { idslib.onMain(async () => {
await setUpAutoCache(idslib); await setUpAutoCache(idslib);

View file

@ -28,7 +28,7 @@
"@actions/exec": "^1.1.1", "@actions/exec": "^1.1.1",
"@actions/github": "^5.1.1", "@actions/github": "^5.1.1",
"@actions/tool-cache": "^2.0.1", "@actions/tool-cache": "^2.0.1",
"detsys-ts": "github:DeterminateSystems/detsys-ts", "detsys-ts": "github:DeterminateSystems/detsys-ts#graham/fh-272-detsys-ts-create-a-helper-to-assert-nix-is-available-ahead",
"fetch-retry": "^5.0.6", "fetch-retry": "^5.0.6",
"got": "^14.2.1", "got": "^14.2.1",
"string-argv": "^0.3.2", "string-argv": "^0.3.2",

View file

@ -18,8 +18,8 @@ dependencies:
specifier: ^2.0.1 specifier: ^2.0.1
version: 2.0.1 version: 2.0.1
detsys-ts: detsys-ts:
specifier: github:DeterminateSystems/detsys-ts specifier: github:DeterminateSystems/detsys-ts#graham/fh-272-detsys-ts-create-a-helper-to-assert-nix-is-available-ahead
version: github.com/DeterminateSystems/detsys-ts/3a315cdffd83d4b229d4fb16548d22a3756baf28 version: github.com/DeterminateSystems/detsys-ts/d0549728861cc4c4797fddc2c931739ff5f7c819
fetch-retry: fetch-retry:
specifier: ^5.0.6 specifier: ^5.0.6
version: 5.0.6 version: 5.0.6
@ -4353,10 +4353,10 @@ packages:
engines: { node: ">=10" } engines: { node: ">=10" }
dev: true dev: true
github.com/DeterminateSystems/detsys-ts/3a315cdffd83d4b229d4fb16548d22a3756baf28: github.com/DeterminateSystems/detsys-ts/d0549728861cc4c4797fddc2c931739ff5f7c819:
resolution: resolution:
{ {
tarball: https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/3a315cdffd83d4b229d4fb16548d22a3756baf28, tarball: https://codeload.github.com/DeterminateSystems/detsys-ts/tar.gz/d0549728861cc4c4797fddc2c931739ff5f7c819,
} }
name: detsys-ts name: detsys-ts
version: 1.0.0 version: 1.0.0

View file

@ -305,6 +305,7 @@ const idslib = new IdsToolbox({
name: "magic-nix-cache", name: "magic-nix-cache",
fetchStyle: "gh-env-style", fetchStyle: "gh-env-style",
idsProjectName: "magic-nix-cache-closure", idsProjectName: "magic-nix-cache-closure",
requireNix: true,
}); });
idslib.onMain(async () => { idslib.onMain(async () => {