@hotglue/cli
Version:
hotglue CLI tools
162 lines (130 loc) • 5.11 kB
JavaScript
;
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;