Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This is an aggregation of three proposed release strategies:

The gist of this proposal is that we always release besu from a release branch, and that release branch only pulls commits from main.

Principles and Benefits

  • main should always be release-able
  • a chain of commits in the release branch from main provide provenance of a release
  • the ability to merge PRs into main is uninhibited by the release process, and the release process itself is not encumbered by changes to main
  • the RC process provides a crisp delineation of burn-in build artifacts and final release artifacts
  • cherry-picking commits to compose a release remains possible, if discouraged

Example Release Workflow for a hypothetical HL Besu

...

24.7.3

Burn-in candidate release steps (Day 0)

  1. Create a PR against main to bump the build version to 2324.7.4-SNAPSHOT and add a new version section to CHANGELOG.md to reflect the next snapshot revision
    1. This prevents blocking main during the release but creates a bookmark to indicate that the release will include up to the commit before this.
    2. This also prevents later releases colliding with release numbers used on a disposable, release branch.
  2. Create a release candidate PR which merges `main` into the `release` branch, which also updates the build version to reflect 2324.7.3-RCRC1
    1. During the actual 2324.7.3 release, it became clear that the only way to do this nicely is by cherry-picking the commit range from main onto the release branch, e.g. git cherry-pick 6dc10a9..eef40bd 
    2. Due to 1, we need to use a subset of main commits, not including the bump to 2324.7.4-SNAPSHOT
    Upon merge into the
  3. When release branch , CI builds and publishes the necessary artifacts for the release candidateDeploy canary and burn-in builds with the published release candidate artifactsexists and is tagged, any pre-release activities may commence. This usually includes executing a long-running (about 48 hours) "burn in" process which deploys new nodes to sync from scratch on a variety of networks, using a variety of CL clients.
  4. At this point, there is no published artifact, and testing may take as long as deemed necessary.

Final release steps (Day X)

Upon successful validation of the release candidate burn-in:

  1. create a PR against the release branch to update ONLY the build version to 2324.7.3, removing the -RC suffix
  2. upon successful build and merge of the release PR:
    1. draft a new github release for 2324.7.3wait for docker artifacts to build and publish
    2. publish the github release with artifact SHAs and announce on HL discord
    3. build artifacts will be attached to the release, and accurate SHAs and docker locations will be amended.
  3. Trigger release process for documentation - Documentation release process
  4. Homebrew release

Burn-in failures and hotfixes

An alternate outcome where the burn-in fails is a no-op.  Nothing needs to happen to 'cancel the release'.   We can either skip this release version (and note that outcome in CHANGELOG.md), or build an RC2 candidate by restarting the burn-in candidate steps at step #2 with the new RC number.  

This process leaves a cherry-pick escape hatch for hotfixes that is minimum friction for the latest release at least. The biggest element of friction here is the PR which merges main into the release would need to handle the merge conflict that a cherry-pick creates.  This implies that it would be desirable for cherry-picking should to be a rare event, that is done with care

Currently Trialing this process with 23.7.x

We have been trialing this process for the 23.7.x series of releases, and have encountered essentially all of the scenarios described above. 23.7.0 was a simple merge of main into a new release branch However, 23.7.0 failed burn-in, and 23.7.1 was a fast-follow cherry-pick release.  23.7.2 had to account for this cherry pick and the PR to merge main was higher than desired friction.  23.7.3 should be another low friction release.  In all of these, `main` branch development was unimpeded and the release process was not affected by it.


Comments, feedback, and clarification are all welcome.