diff --git a/src/commands/deployWorkspaceProject/internal/startingConfiguration/DwpManagedEnvironmentListStep.ts b/src/commands/deployWorkspaceProject/internal/startingConfiguration/DwpManagedEnvironmentListStep.ts index 6883a5088..e55f68ade 100644 --- a/src/commands/deployWorkspaceProject/internal/startingConfiguration/DwpManagedEnvironmentListStep.ts +++ b/src/commands/deployWorkspaceProject/internal/startingConfiguration/DwpManagedEnvironmentListStep.ts @@ -9,8 +9,11 @@ import { ResourceGroupListStep, getResourceGroupFromId, uiUtils } from "@microso import { AzureWizardPromptStep, nonNullProp, nonNullValueAndProp, type IAzureQuickPickItem } from "@microsoft/vscode-azext-utils"; import { createContainerAppsAPIClient } from "../../../../utils/azureClients"; import { localize } from "../../../../utils/localize"; +import { type DeploymentConfigurationSettings } from "../../settings/DeployWorkspaceProjectSettingsV2"; +import { dwpSettingUtilsV2 } from "../../settings/dwpSettingUtilsV2"; import { type DeployWorkspaceProjectInternalContext } from "../DeployWorkspaceProjectInternalContext"; +const recommendedPickDescription: string = localize('recommended', '(Recommended)'); export class DwpManagedEnvironmentListStep extends AzureWizardPromptStep { public async prompt(context: DeployWorkspaceProjectInternalContext): Promise { const placeHolder: string = localize('selectManagedEnvironment', 'Select a container apps environment'); @@ -21,8 +24,13 @@ export class DwpManagedEnvironmentListStep extends AzureWizardPromptStep count + (isRecommendedPick(pick) ? 1 : 0), 0)); - const managedEnvironment: ManagedEnvironment | undefined = (await context.ui.showQuickPick(picks, { placeHolder })).data; + const managedEnvironment: ManagedEnvironment | undefined = pick.data; if (!managedEnvironment) { // User is choosing to create a new managed environment return; @@ -66,4 +74,40 @@ export class DwpManagedEnvironmentListStep extends AzureWizardPromptStep rg.name === getResourceGroupFromId(nonNullProp(managedEnvironment, 'id'))); context.managedEnvironment = managedEnvironment; } + + private async setRecommendedPicks(context: DeployWorkspaceProjectInternalContext, picks: IAzureQuickPickItem[]): Promise { + const deploymentConfigurations: DeploymentConfigurationSettings[] | undefined = await dwpSettingUtilsV2.getWorkspaceDeploymentConfigurations(nonNullProp(context, 'rootFolder')); + if (!deploymentConfigurations?.length) { + return; + } + + const client = await createContainerAppsAPIClient(context); + for (const config of deploymentConfigurations) { + try { + if (config.resourceGroup && config.containerApp) { + const containerApp = await client.containerApps.get(config.resourceGroup, config.containerApp); + const recommendedPick = picks.find(p => p.data?.id === containerApp.managedEnvironmentId); + if (recommendedPick) { + recommendedPick.description = recommendedPickDescription; + } + } + } + catch (these_hands) { + // ignore the error and continue + } + } + + // sort the picks by recommendation + picks.sort((a, b) => { + if (isRecommendedPick(a)) { + return -1; + } else if (isRecommendedPick(b)) { + return 1; + } else { + return 0; + } + }); + } } + +const isRecommendedPick = (pick: IAzureQuickPickItem): boolean => pick.description === recommendedPickDescription; diff --git a/src/telemetry/deployWorkspaceProjectTelemetryProps.ts b/src/telemetry/deployWorkspaceProjectTelemetryProps.ts index 63762e273..0543dffb2 100644 --- a/src/telemetry/deployWorkspaceProjectTelemetryProps.ts +++ b/src/telemetry/deployWorkspaceProjectTelemetryProps.ts @@ -31,6 +31,10 @@ export interface DeployWorkspaceProjectInternalTelemetryProps extends AzdTelemet hasNewSettings?: 'true' | 'false'; // ShouldSaveDeploySettingsPromptStep shouldSaveDeploySettings?: 'true' | 'false'; // ShouldSaveDeploySettingsPromptStep didSaveSettings?: 'true' | 'false'; // DeployWorkspaceProjectSaveSettingsStep - we swallow errors here, so log the outcome just in case + + // Recommended managed environments + recommendedEnvCount?: string; // number casted to string + usedRecommendedEnv?: 'true' | 'false'; } export interface DeployWorkspaceProjectNotificationTelemetryProps {