@forge/cli
14.1.0-next.19-experimental-fd0ebbc14.1.0-next.32
out/command-line/controller/install-controller.js~
out/command-line/controller/install-controller.jsModified+60−5
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,20 +213,71 @@
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;
+ let versionPermissions;
+ let isGlobal;
+ if (appIdOverride) {
+ versionPermissions = majorVersion
+ ? await this.getVersionPermissionsByMajorVersion(id, environment, majorVersion)
+ : await this.installationService.getAppEnvironmentPermissions(id, environment);
+ isGlobal = versionPermissions?.installationTarget === cli_shared_1.InstallationTarget.Unit;
+ }
+ else {
+ manifestConfig = await this.configFile.readConfig();
+ isGlobal = (0, global_app_1.isGlobalApp)(manifestConfig.app);
+ }
+ if (isGlobal) {
+ const { isUpgrade, isCodeUpgrade } = this.validateUpgradeTarget(upgrade);
+ const validLicense = this.validateLicenseOption(license, environment);
+ const overrides = await this.validateEcosystemAppInstallationOverridesInput(licenseModes, usersWithAccess, environment);
+ const majorVersionResult = majorVersion
+ ? versionPermissions ?? (await this.getVersionPermissionsByMajorVersion(id, environment, majorVersion))
+ : undefined;
+ const majorVersionId = majorVersionResult?.versionId;
+ if (isUpgrade) {
+ await this.globalInstallController.runUpgrade({
+ appId: id,
+ environment,
+ nonInteractive,
+ unitId,
+ majorVersionId,
+ isCodeUpgrade
+ });
+ }
+ else {
+ if (majorVersionResult && !majorVersionResult.isLatest && majorVersionResult.version) {
+ this.ui.warn(cli_shared_1.Text.install.majorVersionIsNotLatest(majorVersionResult.version));
+ if (!nonInteractive && !(await this.ui.confirm(cli_shared_1.Text.install.devAppInstallConfirm)))
+ return;
+ }
+ await this.globalInstallController.run({
+ appId: id,
+ environment,
+ nonInteractive,
+ unitId,
+ majorVersionId,
+ licenseOverride: validLicense,
+ overrides,
+ 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);
let environmentPermissions;
let requiredProducts;
let appFeatures;
if (majorVersion) {
- const majorVersionResult = await this.getVersionPermissionsByMajorVersion(id, environment, majorVersion);
+ const majorVersionResult = versionPermissions ?? (await this.getVersionPermissionsByMajorVersion(id, environment, majorVersion));
if (!isUpgrade && !majorVersionResult.isLatest && majorVersionResult.version) {
this.ui.warn(cli_shared_1.Text.install.majorVersionIsNotLatest(majorVersionResult.version));
if (!nonInteractive && !(await this.ui.confirm(cli_shared_1.Text.install.devAppInstallConfirm)))
return;
@@ -232,9 +286,10 @@
requiredProducts = majorVersionResult.requiredProducts;
appFeatures = majorVersionResult.appFeatures;
}
else {
- environmentPermissions = await this.installationService.getAppEnvironmentPermissions(id, environment);
+ environmentPermissions =
+ versionPermissions ?? (await this.installationService.getAppEnvironmentPermissions(id, environment));
requiredProducts = environmentPermissions?.requiredProducts;
appFeatures = environmentPermissions?.appFeatures;
}
let scopesFromLastInstallation = new Set();
@@ -273,9 +328,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;