Skip to content

Commit 7f7fbc3

Browse files
perf: support aad frontend simpleauth bot scaffold (#2827)
* perf: support change folder structure * chore: support bot * chore: update * chore: fix code on commends * test: fix test * test: update test cases * chore: check branch unit test * chore: bicep config as lf eol * test: fix ut * test: update * perf(arm): solution help frontend hosting plugin fill in arm output (#2771) * perf(arm): solution help frontend hosting plugin fill in arm output * fix: fix import path * chore: remove logs Co-authored-by: Di Lin <[email protected]>
1 parent 9eb3656 commit 7f7fbc3

File tree

58 files changed

+1798
-915
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1798
-915
lines changed

.gitattributes

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
*.tsx eol=lf
77
*.yml eol=lf
88
*.sh eol=lf
9+
*.bicep eol=lf

.github/workflows/unit-test.yml

-2
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,11 @@ on:
55
branches:
66
- main
77
- dev
8-
# delete this want merge into dev branch
98
- feat/arm-support
109
push:
1110
branches:
1211
- main
1312
- dev
14-
# delete this want merge into dev branch
1513
- feat/arm-support
1614

1715
jobs:

packages/fx-core/src/common/armInterface.ts

+10
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,13 @@ export interface ScaffoldArmTemplateResult extends Record<string, unknown> {
3737
Modules?: { [moduleFileName: string]: BicepModule };
3838
Orchestration: BicepOrchestration;
3939
}
40+
41+
export interface ArmTemplateResult extends Record<string, unknown> {
42+
Provision?: {
43+
Orchestration: string;
44+
Reference?: Record<string, unknown>;
45+
Modules?: { [moduleFileName: string]: string };
46+
};
47+
Configuration?: { Orchestration: string; Modules?: { [moduleFileName: string]: string } };
48+
Parameters?: Record<string, string>;
49+
}

packages/fx-core/src/common/constants.ts

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ export class Bicep {
1313
static readonly OutputOrchestrationFileName: string = "output.template.bicep";
1414
static readonly VariablesOrchestrationFileName: string = "variables.template.bicep";
1515
static readonly ParameterFileName: string = "parameters.json";
16+
static readonly ProvisionV2FileName: string = "provision.template.v2.bicep";
17+
static readonly ConfigV2FileName: string = "config.template.v2.bicep";
1618
}
1719

1820
export class TeamsClientId {

packages/fx-core/src/plugins/resource/aad/plugin.ts

+3-25
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ import * as jsonPermissionList from "./permissions/permissions.json";
5151
import { Utils } from "./utils/common";
5252
import * as path from "path";
5353
import * as fs from "fs-extra";
54-
import { ScaffoldArmTemplateResult } from "../../../common/armInterface";
54+
import { ScaffoldArmTemplateResult, ArmTemplateResult } from "../../../common/armInterface";
5555
import { Bicep, ConstantString, ResourcePlugins } from "../../../common/constants";
5656
import { isMultiEnvEnabled } from "../../../common/tools";
5757
import { getTemplatesFolder } from "../../../folder";
@@ -311,33 +311,11 @@ export class AadAppForTeamsImpl {
311311
getTemplatesFolder(),
312312
TemplatePathInfo.BicepTemplateRelativeDir
313313
);
314-
const inputParameterOrchestrationFilePath = path.join(
315-
bicepTemplateDir,
316-
Bicep.ParameterOrchestrationFileName
317-
);
318-
const variablesOrchestrationFilePath = path.join(
319-
bicepTemplateDir,
320-
Bicep.VariablesOrchestrationFileName
321-
);
322314
const parameterFilePath = path.join(bicepTemplateDir, Bicep.ParameterFileName);
323315

324-
const result: ScaffoldArmTemplateResult = {
325-
Orchestration: {
326-
ParameterTemplate: {
327-
Content: await fs.readFile(
328-
inputParameterOrchestrationFilePath,
329-
ConstantString.UTF8Encoding
330-
),
331-
ParameterJson: JSON.parse(
332-
await fs.readFile(parameterFilePath, ConstantString.UTF8Encoding)
333-
),
334-
},
335-
VariableTemplate: {
336-
Content: await fs.readFile(variablesOrchestrationFilePath, ConstantString.UTF8Encoding),
337-
},
338-
},
316+
const result: ArmTemplateResult = {
317+
Parameters: JSON.parse(await fs.readFile(parameterFilePath, ConstantString.UTF8Encoding)),
339318
};
340-
341319
Utils.addLogAndTelemetry(ctx.logProvider, Messages.EndGenerateArmTemplates);
342320
return ResultFactory.Success(result);
343321
}

packages/fx-core/src/plugins/resource/bot/constants.ts

+3
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,9 @@ export class PathInfo {
269269
);
270270
public static readonly ProvisionModuleTemplateFileName = "botProvision.template.bicep";
271271
public static readonly ConfigurationModuleTemplateFileName = "botConfiguration.template.bicep";
272+
public static readonly ProvisionModuleTemplateV2FileName = "botProvision.template.v2.bicep";
273+
public static readonly ConfigurationModuleTemplateV2FileName =
274+
"botConfiguration.template.v2.bicep";
272275
}
273276

274277
export class BotArmOutput {

packages/fx-core/src/plugins/resource/bot/plugin.ts

+31-69
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,15 @@ import { AzureOperations } from "./azureOps";
5353
import { TokenCredentialsBase } from "@azure/ms-rest-nodeauth";
5454
import path from "path";
5555
import { getTemplatesFolder } from "../../..";
56-
import { ScaffoldArmTemplateResult } from "../../../common/armInterface";
56+
import { ArmTemplateResult } from "../../../common/armInterface";
5757
import { Bicep, ConstantString } from "../../../common/constants";
5858
import {
5959
copyFiles,
60-
generateBicepFiles,
6160
getResourceGroupNameFromResourceId,
6261
getSiteNameFromResourceId,
6362
getSubscriptionIdFromResourceId,
6463
isArmSupportEnabled,
6564
} from "../../../common";
66-
import { AzureSolutionSettings } from "@microsoft/teamsfx-api";
6765
import { getArmOutput } from "../utils4v2";
6866

6967
export class TeamsBotImpl {
@@ -198,78 +196,42 @@ export class TeamsBotImpl {
198196

199197
const bicepTemplateDir = path.join(getTemplatesFolder(), PathInfo.BicepTemplateRelativeDir);
200198

201-
const selectedPlugins = (this.ctx.projectSettings?.solutionSettings as AzureSolutionSettings)
202-
.activeResourcePlugins;
203-
const handleBarsContext = {
204-
Plugins: selectedPlugins,
205-
};
206-
207-
const provisionModuleContentResult = await generateBicepFiles(
208-
path.join(bicepTemplateDir, PathInfo.ProvisionModuleTemplateFileName),
209-
handleBarsContext
210-
);
211-
if (provisionModuleContentResult.isErr()) {
212-
throw provisionModuleContentResult.error;
213-
}
214-
215-
const configurationModuleContentResult = await generateBicepFiles(
216-
path.join(bicepTemplateDir, PathInfo.ConfigurationModuleTemplateFileName),
217-
handleBarsContext
218-
);
219-
if (configurationModuleContentResult.isErr()) {
220-
throw configurationModuleContentResult.error;
221-
}
222-
223-
const inputParameterContentResult = await generateBicepFiles(
224-
path.join(bicepTemplateDir, Bicep.ParameterOrchestrationFileName),
225-
handleBarsContext
226-
);
227-
if (inputParameterContentResult.isErr()) {
228-
throw inputParameterContentResult.error;
229-
}
230-
231-
const moduleOrchestrationContentResult = await generateBicepFiles(
232-
path.join(bicepTemplateDir, Bicep.ModuleOrchestrationFileName),
233-
handleBarsContext
234-
);
235-
if (moduleOrchestrationContentResult.isErr()) {
236-
throw moduleOrchestrationContentResult.error;
237-
}
238-
239-
const outputOrchestrationContentResult = await generateBicepFiles(
240-
path.join(bicepTemplateDir, Bicep.OutputOrchestrationFileName),
241-
handleBarsContext
242-
);
243-
if (outputOrchestrationContentResult.isErr()) {
244-
throw outputOrchestrationContentResult.error;
245-
}
246-
247-
const result: ScaffoldArmTemplateResult = {
248-
Modules: {
249-
botProvision: {
250-
Content: provisionModuleContentResult.value,
199+
const result: ArmTemplateResult = {
200+
Provision: {
201+
Orchestration: await fs.readFile(
202+
path.join(bicepTemplateDir, Bicep.ProvisionV2FileName),
203+
ConstantString.UTF8Encoding
204+
),
205+
Modules: {
206+
botProvision: await fs.readFile(
207+
path.join(bicepTemplateDir, PathInfo.ProvisionModuleTemplateV2FileName),
208+
ConstantString.UTF8Encoding
209+
),
251210
},
252-
botConfiguration: {
253-
Content: configurationModuleContentResult.value,
211+
Reference: {
212+
resourceId: "webAppResourceId",
213+
hostName: "webAppHostName",
214+
webAppEndpoint: "webAppEndpoint",
254215
},
255216
},
256-
Orchestration: {
257-
ParameterTemplate: {
258-
Content: inputParameterContentResult.value,
259-
ParameterJson: JSON.parse(
260-
await fs.readFile(
261-
path.join(bicepTemplateDir, Bicep.ParameterFileName),
262-
ConstantString.UTF8Encoding
263-
)
217+
Configuration: {
218+
Orchestration: await fs.readFile(
219+
path.join(bicepTemplateDir, Bicep.ConfigV2FileName),
220+
ConstantString.UTF8Encoding
221+
),
222+
Modules: {
223+
botConfiguration: await fs.readFile(
224+
path.join(bicepTemplateDir, PathInfo.ConfigurationModuleTemplateV2FileName),
225+
ConstantString.UTF8Encoding
264226
),
265227
},
266-
ModuleTemplate: {
267-
Content: moduleOrchestrationContentResult.value,
268-
},
269-
OutputTemplate: {
270-
Content: outputOrchestrationContentResult.value,
271-
},
272228
},
229+
Parameters: JSON.parse(
230+
await fs.readFile(
231+
path.join(bicepTemplateDir, Bicep.ParameterFileName),
232+
ConstantString.UTF8Encoding
233+
)
234+
),
273235
};
274236

275237
Logger.info(Messages.SuccessfullyGenerateArmTemplatesBot);

packages/fx-core/src/plugins/resource/frontend/constants.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export class FrontendPathInfo {
5656
static TemplatePackageExt = ".zip";
5757

5858
static ModuleFileName = "frontendHosting.bicep";
59+
static ModuleProvisionV2FileName = "frontendHostingProvision.v2.bicep";
5960

6061
static BuildFolderName = "build";
6162
static BuildPath = `${FrontendPathInfo.BuildFolderName}${path.sep}`;
@@ -101,9 +102,12 @@ export class FrontendConfigInfo {
101102
}
102103

103104
export class FrontendOutputBicepSnippet {
104-
static readonly StorageName = "frontendHostingProvision.outputs.storageName";
105-
static readonly Endpoint = "frontendHostingProvision.outputs.endpoint";
106-
static readonly Domain = "frontendHostingProvision.outputs.domain";
105+
static readonly StorageName = "provisionOutputs.frontendHostingProvision.outputs.storageName";
106+
static readonly Endpoint = "provisionOutputs.frontendHostingProvision.outputs.endpoint";
107+
static readonly Domain = "provisionOutputs.frontendHostingProvision.outputs.domain";
108+
static readonly Domain2 = "provisionOutputs.frontendHostingOutput.value.domain";
109+
static readonly Endpoint2 = "provisionOutputs.frontendHostingOutput.value.endpoint";
110+
static readonly StorageName2 = "provisionOutputs.frontendHostingOutput.value.storageName";
107111
}
108112

109113
export class TelemetryEvent {

packages/fx-core/src/plugins/resource/frontend/plugin.ts

+13-32
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ import {
5454
import { TemplateInfo } from "./resources/templateInfo";
5555
import { AzureClientFactory, AzureLib } from "./utils/azure-client";
5656
import { getTemplatesFolder } from "../../../folder";
57-
import { ScaffoldArmTemplateResult } from "../../../common/armInterface";
57+
import { ArmTemplateResult } from "../../../common/armInterface";
5858
import * as fs from "fs-extra";
5959
import { Bicep, ConstantString } from "../../../common/constants";
6060
import { EnvironmentUtils } from "./utils/environment-utils";
@@ -195,44 +195,25 @@ export class FrontendPluginImpl {
195195
FrontendPathInfo.BicepTemplateRelativeDir
196196
);
197197

198-
const moduleFilePath = path.join(bicepTemplateDir, FrontendPathInfo.ModuleFileName);
199-
200-
const inputParameterOrchestrationFilePath = path.join(
201-
bicepTemplateDir,
202-
Bicep.ParameterOrchestrationFileName
203-
);
204-
const moduleOrchestrationFilePath = path.join(
205-
bicepTemplateDir,
206-
Bicep.ModuleOrchestrationFileName
207-
);
208-
const outputOrchestrationFilePath = path.join(
198+
const provisionFilePath = path.join(bicepTemplateDir, Bicep.ProvisionV2FileName);
199+
const moduleProvisionFilePath = path.join(
209200
bicepTemplateDir,
210-
Bicep.OutputOrchestrationFileName
201+
FrontendPathInfo.ModuleProvisionV2FileName
211202
);
212203

213-
const result: ScaffoldArmTemplateResult = {
214-
Modules: {
215-
frontendHostingProvision: {
216-
Content: await fs.readFile(moduleFilePath, ConstantString.UTF8Encoding),
204+
const result: ArmTemplateResult = {
205+
Provision: {
206+
Orchestration: await fs.readFile(provisionFilePath, ConstantString.UTF8Encoding),
207+
Reference: {
208+
endpoint: FrontendOutputBicepSnippet.Endpoint2,
209+
domain: FrontendOutputBicepSnippet.Domain2,
217210
},
218-
},
219-
Orchestration: {
220-
ParameterTemplate: {
221-
Content: await fs.readFile(
222-
inputParameterOrchestrationFilePath,
211+
Modules: {
212+
frontendHostingProvision: await fs.readFile(
213+
moduleProvisionFilePath,
223214
ConstantString.UTF8Encoding
224215
),
225216
},
226-
ModuleTemplate: {
227-
Content: await fs.readFile(moduleOrchestrationFilePath, ConstantString.UTF8Encoding),
228-
Outputs: {
229-
endpoint: FrontendOutputBicepSnippet.Endpoint,
230-
domain: FrontendOutputBicepSnippet.Domain,
231-
},
232-
},
233-
OutputTemplate: {
234-
Content: await fs.readFile(outputOrchestrationFilePath, ConstantString.UTF8Encoding),
235-
},
236217
},
237218
};
238219

packages/fx-core/src/plugins/resource/function/constants.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,16 @@ export class QuestionValidationFunc {
181181
}
182182

183183
export class FunctionBicep {
184-
static readonly functionEndpoint: string = "functionProvision.outputs.functionEndpoint";
184+
static readonly functionEndpoint: string =
185+
"provisionOutputs.functionProvision.value.functionEndpoint";
186+
static readonly functionResourceId: string =
187+
"provisionOutputs.functionOutput.value.functionAppResourceId";
185188
}
186189

187190
export class FunctionBicepFile {
188191
static readonly provisionModuleTemplateFileName: string = "functionProvision.template.bicep";
189192
static readonly configurationTemplateFileName: string = "functionConfiguration.template.bicep";
193+
static readonly provisionModuleTemplateV2FileName: string = "functionProvision.template.v2.bicep";
194+
static readonly configuraitonTemplateV2FileName: string =
195+
"functionConfiguration.template.v2.bicep";
190196
}

0 commit comments

Comments
 (0)