Versioning (SemVer)¶
| What | The semantic versioning rules that branch names, tags, JIRA Releases, and app versions all share. |
| Owner | Engineering, enforced through branching and release discipline. |
| Triggers | Every release and hotfix. |
Summary¶
We follow Semantic Versioning: MAJOR.MINOR.PATCH. One version number flows through everything: the JIRA Release, the Git release branch, the production tag, and the app version all match. Each release branch has a unique version, tagged only after all work is integrated and approved. Hotfixes increment the patch number. This single shared number is what makes the whole lifecycle traceable.
Full detail¶
The format¶
MAJOR.MINOR.PATCH, for example v1.3.0.
| Part | Increment when |
|---|---|
| MAJOR | Incompatible or breaking changes. |
| MINOR | New, backward-compatible functionality. |
| PATCH | Backward-compatible fixes, including hotfixes. |
Rules¶
- Each release branch has a unique version (for example
v1.4.0). - A release branch is tagged only after all work is integrated and approved, never before.
- Ideally only one release branch is active at a time.
- Hotfix versions increment the patch number:
v1.3.0becomesv1.3.1, thenv1.3.2, and so on. - The version in the branch name MUST match the JIRA Release version, which MUST match the app version.
One number, everywhere¶
flowchart TD
A[Decide version per SemVer] --> B[JIRA Release vX.Y.Z]
B --> C[Git branch release/vX.Y.Z]
C --> D[Tag vX.Y.Z at approval]
D --> E[App version X.Y.Z in production]
E --> F[Traceable end to end]
Why no version reuse¶
A closed version is frozen forever. New work always takes a new version, because reusing a number would create two different codebases claiming the same version, which breaks traceability and causes environment and regression problems. See JIRA & Release Management.
Example¶
A backward-compatible feature release moves
v1.3.2tov1.4.0. A later urgent production fix on top of it becomesv1.4.1(patch increment) via a hotfix branched from tagv1.4.0. A future breaking API change would move tov2.0.0.