Skip to content

build: Fallout CI, trusted-publishing, spec tests + Scrutor 7.x bump#2

Merged
ChrisonSimtian merged 2 commits into
mainfrom
feat/fallout-ci-trusted-publishing
Jul 24, 2026
Merged

build: Fallout CI, trusted-publishing, spec tests + Scrutor 7.x bump#2
ChrisonSimtian merged 2 commits into
mainfrom
feat/fallout-ci-trusted-publishing

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Collaborator

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) with Test + Pack targets.
  • .github/workflows/build.yml is generated from the [GitHubActions] attribute — never hand-edited.
  • Polyglot build.cmd/build.sh/build.ps1; .fallout root marker; .config/dotnet-tools.json (Fallout.GlobalTool + GitVersion).
  • Removed the old 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*):

  • nuget.org via Trusted Publishing (OIDC) — no stored API key, environment: nuget.org.
  • GitHub Packages push (nuget.pkg.github.com/Chrison-dev).
  • GitHub Release with the .nupkg attached + label-categorized notes (.github/release.yml).

3. Tests — spec-style, no CPM

tests/Scrutor.Extensions.HttpClient.Specs7 passing specs:

  • .AsHttpClient(name) registers every scanned class against its matching interface, wires up IHttpClientFactory, flows the named-client config + handler pipeline into the injected HttpClient, and registers transient.
  • .AsHttpClient() (unnamed) registers scanned clients as typed clients.
  • PublicApiGenerator + Verify public-surface baseline (allow-listing the Microsoft.Extensions.DependencyInjection namespace).

Plus CLAUDE.md documenting 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

  • nuget.org Trusted Publisher policy for Scrutor.Extensions.HttpClient (owner Chrison-dev, repo Scrutor.Extensions.HttpClient, workflow publish.yml, env nuget.org).
  • Repo variable NUGET_USER.
  • Ensure the package is owned by the Chrison-dev org on nuget.org (the 403 gotcha from TVDB).

🤖 Generated with Claude Code

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>
@ChrisonSimtian ChrisonSimtian added ci Continuous integration / build chore Maintenance / housekeeping labels Jul 24, 2026
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>
@ChrisonSimtian ChrisonSimtian added the feature New feature label Jul 24, 2026
@ChrisonSimtian ChrisonSimtian changed the title build: Fallout CI, trusted-publishing & spec tests build: Fallout CI, trusted-publishing, spec tests + Scrutor 7.x bump Jul 24, 2026
@ChrisonSimtian

Copy link
Copy Markdown
Collaborator Author

Added the Scrutor 7.x bump (commit b882c72): dependency [5.1.2,6.0.0)[7.0.0,8.0.0), aligning the package major with Scrutor (7.x ↔ Scrutor 7.x). Clean bump — zero code/test changes, all 7 specs pass against Scrutor 7.0.0. Cutting v7.0.0-preview.1 after merge to validate the publish pipeline end-to-end.

@ChrisonSimtian
ChrisonSimtian merged commit 5f39c7e into main Jul 24, 2026
1 check passed
@ChrisonSimtian
ChrisonSimtian deleted the feat/fallout-ci-trusted-publishing branch July 24, 2026 02:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore Maintenance / housekeeping ci Continuous integration / build feature New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant