cmd/gopherbot: configure all vscode-go issues to be marked Untriaged

For the purposes of improving issue triage, it's helpful to add all of
the new issues in the vscode-go repo to Untriaged. Add a gopherbot task
that does this.

Change-Id: I9484c6fd4cc8388cba5f9bf629b77b3a5dda29cf
Reviewed-on: https://go-review.googlesource.com/c/build/+/308350
Trust: Rebecca Stambler <rstambler@golang.org>
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
diff --git a/cmd/gopherbot/gopherbot.go b/cmd/gopherbot/gopherbot.go
index 48858d2..681dff4 100644
--- a/cmd/gopherbot/gopherbot.go
+++ b/cmd/gopherbot/gopherbot.go
@@ -81,6 +81,9 @@
 	vgo        = milestone{71, "vgo"}
 )
 
+// GitHub Milestone numbers for the golang/vscode-go repo.
+var vscodeUntriaged = milestone{26, "Untriaged"}
+
 type milestone struct {
 	Number int
 	Name   string
@@ -336,6 +339,9 @@
 	{"abandon scratch reviews", (*gopherbot).abandonScratchReviews},
 	{"assign reviewers to CLs", (*gopherbot).assignReviewersToCLs},
 
+	// Tasks that are specific to the golang/vscode-go repo.
+	{"set vscode-go milestones", (*gopherbot).setVSCodeGoMilestones},
+
 	{"access", (*gopherbot).whoNeedsAccess},
 	{"cl2issue", (*gopherbot).cl2issue},
 	{"congratulate new contributors", (*gopherbot).congratulateNewContributors},
@@ -483,12 +489,12 @@
 	return err
 }
 
-func (b *gopherbot) setMilestone(ctx context.Context, gi *maintner.GitHubIssue, m milestone) error {
-	printIssue("milestone-"+m.Name, b.gorepo.ID(), gi)
+func (b *gopherbot) setMilestone(ctx context.Context, repoID maintner.GitHubRepoID, gi *maintner.GitHubIssue, m milestone) error {
+	printIssue("milestone-"+m.Name, repoID, gi)
 	if *dryRun {
 		return nil
 	}
-	_, _, err := b.ghc.Issues.Edit(ctx, "golang", "go", int(gi.Number), &github.IssueRequest{
+	_, _, err := b.ghc.Issues.Edit(ctx, repoID.Owner, repoID.Repo, int(gi.Number), &github.IssueRequest{
 		Milestone: github.Int(m.Number),
 	})
 	return err
@@ -720,7 +726,7 @@
 	for _, m := range matches {
 		fmt.Printf("%-30s - %s\n", m.url, m.title)
 		if !*dryRun {
-			if err := b.setMilestone(ctx, m.gi, unplanned); err != nil {
+			if err := b.setMilestone(ctx, b.gorepo.ID(), m.gi, unplanned); err != nil {
 				return err
 			}
 		}
@@ -809,7 +815,7 @@
 		}
 		// Add Milestone if missing:
 		if gi.Milestone.IsNone() && !gi.HasEvent("milestoned") && !gi.HasEvent("demilestoned") {
-			if err := b.setMilestone(ctx, gi, proposal); err != nil {
+			if err := b.setMilestone(ctx, b.gorepo.ID(), gi, proposal); err != nil {
 				return err
 			}
 		}
@@ -896,7 +902,7 @@
 			// Handled by setMiscMilestones
 			return nil
 		}
-		return b.setMilestone(ctx, gi, unreleased)
+		return b.setMilestone(ctx, b.gorepo.ID(), gi, unreleased)
 	})
 }
 
@@ -906,18 +912,31 @@
 			return nil
 		}
 		if strings.Contains(gi.Title, "gccgo") { // TODO: better gccgo bug report heuristic?
-			return b.setMilestone(ctx, gi, gccgo)
+			return b.setMilestone(ctx, b.gorepo.ID(), gi, gccgo)
 		}
 		if strings.HasPrefix(gi.Title, "x/vgo") {
-			return b.setMilestone(ctx, gi, vgo)
+			return b.setMilestone(ctx, b.gorepo.ID(), gi, vgo)
 		}
 		if strings.HasPrefix(gi.Title, "go.dev:") || strings.HasPrefix(gi.Title, "x/pkgsite") {
-			return b.setMilestone(ctx, gi, unreleased)
+			return b.setMilestone(ctx, b.gorepo.ID(), gi, unreleased)
 		}
 		return nil
 	})
 }
 
+func (b *gopherbot) setVSCodeGoMilestones(ctx context.Context) error {
+	vscode := b.corpus.GitHub().Repo("golang", "vscode-go")
+	if vscode == nil {
+		return nil
+	}
+	return vscode.ForeachIssue(func(gi *maintner.GitHubIssue) error {
+		if gi.Closed || gi.PullRequest || !gi.Milestone.IsNone() || gi.HasEvent("demilestoned") || gi.HasEvent("milestoned") {
+			return nil
+		}
+		return b.setMilestone(ctx, vscode.ID(), gi, vscodeUntriaged)
+	})
+}
+
 func (b *gopherbot) labelBuildIssues(ctx context.Context) error {
 	return b.gorepo.ForeachIssue(func(gi *maintner.GitHubIssue) error {
 		if gi.Closed || gi.PullRequest || !strings.HasPrefix(gi.Title, "x/build") || gi.HasLabel("Builders") || gi.HasEvent("unlabeled") {
@@ -1532,7 +1551,7 @@
 			log.Printf("Failed to apply minor release milestone to issue %d: %v", gi.Number, err)
 			return nil
 		}
-		return b.setMilestone(ctx, gi, m)
+		return b.setMilestone(ctx, b.gorepo.ID(), gi, m)
 	})
 }