Fallout-build / Fallout-build/Fallout
Docker-based local NuGet server for pre-merge testing (Tier 3 channel)
- Dominant language
- C#
- Stars
- 154
- Forks
- 19
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 15
Description
Per Chris's channel taxonomy ([RFC #267 comment](https://github.com/ChrisonSimtian/Fallout/issues/267)), this is **Tier 3** — more bleeding-edge than GitHub Packages. Goal: let us and contributors verify a `Fallout.*` change works in a real consumer project *before* it merges, without polluting GitHub Packages with abandoned PR builds.
## Concept
A Docker-based NuGet server runs locally (or in CI ephemeral containers) and accepts pushes of PR-scoped `Fallout.*` builds. A consumer project (`tests/Consumers/Fallout.Consumer.Local/` — already exists as a sentinel) restores from it and exercises the new bits in a real consumer shape, end-to-end, without publishing externally.
Once it works locally, it becomes a CI step on PRs targeting `main` or `release/vN`. The check: "we can build, publish, restore, and consume `Fallout.X.M.P-pr.NNN.SHA` from a clean container."
## Candidates
- **[BaGet](https://github.com/loic-sharma/BaGet)** — open-source .NET NuGet server, official Docker image. Most common self-hosted pick. Lightweight.
- **[NuGet.Server](https://docs.microsoft.com/en-us/nuget/hosting-packages/nuget-server)** — Microsoft's reference impl, ASP.NET-based, less actively maintained.
- **[Sleet](https://github.com/emgarten/Sleet)** — static-file feed (no server process; serve from any HTTP server or S3/Azure Blob). Simpler ops, unusual shape.
- **[ProGet Free](https://inedo.com/proget)** — commercial-ish free tier; UI-heavy.
Recommendation pending evaluation: **BaGet**. Active, official Docker image, simplest path to "stand it up in CI for 5 minutes per PR."
## Acceptance criteria
- [ ] `docker-compose.yml` (or equivalent) at repo root or under `tests/integration/` spins up the chosen server.
- [ ] A `dotnet fallout` target (or script under `tests/integration/`) packs all `Fallout.*` artifacts, pushes to the local server, and exits with the feed URL.
- [ ] The `tests/Consumers/Fallout.Consumer.Local/` sentinel restores against the local feed and builds — likely via a `nuget.config` pointing at `http://localhost:8080/v3/index.json`.
- [ ] PR-scoped versioning: `12.0.0-pr.NNN.YYYYMMDD.SHA` so PR runs don't collide.
- [ ] (Optional) CI integration: a GitHub Actions job running the end-to-end on each PR, separate from `ubuntu-latest`, non-blocking unless we want it to be.
## Future direction (deferred)
Likely the seed for a **devcontainer / Codespaces approach** — contributors clone, open in devcontainer, and the local NuGet server is preconfigured with the rest of the dev env (.NET SDK via `global.json`, `Fallout.Cli` via `.config/dotnet-tools.json`). File the devcontainer follow-up once this base lands.
## Out of scope
- Devcontainer setup (separate follow-up).
- Replacing GitHub Packages — Tier 3 is *additive*, not a replacement for Tier 2.
- Publishing to a public Docker registry — image is for local/CI use only.
Contributor guide
Assessment
This issue has not been assessed yet.