Early-warning canary for Fallout. It consumes Fallout's published GitHub Packages -preview feed exactly like a real user would — references the packages, runs real builds — to catch regressions that the framework's own unit tests can't:
- packaging gaps (
Packproduces a package that doesn't actually restore/build for a consumer); - source generators that work against a project reference but not against the packaged analyzer;
- the
dotnet falloutglobal tool failing to install or run; - the
Nuke.*→Fallout.*transition shims failing to compile/run for a mid-migration consumer.
If a scenario's build breaks, the canary opens (or updates) an issue here, labelled canary-failure, and auto-closes it when the scenario goes green again.
This repo contains no product code — only consumer projects that exercise the released artifacts. The design rationale lives in
docs/DESIGN.md.
release on Fallout (-preview → GitHub Packages)
│ repository_dispatch: fallout-preview-published
▼
canary CI ──┬── scenario: minimal ─┐
(also runs ├── scenario: transition-shims ├─ each = a real consumer build
nightly + └── … ─┘ floated to the latest -preview
on demand)
│
├─ all green → close any open canary-failure issues
└─ a scenario fails → open/update its canary-failure issue
- Triggers:
repository_dispatchfrom Fallout's release on every-previewpublish (fast feedback) + a nightly schedule (safety net) + manualworkflow_dispatch. - Floating: scenarios reference
2026.1.*-*, so every run pulls the newest-preview. The resolved version is printed in each run's log. - Isolation: one CI job per scenario (
fail-fast: false) — one broken scenario doesn't mask the others.
| Tier | Scenario | Asserts |
|---|---|---|
| 0 — smoke | minimal |
Fallout.Common restores from the feed; a build with Restore/Compile targets compiles (source generator ran) and drives the dotnet tool wrapper. |
| 2 — compat | transition-shims |
A build authored against the legacy Nuke.* namespaces (class Build : NukeBuild) compiles and runs against the Nuke.Common shim package. |
Tiers 1 (tool wrappers, global tool) and 3 (large target graph, multi-solution, IDE tooling) are sketched in the design doc and land incrementally.
- Create
scenarios/<name>/with a Fallout consumer build atscenarios/<name>/build/_build.csprojand aBuild.cswhose default target is what you want exercised. - Reference the released package(s) with a floated version:
Version="2026.1.*-*". - Add
<name>to thescenariomatrix in.github/workflows/canary.yml.
A scenario "passes" when its build exits 0. For stronger guarantees, add assertions on the build output inside the build's targets (fail the target if an expected artifact/member is missing).
# A PAT with read:packages on the Fallout-build org:
export FALLOUT_PACKAGES_TOKEN=ghp_xxx
dotnet run --project scenarios/minimal/build/_build.csproj