diff --git a/pr/webhook/pull_request.go b/pr/webhook/pull_request.go index 1daf6ff..cc4e7b1 100644 --- a/pr/webhook/pull_request.go +++ b/pr/webhook/pull_request.go @@ -29,6 +29,11 @@ func (receiver *Receiver) handlePullRequest(body []byte) { log.Println(err) return } + + receiver.processPullRequest(event) +} + +func (receiver *Receiver) processPullRequest(event *github.PullRequestEvent) { number := *event.Number owner := *event.Repo.Owner.Login repo := *event.Repo.Name diff --git a/pr/webhook/pull_request_others.go b/pr/webhook/pull_request_others.go index 5f3ee66..e096ded 100644 --- a/pr/webhook/pull_request_others.go +++ b/pr/webhook/pull_request_others.go @@ -3,7 +3,9 @@ package webhook import ( "encoding/json" "log" + "regexp" "strconv" + "strings" "github.com/google/go-github/github" ) @@ -41,6 +43,33 @@ func (receiver *Receiver) handleOtherPullRequestEvents(eventType string, body [] return } + receiver.membersLock.RLock() + members := receiver.members + receiver.membersLock.RUnlock() + if members != nil { + _, isMember := (*members)[*event.Sender.Login] + if isMember && strings.Contains(*event.Comment.Body, "@macportsbot") { // TODO: read bot user from ENV + body := *event.Comment.Body + if botMentioned, _ := regexp.MatchString(`@macportsbot\s`, body); botMentioned { + if doRetry, _ := regexp.MatchString(`@macportsbot\s+retry`, body); doRetry { // TODO: test compile patterns + pr, err := receiver.githubClient.GetPullRequest(*event.Repo.Owner.Login, *event.Repo.Name, *event.Issue.Number) + if err != nil { + log.Println(err) + return + } + fakeEvent := &github.PullRequestEvent{ + Action: ptrOfStr("opened"), + Number: event.Issue.Number, + Repo: event.Repo, + Sender: event.Issue.User, + PullRequest: pr, + } + receiver.processPullRequest(fakeEvent) + } + } + } + } + number = *event.Issue.Number sender = *event.Sender.Login default: diff --git a/pr/webhook/pull_request_test.go b/pr/webhook/pull_request_test.go index 83e517d..92bec4e 100644 --- a/pr/webhook/pull_request_test.go +++ b/pr/webhook/pull_request_test.go @@ -206,11 +206,3 @@ func (stub *stubDBHelper) SetPRProcessed(number int, processed bool) error { func (stub *stubDBHelper) SetPRPendingReview(number int, pendingReview bool) error { return nil } - -func ptrOfStr(s string) *string { - return &s -} - -func ptrOfInt(s int) *int { - return &s -} diff --git a/pr/webhook/util.go b/pr/webhook/util.go new file mode 100644 index 0000000..df3622e --- /dev/null +++ b/pr/webhook/util.go @@ -0,0 +1,9 @@ +package webhook + +func ptrOfStr(s string) *string { + return &s +} + +func ptrOfInt(s int) *int { + return &s +}