@forge/cli

14.1.0-next.1-experimental-13c2f8d14.1.0-next.21-experimental-554d417
out/command-line/controller/install-controller.js
~out/command-line/controller/install-controller.jsModified
+38−3
Index: package/out/command-line/controller/install-controller.js
===================================================================
--- package/out/command-line/controller/install-controller.js
+++ package/out/command-line/controller/install-controller.js
@@ -3,8 +3,9 @@
 exports.InstallController = exports.NoDeploymentError = void 0;
 const cli_shared_1 = require("@forge/cli-shared");
 const manifest_1 = require("@forge/manifest");
 const install_deeplinks_1 = require("./install-deeplinks");
+const global_app_1 = require("../../installations/global-app");
 const register_version_commands_1 = require("../register-version-commands");
 class NoDeploymentError extends Error {
     constructor(environment) {
         super(cli_shared_1.Text.install.error.noDeploymentFound(environment));
@@ -21,9 +22,10 @@
     supportedProductsService;
     statsigService;
     devSpaceService;
     siteService;
-    constructor(appConfigProvider, configFile, ui, installAppSiteCommand, installationService, installView, supportedProductsService, statsigService, devSpaceService, siteService) {
+    globalInstallController;
+    constructor(appConfigProvider, configFile, ui, installAppSiteCommand, installationService, installView, supportedProductsService, statsigService, devSpaceService, siteService, globalInstallController) {
         this.appConfigProvider = appConfigProvider;
         this.configFile = configFile;
         this.ui = ui;
         this.installAppSiteCommand = installAppSiteCommand;
@@ -32,8 +34,9 @@
         this.supportedProductsService = supportedProductsService;
         this.statsigService = statsigService;
         this.devSpaceService = devSpaceService;
         this.siteService = siteService;
+        this.globalInstallController = globalInstallController;
     }
     async securityPrompt(site) {
         this.ui.info(cli_shared_1.Text.install.security.banner(site.host));
         let isTrustedApp = true;
@@ -210,11 +213,43 @@
             throw new cli_shared_1.UserError(cli_shared_1.Text.install.error.majorVersionNotFound);
         }
         return result;
     }
-    async run({ environment, site, products, upgrade, confirmScopes, license, licenseModes, usersWithAccess, nonInteractive, majorVersion, appIdOverride }) {
+    async run({ environment, site, products, upgrade, confirmScopes, license, licenseModes, usersWithAccess, nonInteractive, majorVersion, appIdOverride, unitId }) {
         const id = appIdOverride ?? (await this.appConfigProvider()).id;
         await this.devSpaceService.displayEnforcementWarningsIfNeeded(this.ui, id, 'install');
+        let manifestConfig;
+        if (!appIdOverride) {
+            manifestConfig = await this.configFile.readConfig();
+            const { app } = manifestConfig;
+            if ((0, global_app_1.isGlobalApp)(app)) {
+                const { isUpgrade, isCodeUpgrade } = this.validateUpgradeTarget(upgrade);
+                if (isUpgrade) {
+                    const majorVersionId = majorVersion
+                        ? (await this.getVersionPermissionsByMajorVersion(id, environment, majorVersion)).versionId
+                        : undefined;
+                    await this.globalInstallController.runUpgrade({
+                        appId: id,
+                        environment,
+                        nonInteractive,
+                        unitId,
+                        majorVersionId,
+                        isCodeUpgrade
+                    });
+                }
+                else {
+                    await this.globalInstallController.run({
+                        appId: id,
+                        environment,
+                        nonInteractive,
+                        unitId,
+                        product: products?.[0],
+                        site
+                    });
+                }
+                return;
+            }
+        }
         const { isUpgrade, isCodeUpgrade } = this.validateUpgradeTarget(upgrade);
         const text = isUpgrade ? cli_shared_1.Text.upgrade : cli_shared_1.Text.install;
         const validLicense = this.validateLicenseOption(license, environment);
         const overrides = await this.validateEcosystemAppInstallationOverridesInput(licenseModes, usersWithAccess, environment);
@@ -273,9 +308,9 @@
         let manifestEgressAddresses = [...environmentEgressAddresses];
         let manifestModules;
         if (!appIdOverride) {
             const [{ permissions, modules }, manifestEgressEntries] = await Promise.all([
-                this.configFile.readConfig(),
+                manifestConfig ? Promise.resolve(manifestConfig) : this.configFile.readConfig(),
                 this.configFile.getEgressPermissions()
             ]);
             this.checkForUIKit1Modules(modules);
             manifestModules = modules;