feat(testing): docker-based local nuget server for tier 3 channel - #287
Merged
Conversation
Adds a minimum-viable BaGet docker-compose setup under tests/integration/ so maintainers can stand up a localhost NuGet feed, push Fallout.* builds to it, and validate consumption from a real project before merge — without polluting the GitHub Packages (Tier 2) feed with abandoned PR builds. Refs #279 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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.
Summary
Minimum-viable Tier 3 release channel: a Docker-based local NuGet server for pre-merge testing of
Fallout.*changes. Lets a maintainer (and, later, CI) verify a change works in a real consumer project before merge, without polluting the GitHub Packages (Tier 2) feed with abandoned PR builds.Refs #279.
Tool choice: BaGet (with caveat)
BaGet — open-source .NET NuGet server, official Docker image. The issue nominated it and I confirmed it's still the right shape for "
docker compose upand push a package":Sleet was the considered alternative: actively maintained (last commit March 2026), but it's a static-file feed generator — it doesn't host an HTTP endpoint itself, so you'd need a separate web server (nginx) to serve files, plus a different push workflow. Doesn't fit the "spin up a server with docker compose" shape the issue describes.
Sticking with BaGet for v11. The client-side workflow (push to a NuGet v3 URL, restore from it) is feed-agnostic, so swapping to a maintained alternative later won't break anything documented here. A follow-up to track that swap may be worth filing — flagging for Chris's call.
What's in this PR
tests/integration/docker-compose.yml— BaGet on127.0.0.1:5555, FileSystem storage, SQLite metadata DB, API key auth (env-overridable, defaults toFALLOUT_LOCAL_DEV), named volumefallout-local-nuget-datafor persistence.tests/integration/README.md— start/stop/push/consume instructions, deferred-items list linking Docker-based local NuGet server for pre-merge testing (Tier 3 channel) #279.Compose-file location
Chose
tests/integration/(the brief's preferred option) since this is a testing aid that fits alongside the existing tests tree, and the directory doesn't yet exist so there's no namespacing conflict.Notable decisions
127.0.0.1only — this is dev/CI, never externally exposed.FALLOUT_LOCAL_DEVdocumented in README; overridable viaFALLOUT_LOCAL_NUGET_API_KEYenv var before compose-up.fallout-local-nuget-data) so packages survivedocker compose downand only get wiped on explicitdown -v.*.nupkg) cover it without adding a maintenance surface. Adotnet fallouttarget is the better long-term home for that automation per the issue's acceptance criteria; deferred.Out of scope (per issue #279)
tests/Consumers/Fallout.Consumer.Local/to restore from the local feed.Fallout.X.M.P-pr.NNN.YYYYMMDD.SHA).dotnet fallouttarget that packs-and-pushes allFallout.*artifacts.All flagged as follow-ups in the README; #279 stays open to track them.
Test plan
docker compose -f tests/integration/docker-compose.yml up -dstarts BaGet without error.curl http://localhost:5555/v3/index.jsonreturns the NuGet v3 service index.dotnet packaFallout.*project, thendotnet nuget push --source http://localhost:5555/v3/index.json --api-key FALLOUT_LOCAL_DEVsucceeds.--api-key(or with the wrong key) is rejected.dotnet restore --source http://localhost:5555/v3/index.jsonthe pushed package.docker compose downthenup -dagain — package still present (named volume persists).docker compose down -v— package wiped, server starts clean.(I didn't run these — the worktree may not have Docker installed and the brief explicitly says config + docs is the deliverable, not a running container.)