UNPKG

bitbucket-env-manager

Version:

Deploys Bitbucket Environment

129 lines (115 loc) 3.45 kB
#!/usr/bin/env node 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, };