bitbucket-env-manager
Version:
Deploys Bitbucket Environment
129 lines (115 loc) • 3.45 kB
JavaScript
const {
guarded_create_env,
guarded_create_var,
guarded_delete_env,
guarded_get_envs,
} = require('./guarded.api');
const cliProgress = require('cli-progress');
const { delay, getTokensFromFile } = require('./helpers');
const { runConvert } = require('./convert');
const { apiSleepTime } = require('./config');
const colors = require('ansi-colors');
const run_env_setup = async (cfg, force, bar) => {
// create new progress bar
let progressbar;
try {
console.log(`\n------ DEPLOYING ${cfg.repo + ' - ' + cfg.env_name} ---------\n`);
progressbar = new cliProgress.SingleBar({
format: colors.cyan('{bar}') + '| {percentage}% | {value}/{total}' + ' | {key}',
barCompleteChar: '\u2588',
barIncompleteChar: '\u2591',
hideCursor: true,
});
const mainParams = {
repo_slug: cfg.repo,
workspace: cfg.workspace,
env_config: cfg.env_config,
};
// Get existing env details
const envsListString = await guarded_get_envs({
...mainParams,
});
const envsList = JSON.parse(envsListString).values;
const existingEnv = envsList.find((env) => env.slug === cfg.env_name.toLowerCase());
// Remove Existing Env if forced
if (existingEnv) {
if (!force) {
throw new Error(
`Existing Env "${existingEnv.name}" ID: "${existingEnv.uuid}"! Use "force" option to delete and override`
);
}
console.warn('Found an existing env!');
console.warn('Removing old env!', existingEnv.name, existingEnv.uuid);
// Remove env
await guarded_delete_env({
...mainParams,
environment_uuid: existingEnv.uuid,
});
}
// Create new Env
console.warn('Creating new env!', cfg.repo, ' - ', cfg.env_name);
const newEnvString = await guarded_create_env({
...mainParams,
env_name: cfg.env_name,
env_rank: cfg.rank,
});
const newEnv = JSON.parse(newEnvString);
const resps = [];
const varLen = cfg.vars.length;
if (varLen) {
console.log('Uploading..');
}
progressbar && progressbar.start(varLen, 0, { key: '-' });
for (const v of cfg.vars) {
// Sleep to avoid throttling issues
await delay(apiSleepTime);
progressbar &&
progressbar.increment({
key: v.key,
});
const r = await guarded_create_var({
...mainParams,
environment_uuid: newEnv.uuid,
var_key: v.key,
var_value: v.value.toString(),
var_secured: !!v.secured,
});
resps.push(r);
}
console.log(
'\x1b[32m%s\x1b[0m',
`\n\n------ DEPLOY COMPLETE ${cfg.repo + ' - ' + cfg.env_name} ---------`
);
return resps;
} catch (e) {
console.error(e.message);
console.log(
'\x1b[31m%s\x1b[0m',
`\n------ DEPLOY FAILED ${cfg.repo + ' - ' + cfg.env_name} ---------`
);
} finally {
progressbar && progressbar.stop();
}
};
const runDeploy = async () => {
try {
console.log('Running Deploy');
const cfgs = await runConvert({ multiple: true });
for (const cfg of cfgs || []) {
// console.log({ cfg });
// getTokensFromFile(); // to check only
await run_env_setup(cfg, true).catch((e) => {
console.error(e);
});
console.log('\n');
}
} catch (e) {
console.error(e.message);
} finally {
}
};
module.exports = {
runDeploy,
run_env_setup,
};