feat(aspire): tear down Aspire on test-run abort via session cancellation token - #6292
Conversation
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 6 |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
There was a problem hiding this comment.
Code Review — feat(aspire): tear down Aspire on test-run abort via engine cancellation token
The PR addresses a real gap: Aspire startup was invisible to the run-abort signal, leaving containers leaking and blocking shutdown for the full timeout. The approach is sound. A few concerns worth discussing before merging.
Medium: GlobalContext.CancellationToken naming creates ambiguity
The new public property (GlobalContext.CancellationToken) is named identically to TestContext.CancellationToken, which already exists for per-test cancellation. Both are CancellationToken properties on "context" objects, but with fundamentally different scopes — session vs. per-test.
Ironically, the fixture's own wrapper is called RunCancellationToken, which is already clearer. Leaking CancellationToken onto GlobalContext (vs. the fixture's RunCancellationToken) creates a naming inconsistency in the same PR. Users scanning both contexts will not immediately understand the scope difference.
Suggested names: SessionCancellationToken, RunAbortToken, or (to match the fixture) RunCancellationToken.
This is a public API change, and renaming after the fact requires a deprecation cycle, so it's worth getting right now.
Medium: Fire-and-forget in abort callback silently swallows teardown exceptions
_ = fixture.StopAndDisposeAsync();The comment notes that DisposeAsync awaits the same memoized task, but that's only true if DisposeAsync is actually reached. Under a forced-kill scenario (e.g., the abort timeout fires before session cleanup completes), neither path observes the exception. Teardown errors disappear silently.
Consider logging errors within the callback instead of relying on the outer await:
_abortRegistration = RunCancellationToken.Register(static async state =>
{
var fixture = (AspireFixture<TAppHost>)state!;
fixture.LogProgress("Test run aborted — tearing down Aspire application...");
try { await fixture.StopAndDisposeAsync(); }
catch (Exception ex) { fixture.LogProgress($"Teardown error on abort: {ex.Message}"); }
}, this);(Or use a non-async callback and Task.Run + logging — the key is not swallowing the exception.)
Minor: Abort teardown registered after BuildAsync, missing a window
RegisterAbortTeardown() is called after BuildAsync succeeds. If the run is aborted during BuildAsync, the linked RunCancellationToken will interrupt the build (good), but no abort callback is registered yet. Cleanup then depends entirely on TUnit calling DisposeAsync on the failed initializer.
StopAndDisposeCoreAsync() already handles _app == null gracefully, so RegisterAbortTeardown() could safely be moved to just after the OTLP receiver setup (before CreateAsync). This would eliminate the gap without introducing risk.
Positive observations
- Memoized single-shot teardown (
_teardownTask ??= StopAndDisposeCoreAsync()inside a lock) is the right pattern here. It correctly serialises both the abort-callback path and theDisposeAsyncpath onto the same work. _abortRegistration.Dispose()beforeStopAndDisposeAsync()inDisposeAsyncis correct — it prevents a racing late-firing callback while the memoised task already handles idempotency.CancellationTokenSource.CreateLinkedTokenSource+CancelAfteris cleaner thannew CancellationTokenSource(timeout)and correctly composes the two signals.OperationCanceledExceptioncatch ordering — checkingRunCancellationToken.IsCancellationRequestedfirst so an abort is surfaced as cancellation rather than a misleadingTimeoutExceptionis the right call.- PublicAPI snapshots updated across all four target-framework variants — no gaps.
GlobalContext.CancellationTokendefaults toNoneoutside the engine, so the abort registration becomes a no-op and existing behaviour is unchanged. Well documented.
Code Review — feat(aspire): tear down Aspire on test-run abort via engine cancellation tokenThe PR addresses a real gap: Aspire startup was invisible to the run-abort signal, leaving containers leaking and blocking shutdown for the full timeout. The approach is sound. A few concerns worth discussing before merging. Medium:
|
caff369 to
9e1bbfc
Compare
There was a problem hiding this comment.
Follow-up Review — feat(aspire): tear down Aspire on test-run abort via session cancellation token
The implementation looks correct and the feature fills a real gap. However, the three issues raised in the two previous Claude reviews remain unaddressed. Noting them again here with updated context.
Still Open: TestSessionContext.CancellationToken naming ambiguity
The property is still named CancellationToken on TestSessionContext. TestContext already has a CancellationToken (per-test scope), so users who use both types will see identically-named properties with fundamentally different lifetimes and semantics.
This is a public API change — renaming it after release requires a deprecation cycle. The fixture's own RunCancellationToken (in the same PR) is already a clearer name. SessionCancellationToken would make the scope unambiguous at a glance.
Why it matters: A user who wires up TestSessionContext.Current?.CancellationToken in their own fixture but means the per-test token will get silent, hard-to-debug lifetime bugs because the name doesn't distinguish the scopes.
Still Open: Fire-and-forget in abort callback swallows teardown errors
_ = fixture.StopAndDisposeAsync();The memoized task means DisposeAsync won't repeat the work — but if the process is killed before DisposeAsync is reached (the abort-timeout scenario this PR is specifically trying to defend against), exceptions from StopAndDisposeCoreAsync are lost completely. The user sees no trace of what went wrong with the container teardown.
Suggested fix:
_abortRegistration = RunCancellationToken.Register(static state =>
{
var fixture = (AspireFixture<TAppHost>)state!;
fixture.LogProgress("Test run aborted — tearing down Aspire application...");
_ = Task.Run(async () =>
{
try { await fixture.StopAndDisposeAsync(); }
catch (Exception ex) { fixture.LogProgress($"Teardown error on abort: {ex.Message}"); }
});
}, this);Why Task.Run here: CancellationToken.Register callbacks should not be async (the returned Task is discarded by the registration infrastructure). Wrapping in Task.Run keeps the fire-and-forget behaviour while giving teardown errors somewhere to surface.
Still Open: Abort teardown registration window after BuildAsync
RegisterAbortTeardown() is called after BuildAsync completes. If the run is aborted during BuildAsync, the RunCancellationToken correctly interrupts the build but no abort callback exists yet — cleanup then depends on TUnit calling DisposeAsync on the failed initializer, which may or may not happen promptly.
StopAndDisposeCoreAsync already null-checks _app, so moving RegisterAbortTeardown() to before the CreateAsync call is safe and closes the gap entirely. This is a low-risk, one-line move.
Positive observations (unchanged from prior reviews)
- Memoized single-shot teardown via
_teardownTask ??= StopAndDisposeCoreAsync()inside alockis the right pattern — both the abort-callback andDisposeAsyncpaths converge correctly. _abortRegistration.Dispose()beforeStopAndDisposeAsync()inDisposeAsyncprevents a late-racing callback.CreateLinkedTokenSource+CancelAfteris cleaner thannew CancellationTokenSource(timeout)and correctly composes both signals.- Catch ordering (
RunCancellationToken.IsCancellationRequestedchecked before the timeout branch) means abort surfaces as cancellation, not a misleadingTimeoutException. - All four PublicAPI snapshot files updated — no gaps.
- Token defaults to
Noneoutside the engine so existing tests are unaffected.
The core approach is solid. The naming concern is the one I'd most strongly recommend addressing before merge given it's a public API that can't be changed cleanly after the fact.
9e1bbfc to
7596cef
Compare
feat(aspire): tear down Aspire on test-run abort via session token AspireFixture startup (CreateAsync/BuildAsync/StartAsync and the resource-wait) previously only observed its own ResourceTimeout, so a run abort (Ctrl+C / IDE stop / ProcessExit) could neither interrupt a stuck startup nor stop the application before the process was forcefully killed, leaking containers. Expose the engine-wide abort token on TestSessionContext (populated once in TUnitTestFramework.ExecuteRequestAsync, covering both reflection and source-generated modes) so session-scoped fixtures can observe run cancellation. AspireFixture links it into all startup/wait operations via a virtual RunCancellationToken and registers a single-shot teardown that stops and disposes the application as soon as the run is aborted; DisposeAsync awaits the same task so teardown runs exactly once. The token lives on TestSessionContext (not a per-test context) because a session- or class-scoped fixture outlives any single test; a per-test token would tear the shared application down when its first consuming test ends. RunCancellationToken is virtual for the rare per-test fixture. Abort is distinguished from a genuine resource timeout so it surfaces as cancellation rather than a misleading TimeoutException. @
7596cef to
d85e4ac
Compare
There was a problem hiding this comment.
Third Review — feat(aspire): tear down Aspire on test-run abort via session cancellation token
The current commit (7596cef) has been reviewed previously (twice). All three flagged issues remain unaddressed. Summarising concisely.
1. Naming ambiguity — still open
TestSessionContext.CancellationToken conflicts with the already-public TestContext.CancellationToken (per-test scope). Identically-named properties on parallel context objects with silently different lifetimes is a trap. The fixture's own RunCancellationToken is already the clearer name; SessionCancellationToken on TestSessionContext would also be unambiguous.
This is a public API — renaming it post-merge requires a deprecation cycle.
2. Fire-and-forget swallows teardown exceptions — still open
_ = fixture.StopAndDisposeAsync(); // abort callbackDisposeAsync awaits the memoised task, so teardown exceptions are observed — but only if DisposeAsync is called. This PR's core motivation is the forced-kill scenario where the abort-timeout fires before session cleanup completes. In exactly that scenario, DisposeAsync is never reached and teardown errors disappear silently. A try/catch inside a Task.Run within the callback would surface them via LogProgress.
3. Registration window after BuildAsync — still open
RegisterAbortTeardown() is called after BuildAsync returns. An abort during BuildAsync correctly interrupts the build via the linked RunCancellationToken, but has no callback yet to kick off StopAndDisposeAsync. StopAndDisposeCoreAsync already null-checks _app, so moving the registration to just before CreateAsync is a safe one-line change that closes this window.
Assessment
The overall design — memoised single-shot teardown, linked token + CancelAfter, abort-vs-timeout catch ordering, _abortRegistration.Dispose() before the shared path, CancellationToken.None default outside the engine — is solid. The implementation is correct in the common case.
Issue 1 is the only one I'd block on before merge, because it is an irreversible public API decision. Issues 2 and 3 are lower-risk improvements but would make the error-handling behaviour match the PR's stated goal (graceful teardown even under forced kill).
The engine cancellation token only listened to OS signals (Console.CancelKeyPress for SIGINT, ProcessExit for SIGTERM). When the host drives cancellation itself -- IDE stop, --abort, or a CI runner cancelling the job -- it cancels MTP's ExecuteRequestContext.CancellationToken, which the engine token never observed. As a result, session-scoped fixtures that watch SessionCancellationToken (e.g. AspireFixture) could keep booting after the run was cancelled instead of tearing down promptly. Link context.CancellationToken into the engine token in Initialise. When it fires, the engine token (and thus SessionCancellationToken) fires too. The platform path opts out of the forceful-exit timer via Cancel(armForcefulExit: false) -- the platform owns process shutdown when it is the canceller, and killing the process underneath it would truncate result reporting. The Ctrl+C path keeps the timer (it suppresses default termination and must self-exit).
There was a problem hiding this comment.
Fourth Review — feat(aspire): tear down Aspire on test-run abort via session cancellation token
All three issues raised in the previous three reviews have been addressed in the latest commits.
✅ Issue 1 Resolved: Naming ambiguity
TestSessionContext.SessionCancellationToken — the scope is now unambiguous at a glance. No conflict with TestContext.CancellationToken (per-test). This is the right name for a public API that can't be cleanly renamed post-release.
✅ Issue 2 Resolved: Fire-and-forget now logs teardown errors
_ = Task.Run(async () =>
{
try { await fixture.StopAndDisposeAsync(); }
catch (Exception ex) { fixture.LogProgress($"Teardown error on abort: {ex.Message}"); }
});Teardown errors in the forced-kill path now surface via LogProgress rather than disappearing silently.
✅ Issue 3 Resolved: Registration window before CreateAsync closed
RegisterAbortTeardown() is now called before DistributedApplicationTestingBuilder.CreateAsync, so an abort during early AppHost creation will trigger the callback. The null-safe StopAndDisposeCoreAsync implementation handles the case where _app hasn't been assigned yet.
Second commit: engine-link of MTP platform token
The new EngineCancellationToken.Initialise(CancellationToken platformCancellationToken) change is clean:
_platformRegistrationis correctly disposed inDispose(). A defaultCancellationTokenRegistration(whenCanBeCanceled == false) disposes as a no-op, so the unconditional dispose is safe.- The
armForcefulExit: falsepath for platform-driven cancellation is well-reasoned — the platform owns process lifecycle when it is the canceller, and the forceful-exit timer is only necessary when the engine suppressed the OS default termination (Ctrl+C path). - The guard
Interlocked.CompareExchangealready prevents double-initialisation; the platform registration is set up within that guard, so there is no race.
Overall
This is a solid, well-motivated change. The design — memoized single-shot teardown, linked-token + CancelAfter, abort-vs-timeout catch ordering, SessionCancellationToken defaulting to None outside the engine — is correct throughout. All previously flagged issues are resolved. Ready to merge.
Updated [defaultdocumentation.console](https://github.com/Doraku/DefaultDocumentation) from 1.2.2 to 1.2.5. <details> <summary>Release notes</summary> _Sourced from [defaultdocumentation.console's releases](https://github.com/Doraku/DefaultDocumentation/releases)._ ## 1.2.5 ## Bug fixes - fixed nint and nuint handling (#255) - replaced HTML numeric entities with literal Unicode arrows - [api nuget package](https://www.nuget.org/packages/DefaultDocumentation.Api/1.2.5) - [markdown nuget package](https://www.nuget.org/packages/DefaultDocumentation.Markdown/1.2.5) - [msbuild task nuget package](https://www.nuget.org/packages/DefaultDocumentation/1.2.5) - [dotnet tool nuget package](https://www.nuget.org/packages/DefaultDocumentation.Console/1.2.5) ## 1.2.4 - fixed msbuild task issue (#237) - [api nuget package](https://www.nuget.org/packages/DefaultDocumentation.Api/1.2.4) - [markdown nuget package](https://www.nuget.org/packages/DefaultDocumentation.Markdown/1.2.4) - [msbuild task nuget package](https://www.nuget.org/packages/DefaultDocumentation/1.2.4) - [dotnet tool nuget package](https://www.nuget.org/packages/DefaultDocumentation.Console/1.2.4) ## 1.2.3 - added net10 support for DefaultDocumentation.Console - fixed ValueType appearing in definition constrains - [api nuget package](https://www.nuget.org/packages/DefaultDocumentation.Api/1.2.3) - [markdown nuget package](https://www.nuget.org/packages/DefaultDocumentation.Markdown/1.2.3) - [msbuild task nuget package](https://www.nuget.org/packages/DefaultDocumentation/1.2.3) - [dotnet tool nuget package](https://www.nuget.org/packages/DefaultDocumentation.Console/1.2.3) Commits viewable in [compare view](https://github.com/Doraku/DefaultDocumentation/compare/1.2.2...1.2.5). </details> Updated [Microsoft.NET.Test.Sdk](https://github.com/microsoft/vstest) from 18.6.0 to 18.8.1. <details> <summary>Release notes</summary> _Sourced from [Microsoft.NET.Test.Sdk's releases](https://github.com/microsoft/vstest/releases)._ ## 18.8.1 ## What's Changed * Fix protocol negotiation timeout when STJ reflection is disabled (18.8.1) by @nohwnd in https://github.com/microsoft/vstest/pull/16281 **Full Changelog**: https://github.com/microsoft/vstest/compare/v18.8.0...v18.8.1 ## 18.8.0 ## What's Changed * Migrate from Newtonsoft.Json to System.Text.Json / Jsonite (merge to main) by @nohwnd in https://github.com/microsoft/vstest/pull/15687 - For more detail refer to https://devblogs.microsoft.com/dotnet/vs-test-is-removing-its-newtonsoft-json-dependency/ * Create source-only filter package by @Youssef1313 in https://github.com/microsoft/vstest/pull/15638 * Add ARM64 msdia140.dll support to test platform packages by @nohwnd in https://github.com/microsoft/vstest/pull/15692 * Fix mutex cleanup crash on macOS/Linux by @nohwnd in https://github.com/microsoft/vstest/pull/15684 * Restrict artifact temp directory permissions on Unix by @nohwnd in https://github.com/microsoft/vstest/pull/15729 * Add support for filtering uncategorized tests with TestCategory=None by @Evangelink in https://github.com/microsoft/vstest/pull/15727 * Fix SCI binding failure in DTA hosts (main) by @nohwnd in https://github.com/microsoft/vstest/pull/15724 * Fix HTML logger parallel file collision by @nohwnd in https://github.com/microsoft/vstest/pull/15435 * Improve error message when testhost cannot be found by @nohwnd in https://github.com/microsoft/vstest/pull/16053 * Fix HTML logger exception on invalid XML chars in test display names by @nohwnd in https://github.com/microsoft/vstest/pull/16051 **Full Changelog**: https://github.com/microsoft/vstest/compare/v18.7.0...v18.8.0 ## 18.7.0 ## What's Changed * Add ARM64 msdia140.dll support to test platform packages by @jamesmcroft in https://github.com/microsoft/vstest/pull/15689 * Update System.Memory from 4.5.5 to 4.6.3 by @nohwnd in https://github.com/microsoft/vstest/pull/15706 ## New Contributors * @jamesmcroft made their first contribution in https://github.com/microsoft/vstest/pull/15689 **Full Changelog**: https://github.com/microsoft/vstest/compare/v18.6.0...v18.7.0 Commits viewable in [compare view](https://github.com/microsoft/vstest/compare/v18.6.0...v18.8.1). </details> Updated [Microsoft.SourceLink.GitHub](https://github.com/dotnet/dotnet) from 10.0.300 to 10.0.301. <details> <summary>Release notes</summary> _Sourced from [Microsoft.SourceLink.GitHub's releases](https://github.com/dotnet/dotnet/releases)._ ## 10.0.301 You can build .NET 10.0 from the repository by cloning the release tag `v10.0.301` and following the build instructions in the [main README.md](https://github.com/dotnet/dotnet/blob/v10.0.301/README.md#building). Alternatively, you can build from the sources attached to this release directly. More information on this process can be found in the [dotnet/dotnet repository](https://github.com/dotnet/dotnet/blob/v10.0.301/README.md#building-from-released-sources). Attached are PGP signatures for the GitHub generated tarball and zipball. You can find the public key at https://dot.net/release-key-2023 Commits viewable in [compare view](https://github.com/dotnet/dotnet/compare/v10.0.300...v10.0.301). </details> Updated [nbgv](https://github.com/dotnet/Nerdbank.GitVersioning) from 3.7.115 to 3.10.91. <details> <summary>Release notes</summary> _Sourced from [nbgv's releases](https://github.com/dotnet/Nerdbank.GitVersioning/releases)._ ## 3.10.91 ## What's Changed * Retry file operations on access denied errors by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1408 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.85...v3.10.91 ## 3.10.85 ## What's Changed * Avoid writing server.json multiple times in a single pack by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1391 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.70...v3.10.85 ## 3.10.70 ## What's Changed ### Fixes * Fix case insensitivity for the managed engine on git worktrees, and implement for libgit2 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334 * Fix native heap corruption in GitPackIndexMappedReaderTests by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1360 ### Enhancements * Add prerelease property to inheriting version.json files by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317 * Add NBGV_SetCloudBuildVersionVars property to disable cloud build variable output by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324 * Add --what-if option to prepare-release command for simulating version changes by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242 * Build nbgv CLI tool for .NET 9 and 10 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1369 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.70 ## 3.10.44-alpha ## What's Changed ### Fixes * Fix case insensitivity for the managed engine on git worktrees, and implement for libgit2 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334 ### Enhancements * Add --what-if option to prepare-release command for simulating version changes by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242 * Add NBGV_SetCloudBuildVersionVars property to disable cloud build variable output by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324 ### Dependency updates * chore(deps): update dependency microsoft.build.locator to 1.11.2 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1304 * chore(deps): update dotnet monorepo by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1309 * Update dotnet monorepo by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1338 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.8-alpha...v3.10.44-alpha ## 3.10.8-alpha ## What's Changed * Add prerelease property to inheriting version.json files by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.8-alpha ## 3.9.50 ## What's Changed * Add `versionHeightOffsetAppliesTo` property to version.json by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279 * Fix `nbgv prepare-release` command to honor inheriting version.json files by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281 * Automatically disable git engine for Dependabot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284 * Add --what-if switch to nbgv tag command to preview tag names by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287 * Auto-disable git engine for GitHub Copilot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291 * Allow uppercase letters in pre-release version identifiers by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1293 ## New Contributors * @micheloliveira-com made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.50 ## 3.9.37-alpha ## What's Changed * Auto-disable git engine for GitHub Copilot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.32-alpha...v3.9.37-alpha ## 3.9.32-alpha ## What's Changed * Automatically disable git engine for Dependabot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284 * Add --what-if switch to nbgv tag command to preview tag names by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.17-alpha...v3.9.32-alpha ## 3.9.17-alpha ## What's Changed * Fix `nbgv prepare-release` command to honor inheriting version.json files by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.15-alpha...v3.9.17-alpha ## 3.9.15-alpha ## What's Changed * Add `versionHeightOffsetAppliesTo` property to version.json by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279 ## New Contributors * @micheloliveira-com made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.15-alpha ## 3.8.118 ## Fixes * Don't try to disable CA2243 warnings in the generated version info files for F# by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174 * Catch a more general JsonException. by @ANGEL-OF-DEV in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * Retarget links to migrated docs by @bencemali in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * Check MSBuild items with case insensitivity by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213 * Fix inconsistent CLI output format for GitCommitDate by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246 * Fix version height computed as 0 when project path has non-canonical casing by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244 * When generating the GitCommitDate field in the AssemblyInfo for F#, d… by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253 * Only do Android version check on applications by @dotMorten in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * Fix `nbgv set-version` to write to the best version.json file in scope by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264 ## Enhancements * Add msbuild-provided prerelease identifiers by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153 * Add support for stamping version on server.json for MCP servers with 0.0.0-placeholder replacement by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1270 and by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1271 * Add option to set / skip CloudBuildNumber by @MattKotsenas in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190 * Add Central Package Management (CPM) support to nbgv install command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * Add --public-release argument to nbgv get-version command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245 * Invoke PrivateP2PCaching.proj fewer times by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263 ## Other changes * Update dependency Cake.Core to v5 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183 ## New Contributors * @ANGEL-OF-DEV made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * @bencemali made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * @Copilot made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * @dotMorten made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * @emmanuel-ferdman made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.118 ## 3.8.106-alpha ## What's Changed ### Enhancements * Add option to set / skip CloudBuildNumber by @MattKotsenas in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190 * Add Central Package Management (CPM) support to nbgv install command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * Add --public-release argument to nbgv get-version command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245 * Invoke PrivateP2PCaching.proj fewer times by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263 ### Fixes * Catch a more general JsonException. by @ANGEL-OF-DEV in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * Retarget links to migrated docs by @bencemali in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * Check MSBuild items with case insensitivity by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213 * Fix inconsistent CLI output format for GitCommitDate by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246 * Fix version height computed as 0 when project path has non-canonical casing by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244 * When generating the GitCommitDate field in the AssemblyInfo for F#, d… by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253 * Only do Android version check on applications by @dotMorten in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * Fix `nbgv set-version` to write to the best version.json file in scope by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264 ### Other changes * Update dependency Cake.Core to v5 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183 ## New Contributors * @ANGEL-OF-DEV made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * @bencemali made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * @Copilot made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * @dotMorten made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.38-alpha...v3.8.106-alpha ## 3.8.38-alpha ## Fixes * Don't try to disable CA2243 warnings in the generated version info files for F# by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174 ## Enhancements * Add msbuild-provided prerelease identifiers by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153 ## New Contributors * @emmanuel-ferdman made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.38-alpha Commits viewable in [compare view](https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.10.91). </details> Updated [Nerdbank.GitVersioning](https://github.com/dotnet/Nerdbank.GitVersioning) from 3.7.115 to 3.10.91. <details> <summary>Release notes</summary> _Sourced from [Nerdbank.GitVersioning's releases](https://github.com/dotnet/Nerdbank.GitVersioning/releases)._ ## 3.10.91 ## What's Changed * Retry file operations on access denied errors by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1408 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.85...v3.10.91 ## 3.10.85 ## What's Changed * Avoid writing server.json multiple times in a single pack by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1391 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.70...v3.10.85 ## 3.10.70 ## What's Changed ### Fixes * Fix case insensitivity for the managed engine on git worktrees, and implement for libgit2 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334 * Fix native heap corruption in GitPackIndexMappedReaderTests by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1360 ### Enhancements * Add prerelease property to inheriting version.json files by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317 * Add NBGV_SetCloudBuildVersionVars property to disable cloud build variable output by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324 * Add --what-if option to prepare-release command for simulating version changes by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242 * Build nbgv CLI tool for .NET 9 and 10 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1369 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.70 ## 3.10.44-alpha ## What's Changed ### Fixes * Fix case insensitivity for the managed engine on git worktrees, and implement for libgit2 by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1334 ### Enhancements * Add --what-if option to prepare-release command for simulating version changes by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1242 * Add NBGV_SetCloudBuildVersionVars property to disable cloud build variable output by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1324 ### Dependency updates * chore(deps): update dependency microsoft.build.locator to 1.11.2 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1304 * chore(deps): update dotnet monorepo by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1309 * Update dotnet monorepo by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1338 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.10.8-alpha...v3.10.44-alpha ## 3.10.8-alpha ## What's Changed * Add prerelease property to inheriting version.json files by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1317 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.50...v3.10.8-alpha ## 3.9.50 ## What's Changed * Add `versionHeightOffsetAppliesTo` property to version.json by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279 * Fix `nbgv prepare-release` command to honor inheriting version.json files by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281 * Automatically disable git engine for Dependabot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284 * Add --what-if switch to nbgv tag command to preview tag names by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287 * Auto-disable git engine for GitHub Copilot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291 * Allow uppercase letters in pre-release version identifiers by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1293 ## New Contributors * @micheloliveira-com made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.50 ## 3.9.37-alpha ## What's Changed * Auto-disable git engine for GitHub Copilot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1291 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.32-alpha...v3.9.37-alpha ## 3.9.32-alpha ## What's Changed * Automatically disable git engine for Dependabot environments by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1284 * Add --what-if switch to nbgv tag command to preview tag names by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1287 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.17-alpha...v3.9.32-alpha ## 3.9.17-alpha ## What's Changed * Fix `nbgv prepare-release` command to honor inheriting version.json files by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1281 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.9.15-alpha...v3.9.17-alpha ## 3.9.15-alpha ## What's Changed * Add `versionHeightOffsetAppliesTo` property to version.json by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1279 ## New Contributors * @micheloliveira-com made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1277 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.118...v3.9.15-alpha ## 3.8.118 ## Fixes * Don't try to disable CA2243 warnings in the generated version info files for F# by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174 * Catch a more general JsonException. by @ANGEL-OF-DEV in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * Retarget links to migrated docs by @bencemali in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * Check MSBuild items with case insensitivity by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213 * Fix inconsistent CLI output format for GitCommitDate by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246 * Fix version height computed as 0 when project path has non-canonical casing by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244 * When generating the GitCommitDate field in the AssemblyInfo for F#, d… by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253 * Only do Android version check on applications by @dotMorten in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * Fix `nbgv set-version` to write to the best version.json file in scope by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264 ## Enhancements * Add msbuild-provided prerelease identifiers by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153 * Add support for stamping version on server.json for MCP servers with 0.0.0-placeholder replacement by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1270 and by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1271 * Add option to set / skip CloudBuildNumber by @MattKotsenas in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190 * Add Central Package Management (CPM) support to nbgv install command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * Add --public-release argument to nbgv get-version command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245 * Invoke PrivateP2PCaching.proj fewer times by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263 ## Other changes * Update dependency Cake.Core to v5 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183 ## New Contributors * @ANGEL-OF-DEV made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * @bencemali made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * @Copilot made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * @dotMorten made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * @emmanuel-ferdman made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.118 ## 3.8.106-alpha ## What's Changed ### Enhancements * Add option to set / skip CloudBuildNumber by @MattKotsenas in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1190 * Add Central Package Management (CPM) support to nbgv install command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * Add --public-release argument to nbgv get-version command by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1245 * Invoke PrivateP2PCaching.proj fewer times by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1263 ### Fixes * Catch a more general JsonException. by @ANGEL-OF-DEV in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * Retarget links to migrated docs by @bencemali in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * Check MSBuild items with case insensitivity by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1213 * Fix inconsistent CLI output format for GitCommitDate by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1246 * Fix version height computed as 0 when project path has non-canonical casing by @Copilot in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1244 * When generating the GitCommitDate field in the AssemblyInfo for F#, d… by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1253 * Only do Android version check on applications by @dotMorten in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 * Fix `nbgv set-version` to write to the best version.json file in scope by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1264 ### Other changes * Update dependency Cake.Core to v5 by @renovate[bot] in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1183 ## New Contributors * @ANGEL-OF-DEV made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1191 * @bencemali made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1193 * @Copilot made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1208 * @dotMorten made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1256 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.8.38-alpha...v3.8.106-alpha ## 3.8.38-alpha ## Fixes * Don't try to disable CA2243 warnings in the generated version info files for F# by @Numpsy in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1174 ## Enhancements * Add msbuild-provided prerelease identifiers by @AArnott in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1153 ## New Contributors * @emmanuel-ferdman made their first contribution in https://github.com/dotnet/Nerdbank.GitVersioning/pull/1145 **Full Changelog**: https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.8.38-alpha Commits viewable in [compare view](https://github.com/dotnet/Nerdbank.GitVersioning/compare/v3.7.115...v3.10.91). </details> Updated [NexusLabs.Framework.Analyzers](https://github.com/ncosentino/NexusLabs.Framework) from 0.2.6 to 0.2.9. <details> <summary>Release notes</summary> _Sourced from [NexusLabs.Framework.Analyzers's releases](https://github.com/ncosentino/NexusLabs.Framework/releases)._ No release notes found for this version range. Commits viewable in [compare view](https://github.com/ncosentino/NexusLabs.Framework/commits). </details> Updated [TUnit](https://github.com/thomhurst/TUnit) from 1.53.0 to 1.63.0. <details> <summary>Release notes</summary> _Sourced from [TUnit's releases](https://github.com/thomhurst/TUnit/releases)._ ## 1.63.0 <!-- Release notes generated using configuration in .github/release.yml at v1.63.0 --> ## What's Changed ### Other Changes * fix(mocks): dispatch abstract indexers through the engine instead of calling base by @thomhurst in https://github.com/thomhurst/TUnit/pull/6517 * feat(mocks): experimental compile-time internals access (#6514 Tier 2) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6520 * feat(mocks): make the async-factory Returns alias available below net9.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6518 * +semver:minor - feat(mocks): runtime auto-stubs for interfaces the source generator cannot see by @thomhurst in https://github.com/thomhurst/TUnit/pull/6519 ### Dependencies * chore(deps): update tunit to 1.62.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6508 * chore(deps): update dependency mockolate to 3.4.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6512 * chore(deps): update dependency cliwrap to 3.10.4 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6513 * chore(deps): update dependency stackexchange.redis to 3.0.25 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6522 * chore(deps): update dependency brace-expansion to v5.0.9 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6523 * chore(deps): update dependency microsoft.build.utilities.core to v18 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6525 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.62.0...v1.63.0 ## 1.62.0 <!-- Release notes generated using configuration in .github/release.yml at v1.62.0 --> ## What's Changed ### Other Changes * fix(docs): make Mermaid lifecycle diagrams readable by @thomhurst in https://github.com/thomhurst/TUnit/pull/6485 * fix(mocks): strip nullable annotation from constructor dispatch patterns by @thomhurst in https://github.com/thomhurst/TUnit/pull/6498 * fix(mocks): skip interfaces with inaccessible abstract members by @thomhurst in https://github.com/thomhurst/TUnit/pull/6502 * feat(mocks): accept an async factory in Returns() on async members by @thomhurst in https://github.com/thomhurst/TUnit/pull/6503 * fix(mocks): report TM006 instead of CS1729 for unsubclassable classes by @thomhurst in https://github.com/thomhurst/TUnit/pull/6501 * fix(mocks): emit the setup surface into the globally-imported namespace by @thomhurst in https://github.com/thomhurst/TUnit/pull/6504 * fix(mocks): reference TUnit.Mocks once in snapshot test compilations by @thomhurst in https://github.com/thomhurst/TUnit/pull/6506 * fix(mocks): make generated identifier sanitization injective by @thomhurst in https://github.com/thomhurst/TUnit/pull/6507 ### Dependencies * chore(deps): update tunit to 1.61.38 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6479 * chore(deps): update dependency brace-expansion to v5.0.8 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6478 * chore(deps): update dependency cliwrap to 3.10.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6482 * chore(deps): bump postcss from 8.5.10 to 8.5.22 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6480 * chore(deps): update dependency fscheck to 3.3.4 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6486 * chore(deps): update dependency minimatch to v10.2.6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6490 * chore(deps): update actions/stale action to v11 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6496 * chore(deps): update microsoft.testing to 2.3.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6499 * chore(deps): update mstest to 4.3.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6500 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.38...v1.62.0 ## 1.61.38 <!-- Release notes generated using configuration in .github/release.yml at v1.61.38 --> ## What's Changed ### Other Changes * fix: apply 'unmanaged' constraint handling to remaining source generators by @thomhurst in https://github.com/thomhurst/TUnit/pull/6474 * feat: expose data source attributes on TestContext by @thomhurst in https://github.com/thomhurst/TUnit/pull/6477 ### Dependencies * chore(deps): update tunit to 1.61.35 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6475 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.35...v1.61.38 ## 1.61.35 <!-- Release notes generated using configuration in .github/release.yml at v1.61.35 --> ## What's Changed ### Other Changes * fix(mocks): omit 'struct' constraint when type parameter has 'unmanaged' constraint by @thomhurst in https://github.com/thomhurst/TUnit/pull/6473 ### Dependencies * chore(deps): bump fast-uri from 3.1.2 to 3.1.4 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6466 * chore(deps): update tunit to 1.61.29 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6467 * chore(deps): update dependency verify.tool to v0.8.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6470 * chore(deps): update dependency docusaurus-plugin-llms to ^0.5.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6472 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.29...v1.61.35 ## 1.61.29 <!-- Release notes generated using configuration in .github/release.yml at v1.61.29 --> ## What's Changed ### Other Changes * perf: remove EnumerableAsyncProcessor dependency by @thomhurst in https://github.com/thomhurst/TUnit/pull/6465 ### Dependencies * chore(deps): bump shell-quote from 1.8.4 to 1.10.0 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6462 * chore(deps): bump body-parser from 1.20.5 to 1.20.6 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6461 * chore(deps): bump webpack-dev-server from 5.2.5 to 5.2.6 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6460 * chore(deps): update dependency microsoft.kiota.abstractions to v2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6464 * chore(deps): update tunit to 1.61.23 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6463 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.23...v1.61.29 ## 1.61.23 <!-- Release notes generated using configuration in .github/release.yml at v1.61.23 --> ## What's Changed ### Other Changes * fix(mocks): emit 'where T : default' for interface-constrained generic methods by @thomhurst in https://github.com/thomhurst/TUnit/pull/6458 ### Dependencies * chore(deps): update tunit to 1.61.15 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6450 * chore(deps): update actions/checkout action to v7.0.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6453 * chore(deps): update verify to 31.26.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6454 * chore(deps): update verify to 31.27.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6457 * chore(deps): update react to ^19.2.8 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6459 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.15...v1.61.23 ## 1.61.15 <!-- Release notes generated using configuration in .github/release.yml at v1.61.15 --> ## What's Changed ### Other Changes * feat: Allow disabling the automatic html report upload to upload-artifacts@v7 by @Crashdummyy in https://github.com/thomhurst/TUnit/pull/6447 * fix: stop retrying artifact upload on non-retryable status codes by @thomhurst in https://github.com/thomhurst/TUnit/pull/6449 ### Dependencies * chore(deps): update tunit to 1.61.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6437 * chore(deps): update verify to 31.24.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6438 * chore(deps): update dependency opentelemetry.instrumentation.aspnetcore to 1.17.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6440 * chore(deps): update verify to 31.25.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6442 * chore(deps): update dependency docusaurus-plugin-llms to ^0.5.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6443 * chore(deps): update opentelemetry to 1.17.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6441 ## New Contributors * @Crashdummyy made their first contribution in https://github.com/thomhurst/TUnit/pull/6447 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.61.0...v1.61.15 ## 1.61.0 <!-- Release notes generated using configuration in .github/release.yml at v1.61.0 --> ## What's Changed ### Other Changes * docs: revamp README with feature showcase and auto-updating benchmarks by @thomhurst in https://github.com/thomhurst/TUnit/pull/6430 * docs: align docs homepage messaging with revamped README by @thomhurst in https://github.com/thomhurst/TUnit/pull/6431 * fix(engine): emit ECMA-335 metadata-format type names in TestMethodIdentifierProperty by @thomhurst in https://github.com/thomhurst/TUnit/pull/6433 * fix(benchmarks): make SetupTeardownTests JSON tests Native AOT compatible by @thomhurst in https://github.com/thomhurst/TUnit/pull/6434 * Organize repository into conventional .NET layout by @thomhurst in https://github.com/thomhurst/TUnit/pull/6435 ### Dependencies * chore(deps): update dependency polyfill to v11 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6418 * chore(deps): update dependency tunit.aspire to 1.6* by @thomhurst in https://github.com/thomhurst/TUnit/pull/6419 * chore(deps): update tunit to 1.6* by @thomhurst in https://github.com/thomhurst/TUnit/pull/6420 * chore(deps): update dependency polyfill to 11.0.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6421 * chore(deps): update dependency polyfill to 11.0.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6422 * chore(deps): update verify to 31.24.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6424 * chore(deps): update microsoft.build to 18.8.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6426 * chore(deps): update dependency microsoft.net.stringtools to 18.8.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6425 * chore(deps): update actions/setup-dotnet action to v6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6427 * chore(deps): bump websocket-driver from 0.7.4 to 0.7.5 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6429 * chore(deps): update opentelemetry to 1.17.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6432 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.60.0...v1.61.0 ## 1.60.0 <!-- Release notes generated using configuration in .github/release.yml at v1.60.0 --> ## What's Changed ### Other Changes * feat: cross-process test report aggregation — merged HTML report + single GitHub summary by @thomhurst in https://github.com/thomhurst/TUnit/pull/6415 ### Dependencies * chore(deps): update tunit to 1.59.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6398 * chore(deps): update verify to 31.24.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6399 * chore(deps): update microsoft.testing to 2.3.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6401 * chore(deps): update mstest to 4.3.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6402 * chore(deps): update actions/setup-node action to v7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6403 * chore(deps): update dependency microsoft.net.test.sdk to 18.8.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6404 * chore(deps): update dependency microsoft.net.test.sdk to 18.8.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6405 * chore(deps): update dependency fsharp.core to 10.1.302 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6406 * chore(deps): update dependency microsoft.templateengine.authoring.cli to v10.0.302 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6407 * chore(deps): update dependency microsoft.entityframeworkcore to 10.0.10 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6410 * chore(deps): update dependency dotnet-sdk to v10.0.302 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6409 * chore(deps): update dependency system.commandline to 2.0.10 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6412 * chore(deps): update dependency microsoft.templateengine.authoring.templateverifier to 10.0.302 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6411 * chore(deps): update microsoft.aspnetcore to 10.0.10 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6413 * chore(deps): update microsoft.extensions to 10.0.10 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6414 * chore(deps): update microsoft.extensions to 10.8.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6416 * chore(deps): update dependency polyfill to v11 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6417 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.59.0...v1.60.0 ## 1.59.0 <!-- Release notes generated using configuration in .github/release.yml at v1.59.0 --> ## What's Changed ### Other Changes * Fix typed MethodDataSource provider instances by @thomhurst in https://github.com/thomhurst/TUnit/pull/6378 * Fix instance MethodDataSource isolation by @thomhurst in https://github.com/thomhurst/TUnit/pull/6379 * fix(mocks): CS9262 in generated mock members on VS 17.14 (Roslyn 4.14) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6392 * Remove EqualTo alias documentation by @thomhurst in https://github.com/thomhurst/TUnit/pull/6396 * fix(aspnetcore): guard hosted-service stop against concurrent double Host.StopAsync by @thomhurst in https://github.com/thomhurst/TUnit/pull/6397 * Add single-item assertion chaining by @thomhurst in https://github.com/thomhurst/TUnit/pull/6395 * Improve test framework migrations by @thomhurst in https://github.com/thomhurst/TUnit/pull/6381 * Add -f/--framework support to TUnit template with .NET Framework handling by @thomhurst with @Copilot in https://github.com/thomhurst/TUnit/pull/6262 ### Dependencies * chore(deps): update tunit to 1.58.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6351 * chore(deps): update dependency tunit.core to 1.58.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6352 * chore(deps): update dependency picomatch to v4.0.5 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6354 * chore(deps): update dependency testcontainers.postgresql to 4.13.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6356 * chore(deps): update dependency testcontainers.redis to 4.13.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6357 * chore(deps): update dependency testcontainers.kafka to 4.13.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6355 * chore(deps): update dependency gitversion.tool to v6.8.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6359 * chore(deps): update dependency typescript to v7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6372 * chore(deps): update mstest to 4.3.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6374 * chore(deps): update dependency messagepack to 3.1.8 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6376 * chore(deps): update dependency opentelemetry.instrumentation.runtime to 1.16.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6380 * chore(deps): update dependency vogen to 8.0.6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6382 * chore(deps): update dependency gitversion.tool to v6.8.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6384 * chore(deps): update dependency npgsql.entityframeworkcore.postgresql to 10.0.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6385 * chore(deps): update docusaurus to v3.10.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6386 * chore(deps): update dependency stackexchange.redis to 3.0.17 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6387 * chore(deps): update dependency dompurify to v3.4.12 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6389 * chore(deps): update dependency svgo to v4.0.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6390 * chore(deps): update dependency nsubstitute to v6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6394 * chore(deps): update verify to 31.24.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6367 * chore(deps): update microsoft.testing by @thomhurst in https://github.com/thomhurst/TUnit/pull/6369 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.58.0...v1.59.0 ## 1.58.0 <!-- Release notes generated using configuration in .github/release.yml at v1.58.0 --> ## What's Changed ### Other Changes * feat(aspire): opt-in live forwarding of resource logs into test output (#6341) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6345 * fix(aspire): fail fast on Finished-state crashes during startup (#6342) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6346 * fix(engine): keep per-test timeout token source alive through teardown (#6339) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6349 * feat(aspire): resource-diagnostics helpers + retained log buffer (#6343) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6350 * feat(aspire): surface exception detail in routed OTLP logs (#6347) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6348 ### Dependencies * chore(deps): update tunit to 1.57.17 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6344 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.57.17...v1.58.0 ## 1.57.17 <!-- Release notes generated using configuration in .github/release.yml at v1.57.17 --> ## What's Changed ### Other Changes * fix(engine): reset test cancellation token before After hooks on timeout path (#6339) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6340 ### Dependencies * chore(deps): update tunit to 1.57.14 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6336 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.57.14...v1.57.17 ## 1.57.14 <!-- Release notes generated using configuration in .github/release.yml at v1.57.14 --> ## What's Changed ### Other Changes * fix(engine): apply --treenode-filter to --list-tests by @thomhurst in https://github.com/thomhurst/TUnit/pull/6334 * feat(aspire): dump resource error logs on test failure + warn on missing telemetry wiring by @thomhurst in https://github.com/thomhurst/TUnit/pull/6323 ### Dependencies * chore(deps): update dependency stackexchange.redis to 3.0.11 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6324 * chore(deps): update tunit to 1.57.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6322 * chore(deps): update dependency brace-expansion to v5.0.7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6326 * chore(deps): update dependency polyfill to 10.11.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6327 * chore(deps): update dependency polyfill to 10.11.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6329 * chore(deps): update dependency polyfill to 10.11.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6330 * chore(deps): update dependency polyfill to 10.11.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6331 * chore(deps): update dependency serialize-javascript to v7.0.7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6333 * chore(deps): update dependency gitversion.tool to v6.8.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6335 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.57.0...v1.57.14 ## 1.57.0 <!-- Release notes generated using configuration in .github/release.yml at v1.57.0 --> ## What's Changed ### Other Changes * perf(sourcegen): consolidate per-file ModuleInitializers into merged .cctor (#6226) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6286 * fix: resolve CS0121 IsEqualTo ambiguity on .NET 8 SDK (#6296) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6313 * chore(docs): apply Codacy markdownlint fixes by @thomhurst in https://github.com/thomhurst/TUnit/pull/6284 * fix(mocks): generate mock for qualified-name X.Mock() calls (#6298) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6314 ### Dependencies * chore(deps): update tunit to 1.56.35 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6306 * chore(deps): update dependency stackexchange.redis to 3.0.7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6307 * chore(deps): update dependency opentelemetry.instrumentation.http to 1.16.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6308 * chore(deps): update dependency opentelemetry.instrumentation.aspnetcore to 1.16.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6309 * chore(deps): update dependency qs to v6.15.3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6310 * chore(deps): update dependency polyfill to 10.11.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6312 * chore(deps): update dependency polyfill to 10.11.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6311 * chore(deps): bump http-proxy-middleware from 2.0.9 to 2.0.10 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6303 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.56.35...v1.57.0 ## 1.56.35 <!-- Release notes generated using configuration in .github/release.yml at v1.56.35 --> ## What's Changed ### Other Changes * feat(aspire): tear down Aspire on test-run abort via session cancellation token by @thomhurst in https://github.com/thomhurst/TUnit/pull/6292 ### Dependencies * chore(deps): update tunit to 1.56.25 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6294 * chore(deps): update dependency microsoft.visualstudio.threading.analyzers to v18 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6297 * chore(deps): update dependency microsoft.net.test.sdk to 18.7.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6300 * chore(deps): update dependency microsoft.playwright to 1.61.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6302 * chore(deps): update actions/cache action to v6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6301 * chore(deps): update dependency azure.storage.blobs to 12.29.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6304 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.56.25...v1.56.35 ## 1.56.25 <!-- Release notes generated using configuration in .github/release.yml at v1.56.25 --> ## What's Changed ### Other Changes * feat(aspire): actionable diagnostics when resources fail to start by @thomhurst in https://github.com/thomhurst/TUnit/pull/6293 ### Dependencies * chore(deps): update tunit to 1.56.18 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6285 * chore(deps): update aspire to 13.4.6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6287 * chore(deps): update dependency mockolate to 3.3.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6291 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.56.18...v1.56.25 ## 1.56.18 <!-- Release notes generated using configuration in .github/release.yml at v1.56.18 --> ## What's Changed ### Other Changes * fix(mocks): mock deep interface hierarchies (#6264) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6283 * feat: artifact retention for auto-uploaded HTML report (#6266) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6270 * fix(mocks): forward asymmetric `new`-hidden property slots per-accessor (#6263) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6281 * fix: honor OverloadResolutionPriority on net8 consumers (#6276, #6280) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6282 ### Dependencies * chore(deps): update tunit to 1.56.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6259 * chore(deps): update dependency streamjsonrpc to 2.25.29 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6258 * chore(deps): update aspire to 13.4.5 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6267 * chore(deps): bump launch-editor from 2.12.0 to 2.14.1 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6268 * chore(deps): bump @babel/core from 7.28.5 to 7.29.7 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6269 * chore(deps): update dependency dompurify to v3.4.11 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6271 * chore(deps): update dependency serialize-javascript to v7.0.6 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6272 * chore(deps): update actions/checkout action to v7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6277 * chore(deps): update verify to 31.20.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6278 * chore(deps): bump webpack-dev-server from 5.2.4 to 5.2.5 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6273 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.56.0...v1.56.18 ## 1.56.0 <!-- Release notes generated using configuration in .github/release.yml at v1.56.0 --> ## What's Changed ### Other Changes * fix(aspnetcore): serialize WithWebHostBuilder to stop _derivedFactories race (flaky disposal NRE) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6251 * fix(mocks): wrap a real object whose class has no parameterless ctor (#6253) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6255 * fix(mocks): implement `new`-hidden base interface members in wrapper (#6252) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6256 * fix(mocks): mocking a method with more params than Func/Action arity (#6254) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6257 ### Dependencies * chore(deps): update tunit to 1.55.2 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6248 * chore(deps): update aspire to 13.4.4 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6249 * chore(deps): update dependency stackexchange.redis to v3 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6250 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.55.2...v1.56.0 ## 1.55.2 <!-- Release notes generated using configuration in .github/release.yml at v1.55.2 --> ## What's Changed ### Other Changes * fix(aspire): publish TUnit.Aspire.Core package (#6246) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6247 ### Dependencies * chore(deps): update tunit to 1.55.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6245 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.55.0...v1.55.2 ## 1.55.0 <!-- Release notes generated using configuration in .github/release.yml at v1.55.0 --> ## What's Changed ### Other Changes * feat(aspire): add TUnit.Aspire.Core without TUnit metapackage dependency (#5471) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6243 * fix(analyzers): scope TUnit0031 async-void rule to tests and hooks (#6190) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6244 ### Dependencies * chore(deps): update dependency streamjsonrpc to 2.25.28 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6232 * chore(deps): update tunit to 1.54.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6233 * chore(deps): bump joi from 17.13.3 to 17.13.4 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6234 * chore(deps): update dependency polyfill to 10.9.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6238 * chore(deps): update _tunitpolyfillversion to 10.9.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6237 * chore(deps): update dependency polyfill to 10.10.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6242 * chore(deps): update _tunitpolyfillversion to 10.10.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6241 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.54.0...v1.55.0 ## 1.54.0 <!-- Release notes generated using configuration in .github/release.yml at v1.54.0 --> ## What's Changed ### Other Changes * Generate collection-shape drill-in overloads (#6185) by @thomhurst in https://github.com/thomhurst/TUnit/pull/6218 * feat(mocks): setup/verify on secondary interfaces of multi-type mocks by @thomhurst in https://github.com/thomhurst/TUnit/pull/6230 * perf: reduce allocations in source-gen test building hot paths by @thomhurst in https://github.com/thomhurst/TUnit/pull/6228 * perf: shrink generated TestEntry builder IL via shared TUnit.Core factory helpers by @thomhurst in https://github.com/thomhurst/TUnit/pull/6231 ### Dependencies * chore(deps): update tunit to 1.53.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6199 * chore(deps): update verify to 31.19.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6200 * chore(deps): update dependency messagepack to 3.1.7 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6203 * chore(deps): update dependency fsharp.core to 10.1.301 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6202 * chore(deps): update dependency microsoft.entityframeworkcore to 10.0.9 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6205 * chore(deps): update dependency dotnet-sdk to v10.0.301 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6204 * chore(deps): update dependency microsoft.templateengine.authoring.cli to v10.0.301 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6206 * chore(deps): update dependency microsoft.templateengine.authoring.templateverifier to 10.0.301 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6207 * chore(deps): update microsoft.aspnetcore to 10.0.9 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6209 * chore(deps): update dependency system.commandline to 2.0.9 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6208 * chore(deps): update microsoft.extensions by @thomhurst in https://github.com/thomhurst/TUnit/pull/6211 * chore(deps): update dependency dompurify to v3.4.9 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6213 * chore(deps): bump shell-quote from 1.8.3 to 1.8.4 in /docs by @dependabot[bot] in https://github.com/thomhurst/TUnit/pull/6210 * chore(deps): update dependency polly to 8.7.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6214 * chore(deps): update dependency microsoft.net.stringtools to 18.7.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6215 * chore(deps): update microsoft.build to 18.7.1 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6216 * chore(deps): update opentelemetry to 1.16.0 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6217 * chore(deps): update dependency dompurify to v3.4.10 by @thomhurst in https://github.com/thomhurst/TUnit/pull/6229 **Full Changelog**: https://github.com/thomhurst/TUnit/compare/v1.53.0...v1.54.0 Commits viewable in [compare view](https://github.com/thomhurst/TUnit/compare/v1.53.0...v1.63.0). </details> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Nick Cosentino <nbcosentino@gmail.com>
@
Problem
AspireFixturestartup (CreateAsync/BuildAsync/StartAsyncand the resource-wait) only observed its ownResourceTimeout. It never saw the engines run-abort token, so a request to abort the test run (Ctrl+C, IDE stop,ProcessExit) could not:ResourceTimeout, e.g. 60s), andChange
Expose the engine token on
TestSessionContext. TUnit.Core had no ambient session-scoped cancellation token (the engine token lived only inTUnitServiceProvider). Addedpublic CancellationToken CancellationToken { get; internal set; }toTestSessionContext, populated once inTUnitTestFramework.ExecuteRequestAsync. Both reflection and source-generated modes funnel through that method, so a single wiring covers both. Session-scopedIAsyncInitializerfixtures (containers, distributed apps) can now observe run cancellation.AspireFixture honors it. New
protected virtual RunCancellationToken(defaults to the session token). Linked intoCreateAsync/BuildAsync/StartAsyncand the resource-wait viaCreateLinkedTokenSource(...)+CancelAfter(ResourceTimeout), so an abort interrupts startup promptly.Teardown on abort.
RegisterAbortTeardown()fires a single-shotStopAndDisposeAsync()when the token trips, giving the app a head start on graceful shutdown within the forceful-exit window.DisposeAsyncawaits the same memoized task, so teardown runs exactly once regardless of which path fires first.An abort is distinguished from a genuine resource timeout (the linked token trips both) so it surfaces as cancellation rather than a misleading
TimeoutException.Why the session token (not a per-test one)
AspireFixtureis used as[ClassDataSource<...>(Shared = SharedType.PerTestSession)]and outlives any single test. ItsInitializeAsyncruns lazily, triggered by the first consuming test. A per-test token would be cancelled (and disposed) when that first test ends, tearing the shared application down underneath every later test. The session tokens lifetime matches the fixtures.RunCancellationTokenisvirtualso a genuinely per-test fixture (Shared = None) can fold in its own token.Notes
TestSessionContext.CancellationTokengetter. All 4 Core PublicAPI snapshots updated; net8/9/10 pass.None(CanBeCanceled == false) so the abort registration is a no-op and behavior is unchanged.