From d47eefb3ca2b787e06d77165f43f8f8d6b061dd5 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Fri, 11 Oct 2024 15:56:44 +1000 Subject: [PATCH 1/4] Dev version bump [skip ci] --- src/Serilog.AspNetCore/Serilog.AspNetCore.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Serilog.AspNetCore/Serilog.AspNetCore.csproj b/src/Serilog.AspNetCore/Serilog.AspNetCore.csproj index ac617d0..5d29d9d 100644 --- a/src/Serilog.AspNetCore/Serilog.AspNetCore.csproj +++ b/src/Serilog.AspNetCore/Serilog.AspNetCore.csproj @@ -3,7 +3,7 @@ Serilog support for ASP.NET Core logging - 8.0.3 + 8.0.4 Microsoft;Serilog Contributors net462;netstandard2.0;net6.0;net7.0;net8.0 true From 985ce641750e9eba1c6d7fd9769d1911aab06797 Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Wed, 27 Nov 2024 14:32:54 +1000 Subject: [PATCH 2/4] Update to .NET 9; Actions build --- .github/.DS_Store | Bin 0 -> 6148 bytes .github/workflows/ci.yml | 41 ++++++++ Build.ps1 | 93 +++++++++++------- Directory.Build.props | 19 +++- Directory.Version.props | 6 ++ README.md | 2 +- Setup.ps1 | 11 --- appveyor.yml | 24 ----- global.json | 2 +- samples/Sample/Sample.csproj | 5 +- serilog-aspnetcore.sln | 15 ++- .../AspNetCore/RequestLoggingMiddleware.cs | 2 +- .../Serilog.AspNetCore.csproj | 25 ++--- .../Serilog.AspNetCore.Tests.csproj | 11 ++- 14 files changed, 154 insertions(+), 102 deletions(-) create mode 100644 .github/.DS_Store create mode 100644 .github/workflows/ci.yml create mode 100644 Directory.Version.props delete mode 100644 Setup.ps1 delete mode 100644 appveyor.yml diff --git a/.github/.DS_Store b/.github/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..add6722590044bcc900e134099c24848a3146504 GIT binary patch literal 6148 zcmeHKJxc>o5S-N%0YOq)zQ5o> $GITHUB_ENV + - name: Build and Publish + env: + DOTNET_CLI_TELEMETRY_OPTOUT: true + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: pwsh + run: | + ./Build.ps1 diff --git a/Build.ps1 b/Build.ps1 index a674b52..e798284 100644 --- a/Build.ps1 +++ b/Build.ps1 @@ -1,56 +1,79 @@ -echo "build: Build started" +Write-Output "build: Tool versions follow" + +dotnet --version +dotnet --list-sdks + +Write-Output "build: Build started" Push-Location $PSScriptRoot +try { + if(Test-Path .\artifacts) { + Write-Output "build: Cleaning ./artifacts" + Remove-Item ./artifacts -Force -Recurse + } -if(Test-Path .\artifacts) { - echo "build: Cleaning .\artifacts" - Remove-Item .\artifacts -Force -Recurse -} + & dotnet restore --no-cache -& dotnet restore --no-cache + $dbp = [Xml] (Get-Content .\Directory.Version.props) + $versionPrefix = $dbp.Project.PropertyGroup.VersionPrefix -$branch = @{ $true = $env:APPVEYOR_REPO_BRANCH; $false = $(git symbolic-ref --short -q HEAD) }[$env:APPVEYOR_REPO_BRANCH -ne $NULL]; -$revision = @{ $true = "{0:00000}" -f [convert]::ToInt32("0" + $env:APPVEYOR_BUILD_NUMBER, 10); $false = "local" }[$env:APPVEYOR_BUILD_NUMBER -ne $NULL]; -$suffix = @{ $true = ""; $false = "$($branch.Substring(0, [math]::Min(10,$branch.Length)))-$revision"}[$branch -eq "main" -and $revision -ne "local"] + Write-Output "build: Package version prefix is $versionPrefix" -echo "build: Version suffix is $suffix" + $branch = @{ $true = $env:CI_TARGET_BRANCH; $false = $(git symbolic-ref --short -q HEAD) }[$NULL -ne $env:CI_TARGET_BRANCH]; + $revision = @{ $true = "{0:00000}" -f [convert]::ToInt32("0" + $env:CI_BUILD_NUMBER, 10); $false = "local" }[$NULL -ne $env:CI_BUILD_NUMBER]; + $suffix = @{ $true = ""; $false = "$($branch.Substring(0, [math]::Min(10,$branch.Length)) -replace '([^a-zA-Z0-9\-]*)', '')-$revision"}[$branch -eq "main" -and $revision -ne "local"] + $commitHash = $(git rev-parse --short HEAD) + $buildSuffix = @{ $true = "$($suffix)-$($commitHash)"; $false = "$($branch)-$($commitHash)" }[$suffix -ne ""] -foreach ($src in ls src/*) { - Push-Location $src + Write-Output "build: Package version suffix is $suffix" + Write-Output "build: Build version suffix is $buildSuffix" - echo "build: Packaging project in $src" + & dotnet build -c Release --version-suffix=$buildSuffix /p:ContinuousIntegrationBuild=true + if($LASTEXITCODE -ne 0) { throw "Build failed" } - if($suffix) { - & dotnet pack -c Release --include-source -o ..\..\artifacts --version-suffix=$suffix - } else { - & dotnet pack -c Release --include-source -o ..\..\artifacts - } + foreach ($src in Get-ChildItem src/*) { + Push-Location $src - if($LASTEXITCODE -ne 0) { exit 1 } + Write-Output "build: Packaging project in $src" - Pop-Location -} + if ($suffix) { + & dotnet pack -c Release --no-build --no-restore -o ../../artifacts --version-suffix=$suffix + } else { + & dotnet pack -c Release --no-build --no-restore -o ../../artifacts + } + if($LASTEXITCODE -ne 0) { throw "Packaging failed" } -foreach ($test in ls test/*.PerformanceTests) { - Push-Location $test + Pop-Location + } - echo "build: Building performance test project in $test" + foreach ($test in Get-ChildItem test/*.Tests) { + Push-Location $test - & dotnet build -c Release - if($LASTEXITCODE -ne 0) { exit 2 } + Write-Output "build: Testing project in $test" - Pop-Location -} + & dotnet test -c Release --no-build --no-restore + if($LASTEXITCODE -ne 0) { throw "Testing failed" } + + Pop-Location + } -foreach ($test in ls test/*.Tests) { - Push-Location $test + if ($env:NUGET_API_KEY) { + # GitHub Actions will only supply this to branch builds and not PRs. We publish + # builds from any branch this action targets (i.e. main and dev). - echo "build: Testing project in $test" + Write-Output "build: Publishing NuGet packages" - & dotnet test -c Release - if($LASTEXITCODE -ne 0) { exit 3 } + foreach ($nupkg in Get-ChildItem artifacts/*.nupkg) { + & dotnet nuget push -k $env:NUGET_API_KEY -s https://api.nuget.org/v3/index.json "$nupkg" + if($LASTEXITCODE -ne 0) { throw "Publishing failed" } + } + if (!($suffix)) { + Write-Output "build: Creating release for version $versionPrefix" + + iex "gh release create v$versionPrefix --title v$versionPrefix --generate-notes $(get-item ./artifacts/*.nupkg) $(get-item ./artifacts/*.snupkg)" + } + } +} finally { Pop-Location } - -Pop-Location diff --git a/Directory.Build.props b/Directory.Build.props index 3dcd183..c114992 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,12 +1,25 @@ + + latest True - true - ../../assets/Serilog.snk - true + + true + $(MSBuildThisFileDirectory)assets/Serilog.snk false enable enable + true + true + true + true + snupkg + + + + + diff --git a/Directory.Version.props b/Directory.Version.props new file mode 100644 index 0000000..f350992 --- /dev/null +++ b/Directory.Version.props @@ -0,0 +1,6 @@ + + + + 9.0.0 + + diff --git a/README.md b/README.md index 4b5ae29..9d09bf1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Serilog.AspNetCore [![Build status](https://ci.appveyor.com/api/projects/status/4rscdto23ik6vm2r/branch/dev?svg=true)](https://ci.appveyor.com/project/serilog/serilog-aspnetcore/branch/dev) [![NuGet Version](http://img.shields.io/nuget/v/Serilog.AspNetCore.svg?style=flat)](https://www.nuget.org/packages/Serilog.AspNetCore/) [![NuGet Prerelease Version](http://img.shields.io/nuget/vpre/Serilog.AspNetCore.svg?style=flat)](https://www.nuget.org/packages/Serilog.AspNetCore/) +# Serilog.AspNetCore [![Build status](https://github.com/serilog/serilog-aspnetcore/actions/workflows/ci.yml/badge.svg?branch=dev)](https://github.com/serilog/serilog-aspnetcore/actions) [![NuGet Version](http://img.shields.io/nuget/v/Serilog.AspNetCore.svg?style=flat)](https://www.nuget.org/packages/Serilog.AspNetCore/) Serilog logging for ASP.NET Core. This package routes ASP.NET Core log messages through Serilog, so you can get information about ASP.NET's internal operations written to the same Serilog sinks as your application events. diff --git a/Setup.ps1 b/Setup.ps1 deleted file mode 100644 index 880a07a..0000000 --- a/Setup.ps1 +++ /dev/null @@ -1,11 +0,0 @@ -$ErrorActionPreference = "Stop" - -$RequiredDotnetVersion = $(cat ./global.json | convertfrom-json).sdk.version - -mkdir "./build" - -Invoke-WebRequest "https://dot.net/v1/dotnet-install.ps1" -OutFile "./build/installcli.ps1" -& ./build/installcli.ps1 -InstallDir "$pwd/.dotnetcli" -NoPath -Version $RequiredDotnetVersion -if ($LASTEXITCODE) { exit 1 } - -$env:Path = "$pwd/.dotnetcli;$env:Path" diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 5eadb66..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: '{build}' -skip_tags: true -image: Visual Studio 2022 -install: -- ps: ./Setup.ps1 -build_script: -- ps: ./Build.ps1 -test: off -artifacts: -- path: artifacts/Serilog.*.nupkg -deploy: -- provider: NuGet - skip_symbols: true - api_key: - secure: cyyTkHHOJHO3tPWDeocu+EjnHERcPncSaEi/l2gjYPDsNP3I4zh/KPtbqt7kWVc0 - on: - branch: /^(main|dev)$/ -- provider: GitHub - auth_token: - secure: p4LpVhBKxGS5WqucHxFQ5c7C8cP74kbNB0Z8k9Oxx/PMaDQ1+ibmoexNqVU5ZlmX - artifact: /Serilog.*\.nupkg/ - tag: v$(appveyor_build_version) - on: - branch: main diff --git a/global.json b/global.json index d079f83..db8627a 100644 --- a/global.json +++ b/global.json @@ -1,7 +1,7 @@ { "sdk": { + "version": "9.0.100", "allowPrerelease": false, - "version": "8.0.100", "rollForward": "latestFeature" } } diff --git a/samples/Sample/Sample.csproj b/samples/Sample/Sample.csproj index b5a6d67..446c9b8 100644 --- a/samples/Sample/Sample.csproj +++ b/samples/Sample/Sample.csproj @@ -1,7 +1,8 @@ - net8.0 + net9.0 + false @@ -9,7 +10,7 @@ - + diff --git a/serilog-aspnetcore.sln b/serilog-aspnetcore.sln index a9b5e42..73c077d 100644 --- a/serilog-aspnetcore.sln +++ b/serilog-aspnetcore.sln @@ -11,12 +11,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{F240 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "assets", "assets", "{9C21B9DF-AEDD-4AA6-BEA4-912DEF3E5B8E}" ProjectSection(SolutionItems) = preProject - appveyor.yml = appveyor.yml - Build.ps1 = Build.ps1 - global.json = global.json README.md = README.md assets\Serilog.snk = assets\Serilog.snk - Setup.ps1 = Setup.ps1 + Build.ps1 = Build.ps1 + global.json = global.json + Directory.Version.props = Directory.Version.props Directory.Build.props = Directory.Build.props EndProjectSection EndProject @@ -26,6 +25,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Serilog.AspNetCore.Tests", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sample", "samples\Sample\Sample.csproj", "{4FA0FE41-973E-4555-AB4A-0F400DBA9DD3}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{B867CAF4-D737-4230-AD2F-8093223A949A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{5944D1E2-BC3C-4A95-B4E2-9DDE5B0684AC}" + ProjectSection(SolutionItems) = preProject + .github\workflows\ci.yml = .github\workflows\ci.yml + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -52,6 +58,7 @@ Global {0549D23F-986B-4FB2-BACE-16FD7A7BC9EF} = {A1893BD1-333D-4DFE-A0F0-DDBB2FE526E0} {AD51759B-CD58-473F-9620-0B0E56A123A1} = {E30F638E-BBBE-4AD1-93CE-48CC69CFEFE1} {4FA0FE41-973E-4555-AB4A-0F400DBA9DD3} = {F2407211-6043-439C-8E06-3641634332E7} + {5944D1E2-BC3C-4A95-B4E2-9DDE5B0684AC} = {B867CAF4-D737-4230-AD2F-8093223A949A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {811E61C5-3871-4633-AFAE-B35B619C8A10} diff --git a/src/Serilog.AspNetCore/AspNetCore/RequestLoggingMiddleware.cs b/src/Serilog.AspNetCore/AspNetCore/RequestLoggingMiddleware.cs index e4f50a8..a8ec777 100644 --- a/src/Serilog.AspNetCore/AspNetCore/RequestLoggingMiddleware.cs +++ b/src/Serilog.AspNetCore/AspNetCore/RequestLoggingMiddleware.cs @@ -88,7 +88,7 @@ bool LogCompletion(HttpContext httpContext, DiagnosticContextCollector collector collectedProperties = NoProperties; // Last-in (correctly) wins... - var properties = collectedProperties.Concat(_getMessageTemplateProperties(httpContext, GetPath(httpContext, _includeQueryInRequestPath), elapsedMs, statusCode)); + var properties = (collectedProperties ?? []).Concat(_getMessageTemplateProperties(httpContext, GetPath(httpContext, _includeQueryInRequestPath), elapsedMs, statusCode)); var (traceId, spanId) = Activity.Current is { } activity ? (activity.TraceId, activity.SpanId) : diff --git a/src/Serilog.AspNetCore/Serilog.AspNetCore.csproj b/src/Serilog.AspNetCore/Serilog.AspNetCore.csproj index 5d29d9d..a244735 100644 --- a/src/Serilog.AspNetCore/Serilog.AspNetCore.csproj +++ b/src/Serilog.AspNetCore/Serilog.AspNetCore.csproj @@ -2,17 +2,13 @@ Serilog support for ASP.NET Core logging - - 8.0.4 Microsoft;Serilog Contributors - net462;netstandard2.0;net6.0;net7.0;net8.0 - true + net462;netstandard2.0;netstandard2.1;net8.0;net9.0 serilog;aspnet;aspnetcore icon.png https://github.com/serilog/serilog-aspnetcore Apache-2.0 https://github.com/serilog/serilog-aspnetcore - git Serilog README.md @@ -24,26 +20,25 @@ - - - - - + + + + + - - - + + - + - + diff --git a/test/Serilog.AspNetCore.Tests/Serilog.AspNetCore.Tests.csproj b/test/Serilog.AspNetCore.Tests/Serilog.AspNetCore.Tests.csproj index 446fc77..a0a29df 100644 --- a/test/Serilog.AspNetCore.Tests/Serilog.AspNetCore.Tests.csproj +++ b/test/Serilog.AspNetCore.Tests/Serilog.AspNetCore.Tests.csproj @@ -1,7 +1,8 @@  - net8.0 + net9.0 + false @@ -9,10 +10,10 @@ - - - - + + + + From ba531334efd4a2c6e8f86241dbf949603e07099f Mon Sep 17 00:00:00 2001 From: Nicholas Blumhardt Date: Wed, 27 Nov 2024 14:34:52 +1000 Subject: [PATCH 3/4] Remove .DS_Store --- .github/.DS_Store | Bin 6148 -> 0 bytes .gitignore | 2 ++ 2 files changed, 2 insertions(+) delete mode 100644 .github/.DS_Store diff --git a/.github/.DS_Store b/.github/.DS_Store deleted file mode 100644 index add6722590044bcc900e134099c24848a3146504..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJxc>o5S-N%0YOq)zQ5o Date: Wed, 27 Nov 2024 14:36:22 +1000 Subject: [PATCH 4/4] Remove vestigial images folder --- .../images/serilog-extension-nuget.png | Bin 22378 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/Serilog.AspNetCore/images/serilog-extension-nuget.png diff --git a/src/Serilog.AspNetCore/images/serilog-extension-nuget.png b/src/Serilog.AspNetCore/images/serilog-extension-nuget.png deleted file mode 100644 index 1dfe4308b664e684217d436367a25bf91308f436..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22378 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 i_~_ijCV{QK6Akww67qFyi&!`pmt