Skip to content

Instantly share code, notes, and snippets.

@ericsnowcurrently
Last active August 2, 2024 00:27
Show Gist options
  • Save ericsnowcurrently/3ee79640e494585b857bc21efd4a531e to your computer and use it in GitHub Desktop.
Save ericsnowcurrently/3ee79640e494585b857bc21efd4a531e to your computer and use it in GitHub Desktop.
Release Locking Workflow

Some of the recent discussion on DPO and discord got me thinking about the release workflow relative to locking branches and creating temporary ones and making some PRs wait through the whole RC phase.

As a result, I've thought of various possible workflows and about what might work well. We've used at least some of these for past releases, though not all. (I don't recall which approach was used for which release.)

Here are the workflows I thought of:

3.X branch temp branch critical/docs PRs other PRs
1 stays locked --- merged by RM (3.X) wait until final
2 only locked during release --- merged by committers (3.X) wait until final
3 stays locked 3.X-release merged by committers (3.X-release)
cherry-picked by RM (3.X)
wait until final
4 only locked during release 3.X-release merged by committers (3.13)
cherry-picked by RM (3.X-release)
merged by committers (3.X)
5 stays locked 3.X.1-temp merged by committers (3.X.1)
cherry-picked by RM (3.X)
merged by committers (3.X.1)

With options (1), (2), and (3), a notable challenge is that some PRs must wait months to be merged, once the final release is done.

On top of that, with option (2) the RM has less control over what ends up in the final release. That said, with our group I doubt it would be a problem, and, even if something went wrong, reverting a commit during the RC phase wouldn't be disruptive.

(4) avoids those problems, but introduces a new one: the 3.X.0 (final) release will be made against a commit that doesn't exist in the 3.X branch.

That brings us to (5), which I'm not sure has come up before. It avoids that problem too. That only real downside is that it could be a little awkward for committers.

(Note that I have not considered (more that superficially) the impact on the release manager.)


Below I've sketched out how each of those workflows flows. In each diagram, the sections where the 3.X branch is not locked are indented. A single line (---) surrounds the parts where 3.X is locked. A double line (===) surrounds the repeated interactions that take place during the RC phase.

1

  | RM (in 3.X branch) | committers (3.X)                  |
  | ------------------ | --------------------------------- |
  |                    | merge any PRs                     |
--------------------------------------------------------------
|   lock               |                                     |
|   cut rc1            |                                     |
==============================================================
|                      | notify RM about critical/docs PRs   |
|   merge PRs          |                                     |
==============================================================
|   cut final          |                                     |
|   unlock             |                                     |
--------------------------------------------------------------
  |                    | merge waiting PRs                 |
  |                    | merge any PRs                     |
  | ------------------ | --------------------------------- |

2

  | RM (3.X)          | committers (3.X)        |
  | ----------------- | ----------------------- |
  |                   | merge any PRs           |
---------------------------------------------------
|   lock              |                           |
|   cut rc1           |                           |
|   unlock            |                           |
===================================================
  |                   | merge critical/docs PRs |
  | review merged PRs |                         |
===================================================
|   lock              |                           |
|   cut final         |                           |
|   unlock            |                           |
---------------------------------------------------
  |                   | merge waiting PRs       |
  |                   | merge any PRs           |
  | ----------------- | ----------------------- |

3

  | RM (3.X)            | RM (3.X-release)  | committers (3.X)  | committers (3.X-release)  |
  | ------------------- | ----------------- | ----------------- | ------------------------- |
  |                     |                   | merge any PRs     |                           |
-----------------------------------------------------------------------------------------------
|   lock                |                   |                   |                             |
|   cut rc1             |                   |                   |                             |
|                       | create (locked)   |                   |                             |
|                       | unlock            |                   |                             |
===============================================================================================
|                       |                   |                   | merge critical/docs PRs     |
|   cherry-pick commits |                   |                   |                             |
===============================================================================================
|                       | destroy           |                   |                             |
|   cut final           |                   |                   |                             |
|   unlock              |                   |                   |                             |
-----------------------------------------------------------------------------------------------
  |                     |                   | merge waiting PRs |                           |
  |                     |                   | merge any PRs     |                           |
  | ------------------- | ----------------- | ----------------- | ------------------------- |

4

  | RM (3.X)          | RM (3.X-release)    | committers (3.X)  | committers (3.X-release)  |
  | ----------------- | ------------------- | ----------------- | ------------------------- |
  |                   |                     | merge any PRs     |                           |
-----------------------------------------------------------------------------------------------
|   lock              |                     |                   |                             |
|                     | create (locked)     |                   |                             |
|                     | cut rc1             |                   |                             |
|   unlock            |                     |                   |                             |
===============================================================================================
  |                   |                     | merge any PRs     |                           |
  |                   |                     |                   | notify RM for commits     |
  |                   | cherry-pick commits |                   |                           |
===============================================================================================
|   lock              |                     |                   |                             |
|                     | cut final           |                   |                             |
|   merge 3.X-release |                     |                   |                             |
|                     | destroy             |                   |                             |
|   unlock            |                     |                   |                             |
-----------------------------------------------------------------------------------------------
  |                   |                     | merge any PRs     |                           |
  | ----------------- | ------------------- | ----------------- | ------------------------- |

5

  | RM (3.X)            | RM (3.X.1-temp)   | committers (3.X)  | committers (3.X.1-temp)    |
  | ------------------- | ----------------- | ----------------- | -------------------------- |
  |                     |                   | merge any PRs     |                            |
------------------------------------------------------------------------------------------------
|   lock                |                   |                   |                              |
|   cut rc1             |                   |                   |                              |
|                       | create (locked)   |                   |                              |
|                       | unlock            |                   |                              |
================================================================================================
|                       |                   |                   | merge any PRs                |
|                       |                   |                   | notify RM for some commits   |
|   cherry-pick commits |                   |                   |                              |
================================================================================================
|                       | lock              |                   |                              |
|   cut final           |                   |                   |                              |
|   merge 3.X.1-temp    |                   |                   |                              |
|                       | destroy           |                   |                              |
|   unlock              |                   |                   |                              |
------------------------------------------------------------------------------------------------
  |                     |                   | merge any PRs     |                            |
  | ------------------- | ----------------- | ----------------- | -------------------------- |
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment