docs/articles/developer-info/Packaging-the-Framework.md
This note describes how to create release packages for the NUnit Framework. Currently, all the builds and packaging must be done on a single Windows machine.
Various software combinations and environments may be used to build NUnit components. The following software is what we have used and tested for building everything and creating the release packages. We'll add options to the list as we find them.
All work on releases should be done on a branch.
git switch main, Pull latest git pullgit switch -c releaseXYZ, where XYZ is the release number, e.g. 4.2.0.git push -u origin releaseXYZmain branch to
allow other team members to review your changes.gh pr create -a rprouse -B release -t "Release 3.13"Close all instances of Visual Studio or other IDE to ensure that no changes are left unsaved.
Do a clean build and run all the tests on Windows. You may use the command below or three separate commands if preferred. If you encounter errors at any stage, you're not actually ready to release!
build --target clean
build --target test
Repeat the build on a Linux system, if available. If this is not possible, be sure to scrutinize the results from the Linux Github actions build carefully. On Linux, you may use the command
build -target=test
Closed without action for questions and issues that were closed without a fix. You can
use the following query to find issues that need to be reviewed: is:issue no:milestone is:closed -label:closed:sep -label:closed:notabug -label:is:question -label:closed:wontfix -label:closed:noresponsefromreporter -label:closed:fixedin_newer_version -label:closed_moved_to_discussion -label:closed:duplicate -label:closed:byDesign
If necessary, update the year in the general copyright notice LICENSE.txt. Note that these copyright notices refer to
each of the packages in their entirety.
Each of the .nuspec files in the nuget subdirectory contains a copyright line, which should also be updated.
The version is given using MinVer. If the version number doesn't match you expected XYZ, you update the version number by adding and pushing a tag in main. Note that this tag has to be on the commit that you're releasing.
If this is to be a non-beta, use the tag in the format X.Y.Z. If it is a beta or alpha X.Y.Z-beta.W.
framework.mdTo generate the change list in the format required, use the GetChanges console app from NUnit.InternalTools which fetches and prints all issues in the given milestone, e.g. for milestone 4.0:
Build a release version of the app, and go to the GetChanges directory. Run the following command, with the appropriate version number and milestone number:
bin\Release\net7.0\getchanges.exe -o nunit -r nunit -l -m 4.2 > changes4.2.md
The -o and -r options specify the owner and repo, respectively.
The -l option includes all links, including those that are closed. The -m option specifies the milestone. If no
milestone is specified, the current milestone is used.
Note: You might need to manually create the NUnit.IssuePr.XYZ link file. It will be automated in the future.
Copy content of the file created to the top of framework.md file in the docs directory.
For any significant changes to how NUnit is used or what it does, the appropriate pages of the documentation should be updated or new pages created. For new features or changes to features, include the version of NUnit that the feature was implemented in.
Push all changes to the files in git as part of the preceding steps. Make sure you have pushed them and they have been reviewed in the PR. Then merge the PR to main. Pull down the changes to your local machine.
Run the action script NUnit.Nuget.Publish. It will build based on the tag of the source code (MinVer), and push that version to Nuget.
The release should not be built on a developers machine, it should be built by the build servers.
The degree to which each package needs testing may vary depending on what has been changed. At a minimum,
Package.zip from the build and extract it locally, or use the ones you built locally.NUnit.{version}.nupkg, NUnit.{version}.snupkg, NunitLite.{version}.nupkg,
NunitLite.{version}.snupkg and NUnit.Framework-{version}.zip.4.2.0. Don't add a v prefix to the tag. MinVer is set up to be used without the prefix. Note that the tag
already exists, as you created it when you pushed the commit, or after that push.Package folder that you downloaded or built locally. Note that we upload all the
packages, including those that are also published on NuGet.NUnit.VERSION.nupkg you created and upload it.NUnitLite.VERSION.nupkg and the two snupkg files.Create a PR to update the NUnit.org website with the release.
Use the _posts folder and add a new one there.
Send notifications to twitter, both for NUnit and for your own, add to your LinkedIn and any other relevant SosMed channels you have.
The milestone representing this release should be closed at this time.