kubernetes / kubernetes/release

Add --rerun mode to krel release-notes for updating existing draft PR branches

Open
#4,348 2 comments 0 reactions 1 assignee Claimed by @kernel-kun View on GitHub
area/release-eng kind/feature lifecycle/stale needs-priority sig/release
Dominant language
Go
Stars
504
Forks
556
Avg merge
18h 43m
Merged PRs (30d)
33

Description

#### What would you like to be added:

A `--rerun` mode for `krel release-notes` that allows re-running against an existing draft PR branch, with full control over which fork/branch to fetch from and optionally push to.

New flags:
```bash
--rerun # enter rerun mode (mutually exclusive with --create-draft-pr)
--draft-pr-source-fork=org[/repo] # which fork to fetch the existing branch from (required)
--draft-pr-source-branch=name # branch to fetch (default: release-notes-draft-)
--draft-pr-push-fork=org[/repo] # where to push results (optional — omit to work locally)
--draft-pr-push-branch=name # branch name on push destination (default: source branch)
```

High-level flow:

```
FIRST RUN (today) RERUN (proposed)
┌──────────────────────┐ ┌───────────────────────────────────┐
│ --create-draft-pr │ │ --rerun │
│ --fork=me │ │ --draft-pr-source-fork=colleague │
│ --tag=v1.36.0-beta.0 │ │ --tag=v1.36.0-beta.0 │
└──────────┬───────────┘ │ --maps-from=./maps │
│ │ --draft-pr-push-fork=me (optional)│
▼ └──────────┬────────────────────────┘
clone k/sig-release │
branch off HEAD ▼
generate notes clone k/sig-release
push to fork fetch source branch from colleague's fork
create PR apply --maps-from overrides
cleanup tmp dir regenerate .md + .json
optionally push to my fork
preserve local clone for inspection
```

#### Why is this needed:

Today, after the initial `krel release-notes --create-draft-pr` run creates a PR against `k/sig-release`, reviewers suggest changes to the `.md` file. The author then needs to create map files and re-run krel with `--maps-from` to incorporate those suggestions — but krel fails on re-run because `VerifyFork` rejects the operation when the branch already exists on the fork:
```bash
Error: a branch named release-notes-draft-v1.36.0-beta.0 already exists in /sig-release
```

There is no way to point `krel` at an existing branch. This forces a fully manual workflow for post-review updates (manually creating and editing maps, syncing those changes to `.json` & `.md` files manually, committing, and pushing by hand).

The problem is compounded when a **different team member** needs to pick up the rerun work --> there's no way to fetch a colleague's draft branch, apply maps, and push to one's own fork.

`--maps-from` already supports syncing map file overrides into `.json` and `.md`, so the generation machinery is in place. What's missing is the ability to:

1. Skip the branch-existence gate (`VerifyFork`) when rerunning
2. Fetch an existing branch from any fork instead of always branching off upstream HEAD
3. Decouple source and destination i.e. fetch from fork A, push to fork B (or don't push at all)
4. Preserve the local clone for inspection since no PR is being created

All changes would live in `cmd/krel/cmd/release_notes.go` — no modifications to `release-sdk` required. The rerun path would call lower-level SDK primitives (`git.CleanCloneGitHubRepo`, `repo.AddRemote`, `repo.Checkout`) directly, bypassing `VerifyFork` and `PrepareFork`.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.