heroku
Version:
CLI to interact with Heroku
71 lines (70 loc) • 3.22 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const color_1 = require("@heroku-cli/color");
const command_1 = require("@heroku-cli/command");
const core_1 = require("@oclif/core");
const resolve_1 = require("../../lib/addons/resolve");
const addons_wait_1 = require("../../lib/addons/addons_wait");
const notify_1 = require("../../lib/notify");
class Wait extends command_1.Command {
async run() {
const { flags, args } = await this.parse(Wait);
let addonsToWaitFor;
if (args.addon) {
addonsToWaitFor = [await (0, resolve_1.resolveAddon)(this.heroku, flags.app, args.addon)];
}
else if (flags.app) {
const { body: addons } = await this.heroku.get(`/apps/${flags.app}/addons`);
addonsToWaitFor = addons;
}
else {
const { body: addons } = await this.heroku.get('/addons');
addonsToWaitFor = addons;
}
addonsToWaitFor = addonsToWaitFor.filter((addon) => addon.state === 'provisioning' || addon.state === 'deprovisioning');
let interval = Number.parseInt(flags['wait-interval'] || '', 10);
if (!interval || interval < 0) {
interval = 5;
}
for (const addon of addonsToWaitFor) {
const startTime = new Date();
const addonName = addon.name || '';
if (addon.state === 'provisioning') {
let addonResponse;
try {
addonResponse = await (0, addons_wait_1.waitForAddonProvisioning)(this.heroku, addon, interval);
}
catch (error) {
(0, notify_1.default)(`heroku addons:wait ${addonName}`, 'Add-on failed to provision', false);
throw error;
}
const configVars = (addonResponse.config_vars || []);
if (configVars.length > 0) {
const decoratedConfigVars = configVars.map(c => color_1.default.green(c))
.join(', ');
core_1.ux.log(`Created ${color_1.default.yellow(addonName)} as ${decoratedConfigVars}`);
}
if (Date.now() - startTime.valueOf() >= 1000 * 5) {
(0, notify_1.default)(`heroku addons:wait ${addonName}`, 'Add-on successfully provisioned');
}
}
else if (addon.state === 'deprovisioning') {
await (0, addons_wait_1.waitForAddonDeprovisioning)(this.heroku, addon, interval);
if (Date.now() - startTime.valueOf() >= 1000 * 5) {
(0, notify_1.default)(`heroku addons:wait ${addonName}`, 'Add-on successfully deprovisioned');
}
}
}
}
}
exports.default = Wait;
Wait.topic = 'addons';
Wait.description = 'show provisioning status of the add-ons on the app';
Wait.flags = {
'wait-interval': command_1.flags.string({ description: 'how frequently to poll in seconds' }),
app: command_1.flags.app(),
remote: command_1.flags.remote(),
};
Wait.args = {
addon: core_1.Args.string({ description: 'unique identifier or globally unique name of the add-on' }),
};
;