captainduckduck
Version:
CLI tool for CaptainDuckDuck. See CaptainDuckDuck.com for more details.
145 lines • 7.42 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const inquirer = require("inquirer");
const StdOutUtil_1 = require("../utils/StdOutUtil");
const ValidationsHandler_1 = require("../utils/ValidationsHandler");
const StorageHelper_1 = require("../utils/StorageHelper");
const CliHelper_1 = require("../utils/CliHelper");
const DeployHelper_1 = require("../utils/DeployHelper");
const CliApiManager_1 = require("../api/CliApiManager");
function deploy(options) {
return __awaiter(this, void 0, void 0, function* () {
const possibleApp = StorageHelper_1.default.get()
.getDeployedDirectories()
.find((dir) => dir.cwd === process.cwd());
StdOutUtil_1.default.printMessage('Preparing deployment to Captain...\n');
let deployParams = { deploySource: {} };
if (options.default) {
deployParams = {
captainMachine: possibleApp ? StorageHelper_1.default.get().findMachine(possibleApp.machineNameToDeploy) : undefined,
deploySource: possibleApp ? possibleApp.deploySource : {},
appName: possibleApp ? possibleApp.appName : undefined
};
}
else if (possibleApp) {
StdOutUtil_1.default.printMessage(`\n\n**********\n\nProtip: You seem to have deployed ${possibleApp.appName} from this directory in the past, use --default flag to avoid having to re-enter the information.\n\n**********\n\n`);
}
if (options.appName) {
deployParams.appName = options.appName;
}
if (options.branch) {
deployParams.deploySource.branchToPush = options.branch;
}
if (options.tarFile) {
deployParams.deploySource.tarFilePath = options.tarFile;
}
if (!deployParams.deploySource.tarFilePath) {
if (!ValidationsHandler_1.validateIsGitRepository() || !ValidationsHandler_1.validateDefinitionFile()) {
return;
}
}
if (options.pass || options.host) {
if (options.pass && options.host) {
deployParams.captainMachine = {
authToken: '',
baseUrl: options.host,
name: ''
};
yield CliApiManager_1.default.get(deployParams.captainMachine).getAuthToken(options.pass);
}
else {
StdOutUtil_1.default.printError('host and pass should be either both defined or both undefined', true);
return;
}
}
// Show questions for what is being missing in deploy params
let allApps = undefined;
if (deployParams.captainMachine) {
allApps = yield ValidationsHandler_1.ensureAuthentication(deployParams.captainMachine);
}
const allParametersAreSupplied = !!deployParams.appName &&
!!deployParams.captainMachine &&
(!!deployParams.deploySource.branchToPush || !!deployParams.deploySource.tarFilePath);
if (!allParametersAreSupplied) {
const questions = [
{
type: 'list',
name: 'captainNameToDeploy',
default: possibleApp ? possibleApp.machineNameToDeploy : '',
message: 'Select the Captain Machine you want to deploy to:',
choices: CliHelper_1.default.get().getMachinesAsOptions(),
when: () => !deployParams.captainMachine,
filter: (capName) => __awaiter(this, void 0, void 0, function* () {
deployParams.captainMachine = StorageHelper_1.default.get().findMachine(capName);
if (deployParams.captainMachine)
allApps = yield ValidationsHandler_1.ensureAuthentication(deployParams.captainMachine);
return capName;
})
},
{
type: 'input',
default: possibleApp && possibleApp.deploySource.branchToPush
? possibleApp.deploySource.branchToPush
: 'master',
name: 'branchToPush',
message: "Enter the 'git' branch you would like to deploy:",
filter: (branchToPushEntered) => __awaiter(this, void 0, void 0, function* () {
deployParams.deploySource.branchToPush = branchToPushEntered;
return branchToPushEntered;
}),
when: (answers) => !deployParams.deploySource.branchToPush &&
!deployParams.deploySource.tarFilePath &&
!!deployParams.captainMachine
},
{
type: 'list',
default: possibleApp ? possibleApp.appName : '',
name: 'appName',
message: 'Enter the Captain app name this directory will be deployed to:',
choices: (answers) => {
return CliHelper_1.default.get().getAppsAsOptions(allApps);
},
filter: (appNameEntered) => __awaiter(this, void 0, void 0, function* () {
deployParams.appName = appNameEntered;
return appNameEntered;
}),
when: (answers) => (!!deployParams.deploySource.branchToPush || !!deployParams.deploySource.tarFilePath) &&
!deployParams.appName
},
{
type: 'confirm',
name: 'confirmedToDeploy',
message: 'Note that uncommitted files and files in gitignore (if any) will not be pushed to server. \n Please confirm so that deployment process can start.',
default: true,
when: (answers) => !!deployParams.appName &&
!!deployParams.captainMachine &&
(!!deployParams.deploySource.branchToPush || !!deployParams.deploySource.tarFilePath)
}
];
const answersToIgnore = (yield inquirer.prompt(questions));
if (!answersToIgnore.confirmedToDeploy) {
StdOutUtil_1.default.printMessage('\nOperation cancelled by the user...\n');
process.exit(0);
return;
}
}
try {
yield new DeployHelper_1.default(deployParams) //
.startDeploy();
}
catch (e) {
StdOutUtil_1.default.printError(e.message, true);
}
});
}
exports.default = deploy;
//# sourceMappingURL=deploy.js.map