Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions tools/tsp-client/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Release

## 2024-05-29 - 0.8.0

- Create unique directories for sparse spec checkout.

## 2024-05-20 - 0.7.1

- Added `--no-prompt` flag to skip the output directory confirmation prompt.
Expand Down
18 changes: 2 additions & 16 deletions tools/tsp-client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion tools/tsp-client/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@azure-tools/typespec-client-generator-cli",
"version": "0.7.1",
"version": "0.8.0",
"description": "A tool to generate Azure SDKs from TypeSpec",
"main": "dist/index.js",
"homepage": "https://github.com/Azure/azure-sdk-tools/tree/main/tools/tsp-client#readme",
Expand Down
20 changes: 4 additions & 16 deletions tools/tsp-client/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import { createTempDirectory, removeDirectory, readTspLocation, getEmitterFromRe
import { Logger, printBanner, enableDebug, printVersion } from "./log.js";
import { TspLocation, compileTsp, discoverMainFile, resolveTspConfigUrl } from "./typespec.js";
import { getOptions } from "./options.js";
import { mkdir, writeFile, cp, readFile, access, stat, rename, unlink } from "node:fs/promises";
import { mkdir, writeFile, cp, readFile, stat, rename, unlink } from "node:fs/promises";
import { addSpecFiles, checkoutCommit, cloneRepo, getRepoRoot, sparseCheckout } from "./git.js";
import { doesFileExist } from "./network.js";
import { parse as parseYaml } from "yaml";
import { joinPaths, normalizePath, resolvePath } from "@typespec/compiler";
import { formatAdditionalDirectories, getAdditionalDirectoryName } from "./utils.js";
import { formatAdditionalDirectories, getAdditionalDirectoryName, makeSparseSpecDir } from "./utils.js";
import { resolve } from "node:path";
import { config as dotenvConfig } from "dotenv";

Expand All @@ -33,8 +33,7 @@ async function sdkInit(
// URL scenario
const repoRoot = await getRepoRoot(outputDir);
const resolvedConfigUrl = resolveTspConfigUrl(config);
const cloneDir = joinPaths(repoRoot, "..", "sparse-spec");
await mkdir(cloneDir, { recursive: true });
const cloneDir = await makeSparseSpecDir(repoRoot);
Logger.debug(`Created temporary sparse-checkout directory ${cloneDir}`);
Logger.debug(`Cloning repo to ${cloneDir}`);
await cloneRepo(outputDir, cloneDir, `https://github.com/${resolvedConfigUrl.repo}.git`);
Expand Down Expand Up @@ -152,8 +151,7 @@ async function syncTspFiles(outputDir: string, localSpecRepo?: string) {
await cp(joinPaths(localSpecRepoRoot, dir), joinPaths(tempRoot, getAdditionalDirectoryName(dir)), { recursive: true, filter: filter });
}
} else {
const cloneDir = joinPaths(repoRoot, "..", "sparse-spec");
await mkdir(cloneDir, { recursive: true });
const cloneDir = await makeSparseSpecDir(repoRoot);
Logger.debug(`Created temporary sparse-checkout directory ${cloneDir}`);
Logger.debug(`Cloning repo to ${cloneDir}`);
await cloneRepo(tempRoot, cloneDir, `https://github.com/${tspLocation.repo}.git`);
Expand Down Expand Up @@ -292,16 +290,6 @@ async function main() {
}

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

if (options.generateLockFile) {
await generateLockFile(rootUrl, repoRoot);
Expand Down
10 changes: 9 additions & 1 deletion tools/tsp-client/src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { normalizeSlashes } from "@typespec/compiler";
import { joinPaths, normalizeSlashes } from "@typespec/compiler";
import { randomUUID } from "node:crypto";
import { mkdir } from "node:fs/promises";

export function formatAdditionalDirectories(additionalDirectories?: string[]): string {
let additionalDirOutput = "";
Expand All @@ -19,3 +21,9 @@ export function getAdditionalDirectoryName(dir: string): string {
}
return finalDirName;
}

export async function makeSparseSpecDir(repoRoot: string): Promise<string> {
const spareSpecPath = joinPaths(repoRoot, "..", `sparse-spec${randomUUID()}`);
await mkdir(spareSpecPath, { recursive: true });
return spareSpecPath;
}