2024-04-26 19:19:53 +02:00
|
|
|
import { makeNixCommandArgs } from "./nix.js";
|
2024-04-26 16:55:19 +02:00
|
|
|
import * as actionsCore from "@actions/core";
|
|
|
|
import * as actionsExec from "@actions/exec";
|
2024-04-22 00:42:23 +02:00
|
|
|
import { ActionOptions, IdsToolbox, inputs } from "detsys-ts";
|
|
|
|
|
2024-04-26 16:55:19 +02:00
|
|
|
const EVENT_EXECUTION_FAILURE = "execution_failure";
|
|
|
|
|
2024-04-22 00:42:23 +02:00
|
|
|
class UpdateFlakeLockAction {
|
|
|
|
idslib: IdsToolbox;
|
|
|
|
private commitMessage: string;
|
2024-04-26 19:19:53 +02:00
|
|
|
private nixOptions: string[];
|
|
|
|
private flakeInputs: string[];
|
2024-04-26 16:55:19 +02:00
|
|
|
private pathToFlakeDir: string | null;
|
2024-04-22 00:42:23 +02:00
|
|
|
|
|
|
|
constructor() {
|
|
|
|
const options: ActionOptions = {
|
|
|
|
name: "update-flake-lock",
|
|
|
|
fetchStyle: "universal",
|
|
|
|
requireNix: "fail",
|
|
|
|
};
|
|
|
|
|
|
|
|
this.idslib = new IdsToolbox(options);
|
|
|
|
this.commitMessage = inputs.getString("commit-msg");
|
2024-04-26 19:19:53 +02:00
|
|
|
this.flakeInputs = inputs.getCommaSeparatedArrayOfStrings("inputs", true);
|
|
|
|
this.nixOptions = inputs.getCommaSeparatedArrayOfStrings(
|
|
|
|
"nix-options",
|
|
|
|
true,
|
|
|
|
);
|
2024-04-26 16:55:19 +02:00
|
|
|
this.pathToFlakeDir = inputs.getStringOrNull("path-to-flake-dir");
|
2024-04-22 00:42:23 +02:00
|
|
|
}
|
|
|
|
|
2024-04-26 17:10:07 +02:00
|
|
|
async update(): Promise<void> {
|
2024-04-26 16:55:19 +02:00
|
|
|
// Nix command of this form:
|
2024-04-26 17:10:07 +02:00
|
|
|
// nix ${maybe nix options} flake lock ${maybe --update-input flags} --commit-lock-file --commit-lock-file-summary ${commit message}
|
|
|
|
// Example commands:
|
|
|
|
// nix --extra-substituters https://example.com flake lock --update-input nixpkgs --commit-lock-file --commit-lock-file-summary "updated flake.lock"
|
|
|
|
// nix flake lock --commit-lock-file --commit-lock-file-summary "updated flake.lock"
|
2024-04-26 19:19:53 +02:00
|
|
|
const nixCommandArgs: string[] = makeNixCommandArgs(
|
|
|
|
this.nixOptions,
|
|
|
|
this.flakeInputs,
|
|
|
|
this.commitMessage,
|
|
|
|
);
|
2024-04-26 16:55:19 +02:00
|
|
|
|
2024-05-06 22:13:34 +02:00
|
|
|
const execOptions: actionsExec.ExecOptions = {};
|
|
|
|
if (this.pathToFlakeDir !== null) {
|
|
|
|
execOptions.cwd = this.pathToFlakeDir;
|
|
|
|
}
|
2024-04-26 16:55:19 +02:00
|
|
|
|
2024-05-06 22:13:34 +02:00
|
|
|
const exitCode = await actionsExec.exec("nix", nixCommandArgs, execOptions);
|
2024-04-22 00:50:32 +02:00
|
|
|
|
2024-04-26 16:55:19 +02:00
|
|
|
if (exitCode !== 0) {
|
|
|
|
this.idslib.recordEvent(EVENT_EXECUTION_FAILURE, {
|
|
|
|
exitCode,
|
|
|
|
});
|
|
|
|
actionsCore.setFailed(`non-zero exit code of ${exitCode} detected`);
|
|
|
|
} else {
|
|
|
|
actionsCore.info(`flake.lock file was successfully updated`);
|
|
|
|
}
|
2024-04-22 00:50:32 +02:00
|
|
|
}
|
2024-04-22 00:42:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function main(): void {
|
|
|
|
const updateFlakeLock = new UpdateFlakeLockAction();
|
|
|
|
|
|
|
|
updateFlakeLock.idslib.onMain(async () => {
|
|
|
|
await updateFlakeLock.update();
|
|
|
|
});
|
|
|
|
|
|
|
|
updateFlakeLock.idslib.execute();
|
|
|
|
}
|
2024-04-22 00:17:03 +02:00
|
|
|
|
|
|
|
main();
|