- Implemented PolicyDslValidator with command-line options for strict mode and JSON output. - Created PolicySchemaExporter to generate JSON schemas for policy-related models. - Developed PolicySimulationSmoke tool to validate policy simulations against expected outcomes. - Added project files and necessary dependencies for each tool. - Ensured proper error handling and usage instructions across tools.
		
			
				
	
	
	
		
			3.0 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	NuGet Preview Bootstrap (Offline-Friendly)
The StellaOps build relies on .NET 10 RC2 packages (Microsoft.Extensions.*, JwtBearer 10.0 RC).
NuGet.config now wires three sources:
local→./local-nuget(preferred, air-gapped mirror)dotnet-public→https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public/nuget/v3/index.jsonnuget.org→ fallback for everything else
Follow the steps below whenever you refresh the repo or roll a new Offline Kit drop.
1. Mirror the preview packages
./ops/devops/sync-preview-nuget.sh
- Reads 
ops/devops/nuget-preview-packages.csv. Each line specifies the package, version, expected SHA-256 hash, and (optionally) the flat-container base URL (we pin todotnet-public). - Downloads the 
.nupkgstraight into./local-nuget/and re-verifies the checksum. Existing files are skipped when hashes already match. - Use 
NUGET_V2_BASEif you need to temporarily point at a different mirror. 
💡 The script never mutates packages in place—if a checksum changes you will see a “SHA mismatch … refreshing” message.
2. Restore using the shared NuGet.config
From the repo root:
DOTNET_NOLOGO=1 dotnet restore src/StellaOps.Excititor.Connectors.Abstractions/StellaOps.Excititor.Connectors.Abstractions.csproj \
  --configfile NuGet.config
The packageSourceMapping section keeps Microsoft.Extensions.*, Microsoft.AspNetCore.*, and Microsoft.Data.Sqlite bound to local/dotnet-public, so dotnet restore never has to reach out to nuget.org when mirrors are populated.
Before committing changes (or when wiring up a new environment) run:
python3 ops/devops/validate_restore_sources.py
The validator asserts:
NuGet.configlistslocal→dotnet-public→nuget.orgin that order.Directory.Build.propspinsRestoreSourcesso every project prioritises the local mirror.- No stray 
NuGet.configfiles shadow the repo root configuration. 
CI executes the validator in both the build-test-deploy and release workflows,
so regressions trip before any restore/build begins.
If you run fully air-gapped, remember to clear the cache between SDK upgrades:
dotnet nuget locals all --clear
3. Troubleshooting
| Symptom | Fix | 
|---|---|
dotnet restore still hits nuget.org for preview packages | 
Re-run sync-preview-nuget.sh to ensure the .nupkg exists locally, then delete ~/.nuget/packages/microsoft.extensions.* so the resolver picks up the mirrored copy. | 
| SHA mismatch in the manifest | Update ops/devops/nuget-preview-packages.csv with the new version + checksum (from the feed) and re-run the sync script. | 
| Azure DevOps feed throttling | Set DOTNET_PUBLIC_FLAT_BASE env var and point it at your own mirrored flat-container, then add the URL to the 4th column of the manifest. | 
Keep this doc alongside Offline Kit instructions so air-gapped operators know exactly how to refresh the mirror and verify packages before restore.