Uno.UI uses GitVersion for its versioning, in mainline
mode for the release/stable
branches, and ContinuousDeployment for the master
branch.
Tagging is the main driver for planning releases.
- On the
master
branch, the main development is happening and is considered unstable. The nuget packages produced end with-dev.X
, where X is the number of commits since the last initiated release. - On the
release/beta
branch, stabilisation occurs to get a stable release. The version is inherited from the branch point from master. The nuget packages produced end with-beta.X
, where X is the number of commits since the last stable release. - On the
release/stable
branch, stable nuget packages are produced for each pushed merge or commit. The Patch number is increased by the number of commits since the release tagging occurred. - On
dev
,feature
, andproject
branches, the behavior is to inherit from the base branch it was created from and create a nuget package with an experimental tag. Those branches must not be tagged.
- Once a release is planned, make a branch in
release/beta
(e.g.release/beta/1.29
), and tag the commit using the requested version (e.g.1.29
). Do not include the patch number, as it will be added by GitHub when publishing a release. Tagging will automatically increased the version in themaster
branch by a minor number. - Make stabilisation fixes to the
release/beta/1.29
branch. - Once the stabilization fixes are done, take the last
release/beta/1.29
commit and make arelease/stable/1.29
branch. Commits to this branch will automatically keep the1.29
version, as the base beta branch was tagged1.29
. - Publish the release on GitHub using the patch number (e.g.
1.29.0
if there where no changes)
- Once a release is planned, make a branch in
release/stable
(e.g.release/stable/1.29
), and tag the commit using the requested version (e.g.1.29
). Tagging will automatically the version in themaster
increased by a minor number. - Commits to
release/stable/1.29
will automatically keep the1.29
version. - Publish the release on GitHub using the patch number (e.g.
1.29.0
if there where no changes)
A 'canary' in Uno parlance is a version of a real-world application (or class library) that is used to test changes to Uno. There are continuous integration (CI) pipelines configured that consume the latest development builds of Uno and produce new nightly canary versions of applications (eg Calculator, UADO etc). If the builds of these applications fail then then it's an early signal that overnight a breaking compilation change may have been accidentally introduced into Uno. This style of regression (binary breaking change) is rare as there are API approval tests that are run on every pull-request to master. Typically if a regression slips in then it's something that only integration testing would have picked up - ie. package incompatility between dependencies.
The Uno team does manual QA on canary failures to determine the differences between the canary build and the previous stable version of Uno. Fixes to regressions are resolved as quickly as possible by the team.