1# VIC Branching
2
3This document is used to define a strategy to enable development and testing of
4release candidate, patch found issues, while allowing development of future
5releases by way of branching and tagging.
6
7## Requirements
8
9_(Not in priority order)_
10* To insulate development of future releases from RC / GA testing and development.
11  * Allow development of future releases.
12  * Avoid breaking RC releases while in testing.
13
14_Non requirements_
15* Define how to enable development of new features on MASTER or otherwise.
16* Define how to test RC / GA releases.
17* Define criteria for backporting or forward porting of found bugfixes, features, etc.
18* Define release trains for patching GA released builds.
19* Define release criteria for RC
20
21## Proposal
22
23We can keep changes isolated from RC / GA testing by way of `git` branches.
24
25###Branching###
26* Use [master](http://github.com/vmware/vic) for future release work.
27* Use RC branch (`releases/MAJOR.MINOR.MACRO`) for RC release work.
28  * `TAG` branch for each RC
29  * `TAG` with `MACRO++` for each patch.
30
31###Accounting###
32* Targeting
33  * Bugs found in RC branch need an issue before merging fix to branch targeted to RC, e.g. `targeted/<RC branch name>`
34  * Ideally patch should be merged to `MASTER` first if it exists there too.
35  * Only if issue is targeted for RC, a different PR with the same issue number for the RC branch.
36  * Only close issue after each relevant and targeted release has had a fixed merged to it.  We can use targeting to verify this.
37* Bugs found in `MASTER` or any RC branch need to be tagged, e.g.`exists/<branches>`
38* The release branch will live as long as our support contract exists on that branch, once support sunsets we can remove the branch
39* The CI system will build all branches within the `releases/*` naming convention on push or tag event and publish the binary to our public binary location
40
41```
42
43MASTER -------------------------------------------------->
44           \                                 \
45           0.7----------------                \
46               \              \                \
47               TAG 0.7.1   TAG 0.7.2            \
48                                                 \
49                                                 0.8---->
50
51
52```
53