Release readiness: Source Link + symbols, and .NET 10 dependency refresh - #8
Conversation
Make the published packages debuggable and reproducible: - Source Link ships in the .NET SDK (8+), so no PackageReference is needed. Set PublishRepositoryUrl (the one property the SDK does not default) and EmbedUntrackedSources so repository + commit metadata is embedded. - IncludeSymbols + snupkg symbol packages so consumers can step into sources. `dotnet nuget push` already pushes the adjacent .snupkg to nuget.org, so the release workflow needs no change. - ContinuousIntegrationBuild on CI only, for deterministic released binaries (left off locally to preserve a normal debugging experience). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V1phdgDossB7htzxcbZTNF
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e7de1b6876
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
dotnet nuget push does not reliably pair a .snupkg located in a subdirectory (the pack output goes to artifacts/), per NuGet/Home#8016 -- so with IncludeSymbols enabled the symbol packages were built but never published. Push each .snupkg as its own step (and --no-symbols on the main push to keep behavior deterministic). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V1phdgDossB7htzxcbZTNF
The project already targets net10.0; this bumps the version-tied packages to their current stable releases: - Roslyn (Microsoft.CodeAnalysis.*) 4.14.0 -> 5.3.0 - MSBuild (Microsoft.Build.*, Microsoft.NET.StringTools) 17.7.2 -> 18.7.1 - Microsoft.NET.Test.Sdk 17.11.1 -> 18.6.0 - Microsoft.Extensions.* 8.0.x -> 10.0.9 (InspectCodeSnapshot tool) - MSTest 3.11.1 -> 4.2.3, NUnit3TestAdapter 4.6.0 -> 6.2.0 - xUnit 2.9.2 -> 2.9.3, xunit.runner.visualstudio 2.8.2 -> 3.1.5 - TUnit 0.25.21 -> 1.56.18, coverlet.collector 6.0.2 -> 10.0.1 TUnit 1.x runs only on Microsoft.Testing.Platform and dropped the VSTest bridge, so on the .NET 10 SDK it can't run under the unified `dotnet test` used by the VSTest-based xUnit/NUnit/MSTest projects. Split the CI and release test steps: discover and run the VSTest projects via `dotnet test`, and run the TUnit project via `dotnet run` (Microsoft.Testing.Platform). Builds clean and every suite passes on the .NET 10 SDK (Core/xUnit 138, MSTest, NUnit, Roslyn+MSBuild, TUnit, and the betterernet ci dogfood). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V1phdgDossB7htzxcbZTNF
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: dc3fd7933f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The .NET 10 refresh moved TUnit to its own `dotnet run` (Microsoft.Testing.Platform) step, but the README "Build & test" section still told contributors to run `dotnet test BettererNet.sln`, which now errors on the TUnit project on the .NET 10 SDK. Document the VSTest suites and the TUnit suite as separate commands, matching CI. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V1phdgDossB7htzxcbZTNF
Two release-readiness changes on one branch — happy to split into separate PRs if you'd prefer.
1. Source Link + symbols + deterministic builds
Makes published packages debuggable and reproducible:
PublishRepositoryUrl+EmbedUntrackedSources.IncludeSymbols+snupkg, pushed explicitly (dotnet nuget pushdoesn't pair.snupkgfrom a subdirectory — NuGet/Home#8016; thanks Codex).ContinuousIntegrationBuildon CI only.2. .NET 10 dependency refresh
The project already targets
net10.0; this bumps the version-tied packages to current stable:TUnit 1.x is Microsoft.Testing.Platform-only and dropped the VSTest bridge, so on the .NET 10 SDK it can't run under the unified
dotnet testthat the VSTest-based xUnit/NUnit/MSTest projects use. The CI and release test steps are split: VSTest projects viadotnet test(auto-discovered byMicrosoft.NET.Test.Sdk), TUnit viadotnet run(MTP).Validated locally on the .NET 10 SDK: builds clean; all suites pass (Core/xUnit 138, MSTest, NUnit, Roslyn+MSBuild, TUnit);
betterernet cidogfood green.🤖 Generated with Claude Code
https://claude.ai/code/session_01V1phdgDossB7htzxcbZTNF