Check that each directory is a valid flake
This commit is contained in:
parent
f5dab0ead5
commit
1127ba41bd
3 changed files with 97 additions and 21 deletions
49
dist/index.js
vendored
49
dist/index.js
vendored
|
@ -94751,6 +94751,8 @@ function mungeDiagnosticEndpoint(inputUrl) {
|
||||||
* Copyright (c) 2018-2020 [Samuel Carreira]
|
* Copyright (c) 2018-2020 [Samuel Carreira]
|
||||||
*/
|
*/
|
||||||
//# sourceMappingURL=index.js.map
|
//# sourceMappingURL=index.js.map
|
||||||
|
// EXTERNAL MODULE: external "fs"
|
||||||
|
var external_fs_ = __nccwpck_require__(7147);
|
||||||
;// CONCATENATED MODULE: ./dist/index.js
|
;// CONCATENATED MODULE: ./dist/index.js
|
||||||
// src/nix.ts
|
// src/nix.ts
|
||||||
function makeNixCommandArgs(nixOptions, flakeInputs, commitMessage) {
|
function makeNixCommandArgs(nixOptions, flakeInputs, commitMessage) {
|
||||||
|
@ -94766,6 +94768,7 @@ function makeNixCommandArgs(nixOptions, flakeInputs, commitMessage) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var EVENT_EXECUTION_FAILURE = "execution_failure";
|
var EVENT_EXECUTION_FAILURE = "execution_failure";
|
||||||
var UpdateFlakeLockAction = class extends DetSysAction {
|
var UpdateFlakeLockAction = class extends DetSysAction {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
@ -94779,9 +94782,7 @@ var UpdateFlakeLockAction = class extends DetSysAction {
|
||||||
this.nixOptions = inputs_exports.getArrayOfStrings("nix-options", "space");
|
this.nixOptions = inputs_exports.getArrayOfStrings("nix-options", "space");
|
||||||
this.pathToFlakeDir = inputs_exports.getStringOrNull("path-to-flake-dir");
|
this.pathToFlakeDir = inputs_exports.getStringOrNull("path-to-flake-dir");
|
||||||
this.flakeDirs = inputs_exports.getArrayOfStrings("flake-dirs", "space");
|
this.flakeDirs = inputs_exports.getArrayOfStrings("flake-dirs", "space");
|
||||||
if (this.flakeDirs !== null && this.flakeDirs.length > 0 && this.pathToFlakeDir !== "") {
|
this.validateInputs();
|
||||||
throw new Error("Both path-to-flake-dir and flake-dirs is defined");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
async main() {
|
async main() {
|
||||||
await this.update();
|
await this.update();
|
||||||
|
@ -94792,7 +94793,7 @@ var UpdateFlakeLockAction = class extends DetSysAction {
|
||||||
async update() {
|
async update() {
|
||||||
if (this.flakeDirs !== null && this.flakeDirs.length > 0) {
|
if (this.flakeDirs !== null && this.flakeDirs.length > 0) {
|
||||||
core.debug(
|
core.debug(
|
||||||
`Running flake lock update in multiple directories: ${this.flakeDirs}`
|
`Running flake lock update in multiple directories: ${this.flakeDirs.map((dir) => `\`${dir}\``).join(" ")}`
|
||||||
);
|
);
|
||||||
for (const directory of this.flakeDirs) {
|
for (const directory of this.flakeDirs) {
|
||||||
await this.updateFlake(directory);
|
await this.updateFlake(directory);
|
||||||
|
@ -94803,7 +94804,9 @@ var UpdateFlakeLockAction = class extends DetSysAction {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async updateFlake(flakeDir) {
|
async updateFlake(flakeDir) {
|
||||||
core.debug(`Running flake lock update in directory ${flakeDir}`);
|
this.ensureDirectoryExists(flakeDir);
|
||||||
|
this.ensureDirectoryIsFlake(flakeDir);
|
||||||
|
core.debug(`Running flake lock update in directory \`${flakeDir}\``);
|
||||||
const nixCommandArgs = makeNixCommandArgs(
|
const nixCommandArgs = makeNixCommandArgs(
|
||||||
this.nixOptions,
|
this.nixOptions,
|
||||||
this.flakeInputs,
|
this.flakeInputs,
|
||||||
|
@ -94827,14 +94830,46 @@ var UpdateFlakeLockAction = class extends DetSysAction {
|
||||||
exitCode
|
exitCode
|
||||||
});
|
});
|
||||||
core.setFailed(
|
core.setFailed(
|
||||||
`non-zero exit code of ${exitCode} detected while updating directory ${flakeDir}`
|
`non-zero exit code of ${exitCode} detected while updating directory \`${flakeDir}\``
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
core.info(
|
core.info(
|
||||||
`flake.lock file in ${flakeDir} was successfully updated`
|
`flake.lock file in \`${flakeDir}\` was successfully updated`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
validateInputs() {
|
||||||
|
if (this.flakeDirs !== null && this.flakeDirs.length > 0 && this.pathToFlakeDir !== "") {
|
||||||
|
throw new Error(
|
||||||
|
"Both `path-to-flake-dir` and `flake-dirs` are set, whereas only one can be set"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (this.flakeDirs !== null && this.flakeDirs.length === 0) {
|
||||||
|
throw new Error(
|
||||||
|
"The `flake-dirs` input is set to an empty array; it must contain at least one directory"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ensureDirectoryExists(flakeDir) {
|
||||||
|
core.debug(`Checking that flake directory \`${flakeDir}\` exists`);
|
||||||
|
external_fs_.access(flakeDir, external_fs_.constants.F_OK, (err) => {
|
||||||
|
if (err !== null) {
|
||||||
|
throw new Error(`Directory \`${flakeDir}\` doesn't exist`);
|
||||||
|
} else {
|
||||||
|
core.debug(`Flake directory \`${flakeDir}\` exists`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
ensureDirectoryIsFlake(flakeDir) {
|
||||||
|
const flakeDotNix = `${flakeDir}/flake.nix`;
|
||||||
|
if (!external_fs_.existsSync(flakeDotNix)) {
|
||||||
|
throw new Error(
|
||||||
|
`Directory \`${flakeDir}\` is not a valid flake as it doesn't contain a \`flake.nix\``
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
core.debug(`Directory \`${flakeDir}\` is a valid flake`);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
function main() {
|
function main() {
|
||||||
new UpdateFlakeLockAction().execute();
|
new UpdateFlakeLockAction().execute();
|
||||||
|
|
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
67
src/index.ts
67
src/index.ts
|
@ -2,6 +2,7 @@ import { makeNixCommandArgs } from "./nix.js";
|
||||||
import * as actionsCore from "@actions/core";
|
import * as actionsCore from "@actions/core";
|
||||||
import * as actionsExec from "@actions/exec";
|
import * as actionsExec from "@actions/exec";
|
||||||
import { DetSysAction, inputs } from "detsys-ts";
|
import { DetSysAction, inputs } from "detsys-ts";
|
||||||
|
import * as fs from "fs";
|
||||||
|
|
||||||
const EVENT_EXECUTION_FAILURE = "execution_failure";
|
const EVENT_EXECUTION_FAILURE = "execution_failure";
|
||||||
|
|
||||||
|
@ -25,15 +26,7 @@ class UpdateFlakeLockAction extends DetSysAction {
|
||||||
this.pathToFlakeDir = inputs.getStringOrNull("path-to-flake-dir");
|
this.pathToFlakeDir = inputs.getStringOrNull("path-to-flake-dir");
|
||||||
this.flakeDirs = inputs.getArrayOfStrings("flake-dirs", "space");
|
this.flakeDirs = inputs.getArrayOfStrings("flake-dirs", "space");
|
||||||
|
|
||||||
// Ensure that either path-to-flake-dir or flake-dirs is set to a meaningful value but not both
|
this.validateInputs();
|
||||||
if (
|
|
||||||
this.flakeDirs !== null &&
|
|
||||||
this.flakeDirs.length > 0 &&
|
|
||||||
this.pathToFlakeDir !== ""
|
|
||||||
) {
|
|
||||||
// TODO: improve this error message
|
|
||||||
throw new Error("Both path-to-flake-dir and flake-dirs is defined");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async main(): Promise<void> {
|
async main(): Promise<void> {
|
||||||
|
@ -46,7 +39,7 @@ class UpdateFlakeLockAction extends DetSysAction {
|
||||||
async update(): Promise<void> {
|
async update(): Promise<void> {
|
||||||
if (this.flakeDirs !== null && this.flakeDirs.length > 0) {
|
if (this.flakeDirs !== null && this.flakeDirs.length > 0) {
|
||||||
actionsCore.debug(
|
actionsCore.debug(
|
||||||
`Running flake lock update in multiple directories: ${this.flakeDirs}`,
|
`Running flake lock update in multiple directories: ${this.flakeDirs.map((dir) => `\`${dir}\``).join(" ")}`,
|
||||||
);
|
);
|
||||||
|
|
||||||
for (const directory of this.flakeDirs) {
|
for (const directory of this.flakeDirs) {
|
||||||
|
@ -60,7 +53,10 @@ class UpdateFlakeLockAction extends DetSysAction {
|
||||||
}
|
}
|
||||||
|
|
||||||
private async updateFlake(flakeDir: string): Promise<void> {
|
private async updateFlake(flakeDir: string): Promise<void> {
|
||||||
actionsCore.debug(`Running flake lock update in directory ${flakeDir}`);
|
this.ensureDirectoryExists(flakeDir);
|
||||||
|
this.ensureDirectoryIsFlake(flakeDir);
|
||||||
|
|
||||||
|
actionsCore.debug(`Running flake lock update in directory \`${flakeDir}\``);
|
||||||
|
|
||||||
// Nix command of this form:
|
// Nix command of this form:
|
||||||
// nix ${maybe nix options} flake ${"update" or "lock"} ${maybe --update-input flags} --commit-lock-file --commit-lockfile-summary ${commit message}
|
// nix ${maybe nix options} flake ${"update" or "lock"} ${maybe --update-input flags} --commit-lock-file --commit-lockfile-summary ${commit message}
|
||||||
|
@ -94,14 +90,59 @@ class UpdateFlakeLockAction extends DetSysAction {
|
||||||
exitCode,
|
exitCode,
|
||||||
});
|
});
|
||||||
actionsCore.setFailed(
|
actionsCore.setFailed(
|
||||||
`non-zero exit code of ${exitCode} detected while updating directory ${flakeDir}`,
|
`non-zero exit code of ${exitCode} detected while updating directory \`${flakeDir}\``,
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
actionsCore.info(
|
actionsCore.info(
|
||||||
`flake.lock file in ${flakeDir} was successfully updated`,
|
`flake.lock file in \`${flakeDir}\` was successfully updated`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private validateInputs(): void {
|
||||||
|
// Ensure that either path-to-flake-dir or flake-dirs is set to a meaningful value but not both
|
||||||
|
if (
|
||||||
|
this.flakeDirs !== null &&
|
||||||
|
this.flakeDirs.length > 0 &&
|
||||||
|
this.pathToFlakeDir !== ""
|
||||||
|
) {
|
||||||
|
// TODO: improve this error message
|
||||||
|
throw new Error(
|
||||||
|
"Both `path-to-flake-dir` and `flake-dirs` are set, whereas only one can be set",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure that flake-dirs isn't an empty array if set
|
||||||
|
if (this.flakeDirs !== null && this.flakeDirs.length === 0) {
|
||||||
|
throw new Error(
|
||||||
|
"The `flake-dirs` input is set to an empty array; it must contain at least one directory",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ensureDirectoryExists(flakeDir: string): void {
|
||||||
|
actionsCore.debug(`Checking that flake directory \`${flakeDir}\` exists`);
|
||||||
|
|
||||||
|
// Ensure the directory exists
|
||||||
|
fs.access(flakeDir, fs.constants.F_OK, (err) => {
|
||||||
|
if (err !== null) {
|
||||||
|
throw new Error(`Directory \`${flakeDir}\` doesn't exist`);
|
||||||
|
} else {
|
||||||
|
actionsCore.debug(`Flake directory \`${flakeDir}\` exists`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private ensureDirectoryIsFlake(flakeDir: string): void {
|
||||||
|
const flakeDotNix = `${flakeDir}/flake.nix`;
|
||||||
|
if (!fs.existsSync(flakeDotNix)) {
|
||||||
|
throw new Error(
|
||||||
|
`Directory \`${flakeDir}\` is not a valid flake as it doesn't contain a \`flake.nix\``,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
actionsCore.debug(`Directory \`${flakeDir}\` is a valid flake`);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function main(): void {
|
function main(): void {
|
||||||
|
|
Loading…
Reference in a new issue