Skip to content

Rename MSBuildSettings to MsBuildSettings (casing consistency) - #406

Closed
ChrisonSimtian wants to merge 6 commits into
mainfrom
chore/rename-msbuild-settings
Closed

Rename MSBuildSettings to MsBuildSettings (casing consistency)#406
ChrisonSimtian wants to merge 6 commits into
mainfrom
chore/rename-msbuild-settings

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Collaborator

Split out of #393 per @dennisdoomen's review feedback that the combined PR had grown too large to review.

⚠️ Breaking changeMSBuildSettings is public API and this rename ships no transition shim, so it is a hard break. Per the channel model it targets experimental only and is batched to the yearly major cut (CLAUDE.md rule #1).

What this does

Renames the public MSBuild tool-settings type MSBuildSettingsMsBuildSettings, aligning it with the project's PascalCase-acronym convention (MsBuild, not MSBuild). Also drops an unused PropertyInfo parameter from the FormatPlatform formatter.

Touches the type definition (MSBuild.Generated.cs), its extension methods (Tools/MSBuild + CI/TeamCity), MSBuildTasks, and the settings test.

Migration

  • Replace MSBuildSettings with MsBuildSettings in build code. MSBuild(_ => _.Set…()) lambdas are unaffected (the settings type is inferred); only explicit MSBuildSettings-typed locals/fields/configurators need updating.
  • The DotNetMSBuildSettings type (the dotnet msbuild wrapper) is unrelated and is not renamed.

Recorded in CHANGELOG.md under [Unreleased] — 2026.0 → Breaking changes.

Verification

Full dotnet build fallout.slnx succeeds (0 errors).

🤖 Generated with Claude Code

ChrisonSimtian and others added 5 commits May 30, 2026 14:20
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>
@ChrisonSimtian
ChrisonSimtian requested a review from a team as a code owner June 18, 2026 09:07
@ChrisonSimtian ChrisonSimtian added breaking-change Change is breaking — requires major version bump per CLAUDE.md semver policy. target/vCurrent Targets the current version labels Jun 18, 2026
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
ChrisonSimtian force-pushed the chore/rename-msbuild-settings branch from 78f4531 to d6a2b5a Compare June 18, 2026 09:15
@ChrisonSimtian
ChrisonSimtian changed the base branch from experimental to main June 18, 2026 09:45
@dennisdoomen
dennisdoomen deleted the chore/rename-msbuild-settings branch June 20, 2026 17:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking-change Change is breaking — requires major version bump per CLAUDE.md semver policy. target/vCurrent Targets the current version

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant