Skip to content

Docker-based local NuGet server for pre-merge testing (Tier 3 channel) #279

Description

@ChrisonSimtian

Per Chris's channel taxonomy (RFC #267 comment), 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 — open-source .NET NuGet server, official Docker image. Most common self-hosted pick. Lightweight.
  • NuGet.Server — Microsoft's reference impl, ASP.NET-based, less actively maintained.
  • Sleet — static-file feed (no server process; serve from any HTTP server or S3/Azure Blob). Simpler ops, unusual shape.
  • ProGet Free — 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesttarget/2027Targets the 2027 calendar-version line. See ADR-0004.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions