@forge/cli
12.15.0-experimental-43cfec412.16.0-next.6
out/command-line/register-installation-commands.js~
out/command-line/register-installation-commands.jsModified+48−6
Index: package/out/command-line/register-installation-commands.js
===================================================================
--- package/out/command-line/register-installation-commands.js
+++ package/out/command-line/register-installation-commands.js
@@ -89,12 +89,13 @@
cmd
.command('uninstall')
.contextOption()
.environmentOption()
+ .batchUninstallOption()
.requireAppId()
.description(cli_shared_1.Text.uninstall.cmd.desc)
- .action(async ({ site, environment, product }) => {
- if (site && product) {
+ .action(async ({ site, environment, product, batch }) => {
+ if (site && product && !batch) {
const installation = await installationsService.findOnlyMatchingInstallation({
site,
product,
environment
@@ -105,16 +106,31 @@
const context = (0, uninstall_command_helpers_1.getInstallationContext)(installation, product);
await (0, uninstall_command_helpers_1.performSingleUninstall)(installation.id, context, deps);
}
else {
- const { installations } = await installationsService.listAppInstallations({ site, environment, product });
+ if (batch && environment === 'production') {
+ ui.info(cli_shared_1.Text.uninstall.uninstallBatchProductionError);
+ return;
+ }
+ const { installations } = await installationsService.listAppInstallations({ site, product });
if (!installations.length) {
ui.info(cli_shared_1.Text.installList.noInstallations);
return;
}
const filteredInstallations = installations.filter((install) => install.product !== 'identity' && install.product !== 'jira-servicedesk');
- const options = (0, uninstall_command_helpers_1.getMultiChoiceOptionsForUninstall)(filteredInstallations);
- const selectedSitesIndexes = await ui.promptForTable(cli_shared_1.Text.uninstall.interactive.desc, cli_shared_1.Text.uninstall.interactive.progressInfo, ['Environment', 'Site', 'Atlassian app'], options);
+ let options = [];
+ let selectedSitesIndexes = [];
+ let completionMessage;
+ if (batch) {
+ const bulkUninstallDetails = await getBulkUninstallDetails(filteredInstallations, ui);
+ if (!bulkUninstallDetails) {
+ return;
+ }
+ ({ options, selectedSitesIndexes, completionMessage } = bulkUninstallDetails);
+ }
+ else {
+ ({ options, selectedSitesIndexes, completionMessage } = await getSingleUninstallDetails(filteredInstallations, ui));
+ }
const [firstUninstall, secondUninstall, hadAutoSelected] = (0, uninstall_command_helpers_1.getInstallationsFromSelection)(options, selectedSitesIndexes, filteredInstallations);
if (hadAutoSelected) {
const confirmation = await ui.confirm(cli_shared_1.Text.uninstall.interactive.confirmOptionalContexts);
if (!confirmation) {
@@ -126,9 +142,9 @@
.filter((_, index) => !selectedSitesIndexes.includes(index))
.map(({ extra }) => filteredInstallations[extra.installationIdx]);
firstUninstall.push(...(0, shared_1.getHangingIdentityInstallationsFromSite)(installations, remainingApps, selectedSites));
if (firstUninstall.length > 1 || secondUninstall.length > 0) {
- await (0, uninstall_command_helpers_1.performMultipleUninstalls)(firstUninstall, secondUninstall, deps);
+ await (0, uninstall_command_helpers_1.performMultipleUninstalls)(firstUninstall, secondUninstall, deps, completionMessage);
}
else if (firstUninstall.length === 1) {
await (0, uninstall_command_helpers_1.performSingleUninstall)(firstUninstall[0].id, firstUninstall[0].context, deps);
}
@@ -143,5 +159,31 @@
registerInstallAppCommand({ cmd: install, ...deps });
(0, exports.registerListInstallationsCommand)({ cmd: install, ...deps });
};
exports.registerCommands = registerCommands;
+const getBulkUninstallDetails = async (installations, ui) => {
+ const filteredInstallations = installations.filter((install) => install.environmentType !== cli_shared_1.AppEnvironmentType.Production);
+ const options = (0, uninstall_command_helpers_1.getMultiChoiceOptionsForUninstall)(filteredInstallations).slice(0, cli_shared_1.MAX_BATCH_UNINSTALLS);
+ const remainingInstallations = filteredInstallations.length - options.length;
+ await ui.table([
+ ['environment', 'Environment'],
+ ['site', 'Site'],
+ ['product', 'Atlassian app']
+ ], options.map(({ names }) => ({
+ environment: names[0],
+ site: names[1],
+ product: names[2]
+ })));
+ const confirmuninstallBatch = await ui.confirm(cli_shared_1.Text.uninstall.interactive.confirmAllInstallations);
+ if (!confirmuninstallBatch) {
+ return;
+ }
+ const selectedSitesIndexes = options.map((_, index) => index);
+ const completionMessage = remainingInstallations > 0 ? cli_shared_1.Text.uninstall.uninstallBatchBanner(remainingInstallations) : undefined;
+ return { options, selectedSitesIndexes, completionMessage };
+};
+const getSingleUninstallDetails = async (installations, ui) => {
+ const options = (0, uninstall_command_helpers_1.getMultiChoiceOptionsForUninstall)(installations);
+ const selectedSitesIndexes = await ui.promptForTable(cli_shared_1.Text.uninstall.interactive.desc, cli_shared_1.Text.uninstall.interactive.progressInfo, ['Environment', 'Site', 'Atlassian app'], options);
+ return { options, selectedSitesIndexes, completionMessage: undefined };
+};
//# sourceMappingURL=register-installation-commands.js.map
\ No newline at end of file