in tools/issue-labeler/labeler/backfill.go [107:166]
func ComputeIssueUpdates(issues []*github.Issue, regexpLabels []RegexpLabel) []IssueUpdate {
var issueUpdates []IssueUpdate
for _, issue := range issues {
// Skip pull requests
if issue.IsPullRequest() {
continue
}
desired := make(map[string]struct{})
for _, existing := range issue.Labels {
desired[*existing.Name] = struct{}{}
}
_, terraform := desired["service/terraform"]
_, linked := desired["forward/linked"]
_, exempt := desired["forward/exempt"]
_, testfailure := desired["test-failure"]
if terraform || exempt {
continue
}
// Decision was made to no longer add new service labels to linked tickets, because it is
// more difficult to know which teams have received those tickets and which haven't.
// Forwarding a ticket to a different service team should involve removing the old service
// label and `linked` label.
if linked {
continue
}
var issueUpdate IssueUpdate
for label := range desired {
issueUpdate.OldLabels = append(issueUpdate.OldLabels, label)
}
sort.Strings(issueUpdate.OldLabels)
affectedResources := ExtractAffectedResources(issue.GetBody())
for _, needed := range ComputeLabels(affectedResources, regexpLabels) {
desired[needed] = struct{}{}
}
if len(desired) > len(issueUpdate.OldLabels) {
// Forwarding test failure ticket directly
if !linked && !testfailure {
issueUpdate.Labels = append(issueUpdate.Labels, "forward/review")
}
for label := range desired {
issueUpdate.Labels = append(issueUpdate.Labels, label)
}
sort.Strings(issueUpdate.Labels)
issueUpdate.Number = issue.GetNumber()
if issueUpdate.Number > 0 {
issueUpdates = append(issueUpdates, issueUpdate)
}
}
}
return issueUpdates
}