giteabot/internal/bot/handle.go
2026-02-15 19:15:02 -08:00

122 lines
3.4 KiB
Go

package bot
import "strings"
func (b *Bot) HandleEvent(eventName string, event Event) error {
switch eventName {
case "push":
return b.handlePush(event)
case "pull_request":
return b.handlePullRequest(event)
case "pull_request_review":
return b.handlePullRequestReview(event)
}
return nil
}
func (b *Bot) handlePush(event Event) error {
defaultBranch := "main"
if event.Repository != nil && event.Repository.DefaultBranch != "" {
defaultBranch = event.Repository.DefaultBranch
}
if event.Ref == "refs/heads/"+defaultBranch && b.Config.Features.Backport {
if err := b.RunBackport(); err != nil {
return err
}
}
if b.Config.Features.LabelMaintenance {
if err := b.RunLabelMaintenance(); err != nil {
return err
}
}
if b.Config.Features.MergeQueue {
if err := b.RunMergeQueue(); err != nil {
return err
}
}
if b.Config.Features.Locking {
if err := b.RunLocking(); err != nil {
return err
}
}
if b.Config.Features.Feedback {
if err := b.RunFeedback(); err != nil {
return err
}
}
if b.Config.Features.LastCall {
return b.RunLastCall()
}
return nil
}
func (b *Bot) handlePullRequest(event Event) error {
if event.PullRequest == nil {
return nil
}
pr := event.PullRequest.ToProvider()
action := event.Action
switch action {
case "labeled", "unlabeled":
if event.Label != nil && b.IsRelevantLabel(event.Label.Name) {
if b.Config.Features.LabelMaintenance {
if err := b.RunLabelMaintenance(); err != nil {
return err
}
}
if b.Config.Features.MergeQueue {
if err := b.RunMergeQueue(); err != nil {
return err
}
}
return b.HandleLabelAction(event.Label.Name, pr)
}
case "opened":
if b.Config.Features.LabelMaintenance {
if err := b.RunLabelMaintenance(); err != nil {
return err
}
}
if pr.BaseRef == "main" && b.Config.Features.Comments {
if err := b.CommentIfTranslationsChanged(pr); err != nil {
return err
}
}
if strings.HasPrefix(pr.BaseRef, "release/") && b.Config.Features.Milestones {
if err := b.AssignMilestone(pr); err != nil {
return err
}
}
if b.Config.Features.LGTM {
return b.UpdateLgtm(pr)
}
return nil
case "synchronize", "review_requested", "review_request_removed":
if b.Config.Features.LGTM {
return b.UpdateLgtm(pr)
}
return nil
case "closed":
if b.Config.Features.Milestones {
if pr.Merged && pr.Milestone == nil {
if err := b.AssignMilestone(pr); err != nil {
return err
}
}
return b.RemoveMilestonesFromClosedUnmerged()
}
return nil
}
return nil
}
func (b *Bot) handlePullRequestReview(event Event) error {
if event.PullRequest == nil {
return nil
}
pr := event.PullRequest.ToProvider()
if b.Config.Features.LGTM {
return b.UpdateLgtm(pr)
}
return nil
}