Skip to content

Update to .NET 10 SDK, xunit.v3.mtp-v2 + MTP, slnx, SDK-integrated package validation#275

Merged
bartelink merged 6 commits into
masterfrom
copilot/update-dotnet-10-sdk-azure-pipelines
May 6, 2026
Merged

Update to .NET 10 SDK, xunit.v3.mtp-v2 + MTP, slnx, SDK-integrated package validation#275
bartelink merged 6 commits into
masterfrom
copilot/update-dotnet-10-sdk-azure-pipelines

Conversation

Copilot AI commented May 6, 2026

Copy link
Copy Markdown
Contributor

Modernises the build and test stack to .NET 10, replacing the legacy xunit/VSTest pipeline with Microsoft Testing Platform (MTP) and cleaning up accumulated workarounds.

SDK & CI

  • global.json: SDK 10.0.201 + MTP opt-in via "test": { "runner": "Microsoft.Testing.Platform" }
  • azure-pipelines.yml: drop redundant UseDotNet@2 workaround step
  • ci.yaml: actions/checkout@v2@v4; switch build/test to Propulsion.slnx

Test projects

  • Replace xunit + Microsoft.NET.Test.Sdk + xunit.runner.visualstudio with xunit.v3.mtp-v2 (3.2.2) and FsCheck.Xunit.v3 (3.3.3)
  • Target net10.0; add <OutputType>Exe</OutputType> (required by xunit v3)
  • Xunit.Abstractions.ITestOutputHelperXunit.ITestOutputHelper (xunit v3 namespace)
  • FactIfBroker: xunit v3 seals Skip/Timeout on FactAttribute — switch from override to setting properties in the constructor body:
    type FactIfBroker() as self =
        inherit FactAttribute()
        do self.Skip <- if null <> Environment.GetEnvironmentVariable "TEST_KAFKA_BROKER" then null else "Skipping as no TEST_KAFKA_BROKER supplied"
        do self.Timeout <- 60 * 15 * 1000
  • .NET 10 adds int64 overloads to TimeSpan.From*, making bare integer literals ambiguous — resolved with L suffix throughout (e.g. TimeSpan.FromSeconds 1L)

Package validation

  • Remove <Sdk Name="Microsoft.DotNet.PackageValidation" .../> from all 13 library projects
  • Centralise <EnablePackageValidation>true</EnablePackageValidation> in Directory.Build.props (Release only) — SDK-integrated since .NET 8

Solution

  • Propulsion.slnPropulsion.slnx via dotnet solution migrate

…ckage validation

Agent-Logs-Url: https://github.com/jet/propulsion/sessions/39e9f736-defc-4446-9e78-3fd1760f8bce

Co-authored-by: bartelink <206668+bartelink@users.noreply.github.com>
@CLAassistant

CLAassistant commented May 6, 2026

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
1 out of 2 committers have signed the CLA.

✅ bartelink
❌ Copilot
You have signed the CLA already but the status is still pending? Let us recheck it.

Comment thread global.json Outdated
@bartelink
bartelink marked this pull request as ready for review May 6, 2026 07:13
Copilot AI review requested due to automatic review settings May 6, 2026 07:13

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR modernizes Propulsion’s build/test toolchain to .NET 10, migrating test execution to xUnit v3 on Microsoft Testing Platform (MTP), moving the repo to the .slnx solution format, and switching package validation to the SDK-integrated mechanism.

Changes:

  • Upgrade SDK pinning to .NET 10.0.201 and opt dotnet test into Microsoft Testing Platform via global.json.
  • Migrate test projects to net10.0 and xunit.v3.mtp-v2 (+ FsCheck.Xunit.v3 where applicable), including required xUnit v3 API/behavior updates.
  • Replace per-project PackageValidation SDK usage with centralized EnablePackageValidation and update CI/build inputs to use Propulsion.slnx.

Reviewed changes

Copilot reviewed 30 out of 30 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tests/Propulsion.Tests/TestOutputLogger.fs Update output helper type for xUnit v3 namespace.
tests/Propulsion.Tests/SourceTests.fs Resolve .NET 10 TimeSpan.From* literal ambiguities with L suffix.
tests/Propulsion.Tests/SinkHealthTests.fs Resolve .NET 10 TimeSpan.From* literal ambiguities with L suffix.
tests/Propulsion.Tests/Propulsion.Tests.fsproj Move to net10.0, set OutputType=Exe, and switch to xUnit v3 MTP packages.
tests/Propulsion.MessageDb.Integration/Tests.fs Resolve .NET 10 TimeSpan.From* literal ambiguities with L suffix.
tests/Propulsion.MessageDb.Integration/Propulsion.MessageDb.Integration.fsproj Move to net10.0, set OutputType=Exe, and switch to xUnit v3 MTP package.
tests/Propulsion.Kafka.Integration/Propulsion.Kafka.Integration.fsproj Move to net10.0, set OutputType=Exe, and switch to xUnit v3 MTP package.
tests/Propulsion.Kafka.Integration/MonitorIntegration.fs Resolve .NET 10 TimeSpan.From* literal ambiguities with L suffix.
tests/Propulsion.Kafka.Integration/ConsumersIntegration.fs Adjust FactIfBroker to set sealed xUnit v3 properties in constructor.
src/Propulsion/Propulsion.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.SqlStreamStore/Propulsion.SqlStreamStore.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.Prometheus/Propulsion.Prometheus.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.MessageDb/Propulsion.MessageDb.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.MemoryStore/Propulsion.MemoryStore.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.Kafka/Propulsion.Kafka.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.EventStoreDb/Propulsion.EventStoreDb.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.EventStore/Propulsion.EventStore.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.DynamoStore/Propulsion.DynamoStore.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.DynamoStore.Lambda/Propulsion.DynamoStore.Lambda.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.DynamoStore.Constructs/Propulsion.DynamoStore.Constructs.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.CosmosStore3/Propulsion.CosmosStore3.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
src/Propulsion.CosmosStore/Propulsion.CosmosStore.fsproj Remove legacy Microsoft.DotNet.PackageValidation SDK usage.
Propulsion.slnx Introduce .slnx solution format and list projects/files.
global.json Pin .NET SDK 10.0.201 and opt into MTP test runner.
Directory.Build.props Enable SDK-integrated package validation for Release builds.
CHANGELOG.md Document the upgrade/migration changes.
build.proj Adjust dotnet test options for new runner/logging pipeline.
azure-pipelines.yml Remove explicit .NET SDK provisioning step from Linux job.
.github/workflows/ci.yaml Update checkout action and switch build/test to Propulsion.slnx.

Comment thread tests/Propulsion.Tests/Propulsion.Tests.fsproj
Comment thread azure-pipelines.yml
@bartelink
bartelink merged commit 4211817 into master May 6, 2026
5 of 6 checks passed
@bartelink
bartelink deleted the copilot/update-dotnet-10-sdk-azure-pipelines branch May 6, 2026 07:42
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.

4 participants