Skip to content

Commit 48644c2

Browse files
authored
Add revision draft support (single revision mode) (#405)
1 parent 274d7b2 commit 48644c2

File tree

18 files changed

+555
-43
lines changed

18 files changed

+555
-43
lines changed

package-lock.json

Lines changed: 46 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,16 @@
6565
"category": "Azure Container Apps",
6666
"icon": "$(add)"
6767
},
68+
{
69+
"command": "containerApps.deleteManagedEnvironment",
70+
"title": "%containerApps.deleteManagedEnvironment%",
71+
"category": "Azure Container Apps"
72+
},
73+
{
74+
"command": "containerApps.editContainerApp",
75+
"title": "%containerApps.editContainerApp%",
76+
"category": "Azure Container Apps"
77+
},
6878
{
6979
"command": "containerApps.deployImage",
7080
"title": "%containerApps.deployImage%",
@@ -76,11 +86,6 @@
7686
"title": "%containerApps.deployImageApi%",
7787
"category": "Azure Container Apps"
7888
},
79-
{
80-
"command": "containerApps.deleteManagedEnvironment",
81-
"title": "%containerApps.deleteManagedEnvironment%",
82-
"category": "Azure Container Apps"
83-
},
8489
{
8590
"command": "containerApps.deleteContainerApp",
8691
"title": "%containerApps.deleteContainerApp%",
@@ -106,6 +111,12 @@
106111
"title": "%containerApps.editTargetPort%",
107112
"category": "Azure Container Apps"
108113
},
114+
{
115+
"command": "containerApps.discardRevisionDraft",
116+
"title": "%containerApps.discardRevisionDraft%",
117+
"category": "Azure Container Apps",
118+
"icon": "$(discard)"
119+
},
109120
{
110121
"command": "containerApps.chooseRevisionMode",
111122
"title": "%containerApps.chooseRevisionMode%",
@@ -215,24 +226,39 @@
215226
"group": "2@2"
216227
},
217228
{
218-
"command": "containerApps.deployImage",
219-
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem/i",
220-
"group": "3@1"
229+
"command": "containerApps.discardRevisionDraft",
230+
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem(.*)revisionMode:single(.*)unsavedChanges:true/i",
231+
"group": "inline@2"
232+
},
233+
{
234+
"command": "containerApps.discardRevisionDraft",
235+
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem(.*)revisionMode:single(.*)unsavedChanges:true/i",
236+
"group": "3@2"
237+
},
238+
{
239+
"command": "containerApps.editContainerApp",
240+
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem(.*)revisionMode:single/i",
241+
"group": "4@1"
221242
},
222243
{
223244
"command": "containerApps.deleteContainerApp",
224245
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem/i",
225-
"group": "3@2"
246+
"group": "5@1"
247+
},
248+
{
249+
"command": "containerApps.deployImage",
250+
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem/i",
251+
"group": "6@1"
226252
},
227253
{
228254
"command": "containerApps.startStreamingLogs",
229255
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem/i",
230-
"group": "4@1"
256+
"group": "7@1"
231257
},
232258
{
233259
"command": "containerApps.stopStreamingLogs",
234260
"when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /containerAppItem/i",
235-
"group": "4@2"
261+
"group": "7@2"
236262
},
237263
{
238264
"command": "containerApps.chooseRevisionMode",
@@ -351,6 +377,7 @@
351377
"@azure/ms-rest-azure-env": "^2.0.0",
352378
"@microsoft/eslint-config-azuretools": "^0.2.1",
353379
"@microsoft/vscode-azext-dev": "^2.0.1",
380+
"@types/deep-eql": "^4.0.0",
354381
"@types/fs-extra": "^8.1.1",
355382
"@types/gulp": "^4.0.6",
356383
"@types/mocha": "^8.2.2",
@@ -388,6 +415,7 @@
388415
"@microsoft/vscode-azureresources-api": "^2.0.2",
389416
"buffer": "^6.0.3",
390417
"dayjs": "^1.11.3",
418+
"deep-eql": "^4.1.3",
391419
"dotenv": "^16.0.0",
392420
"fs-extra": "^8.1.0",
393421
"semver": "^7.5.2",

package.nls.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@
66
"containerApps.enableOutputTimestamps": "Prepends each line displayed in the output channel with a timestamp.",
77
"containerApps.browse": "Browse",
88
"containerApps.createContainerApp": "Create Container App...",
9-
"containerApps.deployImage": "Update Container App Image......",
9+
"containerApps.editContainerApp": "Edit Container App (Advanced)...",
10+
"containerApps.deployImage": "Update Container App Image...",
1011
"containerApps.deployImageApi": "Update Container App Image (API)...",
1112
"containerApps.deleteContainerApp": "Delete Container App...",
1213
"containerApps.disableIngress": "Disable Ingress for Container App",
1314
"containerApps.enableIngress": "Enable Ingress for Container App...",
1415
"containerApps.toggleVisibility": "Switch Ingress Visibility...",
1516
"containerApps.editTargetPort": "Edit Target Port...",
1617
"containerApps.chooseRevisionMode": "Choose Revision Mode...",
18+
"containerApps.discardRevisionDraft": "Discard Changes...",
1719
"containerApps.activateRevision": "Activate Revision",
1820
"containerApps.deactivateRevision": "Deactivate Revision",
1921
"containerApps.restartRevision": "Restart Revision",

resources/revision-draft.svg

Lines changed: 36 additions & 0 deletions
Loading

src/commands/deployImage/imageSource/buildImageInAzure/buildImageInAzure.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import type { Run as AcrRun } from '@azure/arm-containerregistry';
77
import { KnownRunStatus } from '@azure/arm-containerregistry';
88
import { nonNullValue } from '@microsoft/vscode-azext-utils';
9+
import { delay } from '../../../../utils/delay';
910
import { IBuildImageInAzureContext } from "./IBuildImageInAzureContext";
1011

1112
const WAIT_MS = 5000;
@@ -25,7 +26,3 @@ export async function buildImageInAzure(context: IBuildImageInAzureContext): Pro
2526

2627
return run;
2728
}
28-
29-
async function delay(ms: number): Promise<void> {
30-
await new Promise<void>((resolve: () => void): NodeJS.Timer => setTimeout(resolve, ms));
31-
}

src/commands/editContainerApp.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { KnownActiveRevisionsMode } from "@azure/arm-appcontainers";
7+
import type { IActionContext } from "@microsoft/vscode-azext-utils";
8+
import { ext } from "../extensionVariables";
9+
import type { ContainerAppItem } from "../tree/ContainerAppItem";
10+
import { localize } from "../utils/localize";
11+
import { pickContainerApp } from "../utils/pickContainerApp";
12+
13+
export async function editContainerApp(context: IActionContext, node?: ContainerAppItem): Promise<void> {
14+
node ??= await pickContainerApp(context);
15+
16+
if (node.containerApp.revisionsMode !== KnownActiveRevisionsMode.Single) {
17+
throw new Error(localize('revisionModeError', 'The issued command can only be executed when the container app is in single revision mode.'));
18+
}
19+
20+
await ext.revisionDraftFileSystem.editRevisionDraft(node);
21+
}

src/commands/registerCommands.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { deleteContainerApp } from './deleteContainerApp/deleteContainerApp';
1111
import { deleteManagedEnvironment } from './deleteManagedEnvironment/deleteManagedEnvironment';
1212
import { deployImage } from './deployImage/deployImage';
1313
import { deployImageApi } from './deployImage/deployImageApi';
14+
import { editContainerApp } from './editContainerApp';
1415
import { connectToGitHub } from './gitHub/connectToGitHub/connectToGitHub';
1516
import { disconnectRepo } from './gitHub/disconnectRepo/disconnectRepo';
1617
import { openGitHubRepo } from './gitHub/openGitHubRepo';
@@ -25,6 +26,7 @@ import { activateRevision } from './revision/activateRevision';
2526
import { chooseRevisionMode } from './revision/chooseRevisionMode';
2627
import { deactivateRevision } from './revision/deactivateRevision';
2728
import { restartRevision } from './revision/restartRevision';
29+
import { discardRevisionDraft } from './revisionDraft/discardRevisionDraft';
2830
import { addScaleRule } from './scaling/addScaleRule/addScaleRule';
2931
import { editScalingRange } from './scaling/editScalingRange';
3032

@@ -35,6 +37,7 @@ export function registerCommands(): void {
3537

3638
// container apps
3739
registerCommandWithTreeNodeUnwrapping('containerApps.createContainerApp', createContainerApp);
40+
registerCommandWithTreeNodeUnwrapping('containerApps.editContainerApp', editContainerApp);
3841
registerCommandWithTreeNodeUnwrapping('containerApps.deleteContainerApp', deleteContainerApp);
3942
registerCommandWithTreeNodeUnwrapping('containerApps.deployImage', deployImage);
4043
registerCommandWithTreeNodeUnwrapping('containerApps.deployImageApi', deployImageApi);
@@ -58,6 +61,9 @@ export function registerCommands(): void {
5861
registerCommandWithTreeNodeUnwrapping('containerApps.deactivateRevision', deactivateRevision);
5962
registerCommandWithTreeNodeUnwrapping('containerApps.restartRevision', restartRevision);
6063

64+
// revision draft
65+
registerCommandWithTreeNodeUnwrapping('containerApps.discardRevisionDraft', discardRevisionDraft);
66+
6167
// scaling
6268
registerCommandWithTreeNodeUnwrapping('containerApps.editScalingRange', editScalingRange);
6369
registerCommandWithTreeNodeUnwrapping('containerApps.addScaleRule', addScaleRule);

0 commit comments

Comments
 (0)