This document outlines the release and maintenance policies of the gluster-kubernetes project.
The project will only support and actively maintain two branches, master
and
the latest release branch. The latest release branch will always be reachable
by two HEADs, <VERSION>-latest
and stable
. Requests for support of older
branches may be considered on a case-by-case basis, but users will be
encouraged to use newer versions where possible.
This project follows the versioning guidelines outlined by the Semantic
Versioning specification, version 2.0.0.
In short, versions numbers will follow the structure <MAJOR>.<MINOR>.<PATCH>
,
with the following definitions:
- MAJOR version indicates a fundamental change to the structure of the project, often due to innovations from significant changes in the component projects. Major versions will typically not be compatible with older versions of the component projects.
- MINOR version indicates a major feature, a broad set of changes, and/or new
releases of the component projects. Minor versions retain the following
compatibility guarantees:
- Component projects from the last MAJOR release will still work with the current code.
- Deployments made with the current code will not conflict with other deployments made since the last MAJOR release.
- PATCH version indicates backwards-compatible bug fixes, and guarantees that the versions of the component projects has not changed.
The master
branch will always contain the latest development code. The
project guarantees that this branch will be functional and tested but not
bug-free. It will always track the latest versions of all component projects
and makes no guarantee of backwards compatibility to older versions of those
projects or itself.
The stable
branch will track the latest stable release of the code. When a
new release is made, the stable
branch will be moved to follow the new
release branch.
Each MAJOR and MINOR release will get its own branch, forked from master
.
Each release branch name will be of the form <VERSION>-latest
, e.g.
1.0-latest
. PATCH releases to those versions will be made in those branches,
and will be marked by tags of the form v<VERSION>
, e.g. v1.0.0
. PATCH
releases may contain more than one commit, depending on the whimsy of the
release engineers. :)
Commits to a release branch will be of the following types, ranked in order of preference:
- Direct cherry-picks from
master
(git cherry-pick -sx
) - Cherry-picks from
master
modified to resolve conflicts (changecherry picked from commit
tobased on commit
) - Custom patches
An example git history is presented below.
* I (master)
|
* H * H' (1.1-latest, stable) tag: v1.1.0
| |
| * G
| |
| /
| /
| /
|/
* F * F' (1.0-latest) tag: v.1.0.3
| |
* E * E' tag: v1.0.2
| |
| * D
| |
* C * C' tag: v1.0.1
| |
| * B tag: v1.0.0
| /
| /
| /
|/
* A