mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
feat: allow safe-chain cliArguments from environment
This commit is contained in:
parent
5b6fe659c2
commit
14b85bd1b8
2 changed files with 68 additions and 10 deletions
|
|
@ -8,7 +8,14 @@ const state = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const SAFE_CHAIN_ARG_PREFIX = "--safe-chain-";
|
const SAFE_CHAIN_ARG_PREFIX = "--safe-chain-";
|
||||||
|
const SAFE_CHAIN_ENV_PREFIX = "SAFE_CHAIN_";
|
||||||
|
const ENV_BOOL_TRUE_VALUES = ["1", "true", "yes"];
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {unknown} value
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
const isEnvBoolTrue = (value) => !!value && ENV_BOOL_TRUE_VALUES.includes(String(value).toLowerCase());
|
||||||
/**
|
/**
|
||||||
* @param {string[]} args
|
* @param {string[]} args
|
||||||
* @returns {string[]}
|
* @returns {string[]}
|
||||||
|
|
@ -57,13 +64,17 @@ function getLastArgEqualsValue(args, prefix) {
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
function setLoggingLevel(args) {
|
function setLoggingLevel(args) {
|
||||||
const safeChainLoggingArg = SAFE_CHAIN_ARG_PREFIX + "logging=";
|
// First, check environment variable
|
||||||
|
const envValue = process.env[SAFE_CHAIN_ENV_PREFIX + "LOGGING"];
|
||||||
const level = getLastArgEqualsValue(args, safeChainLoggingArg);
|
if (envValue) {
|
||||||
if (!level) {
|
state.loggingLevel = envValue.toLowerCase();
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
// CLI flag overrides environment variable
|
||||||
|
const cliValue = getLastArgEqualsValue(args, SAFE_CHAIN_ARG_PREFIX + "logging=");
|
||||||
|
if (cliValue) {
|
||||||
|
state.loggingLevel = cliValue.toLowerCase();
|
||||||
}
|
}
|
||||||
state.loggingLevel = level.toLowerCase();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getLoggingLevel() {
|
export function getLoggingLevel() {
|
||||||
|
|
@ -75,9 +86,14 @@ export function getLoggingLevel() {
|
||||||
* @returns {void}
|
* @returns {void}
|
||||||
*/
|
*/
|
||||||
function setSkipMinimumPackageAge(args) {
|
function setSkipMinimumPackageAge(args) {
|
||||||
const flagName = SAFE_CHAIN_ARG_PREFIX + "skip-minimum-package-age";
|
// First, check environment variable
|
||||||
|
const envValue = process.env[SAFE_CHAIN_ENV_PREFIX + "SKIP_MINIMUM_PACKAGE_AGE"];
|
||||||
|
if (isEnvBoolTrue(envValue)) {
|
||||||
|
state.skipMinimumPackageAge = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (hasFlagArg(args, flagName)) {
|
// CLI flag overrides (always sets to true when present)
|
||||||
|
if (hasFlagArg(args, SAFE_CHAIN_ARG_PREFIX + "skip-minimum-package-age")) {
|
||||||
state.skipMinimumPackageAge = true;
|
state.skipMinimumPackageAge = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { describe, it } from "node:test";
|
import { describe, it, afterEach } from "node:test";
|
||||||
import assert from "node:assert";
|
import assert from "node:assert";
|
||||||
import {
|
import {
|
||||||
initializeCliArguments,
|
initializeCliArguments,
|
||||||
|
|
@ -179,3 +179,45 @@ describe("initializeCliArguments", () => {
|
||||||
assert.strictEqual(getSkipMinimumPackageAge(), true);
|
assert.strictEqual(getSkipMinimumPackageAge(), true);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("environment variable support", () => {
|
||||||
|
const originalEnv = { ...process.env };
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
process.env = originalEnv;
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should set logging level from SAFE_CHAIN_LOGGING env var", () => {
|
||||||
|
process.env.SAFE_CHAIN_LOGGING = "VERBOSE";
|
||||||
|
initializeCliArguments(["install"]);
|
||||||
|
assert.strictEqual(getLoggingLevel(), "verbose");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should let CLI flag override SAFE_CHAIN_LOGGING", () => {
|
||||||
|
process.env.SAFE_CHAIN_LOGGING = "silent";
|
||||||
|
initializeCliArguments(["--safe-chain-logging=verbose", "install"]);
|
||||||
|
assert.strictEqual(getLoggingLevel(), "verbose");
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const truthyValue of ["1", "True", "YES"]) {
|
||||||
|
it(`should set skipMinimumPackageAge when env var is '${truthyValue}'`, () => {
|
||||||
|
process.env.SAFE_CHAIN_SKIP_MINIMUM_PACKAGE_AGE = truthyValue;
|
||||||
|
initializeCliArguments(["install"]);
|
||||||
|
assert.strictEqual(getSkipMinimumPackageAge(), true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const falsyValue of ["0", "false", "no", ""]) {
|
||||||
|
it(`should not set skipMinimumPackageAge when env var is '${falsyValue}'`, () => {
|
||||||
|
process.env.SAFE_CHAIN_SKIP_MINIMUM_PACKAGE_AGE = falsyValue;
|
||||||
|
initializeCliArguments(["install"]);
|
||||||
|
assert.strictEqual(getSkipMinimumPackageAge(), undefined);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
it("should let CLI flag override SAFE_CHAIN_SKIP_MINIMUM_PACKAGE_AGE", () => {
|
||||||
|
process.env.SAFE_CHAIN_SKIP_MINIMUM_PACKAGE_AGE = "false";
|
||||||
|
initializeCliArguments(["--safe-chain-skip-minimum-package-age", "install"]);
|
||||||
|
assert.strictEqual(getSkipMinimumPackageAge(), true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue