Skip to content

Commit 8accf10

Browse files
[tsp-client] Create unique sparse spec directories (#8334)
* create unique sparse spec dirs * remove unnecessary delete logic * a few fixes * changelog * update release date --------- Co-authored-by: Catalina Peralta <caperal@microsoft.com>
1 parent bfe6b01 commit 8accf10

5 files changed

Lines changed: 20 additions & 34 deletions

File tree

tools/tsp-client/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Release
22

3+
## 2024-05-29 - 0.8.0
4+
5+
- Create unique directories for sparse spec checkout.
6+
37
## 2024-05-20 - 0.7.1
48

59
- Added `--no-prompt` flag to skip the output directory confirmation prompt.

tools/tsp-client/package-lock.json

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

tools/tsp-client/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@azure-tools/typespec-client-generator-cli",
3-
"version": "0.7.1",
3+
"version": "0.8.0",
44
"description": "A tool to generate Azure SDKs from TypeSpec",
55
"main": "dist/index.js",
66
"homepage": "https://github.com/Azure/azure-sdk-tools/tree/main/tools/tsp-client#readme",

tools/tsp-client/src/index.ts

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ import { createTempDirectory, removeDirectory, readTspLocation, getEmitterFromRe
33
import { Logger, printBanner, enableDebug, printVersion } from "./log.js";
44
import { TspLocation, compileTsp, discoverMainFile, resolveTspConfigUrl } from "./typespec.js";
55
import { getOptions } from "./options.js";
6-
import { mkdir, writeFile, cp, readFile, access, stat, rename, unlink } from "node:fs/promises";
6+
import { mkdir, writeFile, cp, readFile, stat, rename, unlink } from "node:fs/promises";
77
import { addSpecFiles, checkoutCommit, cloneRepo, getRepoRoot, sparseCheckout } from "./git.js";
88
import { doesFileExist } from "./network.js";
99
import { parse as parseYaml } from "yaml";
1010
import { joinPaths, normalizePath, resolvePath } from "@typespec/compiler";
11-
import { formatAdditionalDirectories, getAdditionalDirectoryName } from "./utils.js";
11+
import { formatAdditionalDirectories, getAdditionalDirectoryName, makeSparseSpecDir } from "./utils.js";
1212
import { resolve } from "node:path";
1313
import { config as dotenvConfig } from "dotenv";
1414

@@ -33,8 +33,7 @@ async function sdkInit(
3333
// URL scenario
3434
const repoRoot = await getRepoRoot(outputDir);
3535
const resolvedConfigUrl = resolveTspConfigUrl(config);
36-
const cloneDir = joinPaths(repoRoot, "..", "sparse-spec");
37-
await mkdir(cloneDir, { recursive: true });
36+
const cloneDir = await makeSparseSpecDir(repoRoot);
3837
Logger.debug(`Created temporary sparse-checkout directory ${cloneDir}`);
3938
Logger.debug(`Cloning repo to ${cloneDir}`);
4039
await cloneRepo(outputDir, cloneDir, `https://github.com/${resolvedConfigUrl.repo}.git`);
@@ -152,8 +151,7 @@ async function syncTspFiles(outputDir: string, localSpecRepo?: string) {
152151
await cp(joinPaths(localSpecRepoRoot, dir), joinPaths(tempRoot, getAdditionalDirectoryName(dir)), { recursive: true, filter: filter });
153152
}
154153
} else {
155-
const cloneDir = joinPaths(repoRoot, "..", "sparse-spec");
156-
await mkdir(cloneDir, { recursive: true });
154+
const cloneDir = await makeSparseSpecDir(repoRoot);
157155
Logger.debug(`Created temporary sparse-checkout directory ${cloneDir}`);
158156
Logger.debug(`Cloning repo to ${cloneDir}`);
159157
await cloneRepo(tempRoot, cloneDir, `https://github.com/${tspLocation.repo}.git`);
@@ -292,16 +290,6 @@ async function main() {
292290
}
293291

294292
const repoRoot = await getRepoRoot(rootUrl);
295-
try {
296-
// FIXME: this is a workaround meanwhile we fix the issue with failing to delete the sparse-spec directory
297-
// Tracking issue: https://github.com/Azure/azure-sdk-tools/issues/7636
298-
access(joinPaths(repoRoot, "..", "sparse-spec")).then(() => {
299-
Logger.debug("Deleting existing sparse-spec directory");
300-
removeDirectory(joinPaths(repoRoot, "..", "sparse-spec"));
301-
}).catch(() => {});
302-
} catch (err) {
303-
Logger.debug(`Error occurred while attempting to remove sparse-spec directory: ${err}`);
304-
}
305293

306294
if (options.generateLockFile) {
307295
await generateLockFile(rootUrl, repoRoot);

tools/tsp-client/src/utils.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
import { normalizeSlashes } from "@typespec/compiler";
1+
import { joinPaths, normalizeSlashes } from "@typespec/compiler";
2+
import { randomUUID } from "node:crypto";
3+
import { mkdir } from "node:fs/promises";
24

35
export function formatAdditionalDirectories(additionalDirectories?: string[]): string {
46
let additionalDirOutput = "";
@@ -19,3 +21,9 @@ export function getAdditionalDirectoryName(dir: string): string {
1921
}
2022
return finalDirName;
2123
}
24+
25+
export async function makeSparseSpecDir(repoRoot: string): Promise<string> {
26+
const spareSpecPath = joinPaths(repoRoot, "..", `sparse-spec${randomUUID()}`);
27+
await mkdir(spareSpecPath, { recursive: true });
28+
return spareSpecPath;
29+
}

0 commit comments

Comments
 (0)