Skip to content

Branches and Versioning

John Haddon edited this page Nov 22, 2021 · 7 revisions

Overview

image

At any one time, we are actively developing three different versions of Gaffer, each on a separate branch in the main repository :

  • The next major version scheduled for release is developed on the main branch. This branch receives new backwards-incompatible features, and other changes we consider too big or risky for a minor release.
  • The current major version is maintained on a branch named <currentMajorVersion>_maintenance, which is 0.56_maintenance at the time of writing. This branch receives new backwards-compatible features and bug fixes.
  • The previous major version is maintained on a branch named <previousMajorVersion>_maintenance, which is 0.55_maintenance at the time of writing. This branch receives bug fixes only.

All three branches are kept in a releasable state at all times. We make each pull request to the branch for the major version in which we want our code to be released.

Synchronisation

When making a bugfix to the previous major version, we naturally want to ensure that the same fix will be included in the next release of the current major version, and in any forthcoming release from main. Likewise, we want new features developed for the current major version to also be available in the next major version. We achieve this by regularly merging forwards from the maintenance branches to the main branch. We do this as follows :

# Merge patches from previous to current major version
# ----------------------------------------------------

git checkout <previousMajorVersion>_maintenance
git pull upstream <previousMajorVersion>_maintenance

git checkout <currentMajorVersion>_maintenance
git pull upstream <currentMajorVersion>_maintenance
git merge <previousMajorVersion>_maintenance

# Edit Changes.md to copy new bug fixes into current major
# version.
git commit Changes.md
git push upstream <currentMajorVersion>_maintenance

# Merge features and patches from current major version to main
# -------------------------------------------------------------

git checkout main
git pull upstream main
git merge <currentMajorVersion>_maintenance
git push upstream main

If this has gone smoothly, a quick double check at https://github.com/GafferHQ/gaffer/network should reveal a branch network much like the following :

branches