Binary Prerequisites & Offline Layout
Layout (authoritative)
local-nugets/— single source for NuGet: holds curated.nupkgand the restored packages cache inlocal-nugets/packages/; seelocal-nugets/manifest.jsonfor hashes of the.nupkginputs.vendor/— pinned binaries/CLIs tracked viavendor/manifest.json.offline/feeds/— air-gap bundles (tarballs, OCI layers, SBOM packs) registered inoffline/feeds/manifest.json.- Module-owned binaries (currently
plugins/,tools/,deploy/,ops/) are tracked for integrity invendor/manifest.jsonuntil relocated.
Adding or updating NuGet packages
- Place
.nupkgintolocal-nugets/and updatelocal-nugets/manifest.json(use the manifest script inscripts/if available or recompute hashes manually). - Run
dotnet restore --source local-nugets(or setOFFLINE=1) to populate.nuget/packages/. - Never add new feeds to
NuGet.configwithout review; the default feed order islocal-nugetsfirst, thennuget.orgfor online builds.
Adding other binaries
- Prefer building from source; if you must pin a binary, drop it under
vendor/(oroffline/feeds/for air-gap bundles) and append an entry with SHA-256, origin URL, version, and intended consumer. - For module-owned binaries (e.g., plugins), record the artefact in
vendor/manifest.jsonuntil it can be rebuilt deterministically as part of CI.
Automation & Integrity
- Run
scripts/update-binary-manifests.pyto refreshlocal-nugets/manifest.json,vendor/manifest.json, andoffline/feeds/manifest.jsonafter adding binaries. - Run
scripts/verify-binaries.shlocally; CI executes it on every PR/branch to block binaries outside approved roots. - CI also re-runs the manifest generator and fails if the manifests would change—commit regenerated manifests as part of the change.
- Restore uses the single location:
dotnet restore --source local-nugetswithglobalPackagesFolder=local-nugets/packages(configured inNuGet.config). Clean by removinglocal-nugets/packages/if needed. - For offline enforcement, set
OFFLINE=1(CI should fail if it reachesnuget.orgwithoutALLOW_REMOTE=1).
Housekeeping
- Do not resurrect
local-nuget/; the single source of truth islocal-nugets/. - Refresh manifests when binaries change and record the update in the current sprint’s Execution Log.