UNPKG

@hotglue/cli

Version:
162 lines (130 loc) 5.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handler = exports.desc = exports.command = exports.builder = void 0; var _path = _interopRequireDefault(require("path")); var _promises = require("fs/promises"); var _debug = _interopRequireDefault(require("../../helpers/debug")); var _ora = _interopRequireDefault(require("ora")); var _axios = _interopRequireDefault(require("axios/dist/node/axios.cjs")); var _awsSdk = _interopRequireDefault(require("aws-sdk")); var _cliTable = _interopRequireDefault(require("cli-table")); var _descriptions = _interopRequireDefault(require("../../helpers/descriptions.js")); var _utils = require("../../helpers/utils.js"); var _print = require("../../helpers/print.js"); var _api = require("../../helpers/api.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // import logUpdate from 'log-update'; const debug = (0, _debug.default)('commands:env:deploy'); const command = 'deploy'; exports.command = command; const desc = 'Deploy Environment settings'; exports.desc = desc; const builder = async yargs => { debug('builder', command); return yargs.option('sourceFolder', _descriptions.default.options['sourceFolder'].config).demandOption('sourceFolder', _descriptions.default.options['sourceFolder'].demandText); }; exports.builder = builder; const handler = async argv => { debug('handler', command, argv); const { hg, json, apikey, env, sourceFolder } = argv; const { clientApiBaseUri } = hg; const folderPrefix = _path.default.resolve(process.cwd(), sourceFolder); let message; let spinner = (0, _ora.default)(); try { // 1. build list of deployable files message = (0, _print.themed)(`Scanning ${(0, _print.themed)(folderPrefix, 'info')} for deployable files`); !json && spinner.start((0, _print.themed)(`In progress: ${message}...`, 'secondary')); const deployableFiles = await (0, _utils.getFolderFiles)(folderPrefix, { filter: { pattern: '((**/requirements.txt)|(**/availableSources.json)|(**/availableTargets.json)|(**/availableConnectors.json))' } }); if (deployableFiles.length === 0) { if (json) { (0, _print.printJSON)({ status: 'error', error: 'There are no files to deploy at the specified location!' }); } else { spinner.fail((0, _print.themed)(`Error: ${message}.`, 'secondary')); (0, _print.pr)((0, _print.themed)(`Message: ${(0, _print.themed)('There are no files to deploy at the specified location!')}`, 'secondary')); } return; } !json && spinner.succeed((0, _print.themed)(`Finished: ${message}.`, 'secondary')); // 2. get STS credentials message = (0, _print.themed)(`Verifying user and authorizing`); !json && spinner.start((0, _print.themed)(`In progress: ${message}...`, 'secondary')); const { accessKeyId, secretAccessKey, sessionToken } = await (0, _api.genCredentialsOnClientApi)({ debug, baseUri: clientApiBaseUri, task: 'env-deploy', env, apikey }); !json && spinner.succeed((0, _print.themed)(`Finished: ${message}.`, 'secondary')); // create authenticated S3 instance const s3 = new _awsSdk.default.S3({ accessKeyId, secretAccessKey, sessionToken }); // 3. upload new files message = (0, _print.themed)(`Deploying environment files`); !json && spinner.info((0, _print.themed)(`Info: ${message}.`, 'secondary')); const rootKey = `config/`; const table = new _cliTable.default({ head: ['File', 'Status'] }); for await (const file of deployableFiles) { const filename = _path.default.basename(file); message = (0, _print.themed)(`Pushing file: ${(0, _print.themed)(filename, 'info')}`); !json && spinner.start((0, _print.themed)(`In progress: ${message}...`, 'secondary')); const readBuffer = await (0, _promises.readFile)(file); const params = { Bucket: env, Key: `${rootKey}${filename}`, Body: readBuffer }; const res = await s3.putObject(params).promise(); !json && spinner.succeed((0, _print.themed)(`Finished: ${message}.`, 'secondary')); debug('s3-put-res', res); table.push([filename, 'Deployed']); // handling redis change await (0, _api.resetAvailableEntities)({ debug, baseUri: clientApiBaseUri, env, apiKey: apikey }); } if (json) { (0, _print.printJSON)({ status: 'success', deployedFiles: deployableFiles }); } else { // print results (0, _print.cl)(table.toString()); } } catch (err) { !json && spinner.fail((0, _print.themed)(`Error: ${message}.`, 'secondary')); (0, _print.pr)((0, _print.themed)(`Message: ${(0, _print.themed)(err.message)}`, 'secondary')); debug(err); if (err && err.response && err.response.data) { debug('response', err.response.data); } } }; exports.handler = handler;