diff --git a/.github/workflows/robot/internal/bot/backport.go b/.github/workflows/robot/internal/bot/backport.go index 7d1dc4b5df2..7a638533033 100644 --- a/.github/workflows/robot/internal/bot/backport.go +++ b/.github/workflows/robot/internal/bot/backport.go @@ -50,6 +50,17 @@ func (b *Bot) Backport(ctx context.Context) error { return trace.Wrap(err) } + // If this workflow is running on a release branch, then it means + // a backport was merged and there's no need to open additional + // backport PRs. We can safely delete the remote branch though, + // because we know this is an internal contributor's merged PR. + if isReleaseBranch(b.c.Environment.UnsafeBase) && + isBotBackportBranch(b.c.Environment.UnsafeHead) && + !pull.Fork { + log.Printf("backport merged to %v, deleting branch %v", b.c.Environment.UnsafeBase, b.c.Environment.UnsafeHead) + return trace.Wrap(git("push", "origin", "--delete", b.c.Environment.UnsafeHead)) + } + // Extract backport branches names from labels attached to the Pull // Request. If no backports were requested, return right away. branches := findBranches(pull.UnsafeLabels) diff --git a/.github/workflows/robot/internal/bot/bot.go b/.github/workflows/robot/internal/bot/bot.go index b8136d723cc..5bd8fe659f5 100644 --- a/.github/workflows/robot/internal/bot/bot.go +++ b/.github/workflows/robot/internal/bot/bot.go @@ -151,3 +151,11 @@ func isAutoGeneratedFile(name string) bool { strings.HasSuffix(name, "_pb.d.ts") || strings.Contains(name, "webassets/") } + +func isReleaseBranch(branch string) bool { + return strings.HasPrefix(branch, "branch/") +} + +func isBotBackportBranch(branch string) bool { + return strings.HasPrefix(branch, "bot/backport") +} diff --git a/.github/workflows/robot/internal/bot/label.go b/.github/workflows/robot/internal/bot/label.go index ea0281b3376..ff9f0e94941 100644 --- a/.github/workflows/robot/internal/bot/label.go +++ b/.github/workflows/robot/internal/bot/label.go @@ -61,7 +61,7 @@ func (b *Bot) labels(ctx context.Context, files []github.PullRequestFile) ([]str var labels []string // The branch name is unsafe, but here we are simply adding a label. - if strings.HasPrefix(b.c.Environment.UnsafeHead, "branch/") { + if isReleaseBranch(b.c.Environment.UnsafeBase) { log.Println("Label: Found backport branch.") labels = append(labels, "backport") }