Releases¶
Here are the procedures for when it's time to bump versions and issue a new release.
Prerequisites¶
- All changes intended for the release must be merged into
master. - The target release version must be established in IssueTracker.
- The target release in IssueTracker must have at least one associated, release-relevant work item.
- All work items tied to the target release in IssueTracker must be resolved.
Procedure¶
- Pull
master, and cut a new branchrelease/vX.Y.Z, whereX.Y.Zis the version that will be associated with the release.
NOTE: There must not be either (1) a preexisting tag
in the project with the name vX.Y.Z or (2) a preexisting
release in the project with the tag vX.Y.Z
- Add an empty commit
git commit --allow-empty -m "Release X.Y.Z"
If there are no other changes to commit, this empty commit ensures that the Pull Request has at least one commit.
-
Push the branch.
-
Create a Pull Request from the release branch into
master. -
Wait for the pipeline to finish. It will
- Verify via
dotnet formatthat the code is properly formatted. - Run the test suite.
- Validate that there is at least one message for the changelog (see Prerequisites).
- Validate that the release version is not already resolved.
-
Build documentation strictly and test its release deployment policy.
-
Complete the Pull Request. The subsequent pipeline will
- Attach the release tag
vX.Y.Zto the merge commit. - Build the application, packages and documentation from that tag.
- Publish the application with the new version for all currently-supported platforms (currently
linux-x64,win-x64, andosx-arm64). - Upload the published artifacts.
- Pack and publish the Core, provider, and Hosting NuGet packages and their
matching
.snupkgsymbol packages. - Create a release for version
X.Y.Zwith the corresponding tag and link the published artifacts. - Deploy documentation to GitHub Pages only after successful release finalization and only if this is the highest published stable version.
NuGet Symbols¶
Each library produces a .nupkg and a matching .snupkg with portable PDBs.
The pack job checks that the symbol archive exists for every package. Normal
packages are pushed to GitHub Packages and NuGet.org with automatic symbol
upload disabled; a separate step pushes the .snupkg files to NuGet.org using
the same NuGet login. Package and symbol pushes allow duplicate uploads during
re-releases.
Documentation Deployment¶
The site describes the latest stable release rather than the current master
branch. Pre-release versions do not update it. Deployments are serialized, and
the version check runs immediately before deployment. Therefore, an older re-release or
a slower older workflow cannot roll the site back.
Manual releases use the same tag-based source selection and documentation deployment policy. Re-releasing the latest stable version can refresh its site; re-releasing an older version cannot replace newer documentation.