View on GitHub

Lightspeed Core Stack

Lightspeed Core Stack

Branching

Introduction

Lightspeed Core Stack adopts a Git workflow that creates and maintains dedicated release branches for each published Lightspeed Core Stack version, and pair that with strict semantic versioning to clearly communicate the nature of each release.

Basic rules

This approach keeps ongoing development separate from maintenance work, ensures clear, predictable version numbers for consumers, and provides a repeatable process for issuing hotfixes and patch releases.

Release branch

A release branch is a Git branch used to prepare a new production release. It stabilizes the codebase for final testing, bug fixes, and release-specific tasks without blocking ongoing feature development on main/develop. Those branches will have the following naming schema:

release/MAJOR.MINOR.PATCH

Key points

Semantic versioning

Semantic Versioning (SemVer) is a versioning scheme that conveys meaning about changes in a release using a three-part number: MAJOR.MINOR.PATCH.

Rules (concise)

Benefits

Branches naming

Branch Description
main production-ready code
release/x.y.z release stabilization branch
feature/* new features
hotfix/* urgent production fixes

NOTE: the actual proposal covers release branches only; feature and hotfix branch naming conventions are not covered here.

Branching visualization

Feature and fix branches that are merged into the main branch

branching_1

Cherry-picking changes into release (stable) branch from the main branch

branching_2

Multiple release branches, fixes made in fix branches

branching_3

Branching strategy

Steps (ordered)

  1. Create release branch

  2. Update metadata, such us version etc.

  3. Run CI: full test suite, linters, build (this is to check that branching is ok)

  4. Stabilize: apply bug fixes, adjust configurations, small polish commits on release branch

  5. QA / UAT: Deploy release branch to staging environment (Konflux)

  6. Fix issues: commit fixes directly on release branch; re-run CI

  7. Prepare release: Finalize changelog, update docs, set release notes

  8. Deploy: trigger production deployment (Konflux)

  9. Hotfixes (if needed): create hotfix/x.y.z+1 from main, then follow same flow

Visualized flow

                 +-----------------+
                 |   main branch   |
                 |                 |
                 +--------+--------+
                          | 
                          |  create release/x.y.z
                          v 
                 +-----------------+
                 |  release/x.y.z  |
                 |  (stabilize)    |
                 +----+---+---+----+
                      |   |   |
     update changelog |   |   | bug fixes & CI
                      |   |   |
                      v   v   v
                 +-----------------+
                 | Run CI / Tests  |
                 +--------+--------+
                          | 
                          v 
                 +-----------------+
                 |  Run e2e tests  |
                 |  in Konflux     |
                 |                 |
                 +--------+--------+
                          |
            issues found  |  validated
                 +--------+-----------+
                 |                    |
                 v                    v
       +----------------+     +----------------+
       | Fix on release |     | Ready for ship |
       +-------+--------+     +-------+--------+
               |                      |
               v                      v
          (re-run CI)          tag the release
               |                      |
               v                      v
       +----------------+     +----------------+
       |  return to QA  |     |    (tag vX)    |------------+
       +----------------+     +----------------+            |
                                      |                     |
                                      v                     v
                              +----------------+    +-----------------+
                              |  Build images  |    | Publish on PyPi |
                              +----------------+    +-----------------+

Cherry picking

Cherry-picking is a Git operation that applies the changes introduced by a specific commit from one branch onto another branch without merging the entire branch history. Key points:

NOTE: the cherry picking can be made in main -> release branch direction or vice versa. We prefer the first method when possible.

Git workflow

New release branch

# 1. Create release branch from the main branch
git checkout -b release/1.2.0 main

# 2. Update version number in build files

# 3. Commit and push
git commit -am "Prepare for 1.2.0 release"
git push origin release/1.2.0

# 4. Tag the release
git tag -a v1.2.0 -m "Release 1.2.0"
git push origin v1.2.0

# 5. Merge into main (optional step)
git checkout main && git merge release/1.2.0

Update/fix existing release branch

# 1. Create branch from the release branch
git checkout -b release/1.2.1 release/1.2.0

# 2. Update version number in build files

# 3. Commit and push
git commit -am "Prepare for 1.2.1 fix"
git push origin release/1.2.1

# 4. Tag the release
git tag -a v1.2.1 -m "Release 1.2.1"
git push origin v1.2.1

NOTE: 1.2.0 and 1.2.1 are just examples, of course.