Skip to content

Commit b8875f4

Browse files
authored
Add additional entry-points for deployWorkspaceProject (#482)
1 parent 8b6a8e7 commit b8875f4

15 files changed

+287
-124
lines changed

package.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@
6565
"category": "Azure Container Apps",
6666
"icon": "$(add)"
6767
},
68+
{
69+
"command": "containerApps.createContainerAppFromWorkspace",
70+
"title": "%containerApps.createContainerAppFromWorkspace%",
71+
"category": "Azure Container Apps"
72+
},
6873
{
6974
"command": "containerApps.deleteManagedEnvironment",
7075
"title": "%containerApps.deleteManagedEnvironment%",
@@ -90,6 +95,11 @@
9095
"title": "%containerApps.deployWorkspaceProject%",
9196
"category": "Azure Container Apps"
9297
},
98+
{
99+
"command": "containerApps.deployWorkspaceProjectToContainerApp",
100+
"title": "%containerApps.deployWorkspaceProjectToContainerApp%",
101+
"category": "Azure Container Apps"
102+
},
93103
{
94104
"command": "containerApps.deleteContainerApp",
95105
"title": "%containerApps.deleteContainerApp%",
@@ -278,6 +288,11 @@
278288
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /managedEnvironmentItem/i",
279289
"group": "2@1"
280290
},
291+
{
292+
"command": "containerApps.createContainerAppFromWorkspace",
293+
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /managedEnvironmentItem/i",
294+
"group": "2@2"
295+
},
281296
{
282297
"command": "containerApps.deleteManagedEnvironment",
283298
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /managedEnvironmentItem/i",
@@ -338,6 +353,11 @@
338353
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem(.*)revisionMode:single/i",
339354
"group": "6@1"
340355
},
356+
{
357+
"command": "containerApps.deployWorkspaceProjectToContainerApp",
358+
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem/i",
359+
"group": "6@2"
360+
},
341361
{
342362
"command": "containerApps.startStreamingLogs",
343363
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem/i",
@@ -480,6 +500,14 @@
480500
}
481501
],
482502
"commandPalette": [
503+
{
504+
"command": "containerApps.createContainerAppFromWorkspace",
505+
"when": "never"
506+
},
507+
{
508+
"command": "containerApps.deployWorkspaceProjectToContainerApp",
509+
"when": "never"
510+
},
483511
{
484512
"command": "containerApps.deployImageApi",
485513
"when": "never"

package.nls.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
"containerApps.showDraftCommandDeployPopup": "Show an informational deploy pop-up message whenever a draft command is run.",
88
"containerApps.browse": "Browse",
99
"containerApps.createContainerApp": "Create Container App...",
10+
"containerApps.createContainerAppFromWorkspace": "Create Container App from Workspace...",
1011
"containerApps.editContainerApp": "Edit Container App (Advanced)...",
1112
"containerApps.updateImage": "Update Container Image...",
1213
"containerApps.deployImageApi": "Deploy Image to Container App (API)...",
1314
"containerApps.deployWorkspaceProject": "Deploy Project from Workspace...",
15+
"containerApps.deployWorkspaceProjectToContainerApp": "Deploy Workspace to Container App...",
1416
"containerApps.deleteContainerApp": "Delete Container App...",
1517
"containerApps.disableIngress": "Disable Ingress for Container App",
1618
"containerApps.enableIngress": "Enable Ingress for Container App...",

src/commands/deployWorkspaceProject/README.md

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/commands/deployWorkspaceProject/deployWorkspaceProject.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import type { AzureSubscription } from "@microsoft/vscode-azureresources-api";
99
import { ProgressLocation, window } from "vscode";
1010
import { activityInfoIcon, activitySuccessContext, appProvider, managedEnvironmentsId, operationalInsightsProvider, webProvider } from "../../constants";
1111
import { ext } from "../../extensionVariables";
12-
import { ContainerAppModel, isIngressEnabled } from "../../tree/ContainerAppItem";
12+
import { ContainerAppItem, ContainerAppModel, isIngressEnabled } from "../../tree/ContainerAppItem";
13+
import { ManagedEnvironmentItem } from "../../tree/ManagedEnvironmentItem";
1314
import { createActivityChildContext, createActivityContext } from "../../utils/activity/activityUtils";
1415
import { localize } from "../../utils/localize";
1516
import { ContainerAppOverwriteConfirmStep } from "../ContainerAppOverwriteConfirmStep";
@@ -27,7 +28,7 @@ import { ShouldSaveDeploySettingsPromptStep } from "./ShouldSaveDeploySettingsPr
2728
import { DefaultResourcesNameStep } from "./getDefaultValues/DefaultResourcesNameStep";
2829
import { getDefaultContextValues } from "./getDefaultValues/getDefaultContextValues";
2930

30-
export async function deployWorkspaceProject(context: IActionContext): Promise<void> {
31+
export async function deployWorkspaceProject(context: IActionContext, item?: ContainerAppItem | ManagedEnvironmentItem): Promise<void> {
3132
ext.outputChannel.appendLog(localize('beginCommandExecution', '--------Initializing deploy workspace project--------'));
3233

3334
const subscription: AzureSubscription = await subscriptionExperience(context, ext.rgApiV2.resources.azureResourceTreeDataProvider);
@@ -40,7 +41,7 @@ export async function deployWorkspaceProject(context: IActionContext): Promise<v
4041
cancellable: false,
4142
title: localize('loadingWorkspaceTitle', 'Loading workspace project deployment configurations...')
4243
}, async () => {
43-
defaultContextValues = await getDefaultContextValues({ ...context, ...subscriptionContext });
44+
defaultContextValues = await getDefaultContextValues({ ...context, ...subscriptionContext }, item);
4445
});
4546

4647
const wizardContext: DeployWorkspaceProjectContext = {

src/commands/deployWorkspaceProject/deployWorkspaceProjectSettings.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export interface DeployWorkspaceProjectSettings {
1414
containerRegistryName?: string;
1515
}
1616

17-
const deployWorkspaceProjectPrefix: string = 'deployWorkspaceProject';
17+
export const deployWorkspaceProjectPrefix: string = 'deployWorkspaceProject';
1818

1919
export async function getDeployWorkspaceProjectSettings(rootFolder: WorkspaceFolder): Promise<DeployWorkspaceProjectSettings> {
2020
const settingsPath: string = settingUtils.getDefaultRootWorkspaceSettingsPath(rootFolder);

src/commands/deployWorkspaceProject/getDefaultValues/DefaultResourcesNameStep.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export class DefaultResourcesNameStep extends AzureWizardPromptStep<DeployWorksp
2222
);
2323

2424
const resourceBaseName: string = (await context.ui.showInputBox({
25-
prompt: localize('resourceBaseNamePrompt', 'Enter a name for new container app resources.'),
25+
prompt: localize('resourceBaseNamePrompt', 'Enter a name for the new container app resource(s).'),
2626
validateInput: this.validateInput,
2727
asyncValidationTask: (name: string) => this.validateNameAvailability(context, name)
2828
})).trim();

src/commands/deployWorkspaceProject/getDefaultValues/getDefaultAcrResources.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,26 @@
66
import type { Registry } from "@azure/arm-containerregistry";
77
import type { ISubscriptionActionContext } from "@microsoft/vscode-azext-utils";
88
import { ext } from "../../../extensionVariables";
9+
import type { ContainerAppItem } from "../../../tree/ContainerAppItem";
10+
import type { ManagedEnvironmentItem } from "../../../tree/ManagedEnvironmentItem";
911
import { localize } from "../../../utils/localize";
1012
import { AcrListStep } from "../../image/imageSource/containerRegistry/acr/AcrListStep";
1113
import { DeployWorkspaceProjectSettings } from "../deployWorkspaceProjectSettings";
14+
import { triggerSettingsOverride } from "./getDefaultContextValues";
1215

1316
interface DefaultAcrResources {
1417
registry?: Registry;
1518
imageName?: string;
1619
}
1720

18-
export async function getDefaultAcrResources(context: ISubscriptionActionContext, settings: DeployWorkspaceProjectSettings | undefined): Promise<DefaultAcrResources> {
21+
export async function getDefaultAcrResources(
22+
context: ISubscriptionActionContext,
23+
settings: DeployWorkspaceProjectSettings | undefined,
24+
item: ContainerAppItem | ManagedEnvironmentItem | undefined
25+
): Promise<DefaultAcrResources> {
1926
const noMatchingResource = { registry: undefined, imageName: undefined };
2027

21-
if (!settings || !settings.containerRegistryName) {
28+
if (!settings || !settings.containerRegistryName || triggerSettingsOverride(settings, item)) {
2229
return noMatchingResource;
2330
}
2431

src/commands/deployWorkspaceProject/getDefaultValues/getDefaultContainerAppsResources.ts

Lines changed: 0 additions & 104 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.md in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import type { ManagedEnvironment } from "@azure/arm-appcontainers";
7+
import type { ResourceGroup } from "@azure/arm-resources";
8+
import { type ISubscriptionActionContext } from "@microsoft/vscode-azext-utils";
9+
import { ContainerAppItem, ContainerAppModel } from "../../../../tree/ContainerAppItem";
10+
import { ManagedEnvironmentItem } from "../../../../tree/ManagedEnvironmentItem";
11+
import type { DeployWorkspaceProjectSettings } from "../../deployWorkspaceProjectSettings";
12+
import { getContainerAppResourcesFromItem, getContainerAppResourcesFromSettings } from "./getDefaultResourcesFrom";
13+
import { promptForEnvironmentResources } from "./promptForEnvironmentResources";
14+
15+
export interface DefaultContainerAppsResources {
16+
resourceGroup?: ResourceGroup;
17+
managedEnvironment?: ManagedEnvironment;
18+
containerApp?: ContainerAppModel;
19+
}
20+
21+
export async function getDefaultContainerAppsResources(
22+
context: ISubscriptionActionContext,
23+
settings: DeployWorkspaceProjectSettings | undefined,
24+
item?: ContainerAppItem | ManagedEnvironmentItem
25+
): Promise<DefaultContainerAppsResources> {
26+
// If a tree item is provided that can be used to deduce default context values, try to use those first
27+
if (item) {
28+
return await getContainerAppResourcesFromItem(context, item);
29+
}
30+
31+
// Otherwise try to obtain container app resources using any saved workspace settings
32+
const { resourceGroup, managedEnvironment, containerApp } = await getContainerAppResourcesFromSettings(context, settings);
33+
if (resourceGroup && managedEnvironment && containerApp) {
34+
return { resourceGroup, managedEnvironment, containerApp };
35+
}
36+
37+
// Otherwise prompt the user for managed environment resources to use
38+
return await promptForEnvironmentResources(context);
39+
}

0 commit comments

Comments
 (0)