Skip to content

Commit

Permalink
perf: update teamsapp yaml version to 1.8 when merge AC
Browse files Browse the repository at this point in the history
  • Loading branch information
rentu committed Feb 21, 2025
1 parent 687783b commit 552b43b
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 65 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ import { getLocalizedString } from "../../../../common/localizeUtils";
import { err, FxError, ok, Result } from "@microsoft/teamsfx-api";
import { FileNotFoundError, UserCancelError } from "../../../../error";
import fs from "fs-extra";
import { parseDocument } from "yaml";
import { MetadataV3 } from "../../../../common/versionMetadata";
import path from "path";
import { updateVersionForTeamsAppYamlFile } from "../../util/utils";

const componentName = "AadManifestHelper";

Expand Down Expand Up @@ -385,32 +383,7 @@ export class AadManifestHelper {
false
);

await AadManifestHelper.updateVersionForTeamsAppYamlFile(projectPath);
await updateVersionForTeamsAppYamlFile(projectPath);
return ok(undefined);
}

public static async updateVersionForTeamsAppYamlFile(projectPath: string): Promise<void> {
const allPossilbeYamlFileNames = [
MetadataV3.localConfigFile,
MetadataV3.configFile,
MetadataV3.testToolConfigFile,
];
for (const yamlFileName of allPossilbeYamlFileNames) {
const ymlPath = path.join(projectPath, yamlFileName);
if (await fs.pathExists(ymlPath)) {
const ymlContent = await fs.readFile(ymlPath, "utf-8");
const document = parseDocument(ymlContent);
const version = document.get("version") as string;
if (version <= "v1.7") {
document.set("version", "v1.8");
const docContent = document.toString();
const updatedContent = docContent.replace(
/(yaml-language-server:\s*\$schema=https:\/\/aka\.ms\/teams-toolkit\/)v\d+\.\d+(\/yaml\.schema\.json)/,
"$1v1.8$2"
);
await fs.writeFile(ymlPath, updatedContent, "utf8");
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import { copilotGptManifestUtils } from "./utils/CopilotGptManifestUtils";
import { ManifestType } from "../../utils/envFunctionUtils";
import { getAbsolutePath } from "../../utils/common";
import { featureFlagManager, FeatureFlags } from "../../../common/featureFlags";
import { updateVersionForTeamsAppYamlFile } from "../util/utils";

export const actionName = "teamsApp/zipAppPackage";

Expand Down Expand Up @@ -533,6 +534,7 @@ export class CreateAppPackageDriver implements StepDriver {
let tempFolder: string | undefined;

if (containExternalAdaptiveCard) {
await updateVersionForTeamsAppYamlFile(context.projectPath);
tempFolder = path.join(appDirectory, ".tmp");
await fs.ensureDir(tempFolder);
tmpPluginFile = path.join(tempFolder, `tmp-ai-plugin-${uuid.v4().slice(0, 6)}.json`);
Expand Down
29 changes: 29 additions & 0 deletions packages/fx-core/src/component/driver/util/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
import { Inputs } from "@microsoft/teamsfx-api";
import { DriverContext } from "../interface/commonArgs";
import { TOOLS } from "../../../common/globalVars";
import { MetadataV3 } from "../../../common/versionMetadata";
import path from "path";
import { parseDocument } from "yaml";
import fs from "fs-extra";

// Needs to validate the parameters outside of the function
export function loadStateFromEnv(
Expand Down Expand Up @@ -44,3 +48,28 @@ export function createDriverContext(inputs: Inputs): DriverContext {
};
return driverContext;
}

export async function updateVersionForTeamsAppYamlFile(projectPath: string): Promise<void> {
const allPossilbeYamlFileNames = [
MetadataV3.localConfigFile,
MetadataV3.configFile,
MetadataV3.testToolConfigFile,
];
for (const yamlFileName of allPossilbeYamlFileNames) {
const ymlPath = path.join(projectPath, yamlFileName);
if (await fs.pathExists(ymlPath)) {
const ymlContent = await fs.readFile(ymlPath, "utf-8");
const document = parseDocument(ymlContent);
const version = document.get("version") as string;
if (version <= "v1.7") {
document.set("version", "v1.8");
const docContent = document.toString();
const updatedContent = docContent.replace(
/(yaml-language-server:\s*\$schema=https:\/\/aka\.ms\/teams-toolkit\/)v\d+\.\d+(\/yaml\.schema\.json)/,
"$1v1.8$2"
);
await fs.writeFile(ymlPath, updatedContent, "utf8");
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import * as chai from "chai";
import { AadManifestHelper } from "../../../../src/component/driver/aad/utility/aadManifestHelper";
import { AadManifestErrorMessage } from "../../../../src/component/driver/aad/error/aadManifestError";
import { AADManifest } from "../../../../src/component/driver/aad/interface/AADManifest";
import { AADApplication } from "../../../../src/component/driver/aad/interface/AADApplication";
import * as sinon from "sinon";
import { MockTools } from "../../../core/utils";
import { setTools, TOOLS } from "../../../../src/common/globalVars";
Expand Down Expand Up @@ -106,40 +105,6 @@ describe("Microsoft Entra manifest helper Test", () => {
await AadManifestHelper.showWarningIfManifestIsOutdated("fake-path", "fake-project-path");
});

it("updateVersionForTeamsAppYamlFile should works fine", async () => {
const teamsAppYaml = "version: v1.7";
const expectedTeamsAppYaml = "version: v1.8";

sinon.stub(fs, "pathExists").resolves(true);
sinon.stub(fs, "readFile").resolves(teamsAppYaml as any);
const writeFileStub = sinon.stub(fs, "writeFile");

await AadManifestHelper.updateVersionForTeamsAppYamlFile("fake-project-path");

const writtenContent = writeFileStub.getCall(0).args[1];
chai.assert.isTrue(writtenContent.includes(expectedTeamsAppYaml));
});

it("updateVersionForTeamsAppYamlFile should works fine when yaml contains schema url", async () => {
const teamsAppYaml = `# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json
# Visit https://aka.ms/teamsfx-v5.0-guide for details on this file
# Visit https://aka.ms/teamsfx-actions for details on actions
version: v1.7`;
const expectedTeamsAppYaml = `# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.8/yaml.schema.json
# Visit https://aka.ms/teamsfx-v5.0-guide for details on this file
# Visit https://aka.ms/teamsfx-actions for details on actions
version: v1.8`;

sinon.stub(fs, "pathExists").resolves(true);
sinon.stub(fs, "readFile").resolves(teamsAppYaml as any);
const writeFileStub = sinon.stub(fs, "writeFile");

await AadManifestHelper.updateVersionForTeamsAppYamlFile("fake-project-path");

const writtenContent = writeFileStub.getCall(0).args[1];
chai.assert.isTrue(writtenContent.includes(expectedTeamsAppYaml));
});

it("processRequiredResourceAccessInManifest with id", async () => {
const manifestWithId: any = {
requiredResourceAccess: [
Expand Down
48 changes: 47 additions & 1 deletion packages/fx-core/tests/component/driver/util/utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@

import "mocha";
import mockedEnv, { RestoreFn } from "mocked-env";
import { loadStateFromEnv, mapStateToEnv } from "../../../../src/component/driver/util/utils";
import {
loadStateFromEnv,
mapStateToEnv,
updateVersionForTeamsAppYamlFile,
} from "../../../../src/component/driver/util/utils";
import fs from "fs-extra";
import { expect } from "chai";
import sinon from "sinon";

describe("loadStateFromEnv", () => {
let envRestore: RestoreFn | undefined;
Expand Down Expand Up @@ -105,3 +111,43 @@ describe("mapStateToEnv", async () => {
expect(result.get("ENV_A")).to.equal("ENV_A value");
});
});

describe("updateVersionForTeamsAppYamlFile", async () => {
afterEach(() => {
sinon.restore();
});
it("updateVersionForTeamsAppYamlFile should works fine", async () => {
const teamsAppYaml = "version: v1.7";
const expectedTeamsAppYaml = "version: v1.8";

sinon.stub(fs, "pathExists").resolves(true);
sinon.stub(fs, "readFile").resolves(teamsAppYaml as any);
const writeFileStub = sinon.stub(fs, "writeFile");

await updateVersionForTeamsAppYamlFile("fake-project-path");

const writtenContent = writeFileStub.getCall(0).args[1];
// use epect instead
expect(writtenContent).to.include(expectedTeamsAppYaml);
});

it("updateVersionForTeamsAppYamlFile should works fine when yaml contains schema url", async () => {
const teamsAppYaml = `# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.7/yaml.schema.json
# Visit https://aka.ms/teamsfx-v5.0-guide for details on this file
# Visit https://aka.ms/teamsfx-actions for details on actions
version: v1.7`;
const expectedTeamsAppYaml = `# yaml-language-server: $schema=https://aka.ms/teams-toolkit/v1.8/yaml.schema.json
# Visit https://aka.ms/teamsfx-v5.0-guide for details on this file
# Visit https://aka.ms/teamsfx-actions for details on actions
version: v1.8`;

sinon.stub(fs, "pathExists").resolves(true);
sinon.stub(fs, "readFile").resolves(teamsAppYaml as any);
const writeFileStub = sinon.stub(fs, "writeFile");

await updateVersionForTeamsAppYamlFile("fake-project-path");

const writtenContent = writeFileStub.getCall(0).args[1];
expect(writtenContent).to.include(expectedTeamsAppYaml);
});
});

0 comments on commit 552b43b

Please sign in to comment.