build: Fallout CI, trusted-publishing, spec tests + Scrutor 7.x bump#2
Merged
Merged
Conversation
Modernizes the repo's build/release/test infrastructure to match the TVDB sibling repo (Fallout-generated CI, OIDC trusted publishing, spec tests). Library code and dependency pins are untouched — Scrutor-major/TFM bumps are tracked separately as modernization. CI (Fallout, C#): - build/ Fallout project (Build.cs) with Test + Pack targets; .github/workflows/ build.yml is GENERATED from the [GitHubActions] attribute (never hand-edited). - Polyglot build.cmd/build.sh/build.ps1 bootstrappers; .fallout root marker; .config/dotnet-tools.json (Fallout.GlobalTool + GitVersion, both 10.3.49/6.3.0). - GitVersion.yml, tag-driven: MAJOR tracks compatible Scrutor major, MINOR.PATCH is our internal counter. Removed the old publish-nuget.yml (brandedoutcast). Publishing (hand-written publish.yml, documented exception): - Tag-driven: nuget.org via Trusted Publishing (OIDC, no stored key) + GitHub Packages + a GitHub Release with the .nupkg attached and label-categorized notes (.github/release.yml). Tests (spec-style, no CPM): - tests/Scrutor.Extensions.HttpClient.Specs: 7 xUnit/FluentAssertions specs proving .AsHttpClient()/.AsHttpClient(name) register scanned classes as typed clients (factory wired, named-client config + handler pipeline flow through, transient lifetime, unnamed overload) + a PublicApiGenerator+Verify public-surface baseline. CLAUDE.md documents all of the above. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The `.AsHttpClient()` bridge sits entirely on Scrutor's stable RegistrationStrategy seam, so the 5→7 bump is clean: dependency change only, zero code changes, all 7 specs (incl. the PublicApiGenerator baseline) pass unchanged against Scrutor 7.0.0. - Scrutor `[5.1.2,6.0.0)` → `[7.0.0,8.0.0)`; Microsoft.Extensions.Http upper bound → `<11.0.0` (Scrutor 7 pulls DI abstractions 10.x). - Version convention now 7.x per GitVersion.yml (MAJOR = compatible Scrutor major; 6.x was skipped/never adopted). Fallback version + docs updated. Deferred modernization (discuss first): multi-target TFMs; source-generator rewrite to drop the MakeGenericMethod reflection (the only non-trim/AOT-friendly bit). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Collaborator
Author
|
Added the Scrutor 7.x bump (commit b882c72): dependency |
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.
Brings the repo's build/release/test infrastructure up to the same standard as the TVDB sibling repo. Library code and dependency pins are deliberately untouched — the Scrutor-major / TFM modernization is a separate, follow-up conversation.
1. CI as C# — Fallout generates the workflows
build/Fallout project (Build.cs) withTest+Packtargets..github/workflows/build.ymlis generated from the[GitHubActions]attribute — never hand-edited.build.cmd/build.sh/build.ps1;.falloutroot marker;.config/dotnet-tools.json(Fallout.GlobalTool + GitVersion).publish-nuget.yml(brandedoutcast/publish-nuget).2. Publishing — trusted publishing, GH environment, release + registry
Hand-written
publish.yml(documented exception — not expressible via the pinned Fallout 10.3.49 API). Tag-driven (v*):environment: nuget.org.nuget.pkg.github.com/Chrison-dev)..nupkgattached + label-categorized notes (.github/release.yml).3. Tests — spec-style, no CPM
tests/Scrutor.Extensions.HttpClient.Specs— 7 passing specs:.AsHttpClient(name)registers every scanned class against its matching interface, wires upIHttpClientFactory, flows the named-client config + handler pipeline into the injectedHttpClient, and registers transient..AsHttpClient()(unnamed) registers scanned clients as typed clients.PublicApiGenerator+ Verify public-surface baseline (allow-listing theMicrosoft.Extensions.DependencyInjectionnamespace).Plus
CLAUDE.mddocumenting all conventions.Versioning
GitVersion, tag-driven. Convention: MAJOR tracks the compatible Scrutor major (v5.x → Scrutor 5.x), MINOR.PATCH is our internal counter.
Owner follow-ups before the first tagged release
Scrutor.Extensions.HttpClient(ownerChrison-dev, repoScrutor.Extensions.HttpClient, workflowpublish.yml, envnuget.org).NUGET_USER.Chrison-devorg on nuget.org (the 403 gotcha from TVDB).🤖 Generated with Claude Code