Skip to content

chore(ci): Linux-only validation on PRs; full matrix only on main#12

Merged
ChrisonSimtian merged 1 commit into
chore/drop-qodanafrom
chore/ci-linux-only-on-prs
May 18, 2026
Merged

chore(ci): Linux-only validation on PRs; full matrix only on main#12
ChrisonSimtian merged 1 commit into
chore/drop-qodanafrom
chore/ci-linux-only-on-prs

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Collaborator

Summary

Previously every push to a non-main branch and every PR triggered Test+Pack on Ubuntu and Windows and macOS in parallel — 3× the runtime and credits per change. Cross-OS coverage matters more on what's actually shipping, less on every in-flight branch.

Stacked on #11. Update base after that merges.

New behavior

  • `ubuntu-latest.yml` — unchanged (push to non-main, PRs to main, paths-ignore for docs/images/markdown). Fast Linux feedback loop.
  • `windows-latest.yml`, `macos-latest.yml` — trigger only on push to main (post-merge + the release pipeline coming in the Nerdbank PR).

Trade-off

A cross-OS regression now lands on main before it's caught, and gets fixed on a follow-up branch instead of being blocked at PR time. Acceptable for an enterprise-CI/CD platform that needs cheap, fast pre-merge signal; the post-merge check still catches it before any release ships.

If a particular PR touches OS-sensitive code (path handling, process invocation, ANSI), the author can manually push a temp branch named `-windows` / `-macos` and add a one-off workflow_dispatch — or just open the PR and rely on Linux + reviewer judgment.

Test plan

  • `dotnet build build/_build.csproj` — 0 errors
  • Verify on this PR that only `ubuntu-latest` triggers
  • After merge to main, verify windows-latest and macos-latest run post-merge

🤖 Generated with Claude Code

Previously every push to a non-main branch and every PR triggered
Test+Pack on Ubuntu, Windows, and macOS in parallel — 3x the runtime
and credits per change. Cross-OS coverage matters more on what's
actually shipping, less on every in-flight branch.

New behavior:
- ubuntu-latest.yml: triggers as before (push to non-main, PRs to main,
  paths-ignore for docs/images/markdown) — fast Linux feedback loop.
- windows-latest.yml, macos-latest.yml: trigger only on push to main
  (post-merge / release pipeline).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ChrisonSimtian ChrisonSimtian merged commit 7eb1132 into chore/drop-qodana May 18, 2026
1 check passed
ChrisonSimtian added a commit that referenced this pull request May 18, 2026
@ChrisonSimtian ChrisonSimtian deleted the chore/ci-linux-only-on-prs branch May 18, 2026 04:02
ChrisonSimtian added a commit that referenced this pull request Jun 3, 2026
…on step 5a)

Establishes Fallout.Kernel, the innermost shared ring (ADR-0006). The shared
utility/IO layer moves from Fallout.Common.Utilities* / Fallout.Common.IO to
Fallout.Kernel / .Collections / .IO / .Net: pure helpers (collections, string/
text, reflection, crypto, JSON/YAML, guards), the AbsolutePath/RelativePath
value types AND their fluent filesystem operations, plus HTTP/compression
helpers.

Filesystem is treated as a kernel-level capability (like the BCL File/Directory):
the fluent AbsolutePath API (.ReadAllText/.GlobFiles/.CreateDirectory/…) is used
pervasively across the Application ring, so routing it through ports would be
impractical and anti-ergonomic — it lives in Kernel, not Infrastructure. Pushing
the genuinely-external adapters (HTTP/FTP, compression) further out to
Infrastructure is deferred for the same reason (same ports decision as the
filesystem API). The Application⊥Infrastructure fitness gate still passes.

Native consumers rewrite `using Fallout.Common.Utilities;` → `using Fallout.Kernel;`
(and .Collections/.Net) and `using Fallout.Common.IO;` → `using Fallout.Kernel.IO;`.
Assembly/project files unchanged; only namespaces moved (the Fallout.Utilities →
Fallout.Kernel project rename rides the deferred project-rename step). A few
root-Fallout.Common guards (Assert/NotNull/EnvironmentInfo) stay in the
dissolving catch-all for now and fold into Kernel later.

Tooling: OnionRewriter rules retargeted for 5a. A handful of files the workspace
didn't fully analyse were mopped up by hand (skipping package consumers and the
Migrate rebrand fixtures, re-adding lost-ancestor usings) — see lesson #12.

Full suite green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
ChrisonSimtian added a commit that referenced this pull request Jun 3, 2026
…/etc → Fallout.Kernel

Four pure-utility types in the Fallout.Utilities (Kernel) project were left
in the Fallout.Common namespace when step 5a moved everything else to
Fallout.Kernel (the lesson-#12 workspace-load gap): EnvironmentInfo (5
files), Assert, AsyncHelper, ArgumentParser. Move them to Fallout.Kernel
via OnionRewriter (pass 2, source assembly = Fallout.Utilities only so the
surviving-namespace scan still sees Fallout.Common alive in the
Fallout.Common project and keeps live `using Fallout.Common;` directives).
~180 files of reference churn (Assert/.NotNull() is pervasive).

Two rewriter blind-spots fixed by hand:
- Fallout.ProjectModel files carried `using Fallout.Common;` that only ever
  resolved because Fallout.Utilities declared those Common-namespace types;
  ProjectModel doesn't reference the Fallout.Common assembly, so the using
  dangled (CS0234) once they moved. The rewriter can't see assembly-ref
  graphs — replaced/dropped the stale usings (Kernel was already imported).
- CITest.cs gained `using Fallout.Kernel;` (for .NotNull()), colliding
  Fallout.Kernel.Assert with Xunit.Assert — aliased the bare name to Xunit's.

Companion edits: template + cake ClassRewriter EnvironmentInfo import →
Fallout.Kernel; re-accepted 7 cake snapshots. Full suite + dogfood
./build.sh Compile green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant