cmd/releasebot: add check for beta1 release blockers

We now have a way of telling which release blocker issues apply to
a beta1 release, so start checking for such issues, and prevent
the release from proceeding if any of them are open.

Fixes golang/go#39345.

Change-Id: Id77098c9e72f45e043f97fa2b22bac811f29b0a4
Reviewed-on: https://go-review.googlesource.com/c/build/+/235778
Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Alexander Rakoczy <alex@golang.org>
diff --git a/cmd/releasebot/main.go b/cmd/releasebot/main.go
index c509ee7..f53d97d 100644
--- a/cmd/releasebot/main.go
+++ b/cmd/releasebot/main.go
@@ -337,6 +337,9 @@
 	}
 	if w.BetaRelease || w.RCRelease {
 		// TODO: go tool api -allow_new=false
+		if strings.HasSuffix(w.Version, "beta1") {
+			w.checkBeta1ReleaseBlockers()
+		}
 	} else {
 		if !w.Security {
 			w.checkReleaseBlockers()
@@ -421,6 +424,21 @@
 	}
 }
 
+func (w *Work) checkBeta1ReleaseBlockers() {
+	if err := goRepo.ForeachIssue(func(gi *maintner.GitHubIssue) error {
+		if gi.Milestone == nil || gi.Milestone.Title != w.Milestone.Title {
+			return nil
+		}
+		if !gi.Closed && gi.HasLabel("release-blocker") && !gi.HasLabel("okay-after-beta1") {
+			w.logError("open issue #%d is tagged release-blocker and not okay after beta1", gi.Number)
+		}
+		return nil
+	}); err != nil {
+		w.logError("error checking release-blockers: %v", err.Error())
+		return
+	}
+}
+
 func (w *Work) nextStepsPrepare(changeID string) {
 	if w.Security {
 		w.log.Printf(`