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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requesttarget/vNextTargets the next calendar-version

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions