@goldstack/infra
Version:
Utilities for defining infrastructure for npm packages.
85 lines • 4.29 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.readTerraformStateVariable = exports.writeDeploymentState = exports.writeDeploymentsState = exports.readDeploymentState = exports.getDeploymentState = exports.readDeploymentsState = exports.hasDeploymentsState = exports.validateDeploymentsState = void 0;
const utils_config_1 = require("@goldstack/utils-config");
const utils_sh_1 = require("@goldstack/utils-sh");
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const deploymentsStateSchema_json_1 = __importDefault(require("./schemas/deploymentsStateSchema.json"));
const deploymentsStatePath = 'src/state/deployments.json';
const validateDeploymentsState = (deploymentsState) => {
return (0, utils_config_1.validateConfig)(deploymentsState, deploymentsStateSchema_json_1.default, {
errorMessage: 'Cannot validate deployments state.',
});
};
exports.validateDeploymentsState = validateDeploymentsState;
const hasDeploymentsState = (packageDir) => {
return fs_1.default.existsSync(packageDir + deploymentsStatePath);
};
exports.hasDeploymentsState = hasDeploymentsState;
const readDeploymentsState = (packageDir, options) => {
if (!(0, exports.hasDeploymentsState)(packageDir)) {
if (options && options.createIfNotExist) {
return [];
}
throw new Error(`Deployments state does not exist in ${path_1.default.resolve(packageDir + deploymentsStatePath)}. Have you deployed this package yet?`);
}
const data = JSON.parse((0, utils_sh_1.read)(packageDir + deploymentsStatePath));
return (0, exports.validateDeploymentsState)(data);
};
exports.readDeploymentsState = readDeploymentsState;
const getDeploymentState = (deploymentsState, deploymentName, options) => {
const deploymentState = deploymentsState.find((deploymentState) => deploymentState.name === deploymentName);
if (!deploymentState) {
if (options && options.createIfNotExist) {
return {
name: deploymentName,
};
}
throw new Error(`Deployment state not defined for deployment '${deploymentName}'. Did you set up the infrastructure for this deployment with 'yarn infra up [deploymentName]'?`);
}
return deploymentState;
};
exports.getDeploymentState = getDeploymentState;
const readDeploymentState = (packageDir, deploymentName, options) => {
const deploymentsState = (0, exports.readDeploymentsState)(packageDir, options);
return (0, exports.getDeploymentState)(deploymentsState, deploymentName, options);
};
exports.readDeploymentState = readDeploymentState;
const writeDeploymentsState = (packageDir, deploymentsState) => {
(0, utils_sh_1.write)(JSON.stringify(deploymentsState, null, 2), packageDir + deploymentsStatePath);
};
exports.writeDeploymentsState = writeDeploymentsState;
const writeDeploymentState = (packageDir, deploymentState) => {
let deploymentsState;
if ((0, exports.hasDeploymentsState)(packageDir)) {
deploymentsState = (0, exports.readDeploymentsState)(packageDir);
}
else {
deploymentsState = [];
}
const idx = deploymentsState.findIndex((deployment) => deployment.name === deploymentState.name);
if (idx === -1) {
deploymentsState.push(deploymentState);
}
else {
deploymentsState[idx] = deploymentState;
}
(0, exports.writeDeploymentsState)(packageDir, deploymentsState);
};
exports.writeDeploymentState = writeDeploymentState;
const readTerraformStateVariable = (deploymentState, variableName) => {
if (!deploymentState.terraform) {
throw new Error(`Terraform configuration not defined in deployment state for ${deploymentState.name}. Make sure to stand up the infrastructure for this module using 'yarn infra up'.`);
}
const tfVar = deploymentState.terraform[variableName];
if (!tfVar) {
throw new Error(`Terraform variable '${variableName}' not defined in deployment state.`);
}
return tfVar.value;
};
exports.readTerraformStateVariable = readTerraformStateVariable;
//# sourceMappingURL=deploymentState.js.map