Skip to content

Update build and tests to .NET 10 - #28

Merged
borland merged 3 commits into
masterfrom
orion/build-net10
Oct 9, 2026
Merged

borland merged 3 commits into
masterfrom
orion/build-net10

Conversation

@borland

@borland borland commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

Moves the build and test tooling from .NET 8 to .NET 10. The shipped library is unchanged (still netstandard2.0, Sprache 2.3.1).

Changes

  • global.json SDK 8.0.100 → 10.0.100
  • Test project and Nuke build project target net10.0
  • Nuke.Common 7.0.6 → 10.1.0 (dropped the BinaryFormatter workaround and an obsolete FileSystemTasks import; regenerated .nuke/build.schema.json)
  • Octopus.OctoVersion.Tool 0.3.295 → 1.1.79, run on net10.0 (the old version only shipped a net8.0 build, so the build still depended on the .NET 8 runtime)
  • CI installs .NET 10.0.x
  • Test dependencies: NUnit 4.6.1, NUnit3TestAdapter 6.3.0, Microsoft.NET.Test.Sdk 18.10.1, FluentAssertions 7.2.2 (kept below 8.x because of its licence change), Assent 3.0.1, Fastenshtein 1.0.12

Verification

  • dotnet test: 58/58 passing
  • ./build.sh --target Test and --target Pack succeed locally; the package still contains lib/netstandard2.0

Restore shows NU190x vulnerability warnings from Nuke's own transitive dependencies (build-only, not shipped). I've left these until Nuke updates them.

🤖 Generated with Claude Code

borland and others added 3 commits October 8, 2026 22:22
- global.json SDK 8.0.100 -> 10.0.100
- Test and build projects target net10.0
- Nuke.Common 7.0.6 -> 10.1.0 (drop BinaryFormatter workaround and removed FileSystemTasks import)
- CI uses .NET 10.0.x

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Assent 2.3.2 -> 3.0.1
- Fastenshtein 1.0.0.8 -> 1.0.12
- FluentAssertions 6.12.0 -> 7.2.2
- Microsoft.NET.Test.Sdk 17.8.0 -> 18.10.1
- nunit 3.14.0 -> 4.6.1
- NUnit3TestAdapter 3.17.0 -> 6.3.0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OctoVersion.Tool 0.3.295 only ships a net8.0 build, so the Nuke build
still silently required the .NET 8 runtime even though CI now only
installs .NET 10 via setup-dotnet. It only worked because the GitHub
runner images happen to preinstall .NET 8, which goes out of support
in November 2026.

1.1.79 ships net8.0/net9.0/net10.0 builds and produces identical version
output (including the GITHUB_OUTPUT octoversion_* values the workflow
consumes). Select net10.0 explicitly on the OctoVersion attribute.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@borland

borland commented Oct 8, 2026

Copy link
Copy Markdown
Contributor Author

Opus review

A Claude Opus (claude-opus-5-5) agent reviewed this branch against master before the PR was opened. The review covered ba25c0e and 99e1fe8. The reviewer wrote 149c8a2 itself as its fix, so no separate review was done on that commit.

Outcome: approved. No issues remain after the fix below.

Found and fixed

  • Medium: the build still needed the .NET 8 runtime. Octopus.OctoVersion.Tool 0.3.295 only ships a net8.0 build and was run without roll-forward. CI installs only 10.0.x, so the build only worked because the GitHub runner images happen to include .NET 8. Fixed in 149c8a2: the tool is now 1.1.79 and [OctoVersion(Framework = "net10.0")] is set. When both tool versions were run side by side, the JSON and GITHUB_OUTPUT values were identical.

Checked, no problems

  • CI: both the Windows (build.ps1) and Linux (build.sh) jobs pick up the setup-dotnet 10.0.x SDK. Tests still run through VSTest, not Microsoft.Testing.Platform, so the trx logger output in ./TestResults/*.trx that the test reporter reads is unchanged. The nupkg name still matches the push step.
  • Build.cs on Nuke 10: no deprecated APIs remain (CreateOrCleanDirectory, DeleteDirectory and GlobDirectories are current), and removing the FileSystemTasks import is correct.
  • Pack: run locally and not pushed. The package still contains lib/netstandard2.0 and depends on Sprache 2.3.1, so the library is unchanged.
  • .nuke/build.schema.json: the regenerated file is valid and lists all 6 targets.
  • NUnit 4, Test SDK 18, NUnit3TestAdapter 6, FluentAssertions 7: a --no-incremental build shows 0 warnings and 0 errors, and no test code needed changing.
  • No .NET 8 / net8.0 references remain anywhere in the repo.

Left as-is on purpose

  • NU1901/NU1903 warnings: they come from Nuke's own transitive dependencies (NuGet.Packaging 6.12.1, System.Security.Cryptography.Xml 9.0.0). Only the build tool uses them and they don't ship, so it's better to wait for a Nuke update than to add manual pins.
  • The suppressed NuGet.Frameworks 7.9.0.0 load warning: it comes from Nuke's telemetry project parsing on SDK 10.0.401. Nuke catches it and nothing else is affected.

Verification after the fix

  • dotnet test source/JavaPropertiesParser.sln: 58/58 passed
  • ./build.sh --target Test: succeeded, with OctoVersion running from tools/net10.0
  • ./build.sh --target Pack: succeeded

🤖 Generated with Claude Code

@borland
borland merged commit 7721896 into master Oct 9, 2026
2 checks passed
@borland
borland deleted the orion/build-net10 branch October 9, 2026 01:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants