mirror of
https://github.com/DeterminateSystems/nix-installer-action.git
synced 2024-12-23 05:22:21 +01:00
Use less esoteric formatting settings
This commit is contained in:
parent
195f007ef0
commit
5eda0a4d27
5 changed files with 349 additions and 359 deletions
|
@ -64,11 +64,6 @@
|
|||
"@typescript-eslint/promise-function-async": "error",
|
||||
"@typescript-eslint/require-array-sort-compare": "error",
|
||||
"@typescript-eslint/restrict-plus-operands": "error",
|
||||
"semi": "off",
|
||||
"@typescript-eslint/semi": [
|
||||
"error",
|
||||
"never"
|
||||
],
|
||||
"@typescript-eslint/type-annotation-spacing": "error",
|
||||
"@typescript-eslint/unbound-method": "error"
|
||||
},
|
||||
|
|
|
@ -1,10 +1 @@
|
|||
{
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"semi": false,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none",
|
||||
"bracketSpacing": false,
|
||||
"arrowParens": "avoid"
|
||||
}
|
||||
{}
|
158
dist/index.js
vendored
158
dist/index.js
vendored
|
@ -55,46 +55,46 @@ const string_argv_1 = __importDefault(__nccwpck_require__(9663));
|
|||
class NixInstallerAction {
|
||||
constructor() {
|
||||
this.platform = get_nix_platform();
|
||||
this.nix_package_url = action_input_string_or_null('nix-package-url');
|
||||
this.backtrace = action_input_string_or_null('backtrace');
|
||||
this.extra_args = action_input_string_or_null('extra-args');
|
||||
this.extra_conf = action_input_multiline_string_or_null('extra-conf');
|
||||
this.github_token = action_input_string_or_null('github-token');
|
||||
this.init = action_input_string_or_null('init');
|
||||
this.local_root = action_input_string_or_null('local-root');
|
||||
this.log_directives = action_input_string_or_null('log-directives');
|
||||
this.logger = action_input_string_or_null('logger');
|
||||
this.ssl_cert_file = action_input_string_or_null('ssl-cert-file');
|
||||
this.proxy = action_input_string_or_null('proxy');
|
||||
this.mac_case_sensitive = action_input_string_or_null('mac-case-sensitive');
|
||||
this.mac_encrypt = action_input_string_or_null('mac-encrypt');
|
||||
this.mac_root_disk = action_input_string_or_null('mac-root-disk');
|
||||
this.mac_volume_label = action_input_string_or_null('mac-volume-label');
|
||||
this.modify_profile = action_input_bool('modify-profile');
|
||||
this.nix_build_group_id = action_input_number_or_null('nix-build-group-id');
|
||||
this.nix_build_group_name = action_input_string_or_null('nix-build-group-name');
|
||||
this.nix_build_user_base = action_input_number_or_null('nix_build-user-base');
|
||||
this.nix_build_user_count = action_input_number_or_null('nix-build-user-count');
|
||||
this.nix_build_user_prefix = action_input_string_or_null('nix-build-user-prefix');
|
||||
this.planner = action_input_string_or_null('planner');
|
||||
this.reinstall = action_input_bool('reinstall');
|
||||
this.start_daemon = action_input_bool('start-daemon');
|
||||
this.diagnostic_endpoint = action_input_string_or_null('diagnostic-endpoint');
|
||||
this.trust_runner_user = action_input_bool('trust-runner-user');
|
||||
this.nix_package_url = action_input_string_or_null("nix-package-url");
|
||||
this.backtrace = action_input_string_or_null("backtrace");
|
||||
this.extra_args = action_input_string_or_null("extra-args");
|
||||
this.extra_conf = action_input_multiline_string_or_null("extra-conf");
|
||||
this.github_token = action_input_string_or_null("github-token");
|
||||
this.init = action_input_string_or_null("init");
|
||||
this.local_root = action_input_string_or_null("local-root");
|
||||
this.log_directives = action_input_string_or_null("log-directives");
|
||||
this.logger = action_input_string_or_null("logger");
|
||||
this.ssl_cert_file = action_input_string_or_null("ssl-cert-file");
|
||||
this.proxy = action_input_string_or_null("proxy");
|
||||
this.mac_case_sensitive = action_input_string_or_null("mac-case-sensitive");
|
||||
this.mac_encrypt = action_input_string_or_null("mac-encrypt");
|
||||
this.mac_root_disk = action_input_string_or_null("mac-root-disk");
|
||||
this.mac_volume_label = action_input_string_or_null("mac-volume-label");
|
||||
this.modify_profile = action_input_bool("modify-profile");
|
||||
this.nix_build_group_id = action_input_number_or_null("nix-build-group-id");
|
||||
this.nix_build_group_name = action_input_string_or_null("nix-build-group-name");
|
||||
this.nix_build_user_base = action_input_number_or_null("nix_build-user-base");
|
||||
this.nix_build_user_count = action_input_number_or_null("nix-build-user-count");
|
||||
this.nix_build_user_prefix = action_input_string_or_null("nix-build-user-prefix");
|
||||
this.planner = action_input_string_or_null("planner");
|
||||
this.reinstall = action_input_bool("reinstall");
|
||||
this.start_daemon = action_input_bool("start-daemon");
|
||||
this.diagnostic_endpoint = action_input_string_or_null("diagnostic-endpoint");
|
||||
this.trust_runner_user = action_input_bool("trust-runner-user");
|
||||
this.nix_installer_url = resolve_nix_installer_url(this.platform);
|
||||
}
|
||||
executionEnvironment() {
|
||||
const execution_env = {};
|
||||
execution_env.NIX_INSTALLER_NO_CONFIRM = 'true';
|
||||
execution_env.NIX_INSTALLER_NO_CONFIRM = "true";
|
||||
if (this.backtrace !== null) {
|
||||
execution_env.RUST_BACKTRACE = this.backtrace;
|
||||
}
|
||||
if (this.modify_profile !== null) {
|
||||
if (this.modify_profile) {
|
||||
execution_env.NIX_INSTALLER_MODIFY_PROFILE = 'true';
|
||||
execution_env.NIX_INSTALLER_MODIFY_PROFILE = "true";
|
||||
}
|
||||
else {
|
||||
execution_env.NIX_INSTALLER_MODIFY_PROFILE = 'false';
|
||||
execution_env.NIX_INSTALLER_MODIFY_PROFILE = "false";
|
||||
}
|
||||
}
|
||||
if (this.nix_build_group_id !== null) {
|
||||
|
@ -124,7 +124,8 @@ class NixInstallerAction {
|
|||
execution_env.NIX_INSTALLER_SSL_CERT_FILE = this.ssl_cert_file;
|
||||
}
|
||||
if (this.diagnostic_endpoint !== null) {
|
||||
execution_env.NIX_INSTALLER_DIAGNOSTIC_ENDPOINT = this.diagnostic_endpoint;
|
||||
execution_env.NIX_INSTALLER_DIAGNOSTIC_ENDPOINT =
|
||||
this.diagnostic_endpoint;
|
||||
}
|
||||
// TODO: Error if the user uses these on not-MacOS
|
||||
if (this.mac_encrypt !== null) {
|
||||
|
@ -151,30 +152,30 @@ class NixInstallerAction {
|
|||
}
|
||||
if (this.start_daemon !== null) {
|
||||
if (this.start_daemon) {
|
||||
execution_env.NIX_INSTALLER_START_DAEMON = 'true';
|
||||
execution_env.NIX_INSTALLER_START_DAEMON = "true";
|
||||
}
|
||||
else {
|
||||
execution_env.NIX_INSTALLER_START_DAEMON = 'false';
|
||||
execution_env.NIX_INSTALLER_START_DAEMON = "false";
|
||||
}
|
||||
}
|
||||
let extra_conf = '';
|
||||
let extra_conf = "";
|
||||
if (this.github_token !== null) {
|
||||
extra_conf += `access-tokens = github.com=${this.github_token}`;
|
||||
extra_conf += '\n';
|
||||
extra_conf += "\n";
|
||||
}
|
||||
if (this.trust_runner_user !== null) {
|
||||
// TODO: Consider how to improve this
|
||||
extra_conf += `trusted-users = root ${process.env.USER}`;
|
||||
extra_conf += '\n';
|
||||
extra_conf += "\n";
|
||||
}
|
||||
if (this.extra_conf !== null && this.extra_conf.length !== 0) {
|
||||
extra_conf += this.extra_conf.join('\n');
|
||||
extra_conf += '\n';
|
||||
extra_conf += this.extra_conf.join("\n");
|
||||
extra_conf += "\n";
|
||||
}
|
||||
execution_env.NIX_INSTALLER_EXTRA_CONF = extra_conf;
|
||||
if (process.env.ACT && !process.env.NOT_ACT) {
|
||||
actions_core.info('Detected `$ACT` environment, assuming this is a https://github.com/nektos/act created container, set `NOT_ACT=true` to override this. This will change the settings of the `init` as well as `extra-conf` to be compatible with `act`');
|
||||
execution_env.NIX_INSTALLER_INIT = 'none';
|
||||
actions_core.info("Detected `$ACT` environment, assuming this is a https://github.com/nektos/act created container, set `NOT_ACT=true` to override this. This will change the settings of the `init` as well as `extra-conf` to be compatible with `act`");
|
||||
execution_env.NIX_INSTALLER_INIT = "none";
|
||||
}
|
||||
return execution_env;
|
||||
}
|
||||
|
@ -182,7 +183,7 @@ class NixInstallerAction {
|
|||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const execution_env = this.executionEnvironment();
|
||||
actions_core.info(`Execution environment: ${JSON.stringify(execution_env, null, 4)}`);
|
||||
const args = ['install'];
|
||||
const args = ["install"];
|
||||
if (this.planner) {
|
||||
args.push(this.planner);
|
||||
}
|
||||
|
@ -195,24 +196,24 @@ class NixInstallerAction {
|
|||
}
|
||||
const merged_env = Object.assign(Object.assign({}, process.env), execution_env);
|
||||
const spawned = (0, node_child_process_1.spawn)(`${binary_path}`, args, {
|
||||
env: merged_env
|
||||
env: merged_env,
|
||||
});
|
||||
spawned.stdout.setEncoding('utf-8');
|
||||
spawned.stdout.on('data', data => {
|
||||
spawned.stdout.setEncoding("utf-8");
|
||||
spawned.stdout.on("data", (data) => {
|
||||
const trimmed = data.trimEnd();
|
||||
if (trimmed.length >= 0) {
|
||||
actions_core.info(trimmed);
|
||||
}
|
||||
});
|
||||
spawned.stderr.setEncoding('utf-8');
|
||||
spawned.stderr.on('data', data => {
|
||||
spawned.stderr.setEncoding("utf-8");
|
||||
spawned.stderr.on("data", (data) => {
|
||||
const trimmed = data.trimEnd();
|
||||
if (trimmed.length >= 0) {
|
||||
actions_core.info(trimmed);
|
||||
}
|
||||
});
|
||||
const exit_code = yield new Promise((resolve, _reject) => {
|
||||
spawned.on('close', resolve);
|
||||
spawned.on("close", resolve);
|
||||
});
|
||||
if (exit_code !== 0) {
|
||||
throw new Error(`Non-zero exit code of \`${exit_code}\` detected`);
|
||||
|
@ -226,13 +227,13 @@ class NixInstallerAction {
|
|||
if (existing_install) {
|
||||
if (this.reinstall) {
|
||||
// We need to uninstall, then reinstall
|
||||
actions_core.info('Nix was already installed, `reinstall` is set, uninstalling for a reinstall');
|
||||
actions_core.info("Nix was already installed, `reinstall` is set, uninstalling for a reinstall");
|
||||
yield this.execute_uninstall();
|
||||
}
|
||||
else {
|
||||
// We're already installed, and not reinstalling, just set GITHUB_PATH and finish early
|
||||
this.set_github_path();
|
||||
actions_core.info('Nix was already installed, using existing install');
|
||||
actions_core.info("Nix was already installed, using existing install");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -243,31 +244,30 @@ class NixInstallerAction {
|
|||
});
|
||||
}
|
||||
set_github_path() {
|
||||
actions_core.addPath('/nix/var/nix/profiles/default/bin');
|
||||
actions_core.addPath("/nix/var/nix/profiles/default/bin");
|
||||
actions_core.addPath(`${process.env.HOME}/.nix-profile/bin`);
|
||||
}
|
||||
execute_uninstall() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const spawned = (0, node_child_process_1.spawn)(`/nix/nix-installer`, ['uninstall'], {
|
||||
env: Object.assign({ NIX_INSTALLER_NO_CONFIRM: 'true' }, process.env // To get $PATH, etc
|
||||
)
|
||||
const spawned = (0, node_child_process_1.spawn)(`/nix/nix-installer`, ["uninstall"], {
|
||||
env: Object.assign({ NIX_INSTALLER_NO_CONFIRM: "true" }, process.env),
|
||||
});
|
||||
spawned.stdout.setEncoding('utf-8');
|
||||
spawned.stdout.on('data', data => {
|
||||
spawned.stdout.setEncoding("utf-8");
|
||||
spawned.stdout.on("data", (data) => {
|
||||
const trimmed = data.trimEnd();
|
||||
if (trimmed.length >= 0) {
|
||||
actions_core.info(trimmed);
|
||||
}
|
||||
});
|
||||
spawned.stderr.setEncoding('utf-8');
|
||||
spawned.stderr.on('data', data => {
|
||||
spawned.stderr.setEncoding("utf-8");
|
||||
spawned.stderr.on("data", (data) => {
|
||||
const trimmed = data.trimEnd();
|
||||
if (trimmed.length >= 0) {
|
||||
actions_core.info(trimmed);
|
||||
}
|
||||
});
|
||||
const exit_code = yield new Promise((resolve, _reject) => {
|
||||
spawned.on('close', resolve);
|
||||
spawned.on("close", resolve);
|
||||
});
|
||||
if (exit_code !== 0) {
|
||||
throw new Error(`Non-zero exit code of \`${exit_code}\` detected`);
|
||||
|
@ -277,7 +277,7 @@ class NixInstallerAction {
|
|||
}
|
||||
detect_existing() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const receipt_path = '/nix/receipt.json';
|
||||
const receipt_path = "/nix/receipt.json";
|
||||
// TODO: Maybe this should be a bit smarter?
|
||||
try {
|
||||
yield (0, promises_1.access)(receipt_path);
|
||||
|
@ -298,7 +298,7 @@ class NixInstallerAction {
|
|||
if (!response.ok) {
|
||||
throw new Error(`Got a status of ${response.status} from \`${this.nix_installer_url}\`, expected a 200`);
|
||||
}
|
||||
const tempdir = yield (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'nix-installer-'));
|
||||
const tempdir = yield (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "nix-installer-"));
|
||||
const tempfile = (0, node_path_1.join)(tempdir, `nix-installer-${this.platform}`);
|
||||
if (!response.ok) {
|
||||
throw new Error(`unexpected response ${response.statusText}`);
|
||||
|
@ -309,7 +309,7 @@ class NixInstallerAction {
|
|||
actions_core.info(`Downloaded \`nix-installer\` to \`${tempfile}\``);
|
||||
}
|
||||
else {
|
||||
throw new Error('No response body recieved');
|
||||
throw new Error("No response body recieved");
|
||||
}
|
||||
// Make executable
|
||||
yield (0, promises_1.chmod)(tempfile, node_fs_1.default.constants.S_IXUSR | node_fs_1.default.constants.S_IXGRP);
|
||||
|
@ -326,17 +326,17 @@ class NixInstallerAction {
|
|||
function get_nix_platform() {
|
||||
const env_os = process.env.RUNNER_OS;
|
||||
const env_arch = process.env.RUNNER_ARCH;
|
||||
if (env_os === 'macOS' && env_arch === 'X64') {
|
||||
return 'x86_64-darwin';
|
||||
if (env_os === "macOS" && env_arch === "X64") {
|
||||
return "x86_64-darwin";
|
||||
}
|
||||
else if (env_os === 'macOS' && env_arch === 'ARM64') {
|
||||
return 'aarch64-darwin';
|
||||
else if (env_os === "macOS" && env_arch === "ARM64") {
|
||||
return "aarch64-darwin";
|
||||
}
|
||||
else if (env_os === 'Linux' && env_arch === 'X64') {
|
||||
return 'x86_64-linux';
|
||||
else if (env_os === "Linux" && env_arch === "X64") {
|
||||
return "x86_64-linux";
|
||||
}
|
||||
else if (env_os === 'Linux' && env_arch === 'ARM64') {
|
||||
return 'aarch64-linux';
|
||||
else if (env_os === "Linux" && env_arch === "ARM64") {
|
||||
return "aarch64-linux";
|
||||
}
|
||||
else {
|
||||
throw new Error(`Unsupported \`RUNNER_OS\` (currently \`${env_os}\`) and \`RUNNER_ARCH\` (currently \`${env_arch}\`) combination`);
|
||||
|
@ -344,11 +344,11 @@ function get_nix_platform() {
|
|||
}
|
||||
function get_default_planner() {
|
||||
const env_os = process.env.RUNNER_OS;
|
||||
if (env_os === 'macOS') {
|
||||
return 'macos';
|
||||
if (env_os === "macOS") {
|
||||
return "macos";
|
||||
}
|
||||
else if (env_os === 'Linux') {
|
||||
return 'linux';
|
||||
else if (env_os === "Linux") {
|
||||
return "linux";
|
||||
}
|
||||
else {
|
||||
throw new Error(`Unsupported \`RUNNER_OS\` (currently \`${env_os}\`)`);
|
||||
|
@ -356,11 +356,11 @@ function get_default_planner() {
|
|||
}
|
||||
function resolve_nix_installer_url(platform) {
|
||||
// Only one of these are allowed.
|
||||
const nix_installer_branch = action_input_string_or_null('nix-installer-branch');
|
||||
const nix_installer_pr = action_input_number_or_null('nix-installer-pr');
|
||||
const nix_installer_revision = action_input_string_or_null('nix-installer-revision');
|
||||
const nix_installer_tag = action_input_string_or_null('nix-installer-tag');
|
||||
const nix_installer_url = action_input_string_or_null('nix-installer-url');
|
||||
const nix_installer_branch = action_input_string_or_null("nix-installer-branch");
|
||||
const nix_installer_pr = action_input_number_or_null("nix-installer-pr");
|
||||
const nix_installer_revision = action_input_string_or_null("nix-installer-revision");
|
||||
const nix_installer_tag = action_input_string_or_null("nix-installer-tag");
|
||||
const nix_installer_url = action_input_string_or_null("nix-installer-url");
|
||||
let num_set = 0;
|
||||
if (nix_installer_branch !== null) {
|
||||
num_set += 1;
|
||||
|
@ -401,7 +401,7 @@ function resolve_nix_installer_url(platform) {
|
|||
}
|
||||
function action_input_string_or_null(name) {
|
||||
const value = actions_core.getInput(name);
|
||||
if (value === '') {
|
||||
if (value === "") {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
|
@ -419,7 +419,7 @@ function action_input_multiline_string_or_null(name) {
|
|||
}
|
||||
function action_input_number_or_null(name) {
|
||||
const value = actions_core.getInput(name);
|
||||
if (value === '') {
|
||||
if (value === "") {
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
|
|
2
dist/index.js.map
vendored
2
dist/index.js.map
vendored
File diff suppressed because one or more lines are too long
532
src/main.ts
532
src/main.ts
|
@ -1,524 +1,528 @@
|
|||
import * as actions_core from '@actions/core'
|
||||
import {mkdtemp, chmod, access} from 'node:fs/promises'
|
||||
import {spawn} from 'node:child_process'
|
||||
import {join} from 'node:path'
|
||||
import {tmpdir} from 'node:os'
|
||||
import {pipeline} from 'node:stream'
|
||||
import fetch from 'node-fetch'
|
||||
import {promisify} from 'node:util'
|
||||
import fs from 'node:fs'
|
||||
import stringArgv from 'string-argv'
|
||||
import * as actions_core from "@actions/core";
|
||||
import { mkdtemp, chmod, access } from "node:fs/promises";
|
||||
import { spawn } from "node:child_process";
|
||||
import { join } from "node:path";
|
||||
import { tmpdir } from "node:os";
|
||||
import { pipeline } from "node:stream";
|
||||
import fetch from "node-fetch";
|
||||
import { promisify } from "node:util";
|
||||
import fs from "node:fs";
|
||||
import stringArgv from "string-argv";
|
||||
|
||||
class NixInstallerAction {
|
||||
platform: string
|
||||
nix_package_url: string | null
|
||||
backtrace: string | null
|
||||
extra_args: string | null
|
||||
extra_conf: string[] | null
|
||||
github_token: string | null
|
||||
platform: string;
|
||||
nix_package_url: string | null;
|
||||
backtrace: string | null;
|
||||
extra_args: string | null;
|
||||
extra_conf: string[] | null;
|
||||
github_token: string | null;
|
||||
// TODO: linux_init
|
||||
init: string | null
|
||||
local_root: string | null
|
||||
log_directives: string | null
|
||||
logger: string | null
|
||||
ssl_cert_file: string | null
|
||||
proxy: string | null
|
||||
mac_case_sensitive: string | null
|
||||
mac_encrypt: string | null
|
||||
mac_root_disk: string | null
|
||||
mac_volume_label: string | null
|
||||
modify_profile: boolean
|
||||
nix_build_group_id: number | null
|
||||
nix_build_group_name: string | null
|
||||
nix_build_user_base: number | null
|
||||
nix_build_user_count: number | null
|
||||
nix_build_user_prefix: string | null
|
||||
planner: string | null
|
||||
reinstall: boolean
|
||||
start_daemon: boolean
|
||||
diagnostic_endpoint: string | null
|
||||
trust_runner_user: boolean | null
|
||||
nix_installer_url: URL
|
||||
init: string | null;
|
||||
local_root: string | null;
|
||||
log_directives: string | null;
|
||||
logger: string | null;
|
||||
ssl_cert_file: string | null;
|
||||
proxy: string | null;
|
||||
mac_case_sensitive: string | null;
|
||||
mac_encrypt: string | null;
|
||||
mac_root_disk: string | null;
|
||||
mac_volume_label: string | null;
|
||||
modify_profile: boolean;
|
||||
nix_build_group_id: number | null;
|
||||
nix_build_group_name: string | null;
|
||||
nix_build_user_base: number | null;
|
||||
nix_build_user_count: number | null;
|
||||
nix_build_user_prefix: string | null;
|
||||
planner: string | null;
|
||||
reinstall: boolean;
|
||||
start_daemon: boolean;
|
||||
diagnostic_endpoint: string | null;
|
||||
trust_runner_user: boolean | null;
|
||||
nix_installer_url: URL;
|
||||
|
||||
constructor() {
|
||||
this.platform = get_nix_platform()
|
||||
this.nix_package_url = action_input_string_or_null('nix-package-url')
|
||||
this.backtrace = action_input_string_or_null('backtrace')
|
||||
this.extra_args = action_input_string_or_null('extra-args')
|
||||
this.extra_conf = action_input_multiline_string_or_null('extra-conf')
|
||||
this.github_token = action_input_string_or_null('github-token')
|
||||
this.init = action_input_string_or_null('init')
|
||||
this.local_root = action_input_string_or_null('local-root')
|
||||
this.log_directives = action_input_string_or_null('log-directives')
|
||||
this.logger = action_input_string_or_null('logger')
|
||||
this.ssl_cert_file = action_input_string_or_null('ssl-cert-file')
|
||||
this.proxy = action_input_string_or_null('proxy')
|
||||
this.mac_case_sensitive = action_input_string_or_null('mac-case-sensitive')
|
||||
this.mac_encrypt = action_input_string_or_null('mac-encrypt')
|
||||
this.mac_root_disk = action_input_string_or_null('mac-root-disk')
|
||||
this.mac_volume_label = action_input_string_or_null('mac-volume-label')
|
||||
this.modify_profile = action_input_bool('modify-profile')
|
||||
this.nix_build_group_id = action_input_number_or_null('nix-build-group-id')
|
||||
this.platform = get_nix_platform();
|
||||
this.nix_package_url = action_input_string_or_null("nix-package-url");
|
||||
this.backtrace = action_input_string_or_null("backtrace");
|
||||
this.extra_args = action_input_string_or_null("extra-args");
|
||||
this.extra_conf = action_input_multiline_string_or_null("extra-conf");
|
||||
this.github_token = action_input_string_or_null("github-token");
|
||||
this.init = action_input_string_or_null("init");
|
||||
this.local_root = action_input_string_or_null("local-root");
|
||||
this.log_directives = action_input_string_or_null("log-directives");
|
||||
this.logger = action_input_string_or_null("logger");
|
||||
this.ssl_cert_file = action_input_string_or_null("ssl-cert-file");
|
||||
this.proxy = action_input_string_or_null("proxy");
|
||||
this.mac_case_sensitive = action_input_string_or_null("mac-case-sensitive");
|
||||
this.mac_encrypt = action_input_string_or_null("mac-encrypt");
|
||||
this.mac_root_disk = action_input_string_or_null("mac-root-disk");
|
||||
this.mac_volume_label = action_input_string_or_null("mac-volume-label");
|
||||
this.modify_profile = action_input_bool("modify-profile");
|
||||
this.nix_build_group_id = action_input_number_or_null("nix-build-group-id");
|
||||
this.nix_build_group_name = action_input_string_or_null(
|
||||
'nix-build-group-name'
|
||||
)
|
||||
"nix-build-group-name",
|
||||
);
|
||||
this.nix_build_user_base = action_input_number_or_null(
|
||||
'nix_build-user-base'
|
||||
)
|
||||
"nix_build-user-base",
|
||||
);
|
||||
this.nix_build_user_count = action_input_number_or_null(
|
||||
'nix-build-user-count'
|
||||
)
|
||||
"nix-build-user-count",
|
||||
);
|
||||
this.nix_build_user_prefix = action_input_string_or_null(
|
||||
'nix-build-user-prefix'
|
||||
)
|
||||
this.planner = action_input_string_or_null('planner')
|
||||
this.reinstall = action_input_bool('reinstall')
|
||||
this.start_daemon = action_input_bool('start-daemon')
|
||||
"nix-build-user-prefix",
|
||||
);
|
||||
this.planner = action_input_string_or_null("planner");
|
||||
this.reinstall = action_input_bool("reinstall");
|
||||
this.start_daemon = action_input_bool("start-daemon");
|
||||
this.diagnostic_endpoint = action_input_string_or_null(
|
||||
'diagnostic-endpoint'
|
||||
)
|
||||
this.trust_runner_user = action_input_bool('trust-runner-user')
|
||||
this.nix_installer_url = resolve_nix_installer_url(this.platform)
|
||||
"diagnostic-endpoint",
|
||||
);
|
||||
this.trust_runner_user = action_input_bool("trust-runner-user");
|
||||
this.nix_installer_url = resolve_nix_installer_url(this.platform);
|
||||
}
|
||||
|
||||
private executionEnvironment(): ExecuteEnvironment {
|
||||
const execution_env: ExecuteEnvironment = {}
|
||||
const execution_env: ExecuteEnvironment = {};
|
||||
|
||||
execution_env.NIX_INSTALLER_NO_CONFIRM = 'true'
|
||||
execution_env.NIX_INSTALLER_NO_CONFIRM = "true";
|
||||
|
||||
if (this.backtrace !== null) {
|
||||
execution_env.RUST_BACKTRACE = this.backtrace
|
||||
execution_env.RUST_BACKTRACE = this.backtrace;
|
||||
}
|
||||
if (this.modify_profile !== null) {
|
||||
if (this.modify_profile) {
|
||||
execution_env.NIX_INSTALLER_MODIFY_PROFILE = 'true'
|
||||
execution_env.NIX_INSTALLER_MODIFY_PROFILE = "true";
|
||||
} else {
|
||||
execution_env.NIX_INSTALLER_MODIFY_PROFILE = 'false'
|
||||
execution_env.NIX_INSTALLER_MODIFY_PROFILE = "false";
|
||||
}
|
||||
}
|
||||
|
||||
if (this.nix_build_group_id !== null) {
|
||||
execution_env.NIX_INSTALLER_NIX_BUILD_GROUP_ID = `${this.nix_build_group_id}`
|
||||
execution_env.NIX_INSTALLER_NIX_BUILD_GROUP_ID = `${this.nix_build_group_id}`;
|
||||
}
|
||||
|
||||
if (this.nix_build_group_name !== null) {
|
||||
execution_env.NIX_INSTALLER_NIX_BUILD_GROUP_NAME =
|
||||
this.nix_build_group_name
|
||||
this.nix_build_group_name;
|
||||
}
|
||||
|
||||
if (this.nix_build_user_prefix !== null) {
|
||||
execution_env.NIX_INSTALLER_NIX_BUILD_USER_PREFIX =
|
||||
this.nix_build_user_prefix
|
||||
this.nix_build_user_prefix;
|
||||
}
|
||||
|
||||
if (this.nix_build_user_count !== null) {
|
||||
execution_env.NIX_INSTALLER_NIX_BUILD_USER_COUNT = `${this.nix_build_user_count}`
|
||||
execution_env.NIX_INSTALLER_NIX_BUILD_USER_COUNT = `${this.nix_build_user_count}`;
|
||||
}
|
||||
|
||||
if (this.nix_build_user_base !== null) {
|
||||
execution_env.NIX_INSTALLER_NIX_BUILD_USER_ID_BASE = `${this.nix_build_user_count}`
|
||||
execution_env.NIX_INSTALLER_NIX_BUILD_USER_ID_BASE = `${this.nix_build_user_count}`;
|
||||
}
|
||||
|
||||
if (this.nix_package_url !== null) {
|
||||
execution_env.NIX_INSTALLER_NIX_PACKAGE_URL = `${this.nix_package_url}`
|
||||
execution_env.NIX_INSTALLER_NIX_PACKAGE_URL = `${this.nix_package_url}`;
|
||||
}
|
||||
|
||||
if (this.proxy !== null) {
|
||||
execution_env.NIX_INSTALLER_PROXY = this.proxy
|
||||
execution_env.NIX_INSTALLER_PROXY = this.proxy;
|
||||
}
|
||||
|
||||
if (this.ssl_cert_file !== null) {
|
||||
execution_env.NIX_INSTALLER_SSL_CERT_FILE = this.ssl_cert_file
|
||||
execution_env.NIX_INSTALLER_SSL_CERT_FILE = this.ssl_cert_file;
|
||||
}
|
||||
|
||||
if (this.diagnostic_endpoint !== null) {
|
||||
execution_env.NIX_INSTALLER_DIAGNOSTIC_ENDPOINT = this.diagnostic_endpoint
|
||||
execution_env.NIX_INSTALLER_DIAGNOSTIC_ENDPOINT =
|
||||
this.diagnostic_endpoint;
|
||||
}
|
||||
|
||||
// TODO: Error if the user uses these on not-MacOS
|
||||
if (this.mac_encrypt !== null) {
|
||||
execution_env.NIX_INSTALLER_ENCRYPT = this.mac_encrypt
|
||||
execution_env.NIX_INSTALLER_ENCRYPT = this.mac_encrypt;
|
||||
}
|
||||
|
||||
if (this.mac_case_sensitive !== null) {
|
||||
execution_env.NIX_INSTALLER_CASE_SENSITIVE = this.mac_case_sensitive
|
||||
execution_env.NIX_INSTALLER_CASE_SENSITIVE = this.mac_case_sensitive;
|
||||
}
|
||||
|
||||
if (this.mac_volume_label !== null) {
|
||||
execution_env.NIX_INSTALLER_VOLUME_LABEL = this.mac_volume_label
|
||||
execution_env.NIX_INSTALLER_VOLUME_LABEL = this.mac_volume_label;
|
||||
}
|
||||
|
||||
if (this.mac_root_disk !== null) {
|
||||
execution_env.NIX_INSTALLER_ROOT_DISK = this.mac_root_disk
|
||||
execution_env.NIX_INSTALLER_ROOT_DISK = this.mac_root_disk;
|
||||
}
|
||||
|
||||
if (this.logger !== null) {
|
||||
execution_env.NIX_INSTALLER_LOGGER = this.logger
|
||||
execution_env.NIX_INSTALLER_LOGGER = this.logger;
|
||||
}
|
||||
|
||||
if (this.log_directives !== null) {
|
||||
execution_env.NIX_INSTALLER_LOG_DIRECTIVES = this.log_directives
|
||||
execution_env.NIX_INSTALLER_LOG_DIRECTIVES = this.log_directives;
|
||||
}
|
||||
|
||||
// TODO: Error if the user uses these on MacOS
|
||||
if (this.init !== null) {
|
||||
execution_env.NIX_INSTALLER_INIT = this.init
|
||||
execution_env.NIX_INSTALLER_INIT = this.init;
|
||||
}
|
||||
|
||||
if (this.start_daemon !== null) {
|
||||
if (this.start_daemon) {
|
||||
execution_env.NIX_INSTALLER_START_DAEMON = 'true'
|
||||
execution_env.NIX_INSTALLER_START_DAEMON = "true";
|
||||
} else {
|
||||
execution_env.NIX_INSTALLER_START_DAEMON = 'false'
|
||||
execution_env.NIX_INSTALLER_START_DAEMON = "false";
|
||||
}
|
||||
}
|
||||
|
||||
let extra_conf = ''
|
||||
let extra_conf = "";
|
||||
if (this.github_token !== null) {
|
||||
extra_conf += `access-tokens = github.com=${this.github_token}`
|
||||
extra_conf += '\n'
|
||||
extra_conf += `access-tokens = github.com=${this.github_token}`;
|
||||
extra_conf += "\n";
|
||||
}
|
||||
if (this.trust_runner_user !== null) {
|
||||
// TODO: Consider how to improve this
|
||||
extra_conf += `trusted-users = root ${process.env.USER}`
|
||||
extra_conf += '\n'
|
||||
extra_conf += `trusted-users = root ${process.env.USER}`;
|
||||
extra_conf += "\n";
|
||||
}
|
||||
if (this.extra_conf !== null && this.extra_conf.length !== 0) {
|
||||
extra_conf += this.extra_conf.join('\n')
|
||||
extra_conf += '\n'
|
||||
extra_conf += this.extra_conf.join("\n");
|
||||
extra_conf += "\n";
|
||||
}
|
||||
execution_env.NIX_INSTALLER_EXTRA_CONF = extra_conf
|
||||
execution_env.NIX_INSTALLER_EXTRA_CONF = extra_conf;
|
||||
|
||||
if (process.env.ACT && !process.env.NOT_ACT) {
|
||||
actions_core.info(
|
||||
'Detected `$ACT` environment, assuming this is a https://github.com/nektos/act created container, set `NOT_ACT=true` to override this. This will change the settings of the `init` as well as `extra-conf` to be compatible with `act`'
|
||||
)
|
||||
execution_env.NIX_INSTALLER_INIT = 'none'
|
||||
"Detected `$ACT` environment, assuming this is a https://github.com/nektos/act created container, set `NOT_ACT=true` to override this. This will change the settings of the `init` as well as `extra-conf` to be compatible with `act`",
|
||||
);
|
||||
execution_env.NIX_INSTALLER_INIT = "none";
|
||||
}
|
||||
|
||||
return execution_env
|
||||
return execution_env;
|
||||
}
|
||||
|
||||
private async execute_install(binary_path: string): Promise<number> {
|
||||
const execution_env = this.executionEnvironment()
|
||||
const execution_env = this.executionEnvironment();
|
||||
actions_core.info(
|
||||
`Execution environment: ${JSON.stringify(execution_env, null, 4)}`
|
||||
)
|
||||
`Execution environment: ${JSON.stringify(execution_env, null, 4)}`,
|
||||
);
|
||||
|
||||
const args = ['install']
|
||||
const args = ["install"];
|
||||
if (this.planner) {
|
||||
args.push(this.planner)
|
||||
args.push(this.planner);
|
||||
} else {
|
||||
args.push(get_default_planner())
|
||||
args.push(get_default_planner());
|
||||
}
|
||||
|
||||
if (this.extra_args) {
|
||||
const extra_args = stringArgv(this.extra_args)
|
||||
args.concat(extra_args)
|
||||
const extra_args = stringArgv(this.extra_args);
|
||||
args.concat(extra_args);
|
||||
}
|
||||
|
||||
const merged_env = {
|
||||
...process.env, // To get $PATH, etc
|
||||
...execution_env
|
||||
}
|
||||
...execution_env,
|
||||
};
|
||||
|
||||
const spawned = spawn(`${binary_path}`, args, {
|
||||
env: merged_env
|
||||
})
|
||||
env: merged_env,
|
||||
});
|
||||
|
||||
spawned.stdout.setEncoding('utf-8')
|
||||
spawned.stdout.on('data', data => {
|
||||
const trimmed = data.trimEnd()
|
||||
spawned.stdout.setEncoding("utf-8");
|
||||
spawned.stdout.on("data", (data) => {
|
||||
const trimmed = data.trimEnd();
|
||||
if (trimmed.length >= 0) {
|
||||
actions_core.info(trimmed)
|
||||
actions_core.info(trimmed);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
spawned.stderr.setEncoding('utf-8')
|
||||
spawned.stderr.on('data', data => {
|
||||
const trimmed = data.trimEnd()
|
||||
spawned.stderr.setEncoding("utf-8");
|
||||
spawned.stderr.on("data", (data) => {
|
||||
const trimmed = data.trimEnd();
|
||||
if (trimmed.length >= 0) {
|
||||
actions_core.info(trimmed)
|
||||
actions_core.info(trimmed);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
const exit_code: number = await new Promise((resolve, _reject) => {
|
||||
spawned.on('close', resolve)
|
||||
})
|
||||
spawned.on("close", resolve);
|
||||
});
|
||||
|
||||
if (exit_code !== 0) {
|
||||
throw new Error(`Non-zero exit code of \`${exit_code}\` detected`)
|
||||
throw new Error(`Non-zero exit code of \`${exit_code}\` detected`);
|
||||
}
|
||||
|
||||
return exit_code
|
||||
return exit_code;
|
||||
}
|
||||
|
||||
async install(): Promise<void> {
|
||||
const existing_install = await this.detect_existing()
|
||||
const existing_install = await this.detect_existing();
|
||||
if (existing_install) {
|
||||
if (this.reinstall) {
|
||||
// We need to uninstall, then reinstall
|
||||
actions_core.info(
|
||||
'Nix was already installed, `reinstall` is set, uninstalling for a reinstall'
|
||||
)
|
||||
await this.execute_uninstall()
|
||||
"Nix was already installed, `reinstall` is set, uninstalling for a reinstall",
|
||||
);
|
||||
await this.execute_uninstall();
|
||||
} else {
|
||||
// We're already installed, and not reinstalling, just set GITHUB_PATH and finish early
|
||||
this.set_github_path()
|
||||
actions_core.info('Nix was already installed, using existing install')
|
||||
return
|
||||
this.set_github_path();
|
||||
actions_core.info("Nix was already installed, using existing install");
|
||||
return;
|
||||
}
|
||||
}
|
||||
// Normal just doing of the install
|
||||
const binary_path = await this.fetch_binary()
|
||||
await this.execute_install(binary_path)
|
||||
const binary_path = await this.fetch_binary();
|
||||
await this.execute_install(binary_path);
|
||||
// TODO: Add `this.set_github_path()` and remove that from the installer crate
|
||||
}
|
||||
|
||||
set_github_path(): void {
|
||||
actions_core.addPath('/nix/var/nix/profiles/default/bin')
|
||||
actions_core.addPath(`${process.env.HOME}/.nix-profile/bin`)
|
||||
actions_core.addPath("/nix/var/nix/profiles/default/bin");
|
||||
actions_core.addPath(`${process.env.HOME}/.nix-profile/bin`);
|
||||
}
|
||||
|
||||
async execute_uninstall(): Promise<number> {
|
||||
const spawned = spawn(`/nix/nix-installer`, ['uninstall'], {
|
||||
const spawned = spawn(`/nix/nix-installer`, ["uninstall"], {
|
||||
env: {
|
||||
NIX_INSTALLER_NO_CONFIRM: 'true',
|
||||
...process.env // To get $PATH, etc
|
||||
}
|
||||
})
|
||||
NIX_INSTALLER_NO_CONFIRM: "true",
|
||||
...process.env, // To get $PATH, etc
|
||||
},
|
||||
});
|
||||
|
||||
spawned.stdout.setEncoding('utf-8')
|
||||
spawned.stdout.on('data', data => {
|
||||
const trimmed = data.trimEnd()
|
||||
spawned.stdout.setEncoding("utf-8");
|
||||
spawned.stdout.on("data", (data) => {
|
||||
const trimmed = data.trimEnd();
|
||||
if (trimmed.length >= 0) {
|
||||
actions_core.info(trimmed)
|
||||
actions_core.info(trimmed);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
spawned.stderr.setEncoding('utf-8')
|
||||
spawned.stderr.on('data', data => {
|
||||
const trimmed = data.trimEnd()
|
||||
spawned.stderr.setEncoding("utf-8");
|
||||
spawned.stderr.on("data", (data) => {
|
||||
const trimmed = data.trimEnd();
|
||||
if (trimmed.length >= 0) {
|
||||
actions_core.info(trimmed)
|
||||
actions_core.info(trimmed);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
const exit_code: number = await new Promise((resolve, _reject) => {
|
||||
spawned.on('close', resolve)
|
||||
})
|
||||
spawned.on("close", resolve);
|
||||
});
|
||||
|
||||
if (exit_code !== 0) {
|
||||
throw new Error(`Non-zero exit code of \`${exit_code}\` detected`)
|
||||
throw new Error(`Non-zero exit code of \`${exit_code}\` detected`);
|
||||
}
|
||||
|
||||
return exit_code
|
||||
return exit_code;
|
||||
}
|
||||
|
||||
async detect_existing(): Promise<boolean> {
|
||||
const receipt_path = '/nix/receipt.json'
|
||||
const receipt_path = "/nix/receipt.json";
|
||||
// TODO: Maybe this should be a bit smarter?
|
||||
try {
|
||||
await access(receipt_path)
|
||||
await access(receipt_path);
|
||||
// There is a /nix/receipt.json
|
||||
return true
|
||||
return true;
|
||||
} catch {
|
||||
// No /nix/receipt.json
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private async fetch_binary(): Promise<string> {
|
||||
if (!this.local_root) {
|
||||
actions_core.info(`Fetching binary from ${this.nix_installer_url}`)
|
||||
const response = await fetch(this.nix_installer_url)
|
||||
actions_core.info(`Fetching binary from ${this.nix_installer_url}`);
|
||||
const response = await fetch(this.nix_installer_url);
|
||||
if (!response.ok) {
|
||||
throw new Error(
|
||||
`Got a status of ${response.status} from \`${this.nix_installer_url}\`, expected a 200`
|
||||
)
|
||||
`Got a status of ${response.status} from \`${this.nix_installer_url}\`, expected a 200`,
|
||||
);
|
||||
}
|
||||
|
||||
const tempdir = await mkdtemp(join(tmpdir(), 'nix-installer-'))
|
||||
const tempfile = join(tempdir, `nix-installer-${this.platform}`)
|
||||
const tempdir = await mkdtemp(join(tmpdir(), "nix-installer-"));
|
||||
const tempfile = join(tempdir, `nix-installer-${this.platform}`);
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`unexpected response ${response.statusText}`)
|
||||
throw new Error(`unexpected response ${response.statusText}`);
|
||||
}
|
||||
|
||||
if (response.body !== null) {
|
||||
const streamPipeline = promisify(pipeline)
|
||||
await streamPipeline(response.body, fs.createWriteStream(tempfile))
|
||||
actions_core.info(`Downloaded \`nix-installer\` to \`${tempfile}\``)
|
||||
const streamPipeline = promisify(pipeline);
|
||||
await streamPipeline(response.body, fs.createWriteStream(tempfile));
|
||||
actions_core.info(`Downloaded \`nix-installer\` to \`${tempfile}\``);
|
||||
} else {
|
||||
throw new Error('No response body recieved')
|
||||
throw new Error("No response body recieved");
|
||||
}
|
||||
|
||||
// Make executable
|
||||
await chmod(tempfile, fs.constants.S_IXUSR | fs.constants.S_IXGRP)
|
||||
await chmod(tempfile, fs.constants.S_IXUSR | fs.constants.S_IXGRP);
|
||||
|
||||
return tempfile
|
||||
return tempfile;
|
||||
} else {
|
||||
const local_path = join(this.local_root, `nix-installer-${this.platform}`)
|
||||
actions_core.info(`Using binary ${local_path}`)
|
||||
return local_path
|
||||
const local_path = join(
|
||||
this.local_root,
|
||||
`nix-installer-${this.platform}`,
|
||||
);
|
||||
actions_core.info(`Using binary ${local_path}`);
|
||||
return local_path;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type ExecuteEnvironment = {
|
||||
// All env vars are strings, no fanciness here.
|
||||
RUST_BACKTRACE?: string
|
||||
NIX_INSTALLER_MODIFY_PROFILE?: string
|
||||
NIX_INSTALLER_NIX_BUILD_GROUP_NAME?: string
|
||||
NIX_INSTALLER_NIX_BUILD_GROUP_ID?: string
|
||||
NIX_INSTALLER_NIX_BUILD_USER_PREFIX?: string
|
||||
NIX_INSTALLER_NIX_BUILD_USER_COUNT?: string
|
||||
NIX_INSTALLER_NIX_BUILD_USER_ID_BASE?: string
|
||||
NIX_INSTALLER_NIX_PACKAGE_URL?: string
|
||||
NIX_INSTALLER_PROXY?: string
|
||||
NIX_INSTALLER_SSL_CERT_FILE?: string
|
||||
NIX_INSTALLER_DIAGNOSTIC_ENDPOINT?: string
|
||||
NIX_INSTALLER_ENCRYPT?: string
|
||||
NIX_INSTALLER_CASE_SENSITIVE?: string
|
||||
NIX_INSTALLER_VOLUME_LABEL?: string
|
||||
NIX_INSTALLER_ROOT_DISK?: string
|
||||
NIX_INSTALLER_INIT?: string
|
||||
NIX_INSTALLER_START_DAEMON?: string
|
||||
NIX_INSTALLER_NO_CONFIRM?: string
|
||||
NIX_INSTALLER_EXTRA_CONF?: string
|
||||
NIX_INSTALLER_LOG_DIRECTIVES?: string
|
||||
NIX_INSTALLER_LOGGER?: string
|
||||
}
|
||||
RUST_BACKTRACE?: string;
|
||||
NIX_INSTALLER_MODIFY_PROFILE?: string;
|
||||
NIX_INSTALLER_NIX_BUILD_GROUP_NAME?: string;
|
||||
NIX_INSTALLER_NIX_BUILD_GROUP_ID?: string;
|
||||
NIX_INSTALLER_NIX_BUILD_USER_PREFIX?: string;
|
||||
NIX_INSTALLER_NIX_BUILD_USER_COUNT?: string;
|
||||
NIX_INSTALLER_NIX_BUILD_USER_ID_BASE?: string;
|
||||
NIX_INSTALLER_NIX_PACKAGE_URL?: string;
|
||||
NIX_INSTALLER_PROXY?: string;
|
||||
NIX_INSTALLER_SSL_CERT_FILE?: string;
|
||||
NIX_INSTALLER_DIAGNOSTIC_ENDPOINT?: string;
|
||||
NIX_INSTALLER_ENCRYPT?: string;
|
||||
NIX_INSTALLER_CASE_SENSITIVE?: string;
|
||||
NIX_INSTALLER_VOLUME_LABEL?: string;
|
||||
NIX_INSTALLER_ROOT_DISK?: string;
|
||||
NIX_INSTALLER_INIT?: string;
|
||||
NIX_INSTALLER_START_DAEMON?: string;
|
||||
NIX_INSTALLER_NO_CONFIRM?: string;
|
||||
NIX_INSTALLER_EXTRA_CONF?: string;
|
||||
NIX_INSTALLER_LOG_DIRECTIVES?: string;
|
||||
NIX_INSTALLER_LOGGER?: string;
|
||||
};
|
||||
|
||||
function get_nix_platform(): string {
|
||||
const env_os = process.env.RUNNER_OS
|
||||
const env_arch = process.env.RUNNER_ARCH
|
||||
const env_os = process.env.RUNNER_OS;
|
||||
const env_arch = process.env.RUNNER_ARCH;
|
||||
|
||||
if (env_os === 'macOS' && env_arch === 'X64') {
|
||||
return 'x86_64-darwin'
|
||||
} else if (env_os === 'macOS' && env_arch === 'ARM64') {
|
||||
return 'aarch64-darwin'
|
||||
} else if (env_os === 'Linux' && env_arch === 'X64') {
|
||||
return 'x86_64-linux'
|
||||
} else if (env_os === 'Linux' && env_arch === 'ARM64') {
|
||||
return 'aarch64-linux'
|
||||
if (env_os === "macOS" && env_arch === "X64") {
|
||||
return "x86_64-darwin";
|
||||
} else if (env_os === "macOS" && env_arch === "ARM64") {
|
||||
return "aarch64-darwin";
|
||||
} else if (env_os === "Linux" && env_arch === "X64") {
|
||||
return "x86_64-linux";
|
||||
} else if (env_os === "Linux" && env_arch === "ARM64") {
|
||||
return "aarch64-linux";
|
||||
} else {
|
||||
throw new Error(
|
||||
`Unsupported \`RUNNER_OS\` (currently \`${env_os}\`) and \`RUNNER_ARCH\` (currently \`${env_arch}\`) combination`
|
||||
)
|
||||
`Unsupported \`RUNNER_OS\` (currently \`${env_os}\`) and \`RUNNER_ARCH\` (currently \`${env_arch}\`) combination`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function get_default_planner(): string {
|
||||
const env_os = process.env.RUNNER_OS
|
||||
const env_os = process.env.RUNNER_OS;
|
||||
|
||||
if (env_os === 'macOS') {
|
||||
return 'macos'
|
||||
} else if (env_os === 'Linux') {
|
||||
return 'linux'
|
||||
if (env_os === "macOS") {
|
||||
return "macos";
|
||||
} else if (env_os === "Linux") {
|
||||
return "linux";
|
||||
} else {
|
||||
throw new Error(`Unsupported \`RUNNER_OS\` (currently \`${env_os}\`)`)
|
||||
throw new Error(`Unsupported \`RUNNER_OS\` (currently \`${env_os}\`)`);
|
||||
}
|
||||
}
|
||||
|
||||
function resolve_nix_installer_url(platform: string): URL {
|
||||
// Only one of these are allowed.
|
||||
const nix_installer_branch = action_input_string_or_null(
|
||||
'nix-installer-branch'
|
||||
)
|
||||
const nix_installer_pr = action_input_number_or_null('nix-installer-pr')
|
||||
"nix-installer-branch",
|
||||
);
|
||||
const nix_installer_pr = action_input_number_or_null("nix-installer-pr");
|
||||
const nix_installer_revision = action_input_string_or_null(
|
||||
'nix-installer-revision'
|
||||
)
|
||||
const nix_installer_tag = action_input_string_or_null('nix-installer-tag')
|
||||
const nix_installer_url = action_input_string_or_null('nix-installer-url')
|
||||
"nix-installer-revision",
|
||||
);
|
||||
const nix_installer_tag = action_input_string_or_null("nix-installer-tag");
|
||||
const nix_installer_url = action_input_string_or_null("nix-installer-url");
|
||||
|
||||
let num_set = 0
|
||||
let num_set = 0;
|
||||
if (nix_installer_branch !== null) {
|
||||
num_set += 1
|
||||
num_set += 1;
|
||||
}
|
||||
if (nix_installer_pr !== null) {
|
||||
num_set += 1
|
||||
num_set += 1;
|
||||
}
|
||||
if (nix_installer_revision !== null) {
|
||||
num_set += 1
|
||||
num_set += 1;
|
||||
}
|
||||
if (nix_installer_tag !== null) {
|
||||
num_set += 1
|
||||
num_set += 1;
|
||||
}
|
||||
if (nix_installer_url !== null) {
|
||||
num_set += 1
|
||||
num_set += 1;
|
||||
}
|
||||
if (num_set > 1) {
|
||||
throw new Error(
|
||||
`The following options are mututally exclusive, but ${num_set} were set: \`nix_installer_branch\`, \`nix_installer_pr\`, \`nix_installer_revision\`, \`nix_installer_tag\`, and \`nix_installer_url\``
|
||||
)
|
||||
`The following options are mututally exclusive, but ${num_set} were set: \`nix_installer_branch\`, \`nix_installer_pr\`, \`nix_installer_revision\`, \`nix_installer_tag\`, and \`nix_installer_url\``,
|
||||
);
|
||||
}
|
||||
|
||||
if (nix_installer_branch !== null) {
|
||||
return new URL(
|
||||
`https://install.determinate.systems/nix/branch/${nix_installer_branch}/nix-installer-${platform}?ci=github`
|
||||
)
|
||||
`https://install.determinate.systems/nix/branch/${nix_installer_branch}/nix-installer-${platform}?ci=github`,
|
||||
);
|
||||
} else if (nix_installer_pr !== null) {
|
||||
return new URL(
|
||||
`https://install.determinate.systems/nix/pr/${nix_installer_pr}/nix-installer-${platform}?ci=github`
|
||||
)
|
||||
`https://install.determinate.systems/nix/pr/${nix_installer_pr}/nix-installer-${platform}?ci=github`,
|
||||
);
|
||||
} else if (nix_installer_revision !== null) {
|
||||
return new URL(
|
||||
`https://install.determinate.systems/nix/rev/${nix_installer_revision}/nix-installer-${platform}?ci=github`
|
||||
)
|
||||
`https://install.determinate.systems/nix/rev/${nix_installer_revision}/nix-installer-${platform}?ci=github`,
|
||||
);
|
||||
} else if (nix_installer_tag !== null) {
|
||||
return new URL(
|
||||
`https://install.determinate.systems/nix/tag/${nix_installer_tag}/nix-installer-${platform}?ci=github`
|
||||
)
|
||||
`https://install.determinate.systems/nix/tag/${nix_installer_tag}/nix-installer-${platform}?ci=github`,
|
||||
);
|
||||
} else if (nix_installer_url !== null) {
|
||||
return new URL(nix_installer_url)
|
||||
return new URL(nix_installer_url);
|
||||
} else {
|
||||
return new URL(
|
||||
`https://install.determinate.systems/nix/nix-installer-${platform}?ci=github`
|
||||
)
|
||||
`https://install.determinate.systems/nix/nix-installer-${platform}?ci=github`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function action_input_string_or_null(name: string): string | null {
|
||||
const value = actions_core.getInput(name)
|
||||
if (value === '') {
|
||||
return null
|
||||
const value = actions_core.getInput(name);
|
||||
if (value === "") {
|
||||
return null;
|
||||
} else {
|
||||
return value
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
function action_input_multiline_string_or_null(name: string): string[] | null {
|
||||
const value = actions_core.getMultilineInput(name)
|
||||
const value = actions_core.getMultilineInput(name);
|
||||
if (value.length === 0) {
|
||||
return null
|
||||
return null;
|
||||
} else {
|
||||
return value
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
function action_input_number_or_null(name: string): number | null {
|
||||
const value = actions_core.getInput(name)
|
||||
if (value === '') {
|
||||
return null
|
||||
const value = actions_core.getInput(name);
|
||||
if (value === "") {
|
||||
return null;
|
||||
} else {
|
||||
return Number(value)
|
||||
return Number(value);
|
||||
}
|
||||
}
|
||||
|
||||
function action_input_bool(name: string): boolean {
|
||||
return actions_core.getBooleanInput(name)
|
||||
return actions_core.getBooleanInput(name);
|
||||
}
|
||||
|
||||
async function main(): Promise<void> {
|
||||
try {
|
||||
const installer = new NixInstallerAction()
|
||||
const installer = new NixInstallerAction();
|
||||
|
||||
await installer.install()
|
||||
await installer.install();
|
||||
} catch (error) {
|
||||
if (error instanceof Error) actions_core.setFailed(error)
|
||||
if (error instanceof Error) actions_core.setFailed(error);
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
main();
|
||||
|
|
Loading…
Reference in a new issue