Files
cozystack/docs/release/backport-tasks
Myasnikov Daniil c12dcdddb4 docs(release): make backports automatic, by written rules
Backports were asked for pull request by pull request with labels and
opened by a bot, so whether a fix reached a release line depended on
someone remembering to ask, and the lines drifted apart. The policy
page states the rules instead: a fix or security fix merged into main
goes to every line the batch runs for, unless it is breaking, touches
platform migrations or a CRD, or changes the API in a way the API
review gate calls sizeable. Two labels let a maintainer override the
rules for one pull request.

The task pages give a maintainer the steps for a deferred conflict and
for a failed batch CI. The backports route in AGENTS.md, the
contributing and changelog guides and the PR template point at the
policy, and the commit format lists the security type the policy
takes.

Assisted-By: LLM
Signed-off-by: Myasnikov Daniil <myasnikovdaniil2001@gmail.com>
2026-11-06 12:33:35 +00:00
..

Backport tasks

The backport batch is built by backport-batch, and two steps around it need a maintainer's judgement. Each is a task with fixed inputs, one allowed output and a check in code that the result passes before anything is pushed. Both wait on the batch pull request: the batch's comment lists the deferred conflicts, and a failed batch CI shows on its checks.

Task Input Output Check
Resolve a conflict a deferred conflict on the batch pull request the original's commits picked under one merge on the batch branch, or one pick for a squash backport-batch fold, and backport-batch verify in CI
Attribute a failed batch CI the failing jobs of the batch pull request the culprit deferred to the next batch backport-batch run --defer

Rules for every task

  • Push nothing but the branch of the open batch pull request, backport-batch/<line>-<yyyymmdd> in this repository, and only what the task's check accepted. Never push to main or a release-* branch, and never open a second batch pull request: the scheduled run continues the open one.
  • Change no file the original pull request does not change. A conflict that cannot be resolved inside those files is not resolved: the original stays deferred.
  • Never rewrite the batch branch by hand. A plain push to it is a fast-forward; only backport-batch run --defer --push replaces it, leased on the head it rebuilt.
  • Leave the batch pull request's title and body to the tool: it rewrites both on every run, and a hand edit is lost or, inside the backport-batch block, makes check refuse the body.
  • When the task cannot be done within these rules, push nothing and leave a comment on the batch pull request saying why, so the next maintainer to look finds it. Nothing is lost by waiting: a red batch does not merge, and a deferred original goes to the next batch.

Getting the tool

Build it from main, in a clean worktree of this repository whose origin is this repository and with gh authenticated as someone who can push to the batch branch:

git fetch origin
git worktree add --detach ../backport-task origin/main
cd ../backport-task
go build -o /tmp/backport-batch ./cmd/backport-batch

Run it from that worktree. Every command but notify fetches origin first, and run, check, fold and lines read the policy from origin/main.