Rename MSBuildSettings to MsBuildSettings (casing consistency) - #406
Closed
ChrisonSimtian wants to merge 6 commits into
Closed
Rename MSBuildSettings to MsBuildSettings (casing consistency)#406ChrisonSimtian wants to merge 6 commits into
ChrisonSimtian wants to merge 6 commits into
Conversation
Seeds the fast/AI lane (ADR-0004). experimental is a non-public NB.GV ref, so builds get -alpha.<height>.g<commit>, sorting below main's -preview. Same core as main (2026.1.0); breaking surface rides [Experimental] until the yearly cut. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…338) * ci: realign triggers to the 3-tier ladder + hygiene (milestone #18) (#330) Implements the trigger/hygiene slice of milestone #18 (CI cost & pipeline structure). #325 (publish-lane realignment) already landed in the ladder PR. - #318/#326 Cross-platform gated to release intent. windows/macos no longer run on main/experimental pushes (or any routine push). They run only on PR-to- release/* or support/*, and on v* tag pushes. ("On main we've got our edge": the ubuntu-latest PR gate + alpha/preview pipelines.) workflow_dispatch is not emitted — the generator only writes it with inputs; GitHub's run re-run covers on-demand cross-platform. - #322 concurrency cancel-in-progress on ubuntu/windows/macos (generator) + experimental.yml + preview.yml. NOT on release.yml (never cancel a publish). - #323/#328 Canonical CI-ignore list (docs/**, .assets/**, **/*.md) on every PR/push trigger. (release.yml is tag-triggered, so path-ignore is N/A there.) - #327 Codified "feature branches run zero CI until PR'd" + the trigger model in docs/agents/conventions.md, with what-not-to-do guards. - #329 Dropped dead 'submodules: recursive' from all checkouts + the generator (no .gitmodules; full build passes without it) and the stale vendor comment. Generated workflows regenerated from build/Build.CI.GitHubActions.cs. Deferred (own follow-ups): #324 split Build/Test/Pack stages; #328 caching deep-dive; #327 automated reflective guard-test (docs guard in place now). Also unblocked publishing separately: the github-packages environment deployment policy now allows experimental/main/release/*/support/* + v* tags. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci: test before publishing on every lane + cache restore-keys (#324, #328) (#331) #324 — experimental.yml and preview.yml ran `dotnet fallout Pack` only, publishing alpha/preview packages WITHOUT running tests. Both now run `dotnet fallout Test Pack` (release.yml + the PR gate already did). One invocation = NUKE's discrete internal stages (Restore → Compile → Test → Pack), failing at the breaking stage; a test failure stops the job before the push step, so untested packages never publish. Separate per-step `dotnet fallout` invocations are avoided on purpose — each re-runs the dependency graph (double-compile); the single invocation is the staged build. #328 — added `restore-keys:` prefix fallback to the hand-written workflows' caches for faster partial restores on key miss. Evaluation: current key (global.json + *.csproj + Directory.Packages.props) is the right dependency set; no packages.lock.json exists to add; build-output (bin/obj) caching deliberately not done (stale-artifact risk). Canonical ignore list (docs/.assets/md) already applied in the trigger PR. Codified both in docs/agents/conventions.md. Deferred: #327 automated reflective guard-test (docs guard already in place). Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…he lanes (#333) (#339) * feat(publish): multi-channel, package-ID-aware publishing surface (#333, FALLOUT001) IPublish gains [Experimental("FALLOUT001")] PublishTargets + a --publish-to selector; Publish now routes one Pack output across multiple feeds via the pure, unit-tested PublishPackageRouter (glob include/exclude by package name). Existing single-source members stay as a back-compat default target. Build.cs wires the two real channels: github-packages (every package incl Nuke.*, keyed by the GitHub token) and nuget.org (Fallout.* only, never Nuke.*, keyed by NUGET_API_KEY) — replacing the legacy single-feed push. - src/Fallout.Components/PublishTarget.cs — PublishTarget record + PublishPackageRouter - tests/Fallout.Components.Tests — 10 router tests (added to fallout.slnx) - docs/experimental-apis.md — FALLOUT001 registered Framework compiles clean (0 errors); router tests green. Workflow rewire to `dotnet fallout Publish --publish-to …` follows once experimental is synced with main. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * ci(publish): dogfood `dotnet fallout Publish` on the alpha/preview lanes (#333) experimental.yml and preview.yml now publish via `dotnet fallout Publish --publish-to github-packages` instead of a hand-rolled `dotnet nuget push` loop. Publish depends on Test + Pack, so one invocation runs Restore → Compile → Test → Pack → Publish as NUKE stages; package routing (Fallout.* + Nuke.* → GitHub Packages) lives in Build.cs IPublish.PublishTargets. The GitHub token is passed via the GitHubToken env. Also restore IPublish.PackagePushSettings + PushSettingsBase (kept for back-compat) so the multi-channel reshape stays additive — the new PublishTargets/PublishTo surface is the only opt-in change, behind [Experimental("FALLOUT001")]. release.yml's publish jobs still use raw nuget push (they're coupled to the artifact handoff + nuget-org approval gate) — dogfooding those is folded into #336. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(publish): make PublishTarget a sealed class so the shim generator skips it CI caught CS0509: the TransitionShimGenerator tried to derive a Nuke.Components shim from the sealed *record* PublishTarget. Sealed classes are skipped by design (SHIM001), but the sealed-record shape slipped past that guard. PublishTarget is a new type with no pre-rename consumers, so skipping its shim is correct; switching record→sealed class hits the documented skip path. We don't use record equality/`with`. Verified: Nuke.Components builds 0 errors (SHIM001 warning only). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test(generators): accept solution-generator snapshot for new Fallout.Components.Tests Adding tests/Fallout.Components.Tests to fallout.slnx makes the StronglyTypedSolution generator emit a Fallout_Components_Tests accessor; update the Verify snapshot to match (one added line — the new project's strongly-typed Solution property). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… (#340) The dogfood `dotnet fallout Publish` run failed with "Publish target 'github-packages' has no API key". The github-packages target resolves its key via From<ICreateGitHubRelease>().GitHubToken → GitHubActions.Token, which reads the GITHUB_TOKEN env var (EnvironmentInfo.GetVariable("GITHUB_TOKEN")). The lane workflows set `GitHubToken` instead, which didn't match (ICreateGitHubRelease is also [ParameterPrefix]-ed, so the unprefixed name wouldn't bind anyway). Set GITHUB_TOKEN. Caught by letting the post-merge experimental publish actually run. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
#346) Feed URL nuget.pkg.github.com/ChrisonSimtian → /Fallout-build (Build.cs IPublish github-packages target, release.yml, consumer docs) + CODEOWNERS → @Fallout-build/maintainers. Sibling of the main repoint (#345). Feed stays PAT-gated (#344). Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Aligns the MSBuild settings type with the project's PascalCase-acronym convention (MsBuild, not MSBuild), matching the surrounding API surface. Split out of #393 so the rename can be reviewed on its own. BREAKING: MsBuildSettings is public API and this rename ships no transition shim, so it is a hard break. It targets experimental and is batched to the yearly major cut per the channel model (CLAUDE.md rule #1). CHANGELOG updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ChrisonSimtian
force-pushed
the
chore/rename-msbuild-settings
branch
from
June 18, 2026 09:15
78f4531 to
d6a2b5a
Compare
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.
Split out of #393 per @dennisdoomen's review feedback that the combined PR had grown too large to review.
What this does
Renames the public MSBuild tool-settings type
MSBuildSettings→MsBuildSettings, aligning it with the project's PascalCase-acronym convention (MsBuild, notMSBuild). Also drops an unusedPropertyInfoparameter from theFormatPlatformformatter.Touches the type definition (
MSBuild.Generated.cs), its extension methods (Tools/MSBuild+CI/TeamCity),MSBuildTasks, and the settings test.Migration
MSBuildSettingswithMsBuildSettingsin build code.MSBuild(_ => _.Set…())lambdas are unaffected (the settings type is inferred); only explicitMSBuildSettings-typed locals/fields/configurators need updating.DotNetMSBuildSettingstype (thedotnet msbuildwrapper) is unrelated and is not renamed.Recorded in
CHANGELOG.mdunder[Unreleased] — 2026.0→ Breaking changes.Verification
Full
dotnet build fallout.slnxsucceeds (0 errors).🤖 Generated with Claude Code