UNPKG

@catladder/cli

Version:

Panter cli tool for cloud CI/CD and DevOps

115 lines 5.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSecretVarNameForContext = exports.getSecretVarName = exports.getEnvironmentVariables = void 0; const deploy_1 = require("../deploy"); const BashExpression_1 = require("../bash/BashExpression"); const types_1 = require("../build/types"); const VariableValueContainingReferences_1 = require("../variables/VariableValueContainingReferences"); const resolveAllReferences_1 = require("../variables/resolveAllReferences"); const getBuildInfoVariables_1 = require("./getBuildInfoVariables"); const getEnvironmentContext_1 = require("./getEnvironmentContext"); const transformJobOnlyVars_1 = require("./transformJobOnlyVars"); const envVars_1 = require("./utils/envVars"); const getBasePredefinedVariables = (ctx) => { return { ENV_SHORT: ctx.env, APP_DIR: ctx.envConfigRaw.dir, ENV_TYPE: ctx.envType, ...(ctx.envType !== "local" ? (0, getBuildInfoVariables_1.getBuildInfoVariables)(ctx) : {}), }; }; const getEnvironmentVariables = async (ctx, options = {}) => { var _a, _b, _c, _d, _e, _f, _g, _h; const environmentContext = (0, getEnvironmentContext_1.getEnvironmentContext)(ctx); const { config, env, componentName } = ctx; const { envConfigRaw, deployConfigRaw, buildConfigRaw, envType } = environmentContext; const basePredefinedVariables = getBasePredefinedVariables(environmentContext); let predefinedVariables; let host; let url; if (envType === "local") { const devLocalConfig = envConfigRaw; const port = (_a = devLocalConfig.port) !== null && _a !== void 0 ? _a : 3000; host = "localhost:" + port.toString(); url = "http://" + host; predefinedVariables = { ...basePredefinedVariables, ENV_SHORT: "local", ROOT_URL: url, HOSTNAME: host, HOSTNAME_INTERNAL: host, ROOT_URL_INTERNAL: "http://" + host, PORT: port.toString(), }; } else { const additionalEnvVars = deployConfigRaw ? deploy_1.DEPLOY_TYPES[deployConfigRaw.type].getAdditionalEnvVars(environmentContext) : {}; const HOSTNAME_INTERNAL = (_b = additionalEnvVars.HOSTNAME_INTERNAL) !== null && _b !== void 0 ? _b : "unknown-host.example.com"; host = (_c = envConfigRaw === null || envConfigRaw === void 0 ? void 0 : envConfigRaw.host) !== null && _c !== void 0 ? _c : HOSTNAME_INTERNAL; url = (0, BashExpression_1.joinBashExpressions)(["https://", host]); predefinedVariables = { ...basePredefinedVariables, HOSTNAME: host, ROOT_URL: url, HOSTNAME_INTERNAL, ROOT_URL_INTERNAL: (0, BashExpression_1.joinBashExpressions)(["https://", HOSTNAME_INTERNAL]), ...additionalEnvVars, }; } const publicEnvVarsRaw = (_e = (_d = envConfigRaw.vars) === null || _d === void 0 ? void 0 : _d.public) !== null && _e !== void 0 ? _e : {}; const additionalSecretKeys = deployConfigRaw ? deploy_1.DEPLOY_TYPES[deployConfigRaw.type].additionalSecretKeys(environmentContext) : []; const secretEnvVarKeys = [ ...(0, envVars_1.stringListToSecreteEnvVarList)((_g = (_f = envConfigRaw.vars) === null || _f === void 0 ? void 0 : _f.secret) !== null && _g !== void 0 ? _g : []), ...additionalSecretKeys, ]; const secretEnvVars = (0, envVars_1.makeSecretEnvVarMapping)(env, componentName, secretEnvVarKeys); const publicEnvVarsRawSanitized = (0, envVars_1.stringifyValues)(publicEnvVarsRaw); const publicEnvVarsUnresolved = Object.fromEntries(Object.entries(publicEnvVarsRawSanitized).map(([key, value]) => [ key, (0, VariableValueContainingReferences_1.createVariableValueContainingReferencesFromString)(value, { componentName: ctx.componentName, }), ])); const publicEnvVars = ((_h = options.shouldResolveReferences) !== null && _h !== void 0 ? _h : true) ? await (0, resolveAllReferences_1.resolveAllReferences)(publicEnvVarsUnresolved, async (otherComponentName) => { const { envVars: otherEnvVars } = await (0, exports.getEnvironmentVariables)({ ...ctx, componentName: otherComponentName, }, { shouldResolveReferences: false, // we already do this here with replaceAllReferences recursivly until re replaced all }); return otherEnvVars; }) : publicEnvVarsUnresolved; const envVars = addIndexVar({ ...predefinedVariables, ...secretEnvVars, ...publicEnvVars, }); return { envVars, secretEnvVarKeys, jobOnlyVars: { build: await (0, transformJobOnlyVars_1.transformJobOnlyVars)(env, componentName, (buildConfigRaw && (0, types_1.isStandaloneBuildConfig)(buildConfigRaw) && buildConfigRaw.jobVars) || null), deploy: await (0, transformJobOnlyVars_1.transformJobOnlyVars)(env, componentName, (deployConfigRaw && deployConfigRaw.jobVars) || null), }, }; }; exports.getEnvironmentVariables = getEnvironmentVariables; const sanitizeForEnVar = (s) => s.replace(/-/g, "_"); const getSecretVarName = (env, componentName, key) => `CL_${sanitizeForEnVar(env)}_${sanitizeForEnVar(componentName)}_${key}`; // remove dash from component name exports.getSecretVarName = getSecretVarName; const addIndexVar = (vars) => ({ ...vars, _ALL_ENV_VAR_KEYS: JSON.stringify(Object.keys(vars)), }); const getSecretVarNameForContext = (context, key) => (0, exports.getSecretVarName)(context.env, context.name, key); exports.getSecretVarNameForContext = getSecretVarNameForContext; //# sourceMappingURL=getEnvironmentVariables.js.map