Skip to content
Purview Dev logo

Release Flow

Stable Build SDK Reviewed 2026-10-28 purview-dev/build-sdk Star on GitHub 1 central-package-management code-style csharp developer-experience developer-tooling devex dotnet msbuild msbuild-sdk nuget project-templates roslyn roslyn-analyzers roslyn-generators tunit xunit

This repository uses the shared Purview.Build pipeline for the full PR/release cycle, and plain dotnet/just commands for focused local work.

  • package.json is the single source of truth for the version. The version field is read by the SDK’s Version Detection logic and applied to Version and PackageVersion for every build and pack.
  • Current package version: read from package.json (just current_version).
dotnet tool restore # install local tools (csharpier, etc.)
just build # dotnet build src/BuildSdk.slnx --configuration Debug
just test # dotnet test with a TUnit tree-node filter
just lint-check # csharpier check
just lint-fix # csharpier format .
just pack # dotnet pack to ./artifacts
just pipeline-pr # restore, build, lint, tests, pack, package validation
just pipeline-local-release # restore, build, lint, tests, pack, local NuGet publish
RecipePurpose
just pipeline-prPR pipeline — restore, build, lint, tests, pack, package validation.
just pipeline-buildBuild pipeline — restore, build, lint, pack, package validation (no tests).
just pipeline-testsTests pipeline — restore, build, lint, tests (no pack).
just pipeline-releaseRelease pipeline — restore, build, lint, tests, pack, publish to NuGet, GitHub release.
just pipeline-local-releaseRelease pipeline with a local NuGet publish (--Release:Mode=LocalNuGet).

The pipeline configuration lives in purview-build.json:

{
"Build": {
"Solution": "src/BuildSdk.slnx",
"TestRoot": "src/tests",
"TestPatterns": "*Tests.csproj",
"TestFilter": "/*/*/*/*/"
},
"PackValidation": {
"RequireSymbolPackage": false
},
"Release": {
"Mode": "None"
}
}
  • PRs — .github/workflows/pr.yml runs the PR pipeline on pull requests.
  • Releases — .github/workflows/release.yml triggers on pushes to main and runs the shared purview-release.yml workflow with release-mode: NuGet, which builds, packs, validates, and publishes the package to NuGet.
  • continuousIntegrationBuild is detected automatically from CI, GITHUB_ACTIONS, or TF_BUILD environment variables for deterministic SourceLink output.
  • Tests use Microsoft.Testing.Platform (global.json sets "runner": "Microsoft.Testing.Platform") and TUnit conventions.
  • CI runs the full suite on ubuntu-latest, so all tests and features must work identically on Windows, Linux, and macOS — never hardcode platform-specific paths in tests or fixtures.
  • The integration harness (ProjectHarness) creates throwaway projects under Path.GetTempPath(); see src/tests/BuildSdk.IntegrationTests/Harness/ProjectHarness.cs.
  • The SDK integration suite can be run on Linux locally via just test-linux (Docker-based).