# Branching strategy or release process for cmake releases

**URL:** https://discourse.cmake.org/t/branching-strategy-or-release-process-for-cmake-releases/10877
**Category:** Development
**Created:** [May 21, 2024, 2:12pm UTC](https://discourse.cmake.org/t/branching-strategy-or-release-process-for-cmake-releases/10877 "2024-05-21T14:12:35Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![pkiran](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/p/dc4da7/32.png) [@pkiran](https://discourse.cmake.org/u/pkiran)
#### Post date: [May 21, 2024, 2:12pm UTC](https://discourse.cmake.org/t/branching-strategy-or-release-process-for-cmake-releases/10877/1 "2024-05-21T14:12:35Z")

</div>

Hi all,

This is just for my educational purpose. I am trying to learn how cmake community manages so many releases in a clean way. Would like to understand the release process or branching strategy being used in cmake development, if possible.

Thanks  
Phani

---

<div class="post-metadata">

### Author: ![brad.king](https://discourse.cmake.org/user_avatar/discourse.cmake.org/brad.king/32/11_2.png) [@brad.king](https://discourse.cmake.org/u/brad.king)
#### Post date: [May 21, 2024, 2:31pm UTC](https://discourse.cmake.org/t/branching-strategy-or-release-process-for-cmake-releases/10877/2 "2024-05-21T14:31:17Z")

</div>

The official repository publishes [2 integration branches](https://gitlab.kitware.com/cmake/cmake/-/branches): `master` and `release`. New development is merged to `master`. The current release version (either while preparing release candidates or while maintaining it as a stable release) is published in the `release` branch. The `release` branch is always kept merged into `master` too, but the merge commit messages refer to the branch with its corresponding release number, e.g. `Merge branch 'release-3.29'`. Anyone can recover older release branches by looking for merge commits with such messages in `git log --first-parent master` and then taking their second parent. Locally the maintainer keeps separate numbered `release-X.Y` branches for the occasional backport to older release series.

When a change/fix needs to be backported to the `release` branch, we use a merge request with a source branch that’s based on the upstream `release` branch, but that targets `master` for merging. We use a bot to do merges that knows how to merge to both `release` and `master`, and also merge the updated `release` itself into `master` to maintain that invariant.

---

<div class="post-metadata">

### Author: ![pkiran](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/p/dc4da7/32.png) [@pkiran](https://discourse.cmake.org/u/pkiran)
#### Post date: [May 30, 2024, 2:50pm UTC](https://discourse.cmake.org/t/branching-strategy-or-release-process-for-cmake-releases/10877/3 "2024-05-30T14:50:03Z")

</div>

Thanks for your reply 🙂
