diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..4515eda --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,50 @@ +name: build-and-test +on: + pull_request: + branches: + - main + push: + branches: + - main + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + DOTNET_NOLOGO: true + DOTNET_CLI_TELEMETRY_OPTOUT: true + +jobs: + build-and-test: + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 8.0.* + - name: Git checkout Schema + uses: actions/checkout@v4 + with: + path: Schema + - name: Git checkout Steeltoe + uses: actions/checkout@v2 + with: + repository: SteeltoeOSS/Steeltoe + path: Steeltoe + ref: main + - name: Restore packages + run: | + dotnet restore Schema + - name: Build + run: | + dotnet build Schema --no-restore --configuration Release + - name: Test + run: | + dotnet test Schema --no-build --configuration Release --collect:"XPlat Code Coverage" --logger "GitHubActions;summary.includeSkippedTests=true" diff --git a/ConfigurationSchemaGenerator/JsonSchemaMerger.cs b/ConfigurationSchemaGenerator/JsonSchemaMerger.cs index 8096d6a..529c7b5 100644 --- a/ConfigurationSchemaGenerator/JsonSchemaMerger.cs +++ b/ConfigurationSchemaGenerator/JsonSchemaMerger.cs @@ -43,6 +43,31 @@ public void AddSourceText(string text) MergeSchema(sourceSchema, _root); } + public void RemoveLogLevels() + { + // Workaround for Visual Studio displaying the following warning when the schema is downloaded from a URL: + // There are problems with this document's schema impacting one or more items in the document. Please report this issue to schema owner. + // With the following text in the Output Window: + // Reference could not be resolved + // at (line 6, column 19) in document https://steeltoe.io/schema/v4/schema.json + // at schema text "#/definitions/logLevelThreshold" + // When the schema is embedded in a NuGet package, Visual Studio merges it with its own definition for "logLevelThreshold", + // but that doesn't happen when the schema is downloaded from a URL. + + if (_root.ExtensionData.TryGetValue("definitions", out JToken? definitionsToken) && definitionsToken is JObject definitionsObject) + { + if (definitionsObject.TryGetValue("logLevel", out JToken? logLevelToken)) + { + logLevelToken.Parent!.Remove(); + } + + if (definitionsObject.Count == 0) + { + _root.ExtensionData.Remove("definitions"); + } + } + } + public string? GetResult() { return Sorter.Sort(_root); diff --git a/ConfigurationSchemaGenerator/Program.cs b/ConfigurationSchemaGenerator/Program.cs index 0803fea..fd02f68 100644 --- a/ConfigurationSchemaGenerator/Program.cs +++ b/ConfigurationSchemaGenerator/Program.cs @@ -25,6 +25,7 @@ merger.AddSourceFile(path); } + merger.RemoveLogLevels(); string? json = merger.GetResult(); Console.WriteLine($"Writing results to file: {Path.GetFullPath(outputPath)}"); diff --git a/ConfigurationSchemaGeneratorTest/Baseline/merge-actual.json b/ConfigurationSchemaGeneratorTest/Baseline/merge-actual.json index dd97959..b273e50 100644 --- a/ConfigurationSchemaGeneratorTest/Baseline/merge-actual.json +++ b/ConfigurationSchemaGeneratorTest/Baseline/merge-actual.json @@ -1,70 +1,4 @@ { - "definitions": { - "logLevel": { - "properties": { - "Steeltoe": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Common": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Common.Certificates": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Configuration": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Configuration.ConfigServer": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Configuration.Encryption": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Connectors": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Discovery": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Discovery.Configuration": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Discovery.Consul": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Discovery.Eureka": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Logging": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Logging.DynamicSerilog": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Management": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Management.Endpoint": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Management.Prometheus": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Management.Tasks": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Security": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Security.Authorization": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Security.Authorization.Certificate": { - "$ref": "#/definitions/logLevelThreshold" - } - } - } - }, "type": "object", "properties": { "Certificates": { diff --git a/ConfigurationSchemaGeneratorTest/Baseline/merge-expected.json b/ConfigurationSchemaGeneratorTest/Baseline/merge-expected.json index dd97959..b273e50 100644 --- a/ConfigurationSchemaGeneratorTest/Baseline/merge-expected.json +++ b/ConfigurationSchemaGeneratorTest/Baseline/merge-expected.json @@ -1,70 +1,4 @@ { - "definitions": { - "logLevel": { - "properties": { - "Steeltoe": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Common": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Common.Certificates": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Configuration": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Configuration.ConfigServer": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Configuration.Encryption": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Connectors": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Discovery": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Discovery.Configuration": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Discovery.Consul": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Discovery.Eureka": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Logging": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Logging.DynamicSerilog": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Management": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Management.Endpoint": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Management.Prometheus": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Management.Tasks": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Security": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Security.Authorization": { - "$ref": "#/definitions/logLevelThreshold" - }, - "Steeltoe.Security.Authorization.Certificate": { - "$ref": "#/definitions/logLevelThreshold" - } - } - } - }, "type": "object", "properties": { "Certificates": { diff --git a/ConfigurationSchemaGeneratorTest/ConfigurationSchemaGeneratorTest.csproj b/ConfigurationSchemaGeneratorTest/ConfigurationSchemaGeneratorTest.csproj index 8393c52..9cfc334 100644 --- a/ConfigurationSchemaGeneratorTest/ConfigurationSchemaGeneratorTest.csproj +++ b/ConfigurationSchemaGeneratorTest/ConfigurationSchemaGeneratorTest.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -9,11 +9,13 @@ - - - - - + + + + + + + diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..d2e1a91 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,9 @@ + + + 6.0.* + 7.2.* + 2.4.* + 17.13.* + 2.* + +