Skip to content

Commit 882b33f

Browse files
[tsp-client] Normalize tsp-location.yaml directories before processing (#8390)
* normalize tsp-location.yaml directory * add test * add test * feedback --------- Co-authored-by: Catalina Peralta <caperal@microsoft.com>
1 parent 90aeed6 commit 882b33f

6 files changed

Lines changed: 41 additions & 4 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-06-07 - 0.8.1
4+
5+
- Normalize and clean up the directory property in tsp-location.yaml.
6+
37
## 2024-05-29 - 0.8.0
48

59
- Create unique directories for sparse spec checkout.

tools/tsp-client/package-lock.json

Lines changed: 2 additions & 2 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.8.0",
3+
"version": "0.8.1",
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/fs.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { mkdir, rm, stat, readFile, access } from "node:fs/promises";
22
import { Logger } from "./log.js";
33
import { parse as parseYaml } from "yaml";
44
import { TspLocation } from "./typespec.js";
5-
import { joinPaths, resolvePath } from "@typespec/compiler";
5+
import { joinPaths, normalizePath, resolvePath } from "@typespec/compiler";
66

77
export async function ensureDirectory(path: string) {
88
await mkdir(path, { recursive: true });
@@ -32,6 +32,11 @@ export async function readTspLocation(rootDir: string): Promise<TspLocation> {
3232
if (!tspLocation.additionalDirectories) {
3333
tspLocation.additionalDirectories = [];
3434
}
35+
36+
// Normalize the directory path and remove trailing slash
37+
tspLocation.directory = normalizeDirectory(tspLocation.directory);
38+
tspLocation.additionalDirectories = tspLocation.additionalDirectories.map(normalizeDirectory);
39+
3540
return tspLocation;
3641
}
3742
throw new Error("Could not find tsp-location.yaml");
@@ -59,3 +64,8 @@ export async function getEmitterFromRepoConfig(emitterPath: string): Promise<str
5964
}
6065
throw new Error("Could not find emitter package");
6166
}
67+
68+
export function normalizeDirectory(directory: string): string {
69+
const normalizedDir = normalizePath(directory);
70+
return normalizedDir.endsWith("/") ? normalizedDir.slice(0, -1) : normalizedDir;
71+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
directory: specification\contosowidgetmanager\Contoso.WidgetManager\
2+
commit: 9df71d5a717e4ed5e6728e7e6ba2fead60f62243
3+
repo: Azure\azure-rest-api-specs
4+
additionalDirectories:
5+
- specification\contosowidgetmanager\Contoso.WidgetManager.Shared\
6+
- specification/contosowidgetmanager/Contoso.WidgetManager.Utils/
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { assert } from "chai";
2+
import { normalizeDirectory, readTspLocation } from "../src/fs.js";
3+
import { describe, it } from "node:test";
4+
5+
describe("Parse tsp-location.yaml", function () {
6+
it("Normalize tsp-location.yaml directories", async function () {
7+
const tspLocation = await readTspLocation("./test/examples/sdk/badtsplocation");
8+
const directory = normalizeDirectory(tspLocation.directory);
9+
assert.equal(directory, "specification/contosowidgetmanager/Contoso.WidgetManager");
10+
const additionalDirectories = tspLocation.additionalDirectories?.map(normalizeDirectory);
11+
assert.equal(additionalDirectories?.length, 2);
12+
if (additionalDirectories) {
13+
assert.equal(additionalDirectories[0], "specification/contosowidgetmanager/Contoso.WidgetManager.Shared");
14+
assert.equal(additionalDirectories[1], "specification/contosowidgetmanager/Contoso.WidgetManager.Utils");
15+
}
16+
});
17+
});

0 commit comments

Comments
 (0)