Now that the number of downloads of Fluent Assertions is about to cross the magic number of 1 million downloads, and the library is quite feature complete, it is time to rethink the release strategy. Since its inception we’ve always used a separate branch for working on future features and improvements, and then used dogfooding before the final release was done. After we switched to Git, GitHub, and PSake, we automated the entire development pipeline and embraced Vincent Driessen’s GitFlow as a formal release strategy. In particular, we used to use the develop branch for upcoming features, a release- branch for dogfooding or beta releases, and the master branch to represent what’s on NuGet.
Technically, shipping a new version requires nothing more than merging a pull request and tagging a commit on the master branch. Versioning, packaging and everything else that is needed to build a nuget package is completely automated. And there’s more than enough unit tests to guarantee the quality, so dogfooding is an exception these days. The only thing left is to create some release notes, but even that can be automated these days.