Skip to content

Commit 7bd7a29

Browse files
authored
Clear Package Folder Before Generation (#8826)
1 parent dd35ef2 commit 7bd7a29

4 files changed

Lines changed: 78 additions & 2 deletions

File tree

tools/js-sdk-release-tools/package-lock.json

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

tools/js-sdk-release-tools/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"colors": "1.4.0",
2828
"command-line-args": "^5.1.1",
2929
"comment-json": "^4.1.0",
30+
"fs-extra": "^11.2.0",
3031
"js-yaml": "^4.1.0",
3132
"parse-ts-to-ast": "^0.1.1",
3233
"semver": "^7.3.5",

tools/js-sdk-release-tools/src/common/utils.ts

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,31 @@
11
import shell from 'shelljs';
2-
import path from 'path';
2+
import path, { join, posix } from 'path';
33
import fs from 'fs';
44

55
import { SDKType } from './types'
66
import { logger } from "../utils/logger";
77
import { Project, ScriptTarget, SourceFile } from 'ts-morph';
88
import { replaceAll } from '@ts-common/azure-js-dev-tools';
9+
import { readFile } from 'fs/promises';
10+
import { parse } from 'yaml';
11+
12+
// ./eng/common/scripts/TypeSpec-Project-Process.ps1 script forces to use emitter '@azure-tools/typespec-ts',
13+
// so do NOT change the emitter
14+
const emitterName = '@azure-tools/typespec-ts';
15+
16+
// TODO: remove it after we generate and use options by ourselves
17+
const messageToTspConfigSample =
18+
'Please refer to https://github.com/Azure/azure-rest-api-specs/blob/main/specification/contosowidgetmanager/Contoso.WidgetManager/tspconfig.yaml for the right schema.';
19+
20+
async function loadTspConfig(typeSpecDirectory: string): Promise<Exclude<any, null | undefined>> {
21+
const configPath = join(typeSpecDirectory, 'tspconfig.yaml');
22+
const content = await readFile(configPath, { encoding: 'utf-8' });
23+
const config = parse(content.toString());
24+
if (!config) {
25+
throw new Error(`Failed to parse tspconfig.yaml in ${typeSpecDirectory}`);
26+
}
27+
return config;
28+
}
929

1030
export function getClassicClientParametersPath(packageRoot: string): string {
1131
return path.join(packageRoot, 'src', 'models', 'parameters.ts');
@@ -73,4 +93,20 @@ export function tryReadNpmPackageChangelog(packageFolderPath: string): string {
7393
logger.logWarn(`Failed to read NPM package's changelog "${changelogPath}": ${(err as Error)?.stack ?? err}`);
7494
return '';
7595
}
76-
}
96+
}
97+
98+
// generated path is in posix format
99+
// e.g. sdk/mongocluster/arm-mongocluster
100+
export async function getGeneratedPackageDirectory(typeSpecDirectory: string): Promise<string> {
101+
const tspConfig = await loadTspConfig(typeSpecDirectory);
102+
const serviceDir = tspConfig.parameters?.['service-dir']?.default;
103+
if (!serviceDir) {
104+
throw new Error(`Misses service-dir in parameters section of tspconfig.yaml. ${messageToTspConfigSample}`);
105+
}
106+
const packageDir = tspConfig.options?.[emitterName]?.['package-dir'];
107+
if (!packageDir) {
108+
throw new Error(`Misses package-dir in ${emitterName} options of tspconfig.yaml. ${messageToTspConfigSample}`);
109+
}
110+
const packageDirFromRoot = posix.join(serviceDir, packageDir);
111+
return packageDirFromRoot;
112+
}

tools/js-sdk-release-tools/src/llc/generateRLCInPipeline/generateRLCInPipeline.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import {
1818
} from '../utils/generateSampleReadmeMd';
1919
import { updateTypeSpecProjectYamlFile } from '../utils/updateTypeSpecProjectYamlFile';
2020
import { getRelativePackagePath } from "../utils/utils";
21+
import { getGeneratedPackageDirectory } from "../../common/utils";
22+
import { remove } from 'fs-extra';
2123

2224
export async function generateRLCInPipeline(options: {
2325
sdkRepo: string;
@@ -38,6 +40,10 @@ export async function generateRLCInPipeline(options: {
3840
let packagePath: string | undefined = undefined;
3941
let relativePackagePath: string | undefined = undefined;
4042
if (options.typespecProject) {
43+
const typespecProject = path.join(options.swaggerRepo, options.typespecProject);
44+
const generatedPackageDir = await getGeneratedPackageDirectory(typespecProject);
45+
await remove(generatedPackageDir);
46+
4147
if (!options.skipGeneration) {
4248
logger.logGreen(`>>>>>>>>>>>>>>>>>>> Start: "${options.typespecProject}" >>>>>>>>>>>>>>>>>>>>>>>>>`);
4349
if(options.sdkGenerationType === "command") {

0 commit comments

Comments
 (0)