diff --git a/.github/shared/src/sdk-types.js b/.github/shared/src/sdk-types.js index d1c0ebd9bebc..2d85c9471e4f 100644 --- a/.github/shared/src/sdk-types.js +++ b/.github/shared/src/sdk-types.js @@ -1,7 +1,43 @@ -/* v8 ignore start */ +import * as z from "zod"; /** - * @typedef {'azure-sdk-for-go' | 'azure-sdk-for-java' | 'azure-sdk-for-js' | 'azure-sdk-for-net' | 'azure-sdk-for-python'} SdkName + * Represents supported SDK language identifiers. + * + * @readonly + * @enum {"azure-sdk-for-go" | "azure-sdk-for-java" | "azure-sdk-for-js" | "azure-sdk-for-net" | "azure-sdk-for-python"} + */ +export const SdkName = Object.freeze({ + Go: "azure-sdk-for-go", + Java: "azure-sdk-for-java", + Js: "azure-sdk-for-js", + Net: "azure-sdk-for-net", + Python: "azure-sdk-for-python", +}); +/** @type {import("zod").ZodType} */ +export const SdkNameSchema = z.enum(Object.values(SdkName)); + +/* + * Data for the API view request. + */ +export const APIViewRequestDataSchema = z.object({ packageName: z.string(), filePath: z.string() }); +/** + * @typedef {import("zod").infer} APIViewRequestData + */ + +/** + * Represents the result of the spec-gen-sdk generation process. + */ +export const SpecGenSdkArtifactInfoSchema = z.object({ + language: SdkNameSchema, + result: z.string(), + headSha: z.string(), + prNumber: z.string().optional(), + labelAction: z.boolean().optional(), + isSpecGenSdkCheckRequired: z.boolean(), + apiViewRequestData: z.array(APIViewRequestDataSchema), +}); +/** + * @typedef {import("zod").infer} SpecGenSdkArtifactInfo */ /** diff --git a/.github/shared/test/sdk-types.js b/.github/shared/test/sdk-types.js new file mode 100644 index 000000000000..6027697d48a7 --- /dev/null +++ b/.github/shared/test/sdk-types.js @@ -0,0 +1,24 @@ +import { SdkName } from "../src/sdk-types.js"; + +/** + * @typedef {import("../src/sdk-types.js").SpecGenSdkArtifactInfo} SpecGenSdkArtifactInfo + */ + +/** + * Create a mock SpecGenSdkArtifactInfo, filling unspecified properties with defaults. + * + * @param {Partial} [overrides] + * @returns {SpecGenSdkArtifactInfo} + */ +export function createMockSpecGenSdkArtifactInfo(overrides = {}) { + /** @type {SpecGenSdkArtifactInfo} */ + const defaults = { + apiViewRequestData: [], + headSha: "abc123", + isSpecGenSdkCheckRequired: true, + language: SdkName.Go, + result: "test result", + }; + + return { ...defaults, ...overrides }; +} diff --git a/.github/shared/test/sdk-types.test.js b/.github/shared/test/sdk-types.test.js new file mode 100644 index 000000000000..07cf14fea3ab --- /dev/null +++ b/.github/shared/test/sdk-types.test.js @@ -0,0 +1,22 @@ +import { describe, expect, it } from "vitest"; +import { sdkLabels, SpecGenSdkArtifactInfoSchema } from "../src/sdk-types.js"; +import { createMockSpecGenSdkArtifactInfo } from "./sdk-types.js"; + +describe("sdk-types", () => { + it("defines sdkLabels", () => { + // Ensures constant "sdkLabels" is considered "covered" by codecov + expect(sdkLabels).toBeDefined(); + }); + + it("parses SpecGetSdkArtifactInfo", () => { + const artifactInfo = createMockSpecGenSdkArtifactInfo(); + + const json = JSON.stringify(artifactInfo); + expect(json).toMatchInlineSnapshot( + `"{"apiViewRequestData":[],"headSha":"abc123","isSpecGenSdkCheckRequired":true,"language":"azure-sdk-for-go","result":"test result"}"`, + ); + + const parsed = SpecGenSdkArtifactInfoSchema.parse(JSON.parse(json)); + expect(parsed).toEqual(artifactInfo); + }); +}); diff --git a/.github/workflows/src/sdk-breaking-change-labels.js b/.github/workflows/src/sdk-breaking-change-labels.js index d36e721ece2a..66e2ef33768b 100644 --- a/.github/workflows/src/sdk-breaking-change-labels.js +++ b/.github/workflows/src/sdk-breaking-change-labels.js @@ -1,4 +1,4 @@ -import { sdkLabels } from "../../shared/src/sdk-types.js"; +import { SpecGenSdkArtifactInfoSchema, sdkLabels } from "../../shared/src/sdk-types.js"; import { getAdoBuildInfoFromUrl, getAzurePipelineArtifact } from "./artifacts.js"; import { extractInputs } from "./context.js"; import { LabelAction } from "./label.js"; @@ -72,12 +72,14 @@ export async function getLabelAndActionImpl({ details_url, core, retryOptions = } else { core.info(`Artifact content: ${result.artifactData}`); // Parse the JSON data - const specGenSdkArtifactInfo = JSON.parse(result.artifactData); + const specGenSdkArtifactInfo = SpecGenSdkArtifactInfoSchema.parse( + JSON.parse(result.artifactData), + ); const labelActionText = specGenSdkArtifactInfo.labelAction; head_sha = specGenSdkArtifactInfo.headSha; - issue_number = parseInt(specGenSdkArtifactInfo.prNumber, 10); + issue_number = parseInt(specGenSdkArtifactInfo.prNumber ?? "", 10); if (!issue_number) { core.warning( `No PR number found in the artifact '${artifactName}' with details_url:${details_url}.`, diff --git a/.github/workflows/src/spec-gen-sdk-status.js b/.github/workflows/src/spec-gen-sdk-status.js index 03c5de311c5d..a2a6b3f5a82e 100644 --- a/.github/workflows/src/spec-gen-sdk-status.js +++ b/.github/workflows/src/spec-gen-sdk-status.js @@ -1,4 +1,5 @@ import { CheckStatus, CommitStatusState, PER_PAGE_MAX } from "../../shared/src/github.js"; +import { SpecGenSdkArtifactInfoSchema } from "../../shared/src/sdk-types.js"; import { getAdoBuildInfoFromUrl, getAzurePipelineArtifact } from "./artifacts.js"; import { extractInputs } from "./context.js"; import { writeToActionsSummary } from "./github.js"; @@ -122,7 +123,7 @@ export async function setSpecGenSdkStatusImpl({ /** * @param {Object} params - * @param {Array} params.checkRuns + * @param {import("./github.js").CheckRuns} params.checkRuns * @param {typeof import("@actions/core")} params.core * @returns {Promise<{state: CommitStatusState, description: string}>} */ @@ -139,6 +140,9 @@ async function processResult({ checkRuns, core }) { for (const checkRun of checkRuns) { core.info(`Processing check run: ${checkRun.name} (${checkRun.conclusion})`); + if (checkRun.details_url === null) { + throw new Error(`'details_url' is null in Check Run '${checkRun.name}'`); + } const buildInfo = getAdoBuildInfoFromUrl(checkRun.details_url); const ado_project_url = buildInfo.projectUrl; const ado_build_id = buildInfo.buildId; @@ -159,7 +163,8 @@ async function processResult({ checkRuns, core }) { `Artifact '${artifactName}' not found in the build with details_url:${checkRun.details_url}`, ); } - const artifactJsonObj = JSON.parse(result.artifactData); + + const artifactJsonObj = SpecGenSdkArtifactInfoSchema.parse(JSON.parse(result.artifactData)); const language = artifactJsonObj.language; const shortLanguageName = language.split("-").pop(); const executionResult = artifactJsonObj.result; diff --git a/.github/workflows/test/sdk-breaking-change-labels.test.js b/.github/workflows/test/sdk-breaking-change-labels.test.js index 9b2e58cc9d49..96615e3875c5 100644 --- a/.github/workflows/test/sdk-breaking-change-labels.test.js +++ b/.github/workflows/test/sdk-breaking-change-labels.test.js @@ -1,5 +1,6 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { sdkLabels } from "../../shared/src/sdk-types.js"; +import { createMockSpecGenSdkArtifactInfo } from "../../shared/test/sdk-types.js"; import { LabelAction } from "../src/label.js"; import { getLabelAndActionImpl, @@ -12,9 +13,11 @@ vi.mock("../src/context.js", () => ({ extractInputs: vi.fn(), })); +/** @type {import('vitest').Mock<(url: string) => Promise>>} */ const mockFetch = vi.fn(); + // Mock global fetch -global.fetch = mockFetch; +global.fetch = /** @type {import('vitest').MockedFunction} */ (mockFetch); const mockGithub = createMockGithub(); const mockContext = createMockContext(); @@ -64,20 +67,22 @@ describe("sdk-breaking-change-labels", () => { const mockContentResponse = { ok: true, text: vi.fn().mockResolvedValue( - JSON.stringify({ - labelAction: true, - language, - prNumber: "123", - }), + JSON.stringify( + createMockSpecGenSdkArtifactInfo({ + labelAction: true, + language, + prNumber: "123", + }), + ), ), }; // Setup fetch to return different responses for each call mockFetch.mockImplementation((url) => { if (url.includes("artifacts?artifactName=")) { - return mockArtifactResponse; + return Promise.resolve(mockArtifactResponse); } else { - return mockContentResponse; + return Promise.resolve(mockContentResponse); } }); @@ -90,6 +95,7 @@ describe("sdk-breaking-change-labels", () => { // Verify result expect(result).toEqual({ + headSha: "abc123", labelName: sdkLabels[language].breakingChange, labelAction: LabelAction.Add, issueNumber: 123, @@ -119,21 +125,21 @@ describe("sdk-breaking-change-labels", () => { const language = "azure-sdk-for-js"; const mockContentResponse = { ok: true, - text: vi.fn().mockResolvedValue( - JSON.stringify({ - labelAction: false, - language, - prNumber: "123", - }), - ), + text: vi + .fn() + .mockResolvedValue( + JSON.stringify( + createMockSpecGenSdkArtifactInfo({ labelAction: false, language, prNumber: "123" }), + ), + ), }; // Setup fetch to return different responses for each call mockFetch.mockImplementation((url) => { if (url.includes("artifacts?artifactName=")) { - return mockArtifactResponse; + return Promise.resolve(mockArtifactResponse); } else { - return mockContentResponse; + return Promise.resolve(mockContentResponse); } }); @@ -146,6 +152,7 @@ describe("sdk-breaking-change-labels", () => { // Verify result has Remove action expect(result).toEqual({ + headSha: "abc123", labelName: sdkLabels[language].breakingChange, labelAction: LabelAction.Remove, issueNumber: 123, @@ -176,20 +183,22 @@ describe("sdk-breaking-change-labels", () => { const mockContentResponse = { ok: true, text: vi.fn().mockResolvedValue( - JSON.stringify({ - labelAction: false, - language, - prNumber: "123", - }), + JSON.stringify( + createMockSpecGenSdkArtifactInfo({ + labelAction: false, + language, + prNumber: "123", + }), + ), ), }; // Setup fetch to return different responses for each call mockFetch.mockImplementation((url) => { if (url.includes("artifacts?artifactName=")) { - return mockArtifactResponse; + return Promise.resolve(mockArtifactResponse); } else { - return mockContentResponse; + return Promise.resolve(mockContentResponse); } }); @@ -202,6 +211,7 @@ describe("sdk-breaking-change-labels", () => { // Verify result has none action expect(result).toEqual({ + headSha: "abc123", labelName: sdkLabels[language].breakingChange, labelAction: LabelAction.None, issueNumber: 123, @@ -343,11 +353,7 @@ describe("sdk-breaking-change-labels", () => { }; // Setup fetch to return different responses for each call - mockFetch.mockImplementation((url) => { - if (url.includes("artifacts?artifactName=")) { - return mockArtifactResponse; - } - }); + mockFetch.mockResolvedValue(mockArtifactResponse); // Call function and expect it to throw await expect( @@ -374,11 +380,7 @@ describe("sdk-breaking-change-labels", () => { }; // Setup fetch to return different responses for each call - mockFetch.mockImplementation((url) => { - if (url.includes("artifacts?artifactName=")) { - return mockArtifactResponse; - } - }); + mockFetch.mockResolvedValue(mockArtifactResponse); // Call function and expect it to throw await expect( @@ -419,9 +421,9 @@ describe("sdk-breaking-change-labels", () => { // Setup fetch to return different responses for each call mockFetch.mockImplementation((url) => { if (url.includes("artifacts?artifactName=")) { - return mockArtifactResponse; + return Promise.resolve(mockArtifactResponse); } else { - return mockContentResponse; + return Promise.resolve(mockContentResponse); } }); diff --git a/.github/workflows/test/spec-gen-sdk-status.test.js b/.github/workflows/test/spec-gen-sdk-status.test.js index e9ae2eb107d0..9e3c7e68744b 100644 --- a/.github/workflows/test/spec-gen-sdk-status.test.js +++ b/.github/workflows/test/spec-gen-sdk-status.test.js @@ -1,5 +1,7 @@ import fs from "fs"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { SdkName } from "../../shared/src/sdk-types.js"; +import { createMockSpecGenSdkArtifactInfo } from "../../shared/test/sdk-types.js"; import * as artifacts from "../src/artifacts.js"; import * as github from "../src/github.js"; import { setSpecGenSdkStatusImpl } from "../src/spec-gen-sdk-status.js"; @@ -31,21 +33,23 @@ describe("spec-gen-sdk-status", () => { .spyOn(artifacts, "getAzurePipelineArtifact") // eslint-disable-next-line @typescript-eslint/no-unused-vars .mockImplementation(async ({ ado_build_id, ado_project_url, artifactName }) => { - return { - artifactData: JSON.stringify({ - language: "test-language", - result: "succeeded", - isSpecGenSdkCheckRequired: true, - }), - }; + return Promise.resolve({ + artifactData: JSON.stringify( + createMockSpecGenSdkArtifactInfo({ + language: SdkName.Go, + result: "succeeded", + isSpecGenSdkCheckRequired: true, + }), + ), + }); }); writeToActionsSummaryMock = vi .spyOn(github, "writeToActionsSummary") // eslint-disable-next-line @typescript-eslint/no-unused-vars - .mockImplementation(async (content, core) => { + .mockImplementation((content, core) => { // Implementation that just returns - return; + return Promise.resolve(); }); appendFileSyncMock = vi.spyOn(fs, "appendFileSync").mockImplementation(vi.fn()); @@ -122,11 +126,13 @@ describe("spec-gen-sdk-status", () => { // Mock getAzurePipelineArtifact to return success data getAzurePipelineArtifactMock.mockResolvedValue({ - artifactData: JSON.stringify({ - language: "test-language", - result: "succeeded", - isSpecGenSdkCheckRequired: true, - }), + artifactData: JSON.stringify( + createMockSpecGenSdkArtifactInfo({ + language: SdkName.Go, + result: "succeeded", + isSpecGenSdkCheckRequired: true, + }), + ), }); // Call the function @@ -176,22 +182,26 @@ describe("spec-gen-sdk-status", () => { }); // Mock getAzurePipelineArtifact to return mixed results - getAzurePipelineArtifactMock.mockImplementation(async ({ ado_build_id }) => { + getAzurePipelineArtifactMock.mockImplementation(({ ado_build_id }) => { if (ado_build_id === "123") { return { - artifactData: JSON.stringify({ - language: "test-language-1", - result: "succeeded", - isSpecGenSdkCheckRequired: true, - }), + artifactData: JSON.stringify( + createMockSpecGenSdkArtifactInfo({ + language: SdkName.Go, + result: "succeeded", + isSpecGenSdkCheckRequired: true, + }), + ), }; } else { return { - artifactData: JSON.stringify({ - language: "test-language-2", - result: "failed", - isSpecGenSdkCheckRequired: true, - }), + artifactData: JSON.stringify( + createMockSpecGenSdkArtifactInfo({ + language: SdkName.Java, + result: "failed", + isSpecGenSdkCheckRequired: true, + }), + ), }; } }); @@ -214,7 +224,7 @@ describe("spec-gen-sdk-status", () => { repo: "testRepo", sha: "testSha", state: "failure", - description: expect.stringContaining("failed for"), + description: /** @type {unknown} */ (expect.stringContaining("failed for")), }), ); }); @@ -308,22 +318,26 @@ describe("spec-gen-sdk-status", () => { }); // Mock getAzurePipelineArtifact to return mixed results - getAzurePipelineArtifactMock.mockImplementation(async ({ ado_build_id }) => { + getAzurePipelineArtifactMock.mockImplementation(({ ado_build_id }) => { if (ado_build_id === "123") { return { - artifactData: JSON.stringify({ - language: "test-language-1", - result: "succeeded", - isSpecGenSdkCheckRequired: true, - }), + artifactData: JSON.stringify( + createMockSpecGenSdkArtifactInfo({ + language: SdkName.Go, + result: "succeeded", + isSpecGenSdkCheckRequired: true, + }), + ), }; } else { return { - artifactData: JSON.stringify({ - language: "test-language-2", - result: "failed", - isSpecGenSdkCheckRequired: false, // Not required - }), + artifactData: JSON.stringify( + createMockSpecGenSdkArtifactInfo({ + language: SdkName.Java, + result: "failed", + isSpecGenSdkCheckRequired: false, // Not required + }), + ), }; } }); diff --git a/eng/tools/spec-gen-sdk-runner/package.json b/eng/tools/spec-gen-sdk-runner/package.json index 87bf60e2f5ba..0af7f14d807b 100644 --- a/eng/tools/spec-gen-sdk-runner/package.json +++ b/eng/tools/spec-gen-sdk-runner/package.json @@ -19,6 +19,9 @@ "engines": { "node": ">=20.0.0" }, + "dependencies": { + "@azure-tools/specs-shared": "file:../../../.github/shared" + }, "devDependencies": { "@types/node": "^20.0.0", "@vitest/coverage-v8": "^3.1.2", diff --git a/eng/tools/spec-gen-sdk-runner/src/command-helpers.ts b/eng/tools/spec-gen-sdk-runner/src/command-helpers.ts index fc42f69a1b4b..c18366ff10b4 100644 --- a/eng/tools/spec-gen-sdk-runner/src/command-helpers.ts +++ b/eng/tools/spec-gen-sdk-runner/src/command-helpers.ts @@ -1,16 +1,15 @@ +import { + APIViewRequestData, + SdkName, + SdkNameSchema, + SpecGenSdkArtifactInfo, +} from "@azure-tools/specs-shared/sdk-types"; import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { LogIssueType, LogLevel, logMessage, setVsoVariable, vsoLogIssue } from "./log.js"; import { groupSpecConfigPaths } from "./spec-helpers.js"; -import { - APIViewRequestData, - SdkName, - SpecGenSdkArtifactInfo, - SpecGenSdkCmdInput, - SpecGenSdkRequiredSettings, - VsoLogs, -} from "./types.js"; +import { SpecGenSdkCmdInput, SpecGenSdkRequiredSettings, VsoLogs } from "./types.js"; import { findReadmeFiles, getAllTypeSpecPaths, @@ -93,7 +92,7 @@ export function parseArguments(): SpecGenSdkCmdInput { localSpecRepoPath, localSdkRepoPath, sdkRepoName, - sdkLanguage: sdkRepoName.replace("-pr", ""), + sdkLanguage: SdkNameSchema.parse(sdkRepoName.replace("-pr", "")), runMode, tspConfigPath: getArgumentValue(args, "--tsp-config-relative-path", ""), readmePath: getArgumentValue(args, "--readme-relative-path", ""), diff --git a/eng/tools/spec-gen-sdk-runner/src/commands.ts b/eng/tools/spec-gen-sdk-runner/src/commands.ts index 07ebe91feb45..6a897db36352 100644 --- a/eng/tools/spec-gen-sdk-runner/src/commands.ts +++ b/eng/tools/spec-gen-sdk-runner/src/commands.ts @@ -1,3 +1,4 @@ +import { APIViewRequestData } from "@azure-tools/specs-shared/sdk-types"; import fs from "node:fs"; import path from "node:path"; import { @@ -13,7 +14,7 @@ import { } from "./command-helpers.js"; import { LogLevel, logMessage, vsoAddAttachment, vsoLogIssue } from "./log.js"; import { detectChangedSpecConfigFiles } from "./spec-helpers.js"; -import { APIViewRequestData, SpecGenSdkCmdInput } from "./types.js"; +import { SpecGenSdkCmdInput } from "./types.js"; import { resetGitRepo, runSpecGenSdkCommand, SpecConfigs } from "./utils.js"; /** diff --git a/eng/tools/spec-gen-sdk-runner/src/types.ts b/eng/tools/spec-gen-sdk-runner/src/types.ts index 9a4c6aae7d8b..8ba8eced66e6 100644 --- a/eng/tools/spec-gen-sdk-runner/src/types.ts +++ b/eng/tools/spec-gen-sdk-runner/src/types.ts @@ -1,3 +1,5 @@ +import { SdkName } from "@azure-tools/specs-shared/sdk-types"; + /** * Represents the input parameters required for spec-gen-sdk command execution. */ @@ -9,7 +11,7 @@ export interface SpecGenSdkCmdInput { tspConfigPath?: string; readmePath?: string; sdkRepoName: string; - sdkLanguage: string; + sdkLanguage: SdkName; apiVersion?: string; prNumber?: string; sdkReleaseType?: string; @@ -19,14 +21,6 @@ export interface SpecGenSdkCmdInput { headBranch?: string; } -/** - * Data for the API view request. - */ -export interface APIViewRequestData { - packageName: string; - filePath: string; -} - /* * VsoLogs is a map of task names to log entries. Each log entry contains an array of errors and warnings. */ @@ -38,29 +32,6 @@ export type VsoLogs = Map< } >; -/** - * Represents the result of the spec-gen-sdk generation process. - */ -export interface SpecGenSdkArtifactInfo { - language: string; - result: string; - headSha: string; - prNumber?: string; - labelAction?: boolean; - isSpecGenSdkCheckRequired: boolean; - apiViewRequestData: APIViewRequestData[]; -} - -/** - * Represents supported SDK language identifiers. - */ -export type SdkName = - | "azure-sdk-for-go" - | "azure-sdk-for-java" - | "azure-sdk-for-js" - | "azure-sdk-for-net" - | "azure-sdk-for-python"; - /** * Represents the plane types for SDK generation settings */ diff --git a/eng/tools/spec-gen-sdk-runner/test/command-helpers.test.ts b/eng/tools/spec-gen-sdk-runner/test/command-helpers.test.ts index 95f31c1943a2..fb17f03de1a5 100644 --- a/eng/tools/spec-gen-sdk-runner/test/command-helpers.test.ts +++ b/eng/tools/spec-gen-sdk-runner/test/command-helpers.test.ts @@ -1,3 +1,4 @@ +import { APIViewRequestData, SdkName } from "@azure-tools/specs-shared/sdk-types"; import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; @@ -15,7 +16,6 @@ import { import * as log from "../src/log.js"; import { LogLevel } from "../src/log.js"; import * as specHelpers from "../src/spec-helpers.js"; -import { APIViewRequestData } from "../src/types.js"; import * as utils from "../src/utils.js"; // Get the absolute path to the repo root @@ -152,7 +152,7 @@ describe("commands.ts", () => { headBranch: "main", apiVersion: "2021-01-01", sdkReleaseType: "beta", - sdkLanguage: "typescript", + sdkLanguage: SdkName.Js, }; const result = prepareSpecGenSdkCommand(commandInput); @@ -417,7 +417,7 @@ describe("commands.ts", () => { const mockCommandInput = { workingFolder: "/working/folder", - sdkLanguage: "azure-sdk-for-js", + sdkLanguage: SdkName.Js, runMode: "", localSpecRepoPath: "", localSdkRepoPath: "", @@ -498,7 +498,7 @@ describe("commands.ts", () => { const mockCommandInput = { workingFolder: "/working/folder", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, runMode: "", localSpecRepoPath: "", localSdkRepoPath: "", @@ -545,7 +545,7 @@ describe("commands.ts", () => { const mockCommandInput = { workingFolder: "/working/folder", - sdkLanguage: "azure-sdk-for-go", + sdkLanguage: SdkName.Go, runMode: "", localSpecRepoPath: "", localSdkRepoPath: "", diff --git a/eng/tools/spec-gen-sdk-runner/test/commands.test.ts b/eng/tools/spec-gen-sdk-runner/test/commands.test.ts index 0b55917251dc..146781aec710 100644 --- a/eng/tools/spec-gen-sdk-runner/test/commands.test.ts +++ b/eng/tools/spec-gen-sdk-runner/test/commands.test.ts @@ -1,3 +1,4 @@ +import { SdkName } from "@azure-tools/specs-shared/sdk-types"; import fs from "node:fs"; import path from "node:path"; import { beforeEach, describe, expect, test, vi, type Mock } from "vitest"; @@ -33,7 +34,7 @@ describe("generateSdkForSingleSpec", () => { runMode: "release", localSdkRepoPath: "/sdk/path", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; @@ -103,7 +104,7 @@ describe("generateSdkForSingleSpec", () => { runMode: "batch", localSdkRepoPath: "/sdk/path", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; @@ -142,7 +143,7 @@ describe("generateSdkForSingleSpec", () => { runMode: "batch", localSdkRepoPath: "/sdk/path", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; @@ -184,7 +185,7 @@ describe("generateSdkForSpecPr", () => { workingFolder: "/working/folder", runMode: "batch", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; @@ -256,7 +257,7 @@ describe("generateSdkForSpecPr", () => { workingFolder: "/working/folder", runMode: "spec-pull-request", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; @@ -298,7 +299,7 @@ describe("generateSdkForSpecPr", () => { workingFolder: "/working/folder", runMode: "batch", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; @@ -337,7 +338,7 @@ describe("generateSdkForSpecPr", () => { workingFolder: "/working/folder", runMode: "batch", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; @@ -384,7 +385,7 @@ describe("generateSdkForSpecPr", () => { workingFolder: "/working/folder", runMode: "batch", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; @@ -436,7 +437,7 @@ describe("generateSdkForBatchSpecs", () => { runMode: "batch", localSdkRepoPath: "/sdk/path", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; @@ -504,7 +505,7 @@ describe("generateSdkForBatchSpecs", () => { runMode: "batch", localSdkRepoPath: "/sdk/path", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; @@ -564,7 +565,7 @@ describe("generateSdkForBatchSpecs", () => { runMode: "batch", localSdkRepoPath: "/sdk/path", sdkRepoName: "azure-sdk-for-js", - sdkLanguage: "javascript", + sdkLanguage: SdkName.Js, specCommitSha: "", specRepoHttpsUrl: "", }; diff --git a/eng/tools/spec-gen-sdk-runner/test/spec-helpers.test.ts b/eng/tools/spec-gen-sdk-runner/test/spec-helpers.test.ts index 696e3132ca4c..340506a8879f 100644 --- a/eng/tools/spec-gen-sdk-runner/test/spec-helpers.test.ts +++ b/eng/tools/spec-gen-sdk-runner/test/spec-helpers.test.ts @@ -1,3 +1,4 @@ +import { SdkName } from "@azure-tools/specs-shared/sdk-types"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { beforeEach, describe, expect, test, vi } from "vitest"; @@ -55,7 +56,7 @@ describe("detectChangedSpecConfigFiles", () => { runMode: "", localSdkRepoPath: "", sdkRepoName: "", - sdkLanguage: "", + sdkLanguage: SdkName.Go, specCommitSha: "", specRepoHttpsUrl: "", }; diff --git a/eng/tools/spec-gen-sdk-runner/test/utils/extractServiceName.test.ts b/eng/tools/spec-gen-sdk-runner/test/utils/extractServiceName.test.ts index ca8ccdbf22ce..4873a46e0ab6 100644 --- a/eng/tools/spec-gen-sdk-runner/test/utils/extractServiceName.test.ts +++ b/eng/tools/spec-gen-sdk-runner/test/utils/extractServiceName.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from "vitest"; -import { extractServiceName } from "../../src/utils"; +import { extractServiceName } from "../../src/utils.js"; describe("extractServiceName", () => { test("extracts service name from valid path", () => { diff --git a/eng/tools/spec-gen-sdk-runner/tsconfig.json b/eng/tools/spec-gen-sdk-runner/tsconfig.json index ec85640f015c..5f48d4c6a5b5 100644 --- a/eng/tools/spec-gen-sdk-runner/tsconfig.json +++ b/eng/tools/spec-gen-sdk-runner/tsconfig.json @@ -3,9 +3,7 @@ "compilerOptions": { "outDir": "./dist", "rootDir": ".", - "module": "ESNext", - "target": "ESNext", - "moduleResolution": "node", + "allowJs": true, }, "include": ["*.ts", "src/**/*.ts", "test/**/*.ts"], } diff --git a/package-lock.json b/package-lock.json index 714ca8d5d890..241185ed28ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -387,6 +387,9 @@ "name": "@azure-tools/spec-gen-sdk-runner", "version": "0.0.1", "dev": true, + "dependencies": { + "@azure-tools/specs-shared": "file:../../../.github/shared" + }, "bin": { "spec-gen-sdk-runner": "cmd/spec-gen-sdk-runner.js" },