From 6d5fa4f460bde127f01020ac200638b031687cdf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Jun 2026 17:38:22 +0000 Subject: [PATCH 1/3] Initial plan From 8ddba2e5563e2affe9cb6dae8a6ead894b0b5b9c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Jun 2026 17:49:41 +0000 Subject: [PATCH 2/3] Fix Go package name to use emitter-output-dir instead of module path Co-authored-by: tjprescott <5723682+tjprescott@users.noreply.github.com> --- ...ix-go-package-name-output-dir-2026-6-11.md | 7 +++ packages/typespec-metadata/src/collector.ts | 20 ++++++- .../typespec-metadata/test/collector.test.ts | 60 +++++++++++++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 .chronus/changes/fix-go-package-name-output-dir-2026-6-11.md diff --git a/.chronus/changes/fix-go-package-name-output-dir-2026-6-11.md b/.chronus/changes/fix-go-package-name-output-dir-2026-6-11.md new file mode 100644 index 0000000000..3bb055fea1 --- /dev/null +++ b/.chronus/changes/fix-go-package-name-output-dir-2026-6-11.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@azure-tools/typespec-metadata" +--- + +Fix incorrect Go package name parsing in `tspconfig.yaml`. The Go package name is now derived from the emitter output directory instead of the module path, which correctly excludes version suffixes (e.g., `/v4`) and uses the language-specific `service-dir` for accurate path resolution. diff --git a/packages/typespec-metadata/src/collector.ts b/packages/typespec-metadata/src/collector.ts index 9b360d93b7..3c048ca50f 100644 --- a/packages/typespec-metadata/src/collector.ts +++ b/packages/typespec-metadata/src/collector.ts @@ -257,7 +257,10 @@ function parseTypeScript( /** * Go-specific metadata parser. - * Extracts from module path, looking for azure-sdk-for-go suffix. + * Extracts from module path, looking for azure-sdk-for-go suffix, as a fallback. + * The primary derivation of package name from the emitter output directory is handled + * by the caller (createLanguageMetadata) after the relative output path is computed, + * because it requires knowledge of the base output directory. */ function parseGo( options: Record, @@ -560,6 +563,21 @@ function createLanguageMetadata( relativeOutputDir = relativeOutputDir.replace(/\{namespace\}/g, namespace); } + // For Go, prefer the emitter output directory over the module path for package name derivation. + // The output directory gives the correct repo-relative path (e.g., sdk/resourcemanager/redisenterprise/armredisenterprise) + // without version suffixes that may appear in the module path (e.g., /v4). + if (heuristicLang === "go" && relativeOutputDir?.startsWith("{output-dir}/")) { + const explicitPackageName = + normalizedOptions["package-name"] ?? normalizedOptions["package_name"]; + if (!explicitPackageName) { + const outputDirPackageName = relativeOutputDir.substring("{output-dir}/".length); + packageName = outputDirPackageName; + if (!normalizedOptions["namespace"]) { + namespace = outputDirPackageName; + } + } + } + return { emitterName, packageName, diff --git a/packages/typespec-metadata/test/collector.test.ts b/packages/typespec-metadata/test/collector.test.ts index a629f46cb2..b20ad46b9c 100644 --- a/packages/typespec-metadata/test/collector.test.ts +++ b/packages/typespec-metadata/test/collector.test.ts @@ -294,6 +294,66 @@ describe("language-specific parsers", () => { }); }); +describe("@azure-tools/typespec-go emitter", () => { + it("should derive package name from emitter-output-dir instead of module path", () => { + // Simulates the redisenterprise scenario where module includes version suffix (/v4) + // but the emitter-output-dir gives the correct package path without the suffix. + const optionMap: Record> = { + "@azure-tools/typespec-go": { + module: + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/redisenterprise/armredisenterprise/v4", + "service-dir": "sdk/resourcemanager/redisenterprise", + "emitter-output-dir": + "c:/repos/tsp-output/sdk/resourcemanager/redisenterprise/armredisenterprise", + "generate-fakes": true, + flavor: "azure", + }, + }; + + const result = buildLanguageMetadata(optionMap, {}, "c:/repos/tsp-output"); + const lang = result["go"][0]; + + // Should use output dir path (without /v4 version suffix), not module path + expect(lang.packageName).toBe("sdk/resourcemanager/redisenterprise/armredisenterprise"); + expect(lang.namespace).toBe("sdk/resourcemanager/redisenterprise/armredisenterprise"); + expect(lang.outputDir).toBe( + "{output-dir}/sdk/resourcemanager/redisenterprise/armredisenterprise", + ); + }); + + it("should fall back to module path when emitter-output-dir is not under base output dir", () => { + const optionMap: Record> = { + "@azure-tools/typespec-go": { + module: "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets", + }, + }; + + const result = buildLanguageMetadata(optionMap, {}, "/repos/tsp-output"); + const lang = result["go"][0]; + + // No emitter-output-dir, falls back to module path + expect(lang.packageName).toBe("sdk/security/keyvault/azsecrets"); + expect(lang.namespace).toBe("sdk/security/keyvault/azsecrets"); + }); + + it("should respect explicit package-name over emitter-output-dir", () => { + const optionMap: Record> = { + "@azure-tools/typespec-go": { + "package-name": "sdk/custom/mypackage", + module: "github.com/Azure/azure-sdk-for-go/sdk/some/module/v2", + "emitter-output-dir": "c:/repos/tsp-output/sdk/resourcemanager/redisenterprise/armredisenterprise", + flavor: "azure", + }, + }; + + const result = buildLanguageMetadata(optionMap, {}, "c:/repos/tsp-output"); + const lang = result["go"][0]; + + // Explicit package-name should not be overridden by emitter-output-dir + expect(lang.packageName).toBe("sdk/custom/mypackage"); + }); +}); + describe("service-dir handling", () => { it("should use language-specific service-dir if present", () => { const languageServiceDir = "sdk/security/keyvault"; From f4addce048292fdf0461eb6e62256cdaa7614971 Mon Sep 17 00:00:00 2001 From: Travis Prescott Date: Fri, 12 Jun 2026 09:06:12 -0700 Subject: [PATCH 3/3] Fix CI --- packages/typespec-metadata/test/collector.test.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/typespec-metadata/test/collector.test.ts b/packages/typespec-metadata/test/collector.test.ts index b20ad46b9c..eed1df7b8d 100644 --- a/packages/typespec-metadata/test/collector.test.ts +++ b/packages/typespec-metadata/test/collector.test.ts @@ -339,9 +339,10 @@ describe("@azure-tools/typespec-go emitter", () => { it("should respect explicit package-name over emitter-output-dir", () => { const optionMap: Record> = { "@azure-tools/typespec-go": { - "package-name": "sdk/custom/mypackage", + "package-name": "sdk/custom/myPackage", module: "github.com/Azure/azure-sdk-for-go/sdk/some/module/v2", - "emitter-output-dir": "c:/repos/tsp-output/sdk/resourcemanager/redisenterprise/armredisenterprise", + "emitter-output-dir": + "c:/repos/tsp-output/sdk/resourcemanager/redisenterprise/armredisenterprise", flavor: "azure", }, }; @@ -350,7 +351,7 @@ describe("@azure-tools/typespec-go emitter", () => { const lang = result["go"][0]; // Explicit package-name should not be overridden by emitter-output-dir - expect(lang.packageName).toBe("sdk/custom/mypackage"); + expect(lang.packageName).toBe("sdk/custom/myPackage"); }); });