Description
We need to define how we use git branches, what are the expectations in terms of stability on which branches, from which branches to do releases, how changes propagate between branches, etc.
One option would be to follow the bitcoin model:
They have release branches for release trains such as 0.16 and 0.17, then there is master, and that's it.
A release branch in bitcoin is mostly a stable snapshot. At some point they branch off of master and start polishing, which is mostly finishing the release notes, generating man pages, etc. The release process is outlined in https://github.com/bitcoin/bitcoin/blob/master/doc/release-process.md
Patches for CVEs are backported into the release branches (if applicable).
Here is how their release schedule looks like: bitcoin/bitcoin#14438
Another option would be to follow a devel/master model (see for example one variant in "a successfull git branching model", we might want to use a simplified version, though). One advantage of using master to release from is that it's a stable branch name, so CI or other tooling doesn't have to be reconfigured for each release.
A related aspect is how to handle work which is in progress. While we do want to encourage developers to submit code soon and often, stable branches should not be broken by unfinished code. Feature flags might be one way how to address this, so that code can mature on different schedules in the same branch, that might not work for all features, though.
Activity