diff --git a/.github/package-lock.json b/.github/package-lock.json index 0cc7db3ac3ae..cfee5e925b33 100644 --- a/.github/package-lock.json +++ b/.github/package-lock.json @@ -1751,9 +1751,9 @@ "license": "MIT" }, "node_modules/@tsconfig/node20": { - "version": "20.1.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.8.tgz", - "integrity": "sha512-Em+IdPfByIzWRRpqWL4Z7ArLHZGxmc36BxE3jCz9nBFSm+5aLaPMZyjwu4yetvyKXeogWcxik4L1jB5JTWfw7A==", + "version": "20.1.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.9.tgz", + "integrity": "sha512-IjlTv1RsvnPtUcjTqtVsZExKVq+KQx4g5pCP5tI7rAs6Xesl2qFwSz/tPDBC4JajkL/MlezBu3gPUwqRHl+RIg==", "dev": true, "license": "MIT" }, @@ -3446,9 +3446,9 @@ } }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { diff --git a/.github/shared/package-lock.json b/.github/shared/package-lock.json index c16a5723ffdf..6f696c861b30 100644 --- a/.github/shared/package-lock.json +++ b/.github/shared/package-lock.json @@ -1170,9 +1170,9 @@ "license": "MIT" }, "node_modules/@tsconfig/node20": { - "version": "20.1.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.8.tgz", - "integrity": "sha512-Em+IdPfByIzWRRpqWL4Z7ArLHZGxmc36BxE3jCz9nBFSm+5aLaPMZyjwu4yetvyKXeogWcxik4L1jB5JTWfw7A==", + "version": "20.1.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.9.tgz", + "integrity": "sha512-IjlTv1RsvnPtUcjTqtVsZExKVq+KQx4g5pCP5tI7rAs6Xesl2qFwSz/tPDBC4JajkL/MlezBu3gPUwqRHl+RIg==", "dev": true, "license": "MIT" }, @@ -2800,9 +2800,9 @@ } }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "license": "ISC", "bin": { diff --git a/.github/workflows/_reusable-set-check-status.yaml b/.github/workflows/_reusable-set-check-status.yaml index e4b31502b356..d83d2b58aaeb 100644 --- a/.github/workflows/_reusable-set-check-status.yaml +++ b/.github/workflows/_reusable-set-check-status.yaml @@ -37,7 +37,7 @@ jobs: ((github.event.action == 'labeled' || github.event.action == 'unlabeled') && inputs.overriding_label && contains(inputs.overriding_label, github.event.label.name)))) - runs-on: ubuntu-24.04 + runs-on: ubuntu-slim steps: # *** IMPORTANT *** diff --git a/.github/workflows/arm-auto-signoff-status.yaml b/.github/workflows/arm-auto-signoff-status.yaml index 15578381d4af..25932b8231c0 100644 --- a/.github/workflows/arm-auto-signoff-status.yaml +++ b/.github/workflows/arm-auto-signoff-status.yaml @@ -52,7 +52,7 @@ jobs: github.event.label.name == 'NotReadyForARMReview' || github.event.label.name == 'SuppressionReviewRequired')) - runs-on: ubuntu-24.04 + runs-on: ubuntu-slim steps: # *** IMPORTANT *** diff --git a/.github/workflows/breaking-change-add-label-artifacts.yaml b/.github/workflows/breaking-change-add-label-artifacts.yaml index 0ece04a6ff52..da03eb8e9c8c 100644 --- a/.github/workflows/breaking-change-add-label-artifacts.yaml +++ b/.github/workflows/breaking-change-add-label-artifacts.yaml @@ -19,7 +19,7 @@ jobs: breaking-change-add-label-artifacts: name: "Breaking Change - Add Label Artifacts" - runs-on: ubuntu-24.04 + runs-on: ubuntu-slim steps: # *** IMPORTANT *** diff --git a/.github/workflows/post-apiview.yaml b/.github/workflows/post-apiview.yaml index e60b7915df55..1aa1858cad27 100644 --- a/.github/workflows/post-apiview.yaml +++ b/.github/workflows/post-apiview.yaml @@ -11,7 +11,7 @@ permissions: jobs: post-apiview: name: After APIView - runs-on: ubuntu-24.04 + runs-on: ubuntu-slim if: | github.event.check_run.check_suite.app.name == 'Azure Pipelines' && ( contains(github.event.check_run.name, 'APIView') || diff --git a/.github/workflows/sdk-breaking-change-labels.yaml b/.github/workflows/sdk-breaking-change-labels.yaml index f52b27d93c5e..6929c6deed4a 100644 --- a/.github/workflows/sdk-breaking-change-labels.yaml +++ b/.github/workflows/sdk-breaking-change-labels.yaml @@ -16,7 +16,7 @@ jobs: github.event.check_run.check_suite.app.name == 'Azure Pipelines' && contains(github.event.check_run.name, 'SDK Validation') name: SDK Breaking Change Labels - runs-on: ubuntu-24.04 + runs-on: ubuntu-slim steps: - uses: actions/checkout@v6 with: diff --git a/.github/workflows/spec-gen-sdk-status.yaml b/.github/workflows/spec-gen-sdk-status.yaml index 213db6ba168c..a6ccc3cc3a3f 100644 --- a/.github/workflows/spec-gen-sdk-status.yaml +++ b/.github/workflows/spec-gen-sdk-status.yaml @@ -16,7 +16,7 @@ jobs: github.event.check_run.check_suite.app.name == 'Azure Pipelines' && contains(github.event.check_run.name, 'SDK Validation') name: "SDK Validation Status" - runs-on: ubuntu-24.04 + runs-on: ubuntu-slim steps: - uses: actions/checkout@v6 with: diff --git a/.github/workflows/src/arm-auto-signoff/pr-changes.js b/.github/workflows/src/arm-auto-signoff/pr-changes.js index b3c5784ac06c..376201ad56d6 100644 --- a/.github/workflows/src/arm-auto-signoff/pr-changes.js +++ b/.github/workflows/src/arm-auto-signoff/pr-changes.js @@ -8,6 +8,9 @@ export class PullRequestChanges { /** @type {boolean} */ rmExamples = false; + /** @type {boolean} */ + rmTypeSpec = false; + /** @type {boolean} */ rmFunctional = false; @@ -21,6 +24,7 @@ export class PullRequestChanges { * A PR is trivial if it contains only: * - Documentation changes * - Example changes + * - TypeSpec file changes (.tsp, tspconfig.yaml) * and does NOT contain: * - Functional spec changes * - Other file types @@ -29,7 +33,7 @@ export class PullRequestChanges { */ isTrivial() { const hasNoBlockingChanges = !this.rmFunctional && !this.rmOther && !this.other; - const hasTrivialChanges = this.rmDocumentation || this.rmExamples; + const hasTrivialChanges = this.rmDocumentation || this.rmExamples || this.rmTypeSpec; return hasNoBlockingChanges && hasTrivialChanges; } @@ -38,7 +42,12 @@ export class PullRequestChanges { */ isDocumentationOnly() { return ( - this.rmDocumentation && !this.rmExamples && !this.rmFunctional && !this.rmOther && !this.other + this.rmDocumentation && + !this.rmExamples && + !this.rmTypeSpec && + !this.rmFunctional && + !this.rmOther && + !this.other ); } @@ -47,7 +56,12 @@ export class PullRequestChanges { */ isExamplesOnly() { return ( - !this.rmDocumentation && this.rmExamples && !this.rmFunctional && !this.rmOther && !this.other + !this.rmDocumentation && + this.rmExamples && + !this.rmTypeSpec && + !this.rmFunctional && + !this.rmOther && + !this.other ); } } diff --git a/.github/workflows/src/arm-auto-signoff/trivial-changes-check.js b/.github/workflows/src/arm-auto-signoff/trivial-changes-check.js index 7c8214fd8dad..590eb23aaca3 100644 --- a/.github/workflows/src/arm-auto-signoff/trivial-changes-check.js +++ b/.github/workflows/src/arm-auto-signoff/trivial-changes-check.js @@ -8,6 +8,7 @@ import { markdown, resourceManager, swagger, + typespec, } from "../../../shared/src/changed-files.js"; import { CoreLogger } from "../core-logger.js"; import { PullRequestChanges } from "./pr-changes.js"; @@ -136,6 +137,20 @@ function hasSignificantFileOperations(changedFilesStatuses, core) { return true; } + // New TypeSpec files are non-trivial (conservative approach) + const newTypeSpecFiles = changedFilesStatuses.additions.filter(typespec); + if (newTypeSpecFiles.length > 0) { + core.info(`Significant: New TypeSpec files detected: ${newTypeSpecFiles.join(", ")}`); + return true; + } + + // Deleted TypeSpec files are non-trivial (conservative approach) + const deletedTypeSpecFiles = changedFilesStatuses.deletions.filter(typespec); + if (deletedTypeSpecFiles.length > 0) { + core.info(`Significant: Deleted TypeSpec files detected: ${deletedTypeSpecFiles.join(", ")}`); + return true; + } + // Any file renames/moves are non-trivial (conservative approach) if (changedFilesStatuses.renames.length > 0) { core.info( @@ -161,12 +176,13 @@ async function analyzeAndUpdatePullRequestChanges(changedFiles, git, core, chang const documentationFiles = changedFiles.filter(markdown); const exampleFiles = changedFiles.filter(example); const specFiles = changedFiles.filter(swagger); + const typespecFiles = changedFiles.filter(typespec); const otherFiles = changedFiles.filter( - (file) => !markdown(file) && !example(file) && !swagger(file), + (file) => !markdown(file) && !example(file) && !swagger(file) && !typespec(file), ); core.info( - `File breakdown: ${documentationFiles.length} docs, ${exampleFiles.length} examples, ${specFiles.length} specs, ${otherFiles.length} other`, + `File breakdown: ${documentationFiles.length} docs, ${exampleFiles.length} examples, ${specFiles.length} specs, ${typespecFiles.length} typespec, ${otherFiles.length} other`, ); // Set flags for file types present @@ -178,6 +194,10 @@ async function analyzeAndUpdatePullRequestChanges(changedFiles, git, core, chang changes.rmExamples = true; } + if (typespecFiles.length > 0) { + changes.rmTypeSpec = true; + } + if (otherFiles.length > 0) { changes.rmOther = true; } diff --git a/.github/workflows/summarize-checks.yaml b/.github/workflows/summarize-checks.yaml index ce2ac57c13a3..6c073243e312 100644 --- a/.github/workflows/summarize-checks.yaml +++ b/.github/workflows/summarize-checks.yaml @@ -36,7 +36,7 @@ jobs: run-summarize-checks: if: ${{ github.event_name == 'pull_request_target' || github.event.workflow_run.conclusion != 'skipped' }} name: "Summarize Checks" - runs-on: ubuntu-24.04 + runs-on: ubuntu-slim steps: # *** IMPORTANT *** diff --git a/.github/workflows/test/arm-auto-signoff/trivial-changes-check.test.js b/.github/workflows/test/arm-auto-signoff/trivial-changes-check.test.js index e9f81583d556..d5cc4c04ba97 100644 --- a/.github/workflows/test/arm-auto-signoff/trivial-changes-check.test.js +++ b/.github/workflows/test/arm-auto-signoff/trivial-changes-check.test.js @@ -44,6 +44,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: false, @@ -71,6 +72,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: true, @@ -96,6 +98,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: true, // Non-RM changes block ARM auto-signoff even when there are no RM changes @@ -119,6 +122,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: true, // New spec files are functional rmOther: false, other: false, @@ -142,6 +146,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: true, // Deleted spec files are functional rmOther: false, other: false, @@ -166,6 +171,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: true, // Renamed spec files are functional rmOther: false, other: false, @@ -190,6 +196,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: true, rmExamples: false, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: false, @@ -214,6 +221,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: true, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: false, @@ -238,6 +246,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: true, rmExamples: false, + rmTypeSpec: false, rmFunctional: false, rmOther: true, other: false, @@ -286,6 +295,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: false, @@ -335,6 +345,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: true, rmOther: false, other: false, @@ -385,6 +396,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: true, rmExamples: true, + rmTypeSpec: false, rmFunctional: true, rmOther: false, other: false, @@ -420,6 +432,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: true, rmOther: false, other: false, @@ -446,6 +459,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: true, rmOther: false, other: false, @@ -510,6 +524,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: false, @@ -569,6 +584,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: true, rmOther: false, other: false, @@ -594,6 +610,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: true, rmExamples: true, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: false, @@ -614,6 +631,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: false, @@ -648,6 +666,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: true, rmOther: false, other: false, @@ -682,6 +701,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: true, rmOther: false, other: false, @@ -728,6 +748,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: false, @@ -774,12 +795,162 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: false, rmOther: false, other: false, }); }); + it("treats typespec-only changes as trivial", async () => { + const tspFiles = [ + "specification/someservice/resource-manager/Microsoft.Service/SomeService/main.tsp", + "specification/someservice/resource-manager/Microsoft.Service/SomeService/models.tsp", + ]; + + vi.spyOn(changedFiles, "getChangedFilesStatuses").mockResolvedValue({ + additions: [], + modifications: tspFiles, + deletions: [], + renames: [], + total: 0, + }); + + const result = await checkTrivialChanges(core); + expect(result).toMatchObject({ + rmDocumentation: false, + rmExamples: false, + rmTypeSpec: true, + rmFunctional: false, + rmOther: false, + other: false, + }); + expect(result.isTrivial()).toBe(true); + }); + + it("treats tspconfig.yaml changes as trivial", async () => { + const tspFiles = [ + "specification/someservice/resource-manager/Microsoft.Service/SomeService/tspconfig.yaml", + ]; + + vi.spyOn(changedFiles, "getChangedFilesStatuses").mockResolvedValue({ + additions: [], + modifications: tspFiles, + deletions: [], + renames: [], + total: 0, + }); + + const result = await checkTrivialChanges(core); + expect(result).toMatchObject({ + rmDocumentation: false, + rmExamples: false, + rmTypeSpec: true, + rmFunctional: false, + rmOther: false, + other: false, + }); + expect(result.isTrivial()).toBe(true); + }); + + it("treats mixed typespec and documentation changes as trivial", async () => { + const mixedFiles = [ + "specification/someservice/resource-manager/Microsoft.Service/SomeService/main.tsp", + "specification/someservice/resource-manager/Microsoft.Service/README.md", + ]; + + vi.spyOn(changedFiles, "getChangedFilesStatuses").mockResolvedValue({ + additions: [], + modifications: mixedFiles, + deletions: [], + renames: [], + total: 0, + }); + + const result = await checkTrivialChanges(core); + expect(result).toMatchObject({ + rmDocumentation: true, + rmExamples: false, + rmTypeSpec: true, + rmFunctional: false, + rmOther: false, + other: false, + }); + expect(result.isTrivial()).toBe(true); + }); + + it("detects functional changes when new typespec files are added", async () => { + const tspFiles = [ + "specification/someservice/resource-manager/Microsoft.Service/SomeService/main.tsp", + ]; + + vi.spyOn(changedFiles, "getChangedFilesStatuses").mockResolvedValue({ + additions: tspFiles, + modifications: [], + deletions: [], + renames: [], + total: 0, + }); + + const result = await checkTrivialChanges(core); + expect(result).toMatchObject({ + rmDocumentation: false, + rmExamples: false, + rmTypeSpec: false, + rmFunctional: true, + rmOther: false, + other: false, + }); + }); + + it("detects functional changes when typespec files are deleted", async () => { + const tspFiles = [ + "specification/someservice/resource-manager/Microsoft.Service/SomeService/models.tsp", + ]; + + vi.spyOn(changedFiles, "getChangedFilesStatuses").mockResolvedValue({ + additions: [], + modifications: [], + deletions: tspFiles, + renames: [], + total: 0, + }); + + const result = await checkTrivialChanges(core); + expect(result).toMatchObject({ + rmDocumentation: false, + rmExamples: false, + rmTypeSpec: false, + rmFunctional: true, + rmOther: false, + other: false, + }); + }); + + it("detects functional changes when tspconfig.yaml is added", async () => { + const tspFiles = [ + "specification/someservice/resource-manager/Microsoft.Service/SomeService/tspconfig.yaml", + ]; + + vi.spyOn(changedFiles, "getChangedFilesStatuses").mockResolvedValue({ + additions: tspFiles, + modifications: [], + deletions: [], + renames: [], + total: 0, + }); + + const result = await checkTrivialChanges(core); + expect(result).toMatchObject({ + rmDocumentation: false, + rmExamples: false, + rmTypeSpec: false, + rmFunctional: true, + rmOther: false, + other: false, + }); + }); + it("treats a root array length change as functional (conservative)", async () => { const jsonFiles = [ "specification/someservice/resource-manager/Microsoft.Service/stable/2021-01-01/service.json", @@ -811,6 +982,7 @@ describe("checkTrivialChanges", () => { expect(result).toMatchObject({ rmDocumentation: false, rmExamples: false, + rmTypeSpec: false, rmFunctional: true, rmOther: false, other: false, diff --git a/.github/workflows/update-labels.yaml b/.github/workflows/update-labels.yaml index 8f857221a4b0..2cb27384a79b 100644 --- a/.github/workflows/update-labels.yaml +++ b/.github/workflows/update-labels.yaml @@ -25,7 +25,7 @@ jobs: update-labels: name: Update Labels - runs-on: ubuntu-24.04 + runs-on: ubuntu-slim steps: - uses: actions/checkout@v6 diff --git a/eng/common/TestResources/deploy-test-resources.yml b/eng/common/TestResources/deploy-test-resources.yml index 30efe36e231c..4429d6631aa3 100644 --- a/eng/common/TestResources/deploy-test-resources.yml +++ b/eng/common/TestResources/deploy-test-resources.yml @@ -2,6 +2,7 @@ parameters: ServiceDirectory: '' TestResourcesDirectory: '' ArmTemplateParameters: '@{}' + AdditionalParameters: '@{}' DeleteAfterHours: 8 Location: '' EnvVars: {} @@ -103,7 +104,8 @@ steps: -Location '${{ parameters.Location }}' ` -DeleteAfterHours '${{ parameters.DeleteAfterHours }}' ` @subscriptionConfiguration ` - -AdditionalParameters ${{ parameters.ArmTemplateParameters }} ` + -ArmTemplateParameters ${{ parameters.ArmTemplateParameters }} ` + -AdditionalParameters ${{ parameters.AdditionalParameters }} ` -AllowIpRanges ('$(azsdk-corp-net-ip-ranges)' -split ',') ` -SelfContainedPostScript $postScriptPath ` -CI ` @@ -148,7 +150,8 @@ steps: -Location '${{ parameters.Location }}' ` -DeleteAfterHours '${{ parameters.DeleteAfterHours }}' ` @subscriptionConfiguration ` - -AdditionalParameters ${{ parameters.ArmTemplateParameters }} ` + -ArmTemplateParameters ${{ parameters.ArmTemplateParameters }} ` + -AdditionalParameters ${{ parameters.AdditionalParameters }} ` -AllowIpRanges ('$(azsdk-corp-net-ip-ranges)' -split ',') ` -CI ` -ServicePrincipalAuth ` diff --git a/eng/tools/openapi-diff-runner/src/command-helpers.ts b/eng/tools/openapi-diff-runner/src/command-helpers.ts index 921c76dd64aa..0ee9c490ef0b 100644 --- a/eng/tools/openapi-diff-runner/src/command-helpers.ts +++ b/eng/tools/openapi-diff-runner/src/command-helpers.ts @@ -1,5 +1,6 @@ import { BREAKING_CHANGES_CHECK_TYPES } from "@azure-tools/specs-shared/breaking-change"; import { getChangedFilesStatuses, swagger } from "@azure-tools/specs-shared/changed-files"; +import { defaultLogger } from "@azure-tools/specs-shared/logger"; import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs"; import path from "node:path"; import { logError, LogLevel, logMessage, setOutput } from "./log.js"; @@ -140,6 +141,7 @@ export async function getSwaggerDiffs( baseCommitish: options.baseCommitish, cwd: options.cwd, headCommitish: options.headCommitish, + logger: defaultLogger, paths: ["specification"], }); diff --git a/eng/tools/openapi-diff-runner/test/command-helpers.test.ts b/eng/tools/openapi-diff-runner/test/command-helpers.test.ts index 5d11430e74d5..4acf65d4bd20 100644 --- a/eng/tools/openapi-diff-runner/test/command-helpers.test.ts +++ b/eng/tools/openapi-diff-runner/test/command-helpers.test.ts @@ -364,6 +364,7 @@ describe("command-helpers", () => { baseCommitish: TEST_CONSTANTS.BRANCHES.MAIN, cwd: TEST_CONSTANTS.PATHS.TEST_PATH, headCommitish: TEST_CONSTANTS.COMMITS.HEAD, + logger: expect.anything(), paths: ["specification"], }); }); @@ -446,6 +447,7 @@ describe("command-helpers", () => { baseCommitish: undefined, cwd: undefined, headCommitish: undefined, + logger: expect.anything(), paths: ["specification"], }); }); diff --git a/eng/tools/typespec-migration-validation/src/document.ts b/eng/tools/typespec-migration-validation/src/document.ts index d8b1f120e79d..b9582f46c9df 100644 --- a/eng/tools/typespec-migration-validation/src/document.ts +++ b/eng/tools/typespec-migration-validation/src/document.ts @@ -115,6 +115,7 @@ function processPath(path: OpenAPI2PathItem): OpenAPI2PathItem { function processOperation(operation: OpenAPI2Operation): OpenAPI2Operation { const newOperation = deepCopy(operation); + newOperation.parameters ??= []; let index = newOperation.parameters.findIndex((p) => isApiVersionParameter(p)); if (index > -1) { newOperation.parameters.splice(index, 1); diff --git a/eng/tools/typespec-migration-validation/src/helper.ts b/eng/tools/typespec-migration-validation/src/helper.ts index 0f100d12028c..d11a4ab9a168 100644 --- a/eng/tools/typespec-migration-validation/src/helper.ts +++ b/eng/tools/typespec-migration-validation/src/helper.ts @@ -62,7 +62,7 @@ export function mergeFiles(folderPath: string): OpenAPI2Document { }; for (const file of files) { - const fileContent = readFileContent(file); + const fileContent = readFileContent(file).replace(/^\uFEFF/, ""); const jsonContent: OpenAPI2Document = JSON.parse(fileContent); mergedContent.info = jsonContent.info; diff --git a/package-lock.json b/package-lock.json index c035bcf45ffd..d4c747ba5a7b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,34 +7,34 @@ "name": "azure-rest-api-specs", "devDependencies": { "@autorest/openapi-to-typespec": "0.11.12", - "@azure-tools/openai-typespec": "1.8.0", + "@azure-tools/openai-typespec": "1.9.0", "@azure-tools/spec-gen-sdk": "~0.9.1", "@azure-tools/specs-shared": "file:.github/shared", "@azure-tools/typespec-apiview": "0.7.2", - "@azure-tools/typespec-autorest": "0.64.1", - "@azure-tools/typespec-azure-core": "0.64.0", - "@azure-tools/typespec-azure-portal-core": "0.64.0", - "@azure-tools/typespec-azure-resource-manager": "0.64.1", - "@azure-tools/typespec-azure-rulesets": "0.64.0", + "@azure-tools/typespec-autorest": "0.65.0", + "@azure-tools/typespec-azure-core": "0.65.0", + "@azure-tools/typespec-azure-portal-core": "0.65.0", + "@azure-tools/typespec-azure-resource-manager": "0.65.0", + "@azure-tools/typespec-azure-rulesets": "0.65.0", "@azure-tools/typespec-client-generator-cli": "0.31.0", - "@azure-tools/typespec-client-generator-core": "0.64.6", + "@azure-tools/typespec-client-generator-core": "0.65.1", "@azure-tools/typespec-liftr-base": "0.10.0", "@azure/avocado": "0.10.5", "@azure/oad": "0.12.3", "@microsoft.azure/openapi-validator": "2.2.4", "@microsoft.azure/openapi-validator-core": "1.0.7", "@microsoft.azure/openapi-validator-rulesets": "2.2.2", - "@typespec/compiler": "1.8.0", - "@typespec/events": "0.78.0", - "@typespec/http": "1.8.0", - "@typespec/openapi": "1.8.0", - "@typespec/openapi3": "1.8.0", - "@typespec/prettier-plugin-typespec": "1.8.0", - "@typespec/rest": "0.78.0", - "@typespec/sse": "0.78.0", - "@typespec/streams": "0.78.0", - "@typespec/versioning": "0.78.0", - "@typespec/xml": "0.78.0", + "@typespec/compiler": "1.9.0", + "@typespec/events": "0.79.0", + "@typespec/http": "1.9.0", + "@typespec/openapi": "1.9.0", + "@typespec/openapi3": "1.9.0", + "@typespec/prettier-plugin-typespec": "1.9.0", + "@typespec/rest": "0.79.0", + "@typespec/sse": "0.79.0", + "@typespec/streams": "0.79.0", + "@typespec/versioning": "0.79.0", + "@typespec/xml": "0.79.0", "azure-rest-api-specs-eng-tools": "file:eng/tools", "oav": "4.0.3", "prettier": "3.8.1", @@ -781,9 +781,9 @@ "link": true }, "node_modules/@azure-tools/openai-typespec": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@azure-tools/openai-typespec/-/openai-typespec-1.8.0.tgz", - "integrity": "sha512-iJRimNIbwqAF6ueYpiL5xY1GJSOA1k3NkqA1NdPlxSJ3bZLP690zR+hHTqEq95HnwqFh2feCDjof9ABtY4keWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure-tools/openai-typespec/-/openai-typespec-1.9.0.tgz", + "integrity": "sha512-dfBMsDUJ1/c9W2mHdJBPmi25EzUOgs//xLgBu/zssrYzhOmBdBPPCnGQD7lNYPySgvC1a6uymOMQ+bR64L3Llg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -940,24 +940,24 @@ } }, "node_modules/@azure-tools/typespec-autorest": { - "version": "0.64.1", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-autorest/-/typespec-autorest-0.64.1.tgz", - "integrity": "sha512-WzSRiX0XS7hCL+uiivLBYMbirEUenxNzPT4giF0J+r54CVNXq/u8PLnA/06F5EHkXPa92swF4BxB1vFWB2TKow==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-autorest/-/typespec-autorest-0.65.0.tgz", + "integrity": "sha512-R8pZt7rYdA2Hr3nck93OGapkQZe3MSzoYq4PgRtsGDHcvA5Qp7RBQMF/tP5DEcFWDDm+unoQeDpbD02POb/LTA==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.64.0", - "@azure-tools/typespec-azure-resource-manager": "^0.64.1", - "@azure-tools/typespec-client-generator-core": "^0.64.4", - "@typespec/compiler": "^1.8.0", - "@typespec/http": "^1.8.0", - "@typespec/openapi": "^1.8.0", - "@typespec/rest": "^0.78.0", - "@typespec/versioning": "^0.78.0", - "@typespec/xml": "^0.78.0" + "@azure-tools/typespec-azure-core": "^0.65.0", + "@azure-tools/typespec-azure-resource-manager": "^0.65.0", + "@azure-tools/typespec-client-generator-core": "^0.65.0", + "@typespec/compiler": "^1.9.0", + "@typespec/http": "^1.9.0", + "@typespec/openapi": "^1.9.0", + "@typespec/rest": "^0.79.0", + "@typespec/versioning": "^0.79.0", + "@typespec/xml": "^0.79.0" }, "peerDependenciesMeta": { "@typespec/xml": { @@ -966,35 +966,35 @@ } }, "node_modules/@azure-tools/typespec-azure-core": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-core/-/typespec-azure-core-0.64.0.tgz", - "integrity": "sha512-BXiHc5oayhMsG1dHFU1aFK/ZQX2Gl0dKB0FAFceapaFV9093J2obbsdhIDR3Tl0qei9g3Ha+iWKZ4KgnLdhv4w==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-core/-/typespec-azure-core-0.65.0.tgz", + "integrity": "sha512-dYgHtt0CY0Q9AimdIsMV41jHKLmAT4r++TLwyxAHRbxdiRG+Sll1UKJzOIIoq45Bq64wCfEltu5OOnyPA01/sQ==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0", - "@typespec/http": "^1.8.0", - "@typespec/rest": "^0.78.0" + "@typespec/compiler": "^1.9.0", + "@typespec/http": "^1.9.0", + "@typespec/rest": "^0.79.0" } }, "node_modules/@azure-tools/typespec-azure-portal-core": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-portal-core/-/typespec-azure-portal-core-0.64.0.tgz", - "integrity": "sha512-T9GKAXiOG0tGuxcCeJG1fK+f8PsyHiVTzb/dkeYOk40s1DeuLYg4iduYy2dn83eogaF3Mvow0+XnD/+iwm1L1A==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-portal-core/-/typespec-azure-portal-core-0.65.0.tgz", + "integrity": "sha512-hQDIq0XUIFmbLnw64JAbppUpMrdUA8JfjCXUbtOKLXESZEFNhqp2hOAERDEsR4PmWZ/XikSn7BvJx0hS+UWBFw==", "dev": true, "license": "MIT", "peerDependencies": { - "@azure-tools/typespec-azure-resource-manager": "^0.64.0", - "@typespec/compiler": "^1.8.0" + "@azure-tools/typespec-azure-resource-manager": "^0.65.0", + "@typespec/compiler": "^1.9.0" } }, "node_modules/@azure-tools/typespec-azure-resource-manager": { - "version": "0.64.1", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-resource-manager/-/typespec-azure-resource-manager-0.64.1.tgz", - "integrity": "sha512-qQV/+ZVF1h8PsTNKhmKYyb+vSCgnLA8SoGeEE1oOrevGrrp9VgtOMAZ2xIxj6DpU90QU/8t2+r5P/gcQUV1iqw==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-resource-manager/-/typespec-azure-resource-manager-0.65.0.tgz", + "integrity": "sha512-3rvyGDIYSqraZ7jHfq5Bfet8u3ZeERWJWhwWMNvbShnrS/vVR3iuu/1z2M0p5mTRFuwUaSMlL/dbtBp1YqgGAg==", "dev": true, "license": "MIT", "dependencies": { @@ -1005,28 +1005,28 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.64.0", - "@typespec/compiler": "^1.8.0", - "@typespec/http": "^1.8.0", - "@typespec/openapi": "^1.8.0", - "@typespec/rest": "^0.78.0", - "@typespec/versioning": "^0.78.0" + "@azure-tools/typespec-azure-core": "^0.65.0", + "@typespec/compiler": "^1.9.0", + "@typespec/http": "^1.9.0", + "@typespec/openapi": "^1.9.0", + "@typespec/rest": "^0.79.0", + "@typespec/versioning": "^0.79.0" } }, "node_modules/@azure-tools/typespec-azure-rulesets": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-rulesets/-/typespec-azure-rulesets-0.64.0.tgz", - "integrity": "sha512-CvK5iolfsm8oAUZ5wegGVYp4Vvw2rwQa+rcUVoJkwi9c6QwEr+qT6/S4hIntuzEPLxybJSb/ZIWU9Qx3cDrzXg==", + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-rulesets/-/typespec-azure-rulesets-0.65.0.tgz", + "integrity": "sha512-oGuCw61uU9fUASog/1iD1rGeGhcKgnAuyBWA63wRcMMrcW1ZqUK2xvjV1XJuoYRlMxU8HpQShFcvsj715pNVLQ==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.64.0", - "@azure-tools/typespec-azure-resource-manager": "^0.64.0", - "@azure-tools/typespec-client-generator-core": "^0.64.0", - "@typespec/compiler": "^1.8.0" + "@azure-tools/typespec-azure-core": "^0.65.0", + "@azure-tools/typespec-azure-resource-manager": "^0.65.0", + "@azure-tools/typespec-client-generator-core": "^0.65.0", + "@typespec/compiler": "^1.9.0" } }, "node_modules/@azure-tools/typespec-client-generator-cli": { @@ -1060,9 +1060,9 @@ } }, "node_modules/@azure-tools/typespec-client-generator-core": { - "version": "0.64.6", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.64.6.tgz", - "integrity": "sha512-S0OH5UmIltjPdj/rdMD8RBpAQWpFP+0jjXLZSi2ARCZkhzi6++E1fEsqLLNDW7oP0CDq3RYQgpuWyCLZVtVf/A==", + "version": "0.65.1", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.65.1.tgz", + "integrity": "sha512-LvZYs0O4AprZRh3SLB8bU5DYmUlEb7zeWcvPKPLjTQB/cmQXMtmMNbLDkfgCwI/iHfRfEgeQGLqjGaNAe/a9iQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1074,16 +1074,16 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.64.0", - "@typespec/compiler": "^1.8.0", - "@typespec/events": "^0.78.0", - "@typespec/http": "^1.8.0", - "@typespec/openapi": "^1.8.0", - "@typespec/rest": "^0.78.0", - "@typespec/sse": "^0.78.0", - "@typespec/streams": "^0.78.0", - "@typespec/versioning": "^0.78.0", - "@typespec/xml": "^0.78.0" + "@azure-tools/typespec-azure-core": "^0.65.0", + "@typespec/compiler": "^1.9.0", + "@typespec/events": "^0.79.0", + "@typespec/http": "^1.9.0", + "@typespec/openapi": "^1.9.0", + "@typespec/rest": "^0.79.0", + "@typespec/sse": "^0.79.0", + "@typespec/streams": "^0.79.0", + "@typespec/versioning": "^0.79.0", + "@typespec/xml": "^0.79.0" } }, "node_modules/@azure-tools/typespec-liftr-base": { @@ -1919,13 +1919,13 @@ "license": "MIT" }, "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", + "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -4302,9 +4302,9 @@ ] }, "node_modules/@scalar/helpers": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@scalar/helpers/-/helpers-0.2.6.tgz", - "integrity": "sha512-A471YFBCj7ZOlGIkAYnU8oYgeyts82ZNX+4UicrlmKv3eAQ+kwboN3Dy0R6u1lcA/+I/zzeXi/fBObsT7P9qTA==", + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@scalar/helpers/-/helpers-0.2.11.tgz", + "integrity": "sha512-Y7DLt1bIZF9dvHzJwSJTcC1lpSr1Tbf4VBhHOCRIHu23Rr7/lhQnddRxFmPV1tZXwEQKz7F7yRrubwCfKPCucw==", "dev": true, "license": "MIT", "engines": { @@ -4312,13 +4312,13 @@ } }, "node_modules/@scalar/json-magic": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.8.10.tgz", - "integrity": "sha512-TWdKQ/hcy4erFQDp2MVlFoPesFep2VY96Q69cjLHmx5hxM0ZUBfmNB4lA8Uh3klgx5JmCDfSNIGjPFIpxlosUw==", + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.9.6.tgz", + "integrity": "sha512-2TKoqkAophHti1nH+rvQlR4lhD6X9tqQpuNeAE0cytHSX/yndkSOE0yA7cep5T9tFjGN4Km0gMnelvY3LgWs4A==", "dev": true, "license": "MIT", "dependencies": { - "@scalar/helpers": "0.2.6", + "@scalar/helpers": "0.2.11", "yaml": "^2.8.0" }, "engines": { @@ -4326,15 +4326,16 @@ } }, "node_modules/@scalar/openapi-parser": { - "version": "0.23.13", - "resolved": "https://registry.npmjs.org/@scalar/openapi-parser/-/openapi-parser-0.23.13.tgz", - "integrity": "sha512-YsljPOKOgQgZL/kBcEouwz2CUa+2hFfThlUZRWC2DFI2Fnw5Ur8F1IvGgPqCAHr9p2XMH+Z/Pag2jZUfLcxcww==", + "version": "0.24.9", + "resolved": "https://registry.npmjs.org/@scalar/openapi-parser/-/openapi-parser-0.24.9.tgz", + "integrity": "sha512-uqpwt6ZQJQu4c3CvMsJiXMUj32113yrclsDC31hlL33vEUS5JU9dCYfY27oLSCVoKl8R8KihlnEcbfRnH/O/GA==", "dev": true, "license": "MIT", "dependencies": { - "@scalar/json-magic": "0.9.0", + "@scalar/helpers": "0.2.11", + "@scalar/json-magic": "0.11.0", "@scalar/openapi-types": "0.5.3", - "@scalar/openapi-upgrader": "0.1.7", + "@scalar/openapi-upgrader": "0.1.8", "ajv": "^8.17.1", "ajv-draft-04": "^1.0.0", "ajv-formats": "^3.0.1", @@ -4346,24 +4347,14 @@ "node": ">=20" } }, - "node_modules/@scalar/openapi-parser/node_modules/@scalar/helpers": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@scalar/helpers/-/helpers-0.2.7.tgz", - "integrity": "sha512-uFTcdi3XYDDuaJLWiMuM3ijQit1OBw7AkuOuujReY8L9UmUQHY56erYg0+Db3llTsinuIYFh+eS/WX/sYuevYQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - } - }, "node_modules/@scalar/openapi-parser/node_modules/@scalar/json-magic": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.9.0.tgz", - "integrity": "sha512-aSWd8rd3O73Ak9Ylson2TywvOuTjjOYiXydl9Cn8Ip/r7fi+h0QqAGom5gqo/WewrhySF9v+H/sW/Qmd05T/Kg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@scalar/json-magic/-/json-magic-0.11.0.tgz", + "integrity": "sha512-1zBseDDEPkKlAVd9lT1HlK9Nefeh0YEE+pcmyDL3J5derIZn9UYXAFecdkeXMdjDtWDgcrkmWCrHhpoT7zVKdQ==", "dev": true, "license": "MIT", "dependencies": { - "@scalar/helpers": "0.2.7", + "@scalar/helpers": "0.2.11", "yaml": "^2.8.0" }, "engines": { @@ -4441,9 +4432,9 @@ } }, "node_modules/@scalar/openapi-upgrader": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@scalar/openapi-upgrader/-/openapi-upgrader-0.1.7.tgz", - "integrity": "sha512-065froUtqvaHjyeJtyitf8tb+k7oh7nU0OinAHYbj1Bqgwb1s2+uKMqHYHEES5CNpp+2xtL4lxup6Aq29yW+sQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@scalar/openapi-upgrader/-/openapi-upgrader-0.1.8.tgz", + "integrity": "sha512-2xuYLLs0fBadLIk4I1ObjMiCnOyLPEMPf24A1HtHQvhKGDnGlvT63F2rU2Xw8lxCjgHnzveMPnOJEbwIy64RCg==", "dev": true, "license": "MIT", "dependencies": { @@ -5686,35 +5677,35 @@ } }, "node_modules/@typespec/asset-emitter": { - "version": "0.78.0", - "resolved": "https://registry.npmjs.org/@typespec/asset-emitter/-/asset-emitter-0.78.0.tgz", - "integrity": "sha512-TA9MzNI+SJEYKNWdbSsWXhjnVOL+2VvsBqzExXKQmoN6zxu3dAImqrMG/oTA6FS4pbCU4vmWgLUiOmikvjm22Q==", + "version": "0.79.0", + "resolved": "https://registry.npmjs.org/@typespec/asset-emitter/-/asset-emitter-0.79.0.tgz", + "integrity": "sha512-pNMtfSSwgmTQ2ex6bd1l6BUW2RLjSFnWQO5C5bNSleV62YEH5jMLn3THWDU9oUB0JoiBjgomV8cPqNRTJ+iV9w==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0" + "@typespec/compiler": "^1.9.0" } }, "node_modules/@typespec/compiler": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-1.8.0.tgz", - "integrity": "sha512-FeLb7Q0z6Bh5dDpqtnU2RlWiIWWWF7rujx2xGMta5dcTuIOZ4jbdyz1hVdxk4iM4qadvaSV4ey/qrSuffNoh3w==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-1.9.0.tgz", + "integrity": "sha512-Rz9fFWQSTJSnhBfZvtA/bDIuO82fknYdtyMsL9lZNJE82rquC6JByHPFsnbGH1VXA0HhMj9L7Oqyp3f0m/BTOA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "~7.27.1", + "@babel/code-frame": "~7.28.6", "@inquirer/prompts": "^8.0.1", "ajv": "~8.17.1", "change-case": "~5.4.4", "env-paths": "^3.0.0", - "globby": "~16.0.0", + "globby": "~16.1.0", "is-unicode-supported": "^2.1.0", "mustache": "~4.2.0", "picocolors": "~1.1.1", - "prettier": "~3.7.4", + "prettier": "~3.8.0", "semver": "^7.7.1", "tar": "^7.5.2", "temporal-polyfill": "^0.3.0", @@ -5783,22 +5774,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@typespec/compiler/node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/@typespec/compiler/node_modules/strip-ansi": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", @@ -5844,30 +5819,30 @@ } }, "node_modules/@typespec/events": { - "version": "0.78.0", - "resolved": "https://registry.npmjs.org/@typespec/events/-/events-0.78.0.tgz", - "integrity": "sha512-gSI4rAexxfYyZX0ZqYNRWQyuMb1UeakjAjOeh/2ntmxWCdYc+wSbJjxrxIArsZC+LwzTxq5WpdtD7+7OWzG4yw==", + "version": "0.79.0", + "resolved": "https://registry.npmjs.org/@typespec/events/-/events-0.79.0.tgz", + "integrity": "sha512-41R2jA7k21uMArjyUdvnqYzVnPPaSEcGi40dLMiRVP79m6XgnD3INuTdlMblaS1i+5jJ1BtS1o4QhBBuS/5/qg==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0" + "@typespec/compiler": "^1.9.0" } }, "node_modules/@typespec/http": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@typespec/http/-/http-1.8.0.tgz", - "integrity": "sha512-ZKa4RISabwL8cUAmE3BkoNmtCYRjerO0+1Ba6XdDJKG+vJC5EGM2hkDf+ZmYsYZgrX0cvbhPXUKKh28zBV60hw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@typespec/http/-/http-1.9.0.tgz", + "integrity": "sha512-JzlZZsgCo71f2KhWbf4BLOz5e+dVLj7gJJ4kvXvrmuG9QHoT41VaGPpCQamYgpZLMz2LQbsOtw34AmpovhuJSw==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0", - "@typespec/streams": "^0.78.0" + "@typespec/compiler": "^1.9.0", + "@typespec/streams": "^0.79.0" }, "peerDependenciesMeta": { "@typespec/streams": { @@ -5876,30 +5851,30 @@ } }, "node_modules/@typespec/openapi": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@typespec/openapi/-/openapi-1.8.0.tgz", - "integrity": "sha512-v+RIJpx7vALBSGQmnUWemvXjnrk50HAVqJeg0RbaF3VUnh66Z4itsoNJJmIIc+HmBJng8Ie0V7xv3l02ek6HWA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@typespec/openapi/-/openapi-1.9.0.tgz", + "integrity": "sha512-5ieXCWRLcyFLv3IFk26ena/RW/NxvT5KiHaoNVFRd79J0XZjFcE0Od6Lxxqj4dWmCo3C8oKtOwFoQuie18G3lQ==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0", - "@typespec/http": "^1.8.0" + "@typespec/compiler": "^1.9.0", + "@typespec/http": "^1.9.0" } }, "node_modules/@typespec/openapi3": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@typespec/openapi3/-/openapi3-1.8.0.tgz", - "integrity": "sha512-lmFJZEHjx20iTZqGaVJytlNjpPsPpXZGRs/ur8X0nx1vRcXtfM9IemZ0Chi6hWgo+AFq91lex9nocJEUn+uMMw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@typespec/openapi3/-/openapi3-1.9.0.tgz", + "integrity": "sha512-htwhrGHQxuoNwAljeJE8CBt5yfKOv48T9Ugv91Y+4yNnlevJfDT29yrfD2mXYMujVOr3Kte1qilazClafkUIgg==", "dev": true, "license": "MIT", "dependencies": { - "@scalar/json-magic": "^0.8.2", - "@scalar/openapi-parser": "^0.23.3", + "@scalar/json-magic": "^0.9.1", + "@scalar/openapi-parser": "^0.24.1", "@scalar/openapi-types": "^0.5.0", - "@typespec/asset-emitter": "^0.78.0", + "@typespec/asset-emitter": "^0.79.0", "yaml": "~2.8.2" }, "bin": { @@ -5909,14 +5884,14 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0", - "@typespec/events": "^0.78.0", - "@typespec/http": "^1.8.0", - "@typespec/json-schema": "^1.8.0", - "@typespec/openapi": "^1.8.0", - "@typespec/sse": "^0.78.0", - "@typespec/streams": "^0.78.0", - "@typespec/versioning": "^0.78.0" + "@typespec/compiler": "^1.9.0", + "@typespec/events": "^0.79.0", + "@typespec/http": "^1.9.0", + "@typespec/json-schema": "^1.9.0", + "@typespec/openapi": "^1.9.0", + "@typespec/sse": "^0.79.0", + "@typespec/streams": "^0.79.0", + "@typespec/versioning": "^0.79.0" }, "peerDependenciesMeta": { "@typespec/events": { @@ -5940,72 +5915,56 @@ } }, "node_modules/@typespec/prettier-plugin-typespec": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@typespec/prettier-plugin-typespec/-/prettier-plugin-typespec-1.8.0.tgz", - "integrity": "sha512-PGAWhnnX2CIQPS5irQEAidzog9IZigM4fXFIuiBLwAIh1ZXd31fluzRSU0gthvnkxVtNPOWSn8SR7R8ca/Z7yQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@typespec/prettier-plugin-typespec/-/prettier-plugin-typespec-1.9.0.tgz", + "integrity": "sha512-39Nc1uRM/kwDLrFfuMh+aS9P8fUpKi8IOBVF/3s45vFnITt2Pa1Pud3+xcU+/JWoc/q6bkzXM6PmfJ4/60Z+mw==", "dev": true, "license": "MIT", "dependencies": { - "prettier": "~3.7.4" - } - }, - "node_modules/@typespec/prettier-plugin-typespec/node_modules/prettier": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "prettier": "~3.8.0" } }, "node_modules/@typespec/rest": { - "version": "0.78.0", - "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.78.0.tgz", - "integrity": "sha512-1clnDw1JbBvjLcfFvEvHdIrnsQuQI5/Cl6mRIrzWWX0pKJ+R89rCdZD1KpidEXw4B4qscD48LsssyrEIFLtuPg==", + "version": "0.79.0", + "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.79.0.tgz", + "integrity": "sha512-6QIX7oaUGy/z4rseUrC86LjHxZn8rAAY4fXvGnlPRce6GhEdTb9S9OQPmlPeWngXwCx/07P2+FCR915APqmZxg==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0", - "@typespec/http": "^1.8.0" + "@typespec/compiler": "^1.9.0", + "@typespec/http": "^1.9.0" } }, "node_modules/@typespec/sse": { - "version": "0.78.0", - "resolved": "https://registry.npmjs.org/@typespec/sse/-/sse-0.78.0.tgz", - "integrity": "sha512-jPARl+e1e/nsDW/1uVsGTzvKmjqezVMyUa13igXxk5nV2ScMdFpH1HhBwTmAhUeaZgY3J81dFHNUnIY67HCrmw==", + "version": "0.79.0", + "resolved": "https://registry.npmjs.org/@typespec/sse/-/sse-0.79.0.tgz", + "integrity": "sha512-YQYlDWCNBza75S360jc51emwntWXMZfkvqXKng+etKP4iCuogJfTX1J8h1yd8tZwkuUNBcklEPCuz3O/+psopg==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0", - "@typespec/events": "^0.78.0", - "@typespec/http": "^1.8.0", - "@typespec/streams": "^0.78.0" + "@typespec/compiler": "^1.9.0", + "@typespec/events": "^0.79.0", + "@typespec/http": "^1.9.0", + "@typespec/streams": "^0.79.0" } }, "node_modules/@typespec/streams": { - "version": "0.78.0", - "resolved": "https://registry.npmjs.org/@typespec/streams/-/streams-0.78.0.tgz", - "integrity": "sha512-wzh5bVdzh+K+pFQFs/EZkVsTH5TQGi12XwhjxJS0UKRwaW2UwSZeY1HqX07oMMPdYESTbjgMrXcxtn89AlzjvQ==", + "version": "0.79.0", + "resolved": "https://registry.npmjs.org/@typespec/streams/-/streams-0.79.0.tgz", + "integrity": "sha512-nOXpLcEYNdWvLY/6WJ16rD6hGs7bKSmkH+WwgyVwdRON5KJ559quw56pns2DSANw+NaV0lJxJq/8ek5xKCGD6g==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0" + "@typespec/compiler": "^1.9.0" } }, "node_modules/@typespec/ts-http-runtime": { @@ -6024,29 +5983,29 @@ } }, "node_modules/@typespec/versioning": { - "version": "0.78.0", - "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.78.0.tgz", - "integrity": "sha512-I14X6+IMd0wFMNI8oMFSeFBi2nD4idub+geSO34vuCs4rwuEj3FNzy+rkNkDDvf0+gIUGxeyg7s+YDUcNyiqOA==", + "version": "0.79.0", + "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.79.0.tgz", + "integrity": "sha512-mk65zpKNm+ARyHASnre/lp3o3FKzb0P8Nj96ji182JUy7ShrVCCF0u+bC+ZXQ8ZTRza1d0xBjRC/Xr4iM+Uwag==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0" + "@typespec/compiler": "^1.9.0" } }, "node_modules/@typespec/xml": { - "version": "0.78.0", - "resolved": "https://registry.npmjs.org/@typespec/xml/-/xml-0.78.0.tgz", - "integrity": "sha512-KSDhJX6A/Onsu9FKVZtR/xSy5va3k0y9/U4eiZUn91V/LQyMZNwmResPDHEVYk6JqaIH8bbd6ANWPu3nMd7mmw==", + "version": "0.79.0", + "resolved": "https://registry.npmjs.org/@typespec/xml/-/xml-0.79.0.tgz", + "integrity": "sha512-BqbbtkL9xuiAhehHKKUCMtRg0a1vjSvoiAOanvTIuoFq3N8PbKVV3dKTcyI/oS3iCCkJErdu11HQcAoD/VsIsA==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.8.0" + "@typespec/compiler": "^1.9.0" } }, "node_modules/@vitest/coverage-v8": { @@ -8470,9 +8429,9 @@ } }, "node_modules/globby": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.0.0.tgz", - "integrity": "sha512-ejy4TJFga99yW6Q0uhM3pFawKWZmtZzZD/v/GwI5+9bCV5Ew+D2pSND6W7fUes5UykqSsJkUfxFVdRh7Q1+P3Q==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.0.tgz", + "integrity": "sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10694,9 +10653,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { diff --git a/package.json b/package.json index 81f4049d1a13..11524f87d21e 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,17 @@ { "name": "azure-rest-api-specs", "devDependencies": { - "@azure-tools/openai-typespec": "1.8.0", + "@azure-tools/openai-typespec": "1.9.0", "@azure-tools/spec-gen-sdk": "~0.9.1", "@azure-tools/specs-shared": "file:.github/shared", "@azure-tools/typespec-apiview": "0.7.2", - "@azure-tools/typespec-autorest": "0.64.1", - "@azure-tools/typespec-azure-core": "0.64.0", - "@azure-tools/typespec-azure-portal-core": "0.64.0", - "@azure-tools/typespec-azure-resource-manager": "0.64.1", - "@azure-tools/typespec-azure-rulesets": "0.64.0", + "@azure-tools/typespec-autorest": "0.65.0", + "@azure-tools/typespec-azure-core": "0.65.0", + "@azure-tools/typespec-azure-portal-core": "0.65.0", + "@azure-tools/typespec-azure-resource-manager": "0.65.0", + "@azure-tools/typespec-azure-rulesets": "0.65.0", "@azure-tools/typespec-client-generator-cli": "0.31.0", - "@azure-tools/typespec-client-generator-core": "0.64.6", + "@azure-tools/typespec-client-generator-core": "0.65.1", "@azure-tools/typespec-liftr-base": "0.10.0", "@autorest/openapi-to-typespec": "0.11.12", "@azure/avocado": "0.10.5", @@ -19,24 +19,24 @@ "@microsoft.azure/openapi-validator": "2.2.4", "@microsoft.azure/openapi-validator-core": "1.0.7", "@microsoft.azure/openapi-validator-rulesets": "2.2.2", - "@typespec/compiler": "1.8.0", - "@typespec/http": "1.8.0", - "@typespec/sse": "0.78.0", - "@typespec/events": "0.78.0", - "@typespec/openapi": "1.8.0", - "@typespec/openapi3": "1.8.0", - "@typespec/prettier-plugin-typespec": "1.8.0", - "@typespec/rest": "0.78.0", - "@typespec/streams": "0.78.0", - "@typespec/versioning": "0.78.0", - "@typespec/xml": "0.78.0", + "@typespec/compiler": "1.9.0", + "@typespec/http": "1.9.0", + "@typespec/sse": "0.79.0", + "@typespec/events": "0.79.0", + "@typespec/openapi": "1.9.0", + "@typespec/openapi3": "1.9.0", + "@typespec/prettier-plugin-typespec": "1.9.0", + "@typespec/rest": "0.79.0", + "@typespec/streams": "0.79.0", + "@typespec/versioning": "0.79.0", + "@typespec/xml": "0.79.0", "azure-rest-api-specs-eng-tools": "file:eng/tools", "oav": "4.0.3", "prettier": "3.8.1", "typescript": "~5.9.2" }, "overrides": { - "@typespec/asset-emitter": "0.78.0", + "@typespec/asset-emitter": "0.79.0", "superagent": "^10.2.3" }, "engines": {