|
| 1 | +# gluster-kubernetes Release and Maintenance Policies |
| 2 | + |
| 3 | +This document outlines the release and maintenance policies of the |
| 4 | +gluster-kubernetes project. |
| 5 | + |
| 6 | +## Maintained Branches |
| 7 | + |
| 8 | +The project will only support and actively maintain two branches, `master` and |
| 9 | +the latest release branch. The latest release branch will always be reachable |
| 10 | +by two HEADs, either `<VERSION>-stable` or just `stable`. Requests for support |
| 11 | +of older branches may be considered on a case-by-case basis, but users will be |
| 12 | +encouraged to use newer versions where possible. |
| 13 | + |
| 14 | +## Version Numbering |
| 15 | + |
| 16 | +This project follows the versioning guidelines outlined by the [Semantic |
| 17 | +Versioning specification, version 2.0.0](http://semver.org/spec/v2.0.0.html). |
| 18 | +In short, versions numbers will follow the structure `<MAJOR>.<MINOR>.<PATCH>`, |
| 19 | +with the following definitions: |
| 20 | + |
| 21 | + * MAJOR version indicates a fundamental change to the structure of the |
| 22 | + project, often due to innovations from significant changes in the component |
| 23 | + projects. Major versions will typically not be compatible with older |
| 24 | + versions of the component projects. |
| 25 | + * MINOR version indicates a major feature, a broad set of changes, and/or new |
| 26 | + releases of the component projects. Minor versions retain the following |
| 27 | + compatibility guarantees: |
| 28 | + 1. Component projects from the last MAJOR release will still work with the |
| 29 | + current code. |
| 30 | + 2. Deployments made with the current code will not conflict with other |
| 31 | + deployments made since the last MAJOR release. |
| 32 | + * PATCH version indicates backwards-compatible bug fixes, and guarantees that |
| 33 | + the versions of the component projects has not changed. |
| 34 | + |
| 35 | +## Branch Definitions and Structure |
| 36 | + |
| 37 | +The `master` branch will always contain the latest development code. The |
| 38 | +project guarantees that this branch will be functional and tested but not |
| 39 | +bug-free. It will always track the latest versions of all component projects |
| 40 | +and makes no guarantee of backwards compatibility to older versions of those |
| 41 | +projects or itself. |
| 42 | + |
| 43 | +The `stable` branch will track the latest stable release of the code. When a |
| 44 | +new release is made, the `stable` branch will be moved to follow the new |
| 45 | +release branch. |
| 46 | + |
| 47 | +Each MAJOR and MINOR release will get its own branch, forked from `master`. |
| 48 | +Each release branch name will be of the form `<version>-latest`, e.g. |
| 49 | +`1.0-latest`. PATCH releases to those versions will be made in those branches, |
| 50 | +and will be marked by tags of the form `v<version>`, e.g. `v1.0.0`. PATCH |
| 51 | +releases may contain more than one commit, depending on the whimsy of the |
| 52 | +release engineers. :) |
| 53 | + |
| 54 | +Commits to a release branch will be of the following types, ranked in order of |
| 55 | +preference: |
| 56 | + |
| 57 | + 1. Direct cherry-picks from `master` (`git cherry-pick -sx`) |
| 58 | + 2. Cherry-picks from `master` modified to resolve conflicts (change `cherry |
| 59 | + picked from commit` to `based on commit`) |
| 60 | + 3. Custom patches |
| 61 | + |
| 62 | +An example git history is presented below. |
| 63 | +``` |
| 64 | +* I (master) |
| 65 | +| |
| 66 | +* H * H' (1.1-latest, stable) tag: v1.1.0 |
| 67 | +| | |
| 68 | +| * G |
| 69 | +| | |
| 70 | +| / |
| 71 | +| / |
| 72 | +| / |
| 73 | +|/ |
| 74 | +* F * F' (1.0-latest) tag: v.1.0.3 |
| 75 | +| | |
| 76 | +* E * E' tag: v1.0.2 |
| 77 | +| | |
| 78 | +| * D |
| 79 | +| | |
| 80 | +* C * C' tag: v1.0.1 |
| 81 | +| | |
| 82 | +| * B tag: v1.0.0 |
| 83 | +| / |
| 84 | +| / |
| 85 | +| / |
| 86 | +|/ |
| 87 | +* A |
| 88 | +``` |
0 commit comments