Stable Deployment Branches¶
Backports to stable/2.0 (2.0 pre-release window)¶
While 2.0 is in development, changes that must ship in v2.0.0 land on both
main and stable/2.0 (releases tag from the stable branch). The
backport runs as automation (#3361):
- Every pull request opened against
maincarries thebackport/2.0label automatically while the repository variableBACKPORT_2_0_DEFAULTis set totrue. Remove the label before merging to keep a change onmainonly. - Merging a labeled pull request cherry-picks its squash commit onto
stable/2.0and opens a backport pull request (.github/workflows/backport.yml, thekorthout/backport-actionworkflow). A cherry-pick that conflicts opens a draft pull request that carries the first conflict committed; resolve the conflicts on its branch, then mark it ready and merge it. - Only the
backport/2.0label and the/backportcomment select the backport; the target is fixed tostable/2.0and other labels play no part. - Backports are sync-only (#3456): the backport pull request opens under
the workflow's PAT (
BACKPORT_TOKEN) and merges itself (squash) in the same run — the cherry-pick is contentmain's CI already passed. Every pull-request-triggered workflow targetsmain, so the backport pull request runs no CI, andstable/2.0carries no required status checks — nothing gates the merge and nothing waits. A conflicted cherry-pick opens a draft pull request; the merge step fails loudly on it, a human resolves the conflicts, marks it ready, and merges it by hand. - A
/backportcomment on an already-merged pull request runs the same flow — the rescue path for a merge that happened without the label.
After v2.0.0 ships, remove the variable (gh variable delete
BACKPORT_2_0_DEFAULT). Backports become opt-in: apply the
backport/2.0 label before merging, or comment /backport on the
merged pull request afterwards.
Hand-fed stable branches¶
For deployments that need a fixed release with cherry-picked hotfixes (rather than upgrading to the latest), create a stable branch:
Tag patch releases on the stable branch:
This triggers the release workflow, which builds and pushes versioned images. A downstream deployment fork pins a version by checking out the tag (git checkout v0.1.1) before building the host image.
Note: do not use + in tags — Docker image tags don't allow the + character.
Because the workspace base image is pinned in the Dockerfile, stable branches are isolated from base image changes on main. The branch only gets changes that are explicitly cherry-picked onto it.