Improve fallout-migrate: NuGet-scoped version pin, TFM warning, confirmation prompt#509
Draft
dennisdoomen wants to merge 11 commits into
Draft
Improve fallout-migrate: NuGet-scoped version pin, TFM warning, confirmation prompt#509dennisdoomen wants to merge 11 commits into
dennisdoomen wants to merge 11 commits into
Conversation
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…ajor ResolveFalloutVersionStep now queries NuGet's flat-container index for the latest non-prerelease Fallout.Common release matching the running tool's own major (calendar year), instead of only reading the tool's own AssemblyInformationalVersion. This keeps a migration pinned to what's actually installable without jumping to a newer, potentially breaking yearly major the tool wasn't built against. Falls back to the tool's own version when NuGet can't be reached or has no matching-major stable release yet, and logs via AnsiConsole which path was taken so the resolved version is never a silent guess. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Fallout's tooling is built and tested against .NET 10; a build project still on an older TFM can hit tool incompatibilities that this migration's other, purely textual rewrites won't catch. VerifyBuildTargetFrameworkStep reads _build.csproj's TargetFramework(s) and adds a warning for any moniker that isn't a modern net10.0+ (catching net8.0, net48, netstandard2.0, netcoreapp3.1, etc.). Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
ConfirmMigrationStep runs immediately before RewriteCsprojsStep, the first step that mutates files, and prompts via AnsiConsole.Confirm before letting the migration proceed. Declining sets the new Summary.Cancelled flag, which Migration.Run checks to stop executing further steps, and MigrateCommand returns exit code 1 without printing the (now meaningless) summary. The prompt is skipped for --dry-run (nothing would be written) and when stdin is redirected (CI, piped input, automated tests) since there's nothing to prompt against. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
CsprojRewriter.Rewrite had a single caller (RewriteCsprojsStep). Move its regex fields and Rewrite method directly into the step and delete the now-empty class. Rename the spec file/class to match. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Add BumpDotNetVersionStep: rewrites _build.csproj's TargetFramework(s) to net10.0 and global.json's sdk.version to 10.0.100 during migration, matching the versions Fallout's own tooling targets. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
IT-VBFK
reviewed
Jul 18, 2026
| { | ||
| try | ||
| { | ||
| using HttpResponseMessage response = httpClient.GetAsync(FlatContainerIndex).GetAwaiter().GetResult(); |
Contributor
There was a problem hiding this comment.
Can this be "real async" here?
Collaborator
Author
There was a problem hiding this comment.
Yeah, was thinking about that as well.
BumpDotNetVersionStep previously overwrote any TargetFramework/SDK version that wasn't an exact match, including newer ones. Now it compares against the minimum (net10.0 / 10.0.100) and leaves anything already at or above it untouched. Multi-targeting bumps only the monikers that are behind. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Build projects don't multi-target, so only match the singular TargetFramework element instead of splitting/rejoining a TargetFrameworks list. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
MinimumSupportedMajor (10) had to be kept in sync by hand with TargetFramework (net10.0). Parse it from the constant instead so there's a single source of truth. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Replace the blocking GetAsync(...).GetAwaiter().GetResult() in ResolveFalloutVersionStep with a proper await. IMigrationStep.Execute is now Task ExecuteAsync; Migration.Run is Migration.RunAsync; MigrateCommand is now an AsyncCommand<MigrateSettings>; Program.Main awaits CommandApp.RunAsync. ConfirmMigrationStep now awaits ConfirmationPrompt.ShowAsync instead of the blocking AnsiConsole.Confirm. Steps with no async work simply return Task.CompletedTask. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…nvocation order, tag NuGet requests Extract the modern-moniker regex and IsOlderThanMinimumSupported logic duplicated between BumpDotNetVersionStep and VerifyBuildTargetFrameworkStep into a shared TargetFrameworkMonikers helper. VerifyBuildTargetFrameworkStep now reads BumpDotNetVersionStep.MinimumSupportedMajor instead of maintaining its own separate constant. Reorder ResolveFalloutVersionStep's private methods to match the order they're invoked from ExecuteAsync (assembly, then major, then NuGet). Add a User-Agent header to the NuGet flat-container HttpClient so requests aren't sent as anonymous script traffic. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #508.
Three independent improvements to fallout-migrate's
Migrationpipeline:Fallout.Commonversion from NuGet, scoped to the running tool's own major (calendar year), instead of only reading its ownAssemblyInformationalVersion. Falls back to the tool's own version when NuGet is unreachable or has no matching-major stable release. Logs which path was taken viaAnsiConsole._build.csprojtargets an older .NET than 10, so consumers know to check their build tools before finishing the migration.--dry-runand when stdin is redirected (CI/tests). Declining setsSummary.Cancelled, which stops the pipeline and makesMigrateCommandexit 1.Also bumps
Fallout.Migrateonto the 10.x version line (version.json+AssemblyVersion).