From 82177a457784e9ed9fbd35f34b4d1b013997d269 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Fri, 19 Dec 2025 14:29:19 -0500 Subject: [PATCH 01/10] docs: adds instructions to update public reference docs after nuget release Signed-off-by: Vincent Biret --- .azure-pipelines/ci-build.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.azure-pipelines/ci-build.yml b/.azure-pipelines/ci-build.yml index 8921e7112..53b181b22 100644 --- a/.azure-pipelines/ci-build.yml +++ b/.azure-pipelines/ci-build.yml @@ -472,4 +472,8 @@ extends: -t "$(REGISTRY)/$(IMAGE_NAME):${VERSION}" \ "$(Pipeline.Workspace)" displayName: 'Build and Push Release Image' - condition: contains(variables['Build.SourceBranch'], 'refs/tags/v') \ No newline at end of file + condition: contains(variables['Build.SourceBranch'], 'refs/tags/v') + +# once the nuget has been released, fill this form to get the public documentation updated. +# https://dev.azure.com/msft-skilling/Content/_workitems/create/User%20Story?templateId=39fb91e3-64a2-4c8a-83db-b2bdf3603dd3&ownerId=c4a28f90-17ae-4384-b514-7273392b082b +# https://learn.microsoft.com/en-us/dotnet/api/microsoft.openapi From 931a3929fc14dc15f862b98bc03e52236a1a8e03 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 22 Dec 2025 13:21:08 -0500 Subject: [PATCH 02/10] chore: adds 3.2 version to the workbench chore: sets 3.2 as default version for the workbench Signed-off-by: Vincent Biret --- src/Microsoft.OpenApi.Workbench/MainModel.cs | 2 +- src/Microsoft.OpenApi.Workbench/MainWindow.xaml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.OpenApi.Workbench/MainModel.cs b/src/Microsoft.OpenApi.Workbench/MainModel.cs index 660fcc5ed..08bfbd001 100644 --- a/src/Microsoft.OpenApi.Workbench/MainModel.cs +++ b/src/Microsoft.OpenApi.Workbench/MainModel.cs @@ -42,7 +42,7 @@ public class MainModel : INotifyPropertyChanged /// /// Default version. /// - private OpenApiSpecVersion _version = OpenApiSpecVersion.OpenApi3_0; + private OpenApiSpecVersion _version = OpenApiSpecVersion.OpenApi3_2; private static readonly HttpClient _httpClient = new(); diff --git a/src/Microsoft.OpenApi.Workbench/MainWindow.xaml b/src/Microsoft.OpenApi.Workbench/MainWindow.xaml index 32c14659d..87e219796 100644 --- a/src/Microsoft.OpenApi.Workbench/MainWindow.xaml +++ b/src/Microsoft.OpenApi.Workbench/MainWindow.xaml @@ -40,8 +40,9 @@ - - + + + From 2495dea83fef872752120edeb842be492a0723d4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Dec 2025 18:53:09 +0000 Subject: [PATCH 03/10] Initial plan From 50b44aad12d8fa86a46f7f6d62896a7b1c344d2e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Dec 2025 19:07:23 +0000 Subject: [PATCH 04/10] fix: wrap extension parser calls in try-catch to ensure correct error pointers When extension parsers throw OpenApiException, the exceptions are now caught in LoadExtension methods across all OpenAPI versions (V2, V3, V3.1, V3.2). This ensures the error pointer correctly includes all path segments (e.g., #/definitions/demo/x-tag instead of #/definitions/x-tag). Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> --- .../Reader/V2/OpenApiV2Deserializer.cs | 11 +- .../Reader/V3/OpenApiV3Deserializer.cs | 23 ++-- .../Reader/V31/OpenApiV31Deserializer.cs | 17 ++- .../Reader/V32/OpenApiV32Deserializer.cs | 17 ++- .../TestCustomExtension.cs | 102 ++++++++++++++++++ 5 files changed, 156 insertions(+), 14 deletions(-) diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs index c640b310c..2b075c1bc 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs @@ -79,7 +79,16 @@ private static IOpenApiExtension LoadExtension(string name, ParseNode node) { if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser)) { - return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi2_0); + try + { + return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi2_0); + } + catch (OpenApiException ex) + { + ex.Pointer = node.Context.GetLocation(); + node.Context.Diagnostic.Errors.Add(new(ex)); + return new JsonNodeExtension(node.CreateAny()); + } } else { diff --git a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs index 0b74cedc5..1a03268d6 100644 --- a/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V3/OpenApiV3Deserializer.cs @@ -130,15 +130,24 @@ public static JsonNodeExtension LoadAny(ParseNode node, OpenApiDocument hostDocu private static IOpenApiExtension LoadExtension(string name, ParseNode node) { - if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser) && parser( - node.CreateAny(), OpenApiSpecVersion.OpenApi3_0) is { } result) + if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser)) { - return result; - } - else - { - return new JsonNodeExtension(node.CreateAny()); + try + { + var result = parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_0); + if (result is { }) + { + return result; + } + } + catch (OpenApiException ex) + { + ex.Pointer = node.Context.GetLocation(); + node.Context.Diagnostic.Errors.Add(new(ex)); + } } + + return new JsonNodeExtension(node.CreateAny()); } private static string? LoadString(ParseNode node) diff --git a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs index 08f2ec048..3608ad5f7 100644 --- a/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V31/OpenApiV31Deserializer.cs @@ -131,9 +131,20 @@ public static JsonNode LoadAny(ParseNode node, OpenApiDocument hostDocument) private static IOpenApiExtension LoadExtension(string name, ParseNode node) { - return node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser) - ? parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_1) - : new JsonNodeExtension(node.CreateAny()); + if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser)) + { + try + { + return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_1); + } + catch (OpenApiException ex) + { + ex.Pointer = node.Context.GetLocation(); + node.Context.Diagnostic.Errors.Add(new(ex)); + } + } + + return new JsonNodeExtension(node.CreateAny()); } private static string? LoadString(ParseNode node) diff --git a/src/Microsoft.OpenApi/Reader/V32/OpenApiV32Deserializer.cs b/src/Microsoft.OpenApi/Reader/V32/OpenApiV32Deserializer.cs index 9b062931d..55f45b38e 100644 --- a/src/Microsoft.OpenApi/Reader/V32/OpenApiV32Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V32/OpenApiV32Deserializer.cs @@ -131,9 +131,20 @@ public static JsonNode LoadAny(ParseNode node, OpenApiDocument hostDocument) private static IOpenApiExtension LoadExtension(string name, ParseNode node) { - return node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser) - ? parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_2) - : new JsonNodeExtension(node.CreateAny()); + if (node.Context.ExtensionParsers is not null && node.Context.ExtensionParsers.TryGetValue(name, out var parser)) + { + try + { + return parser(node.CreateAny(), OpenApiSpecVersion.OpenApi3_2); + } + catch (OpenApiException ex) + { + ex.Pointer = node.Context.GetLocation(); + node.Context.Diagnostic.Errors.Add(new(ex)); + } + } + + return new JsonNodeExtension(node.CreateAny()); } private static string? LoadString(ParseNode node) diff --git a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs index 57f55e95e..1964ea61b 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs @@ -44,6 +44,108 @@ public void ParseCustomExtension() Assert.Equal("hey", fooExtension.Bar); Assert.Equal("hi!", fooExtension.Baz); } + + [Fact] + public void ExtensionParserThrowingOpenApiException_V2_ShouldHaveCorrectPointer() + { + var json = @"{ + ""swagger"": ""2.0"", + ""info"": { + ""title"": ""Demo"", + ""version"": ""1"" + }, + ""paths"": {}, + ""definitions"": { + ""demo"": { + ""x-tag"": null + } + } +}"; + var settings = new OpenApiReaderSettings + { + ExtensionParsers = + { + { "x-tag", (any, version) => throw new OpenApiException("Testing") } + } + }; + + var result = OpenApiDocument.Parse(json, "json", settings); + + Assert.NotNull(result.Diagnostic); + Assert.NotEmpty(result.Diagnostic.Errors); + var error = result.Diagnostic.Errors[0]; + Assert.Equal("Testing", error.Message); + Assert.Equal("#/definitions/demo/x-tag", error.Pointer); + } + + [Fact] + public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer() + { + var json = @"{ + ""openapi"": ""3.0.0"", + ""info"": { + ""title"": ""Demo"", + ""version"": ""1"" + }, + ""paths"": {}, + ""components"": { + ""schemas"": { + ""demo"": { + ""x-tag"": null + } + } + } +}"; + var settings = new OpenApiReaderSettings + { + ExtensionParsers = + { + { "x-tag", (any, version) => throw new OpenApiException("Testing") } + } + }; + + var result = OpenApiDocument.Parse(json, "json", settings); + + Assert.NotNull(result.Diagnostic); + Assert.NotEmpty(result.Diagnostic.Errors); + var error = result.Diagnostic.Errors[0]; + Assert.Equal("Testing", error.Message); + Assert.Equal("#/components/schemas/demo/x-tag", error.Pointer); + } + + [Fact] + public void ExtensionParserThrowingOpenApiException_V31_ShouldHaveCorrectPointer() + { + var json = @"{ + ""openapi"": ""3.1.0"", + ""info"": { + ""title"": ""Demo"", + ""version"": ""1"" + }, + ""components"": { + ""schemas"": { + ""demo"": { + ""x-tag"": null + } + } + } +}"; + var settings = new OpenApiReaderSettings + { + ExtensionParsers = + { + { "x-tag", (any, version) => throw new OpenApiException("Testing") } + } + }; + + var result = OpenApiDocument.Parse(json, "json", settings); + + Assert.NotNull(result.Diagnostic); + Assert.NotEmpty(result.Diagnostic.Errors); + var error = result.Diagnostic.Errors[0]; + Assert.Equal("Testing", error.Message); + Assert.Equal("#/components/schemas/demo/x-tag", error.Pointer); + } } internal class FooExtension : IOpenApiExtension, IOpenApiElement From 12f649959fe73d76c36a51f0126b41f14f4823fd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Dec 2025 19:10:01 +0000 Subject: [PATCH 05/10] refactor: make V2 LoadExtension consistent with other versions Moved the return statement for JsonNodeExtension outside the catch block to match the pattern used in V3, V31, and V32 deserializers. Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> --- src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs index 2b075c1bc..80d079b5e 100644 --- a/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs +++ b/src/Microsoft.OpenApi/Reader/V2/OpenApiV2Deserializer.cs @@ -87,13 +87,10 @@ private static IOpenApiExtension LoadExtension(string name, ParseNode node) { ex.Pointer = node.Context.GetLocation(); node.Context.Diagnostic.Errors.Add(new(ex)); - return new JsonNodeExtension(node.CreateAny()); } } - else - { - return new JsonNodeExtension(node.CreateAny()); - } + + return new JsonNodeExtension(node.CreateAny()); } private static string? LoadString(ParseNode node) From e85698a4172a874c33eba6c902d60f975e51e887 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Dec 2025 19:20:54 +0000 Subject: [PATCH 06/10] style: use raw string literals for JSON test data Changed from verbatim string literals (@"...") to raw string literals ("""...""") for consistency with existing test code. Co-authored-by: baywet <7905502+baywet@users.noreply.github.com> --- .../TestCustomExtension.cs | 68 ++++++++++--------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs index 1964ea61b..b12a56d31 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs @@ -48,19 +48,21 @@ public void ParseCustomExtension() [Fact] public void ExtensionParserThrowingOpenApiException_V2_ShouldHaveCorrectPointer() { - var json = @"{ - ""swagger"": ""2.0"", - ""info"": { - ""title"": ""Demo"", - ""version"": ""1"" + var json = """ +{ + "swagger": "2.0", + "info": { + "title": "Demo", + "version": "1" }, - ""paths"": {}, - ""definitions"": { - ""demo"": { - ""x-tag"": null + "paths": {}, + "definitions": { + "demo": { + "x-tag": null } } -}"; +} +"""; var settings = new OpenApiReaderSettings { ExtensionParsers = @@ -81,21 +83,23 @@ public void ExtensionParserThrowingOpenApiException_V2_ShouldHaveCorrectPointer( [Fact] public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer() { - var json = @"{ - ""openapi"": ""3.0.0"", - ""info"": { - ""title"": ""Demo"", - ""version"": ""1"" + var json = """ +{ + "openapi": "3.0.0", + "info": { + "title": "Demo", + "version": "1" }, - ""paths"": {}, - ""components"": { - ""schemas"": { - ""demo"": { - ""x-tag"": null + "paths": {}, + "components": { + "schemas": { + "demo": { + "x-tag": null } } } -}"; +} +"""; var settings = new OpenApiReaderSettings { ExtensionParsers = @@ -116,20 +120,22 @@ public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer( [Fact] public void ExtensionParserThrowingOpenApiException_V31_ShouldHaveCorrectPointer() { - var json = @"{ - ""openapi"": ""3.1.0"", - ""info"": { - ""title"": ""Demo"", - ""version"": ""1"" + var json = """ +{ + "openapi": "3.1.0", + "info": { + "title": "Demo", + "version": "1" }, - ""components"": { - ""schemas"": { - ""demo"": { - ""x-tag"": null + "components": { + "schemas": { + "demo": { + "x-tag": null } } } -}"; +} +"""; var settings = new OpenApiReaderSettings { ExtensionParsers = From 8021a752fb5516ccf749bd3628f860bf3f0848c0 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Mon, 22 Dec 2025 14:42:22 -0500 Subject: [PATCH 07/10] chore: refactors test definition for better coverage Signed-off-by: Vincent Biret --- .../TestCustomExtension.cs | 47 +++---------------- 1 file changed, 7 insertions(+), 40 deletions(-) diff --git a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs index b12a56d31..9f4404c05 100644 --- a/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs +++ b/test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs @@ -80,12 +80,15 @@ public void ExtensionParserThrowingOpenApiException_V2_ShouldHaveCorrectPointer( Assert.Equal("#/definitions/demo/x-tag", error.Pointer); } - [Fact] - public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer() + [Theory] + [InlineData("3.0.4")] + [InlineData("3.1.1")] + [InlineData("3.2.0")] + public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer(string version) { - var json = """ + var json = $$""" { - "openapi": "3.0.0", + "openapi": "{{version}}", "info": { "title": "Demo", "version": "1" @@ -116,42 +119,6 @@ public void ExtensionParserThrowingOpenApiException_V3_ShouldHaveCorrectPointer( Assert.Equal("Testing", error.Message); Assert.Equal("#/components/schemas/demo/x-tag", error.Pointer); } - - [Fact] - public void ExtensionParserThrowingOpenApiException_V31_ShouldHaveCorrectPointer() - { - var json = """ -{ - "openapi": "3.1.0", - "info": { - "title": "Demo", - "version": "1" - }, - "components": { - "schemas": { - "demo": { - "x-tag": null - } - } - } -} -"""; - var settings = new OpenApiReaderSettings - { - ExtensionParsers = - { - { "x-tag", (any, version) => throw new OpenApiException("Testing") } - } - }; - - var result = OpenApiDocument.Parse(json, "json", settings); - - Assert.NotNull(result.Diagnostic); - Assert.NotEmpty(result.Diagnostic.Errors); - var error = result.Diagnostic.Errors[0]; - Assert.Equal("Testing", error.Message); - Assert.Equal("#/components/schemas/demo/x-tag", error.Pointer); - } } internal class FooExtension : IOpenApiExtension, IOpenApiElement From d0cae6626ae17cd64db584885de12cec6c80ce1f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Jan 2026 21:01:46 +0000 Subject: [PATCH 08/10] chore(deps): bump dependabot/fetch-metadata from 2.4.0 to 2.5.0 Bumps [dependabot/fetch-metadata](https://github.com/dependabot/fetch-metadata) from 2.4.0 to 2.5.0. - [Release notes](https://github.com/dependabot/fetch-metadata/releases) - [Commits](https://github.com/dependabot/fetch-metadata/compare/v2.4.0...v2.5.0) --- updated-dependencies: - dependency-name: dependabot/fetch-metadata dependency-version: 2.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/auto-merge-dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/auto-merge-dependabot.yml b/.github/workflows/auto-merge-dependabot.yml index d454cd186..ba2243c97 100644 --- a/.github/workflows/auto-merge-dependabot.yml +++ b/.github/workflows/auto-merge-dependabot.yml @@ -19,7 +19,7 @@ jobs: steps: - name: Dependabot metadata id: metadata - uses: dependabot/fetch-metadata@v2.4.0 + uses: dependabot/fetch-metadata@v2.5.0 with: github-token: "${{ secrets.GITHUB_TOKEN }}" From 9792817c391be1b631a57462e0b417aa04c5f3d4 Mon Sep 17 00:00:00 2001 From: Vincent Biret Date: Tue, 6 Jan 2026 08:16:45 -0500 Subject: [PATCH 09/10] docs: updates versions to clarify the ranges --- docs/upgrade-guide-3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/upgrade-guide-3.md b/docs/upgrade-guide-3.md index e874a8998..49e467d24 100644 --- a/docs/upgrade-guide-3.md +++ b/docs/upgrade-guide-3.md @@ -11,11 +11,11 @@ We are excited to announce OpenAPI.NET v3.0! This major update introduces suppor If you are using this library with [AspNetCore OpenAPI versions](https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi) `< 10.0` then you must remain on version `1.x` as it's not compatible with version 3 or above of this library. -If you are using this library with [AspNetCore OpenAPI versions](https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi) `= 10.0` then you must remain on version `2.x` as it's not compatible with version 3 or above of this library. +If you are using this library with [AspNetCore OpenAPI versions](https://www.nuget.org/packages/Microsoft.AspNetCore.OpenApi) `= 10.X` then you must remain on version `2.x` as it's not compatible with version 3 or above of this library. If you are using this library with [Swashbuckle.AspNetCore version](https://www.nuget.org/packages/Swashbuckle.AspNetCore/) `< 10.0` then you must remain on version `1.x` as it's not compatible with version 3 or above of this library. -If you are using this library with [Swashbuckle.AspNetCore version](https://www.nuget.org/packages/Swashbuckle.AspNetCore/) `= 10.0` then you must remain on version `2.x` as it's not compatible with version 3 or above of this library. +If you are using this library with [Swashbuckle.AspNetCore version](https://www.nuget.org/packages/Swashbuckle.AspNetCore/) `= 10.X` then you must remain on version `2.x` as it's not compatible with version 3 or above of this library. The latest support policy information for this library, and integration with ASP.NET Core can be found on [the contributing documentation](https://github.com/microsoft/OpenAPI.NET/blob/main/CONTRIBUTING.md#branches-and-support-policy). From 4e4f4c6ed737bb759fce508cd2a6e8dd3c4e2084 Mon Sep 17 00:00:00 2001 From: "release-please-token-provider[bot]" <225477224+release-please-token-provider[bot]@users.noreply.github.com> Date: Tue, 6 Jan 2026 15:00:35 +0000 Subject: [PATCH 10/10] chore(main): release 3.1.2 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 8 ++++++++ Directory.Build.props | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 89c23baca..9d7db69f9 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "3.1.1" + ".": "3.1.2" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index be4068a9a..ed99a1173 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [3.1.2](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.1...v3.1.2) (2026-01-06) + + +### Bug Fixes + +* correct error pointer when extension parser throws OpenApiException ([43c75a9](https://github.com/microsoft/OpenAPI.NET/commit/43c75a90746344fcc975611100e995fe4045edf0)) +* wrap extension parser calls in try-catch to ensure correct error pointers ([50b44aa](https://github.com/microsoft/OpenAPI.NET/commit/50b44aad12d8fa86a46f7f6d62896a7b1c344d2e)) + ## [3.1.1](https://github.com/microsoft/OpenAPI.NET/compare/v3.1.0...v3.1.1) (2025-12-18) diff --git a/Directory.Build.props b/Directory.Build.props index 5aba3b052..c1b6e63d1 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ https://github.com/Microsoft/OpenAPI.NET © Microsoft Corporation. All rights reserved. OpenAPI .NET - 3.1.1 + 3.1.2