diff options
author | John Olheiser <john.olheiser@gmail.com> | 2020-03-05 23:10:48 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-06 07:10:48 +0200 |
commit | 3f1c0841cb9fc61136b85c6b39613679d2851707 (patch) | |
tree | d0b15f3b809891d83f41fed5ab7378765330525a /modules | |
parent | 80db44267ccb688c596e8375523af5cd92864d87 (diff) | |
download | gitea-3f1c0841cb9fc61136b85c6b39613679d2851707.tar.gz gitea-3f1c0841cb9fc61136b85c6b39613679d2851707.zip |
Granular webhook events (#9626)
* Initial work
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Add PR reviews and API coverage
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Split up events
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Add migration and locale
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Format
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Revert IsPull
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Fix comments
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Fix tests
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Fix PR reviews
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Fix issue_comment
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Make fmt
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Migrations
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Backwards compatible API
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Fix feishu
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Move session commit
Signed-off-by: jolheiser <john.olheiser@gmail.com>
Co-authored-by: Lauris BH <lauris@nix.lv>
Co-authored-by: guillep2k <18600385+guillep2k@users.noreply.github.com>
Diffstat (limited to 'modules')
-rw-r--r-- | modules/auth/repo_form.go | 33 | ||||
-rw-r--r-- | modules/notification/webhook/webhook.go | 143 | ||||
-rw-r--r-- | modules/structs/hook.go | 2 | ||||
-rw-r--r-- | modules/webhook/deliver.go | 6 | ||||
-rw-r--r-- | modules/webhook/dingtalk.go | 11 | ||||
-rw-r--r-- | modules/webhook/discord.go | 19 | ||||
-rw-r--r-- | modules/webhook/feishu.go | 2 | ||||
-rw-r--r-- | modules/webhook/msteams.go | 15 | ||||
-rw-r--r-- | modules/webhook/slack.go | 11 | ||||
-rw-r--r-- | modules/webhook/telegram.go | 11 |
10 files changed, 160 insertions, 93 deletions
diff --git a/modules/auth/repo_form.go b/modules/auth/repo_form.go index 932976b6f9..63a560728a 100644 --- a/modules/auth/repo_form.go +++ b/modules/auth/repo_form.go @@ -190,18 +190,27 @@ func (f *ProtectBranchForm) Validate(ctx *macaron.Context, errs binding.Errors) // WebhookForm form for changing web hook type WebhookForm struct { - Events string - Create bool - Delete bool - Fork bool - Issues bool - IssueComment bool - Release bool - Push bool - PullRequest bool - Repository bool - Active bool - BranchFilter string `binding:"GlobPattern"` + Events string + Create bool + Delete bool + Fork bool + Issues bool + IssueAssign bool + IssueLabel bool + IssueMilestone bool + IssueComment bool + Release bool + Push bool + PullRequest bool + PullRequestAssign bool + PullRequestLabel bool + PullRequestMilestone bool + PullRequestComment bool + PullRequestReview bool + PullRequestSync bool + Repository bool + Active bool + BranchFilter string `binding:"GlobPattern"` } // PushOnly if the hook will be triggered when push diff --git a/modules/notification/webhook/webhook.go b/modules/notification/webhook/webhook.go index f598d5b1f7..625cf119a9 100644 --- a/modules/notification/webhook/webhook.go +++ b/modules/notification/webhook/webhook.go @@ -48,7 +48,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *models.User, issue *model return } - err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ + err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestLabel, &api.PullRequestPayload{ Action: api.HookIssueLabelCleared, Index: issue.Index, PullRequest: convert.ToAPIPullRequest(issue.PullRequest), @@ -56,7 +56,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *models.User, issue *model Sender: doer.APIFormat(), }) } else { - err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ + err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ Action: api.HookIssueLabelCleared, Index: issue.Index, Issue: convert.ToAPIIssue(issue), @@ -147,7 +147,7 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *mo apiPullRequest.Action = api.HookIssueAssigned } // Assignee comment triggers a webhook - if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, apiPullRequest); err != nil { + if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestAssign, apiPullRequest); err != nil { log.Error("PrepareWebhooks [is_pull: %v, remove_assignee: %v]: %v", issue.IsPull, removed, err) return } @@ -165,7 +165,7 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *mo apiIssue.Action = api.HookIssueAssigned } // Assignee comment triggers a webhook - if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, apiIssue); err != nil { + if err := webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueAssign, apiIssue); err != nil { log.Error("PrepareWebhooks [is_pull: %v, remove_assignee: %v]: %v", issue.IsPull, removed, err) return } @@ -338,34 +338,54 @@ func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *mod } func (m *webhookNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) { - if err := c.LoadPoster(); err != nil { + var err error + + if err = c.LoadPoster(); err != nil { log.Error("LoadPoster: %v", err) return } - if err := c.LoadIssue(); err != nil { + if err = c.LoadIssue(); err != nil { log.Error("LoadIssue: %v", err) return } - if err := c.Issue.LoadAttributes(); err != nil { + if err = c.Issue.LoadAttributes(); err != nil { log.Error("LoadAttributes: %v", err) return } mode, _ := models.AccessLevel(doer, c.Issue.Repo) - if err := webhook_module.PrepareWebhooks(c.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ - Action: api.HookIssueCommentEdited, - Issue: convert.ToAPIIssue(c.Issue), - Comment: c.APIFormat(), - Changes: &api.ChangesPayload{ - Body: &api.ChangesFromPayload{ - From: oldContent, + if c.Issue.IsPull { + err = webhook_module.PrepareWebhooks(c.Issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ + Action: api.HookIssueCommentEdited, + Issue: convert.ToAPIIssue(c.Issue), + Comment: c.APIFormat(), + Changes: &api.ChangesPayload{ + Body: &api.ChangesFromPayload{ + From: oldContent, + }, }, - }, - Repository: c.Issue.Repo.APIFormat(mode), - Sender: doer.APIFormat(), - IsPull: c.Issue.IsPull, - }); err != nil { + Repository: c.Issue.Repo.APIFormat(mode), + Sender: doer.APIFormat(), + IsPull: true, + }) + } else { + err = webhook_module.PrepareWebhooks(c.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ + Action: api.HookIssueCommentEdited, + Issue: convert.ToAPIIssue(c.Issue), + Comment: c.APIFormat(), + Changes: &api.ChangesPayload{ + Body: &api.ChangesFromPayload{ + From: oldContent, + }, + }, + Repository: c.Issue.Repo.APIFormat(mode), + Sender: doer.APIFormat(), + IsPull: false, + }) + } + + if err != nil { log.Error("PrepareWebhooks [comment_id: %d]: %v", c.ID, err) } } @@ -373,45 +393,76 @@ func (m *webhookNotifier) NotifyUpdateComment(doer *models.User, c *models.Comme func (m *webhookNotifier) NotifyCreateIssueComment(doer *models.User, repo *models.Repository, issue *models.Issue, comment *models.Comment) { mode, _ := models.AccessLevel(doer, repo) - if err := webhook_module.PrepareWebhooks(repo, models.HookEventIssueComment, &api.IssueCommentPayload{ - Action: api.HookIssueCommentCreated, - Issue: convert.ToAPIIssue(issue), - Comment: comment.APIFormat(), - Repository: repo.APIFormat(mode), - Sender: doer.APIFormat(), - IsPull: issue.IsPull, - }); err != nil { + + var err error + if issue.IsPull { + err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ + Action: api.HookIssueCommentCreated, + Issue: convert.ToAPIIssue(issue), + Comment: comment.APIFormat(), + Repository: repo.APIFormat(mode), + Sender: doer.APIFormat(), + IsPull: true, + }) + } else { + err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ + Action: api.HookIssueCommentCreated, + Issue: convert.ToAPIIssue(issue), + Comment: comment.APIFormat(), + Repository: repo.APIFormat(mode), + Sender: doer.APIFormat(), + IsPull: false, + }) + } + + if err != nil { log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err) } } func (m *webhookNotifier) NotifyDeleteComment(doer *models.User, comment *models.Comment) { - if err := comment.LoadPoster(); err != nil { + var err error + + if err = comment.LoadPoster(); err != nil { log.Error("LoadPoster: %v", err) return } - if err := comment.LoadIssue(); err != nil { + if err = comment.LoadIssue(); err != nil { log.Error("LoadIssue: %v", err) return } - if err := comment.Issue.LoadAttributes(); err != nil { + if err = comment.Issue.LoadAttributes(); err != nil { log.Error("LoadAttributes: %v", err) return } mode, _ := models.AccessLevel(doer, comment.Issue.Repo) - if err := webhook_module.PrepareWebhooks(comment.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ - Action: api.HookIssueCommentDeleted, - Issue: convert.ToAPIIssue(comment.Issue), - Comment: comment.APIFormat(), - Repository: comment.Issue.Repo.APIFormat(mode), - Sender: doer.APIFormat(), - IsPull: comment.Issue.IsPull, - }); err != nil { + if comment.Issue.IsPull { + err = webhook_module.PrepareWebhooks(comment.Issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ + Action: api.HookIssueCommentDeleted, + Issue: convert.ToAPIIssue(comment.Issue), + Comment: comment.APIFormat(), + Repository: comment.Issue.Repo.APIFormat(mode), + Sender: doer.APIFormat(), + IsPull: true, + }) + } else { + err = webhook_module.PrepareWebhooks(comment.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ + Action: api.HookIssueCommentDeleted, + Issue: convert.ToAPIIssue(comment.Issue), + Comment: comment.APIFormat(), + Repository: comment.Issue.Repo.APIFormat(mode), + Sender: doer.APIFormat(), + IsPull: false, + }) + } + + if err != nil { log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err) } + } func (m *webhookNotifier) NotifyIssueChangeLabels(doer *models.User, issue *models.Issue, @@ -438,7 +489,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *models.User, issue *mode log.Error("LoadIssue: %v", err) return } - err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ + err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestLabel, &api.PullRequestPayload{ Action: api.HookIssueLabelUpdated, Index: issue.Index, PullRequest: convert.ToAPIPullRequest(issue.PullRequest), @@ -446,7 +497,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *models.User, issue *mode Sender: doer.APIFormat(), }) } else { - err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ + err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ Action: api.HookIssueLabelUpdated, Index: issue.Index, Issue: convert.ToAPIIssue(issue), @@ -480,7 +531,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m log.Error("LoadIssue: %v", err) return } - err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ + err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestMilestone, &api.PullRequestPayload{ Action: hookAction, Index: issue.Index, PullRequest: convert.ToAPIPullRequest(issue.PullRequest), @@ -488,7 +539,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m Sender: doer.APIFormat(), }) } else { - err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ + err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueMilestone, &api.IssuePayload{ Action: hookAction, Index: issue.Index, Issue: convert.ToAPIIssue(issue), @@ -597,11 +648,11 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review switch review.Type { case models.ReviewTypeApprove: - reviewHookType = models.HookEventPullRequestApproved + reviewHookType = models.HookEventPullRequestReviewApproved case models.ReviewTypeComment: reviewHookType = models.HookEventPullRequestComment case models.ReviewTypeReject: - reviewHookType = models.HookEventPullRequestRejected + reviewHookType = models.HookEventPullRequestReviewRejected default: // unsupported review webhook type here log.Error("Unsupported review webhook type") @@ -619,7 +670,7 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review return } if err := webhook_module.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{ - Action: api.HookIssueSynchronized, + Action: api.HookIssueReviewed, Index: review.Issue.Index, PullRequest: convert.ToAPIPullRequest(pr), Repository: review.Issue.Repo.APIFormat(mode), @@ -673,7 +724,7 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *m return } - if err := webhook_module.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ + if err := webhook_module.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequestSync, &api.PullRequestPayload{ Action: api.HookIssueSynchronized, Index: pr.Issue.Index, PullRequest: convert.ToAPIPullRequest(pr), diff --git a/modules/structs/hook.go b/modules/structs/hook.go index f2bc4f16e1..a10dd4281c 100644 --- a/modules/structs/hook.go +++ b/modules/structs/hook.go @@ -374,6 +374,8 @@ const ( HookIssueMilestoned HookIssueAction = "milestoned" // HookIssueDemilestoned is an issue action for when a milestone is cleared on an issue. HookIssueDemilestoned HookIssueAction = "demilestoned" + // HookIssueReviewed is an issue action for when a pull request is reviewed + HookIssueReviewed HookIssueAction = "reviewed" ) // IssuePayload represents the payload information that is sent along with an issue event. diff --git a/modules/webhook/deliver.go b/modules/webhook/deliver.go index 9f5c938f83..505d27a2de 100644 --- a/modules/webhook/deliver.go +++ b/modules/webhook/deliver.go @@ -74,13 +74,13 @@ func Deliver(t *models.HookTask) error { } req.Header.Add("X-Gitea-Delivery", t.UUID) - req.Header.Add("X-Gitea-Event", string(t.EventType)) + req.Header.Add("X-Gitea-Event", t.EventType.Event()) req.Header.Add("X-Gitea-Signature", t.Signature) req.Header.Add("X-Gogs-Delivery", t.UUID) - req.Header.Add("X-Gogs-Event", string(t.EventType)) + req.Header.Add("X-Gogs-Event", t.EventType.Event()) req.Header.Add("X-Gogs-Signature", t.Signature) req.Header["X-GitHub-Delivery"] = []string{t.UUID} - req.Header["X-GitHub-Event"] = []string{string(t.EventType)} + req.Header["X-GitHub-Event"] = []string{t.EventType.Event()} // Record delivery information. t.RequestInfo = &models.HookRequest{ diff --git a/modules/webhook/dingtalk.go b/modules/webhook/dingtalk.go index fc99202a70..f2dd5a79ed 100644 --- a/modules/webhook/dingtalk.go +++ b/modules/webhook/dingtalk.go @@ -181,7 +181,7 @@ func getDingtalkPullRequestPayload(p *api.PullRequestPayload) (*DingtalkPayload, func getDingtalkPullRequestApprovalPayload(p *api.PullRequestPayload, event models.HookEventType) (*DingtalkPayload, error) { var text, title string switch p.Action { - case api.HookIssueSynchronized: + case api.HookIssueReviewed: action, err := parseHookPullRequestEventType(event) if err != nil { return nil, err @@ -261,15 +261,16 @@ func GetDingtalkPayload(p api.Payloader, event models.HookEventType, meta string return getDingtalkDeletePayload(p.(*api.DeletePayload)) case models.HookEventFork: return getDingtalkForkPayload(p.(*api.ForkPayload)) - case models.HookEventIssues: + case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone: return getDingtalkIssuesPayload(p.(*api.IssuePayload)) - case models.HookEventIssueComment: + case models.HookEventIssueComment, models.HookEventPullRequestComment: return getDingtalkIssueCommentPayload(p.(*api.IssueCommentPayload)) case models.HookEventPush: return getDingtalkPushPayload(p.(*api.PushPayload)) - case models.HookEventPullRequest: + case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel, + models.HookEventPullRequestMilestone, models.HookEventPullRequestSync: return getDingtalkPullRequestPayload(p.(*api.PullRequestPayload)) - case models.HookEventPullRequestApproved, models.HookEventPullRequestRejected, models.HookEventPullRequestComment: + case models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewComment: return getDingtalkPullRequestApprovalPayload(p.(*api.PullRequestPayload), event) case models.HookEventRepository: return getDingtalkRepositoryPayload(p.(*api.RepositoryPayload)) diff --git a/modules/webhook/discord.go b/modules/webhook/discord.go index 732821c183..e455a102bd 100644 --- a/modules/webhook/discord.go +++ b/modules/webhook/discord.go @@ -296,7 +296,7 @@ func getDiscordPullRequestApprovalPayload(p *api.PullRequestPayload, meta *Disco var text, title string var color int switch p.Action { - case api.HookIssueSynchronized: + case api.HookIssueReviewed: action, err := parseHookPullRequestEventType(event) if err != nil { return nil, err @@ -306,9 +306,9 @@ func getDiscordPullRequestApprovalPayload(p *api.PullRequestPayload, meta *Disco text = p.Review.Content switch event { - case models.HookEventPullRequestApproved: + case models.HookEventPullRequestReviewApproved: color = greenColor - case models.HookEventPullRequestRejected: + case models.HookEventPullRequestReviewRejected: color = redColor case models.HookEventPullRequestComment: color = greyColor @@ -405,15 +405,16 @@ func GetDiscordPayload(p api.Payloader, event models.HookEventType, meta string) return getDiscordDeletePayload(p.(*api.DeletePayload), discord) case models.HookEventFork: return getDiscordForkPayload(p.(*api.ForkPayload), discord) - case models.HookEventIssues: + case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone: return getDiscordIssuesPayload(p.(*api.IssuePayload), discord) - case models.HookEventIssueComment: + case models.HookEventIssueComment, models.HookEventPullRequestComment: return getDiscordIssueCommentPayload(p.(*api.IssueCommentPayload), discord) case models.HookEventPush: return getDiscordPushPayload(p.(*api.PushPayload), discord) - case models.HookEventPullRequest: + case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel, + models.HookEventPullRequestMilestone, models.HookEventPullRequestSync: return getDiscordPullRequestPayload(p.(*api.PullRequestPayload), discord) - case models.HookEventPullRequestRejected, models.HookEventPullRequestApproved, models.HookEventPullRequestComment: + case models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewComment: return getDiscordPullRequestApprovalPayload(p.(*api.PullRequestPayload), discord, event) case models.HookEventRepository: return getDiscordRepositoryPayload(p.(*api.RepositoryPayload), discord) @@ -428,9 +429,9 @@ func parseHookPullRequestEventType(event models.HookEventType) (string, error) { switch event { - case models.HookEventPullRequestApproved: + case models.HookEventPullRequestReviewApproved: return "approved", nil - case models.HookEventPullRequestRejected: + case models.HookEventPullRequestReviewRejected: return "rejected", nil case models.HookEventPullRequestComment: return "comment", nil diff --git a/modules/webhook/feishu.go b/modules/webhook/feishu.go index 6af78494c9..57eb909c48 100644 --- a/modules/webhook/feishu.go +++ b/modules/webhook/feishu.go @@ -189,7 +189,7 @@ func GetFeishuPayload(p api.Payloader, event models.HookEventType, meta string) return getFeishuPushPayload(p.(*api.PushPayload)) case models.HookEventPullRequest: return getFeishuPullRequestPayload(p.(*api.PullRequestPayload)) - case models.HookEventPullRequestApproved, models.HookEventPullRequestRejected, models.HookEventPullRequestComment: + case models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewRejected, models.HookEventPullRequestComment: return getFeishuPullRequestApprovalPayload(p.(*api.PullRequestPayload), event) case models.HookEventRepository: return getFeishuRepositoryPayload(p.(*api.RepositoryPayload)) diff --git a/modules/webhook/msteams.go b/modules/webhook/msteams.go index b9ceb5ee0b..a0925010d6 100644 --- a/modules/webhook/msteams.go +++ b/modules/webhook/msteams.go @@ -395,7 +395,7 @@ func getMSTeamsPullRequestApprovalPayload(p *api.PullRequestPayload, event model var text, title string var color int switch p.Action { - case api.HookIssueSynchronized: + case api.HookIssueReviewed: action, err := parseHookPullRequestEventType(event) if err != nil { return nil, err @@ -405,9 +405,9 @@ func getMSTeamsPullRequestApprovalPayload(p *api.PullRequestPayload, event model text = p.Review.Content switch event { - case models.HookEventPullRequestApproved: + case models.HookEventPullRequestReviewApproved: color = greenColor - case models.HookEventPullRequestRejected: + case models.HookEventPullRequestReviewRejected: color = redColor case models.HookEventPullRequestComment: color = greyColor @@ -555,15 +555,16 @@ func GetMSTeamsPayload(p api.Payloader, event models.HookEventType, meta string) return getMSTeamsDeletePayload(p.(*api.DeletePayload)) case models.HookEventFork: return getMSTeamsForkPayload(p.(*api.ForkPayload)) - case models.HookEventIssues: + case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone: return getMSTeamsIssuesPayload(p.(*api.IssuePayload)) - case models.HookEventIssueComment: + case models.HookEventIssueComment, models.HookEventPullRequestComment: return getMSTeamsIssueCommentPayload(p.(*api.IssueCommentPayload)) case models.HookEventPush: return getMSTeamsPushPayload(p.(*api.PushPayload)) - case models.HookEventPullRequest: + case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel, + models.HookEventPullRequestMilestone, models.HookEventPullRequestSync: return getMSTeamsPullRequestPayload(p.(*api.PullRequestPayload)) - case models.HookEventPullRequestRejected, models.HookEventPullRequestApproved, models.HookEventPullRequestComment: + case models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewComment: return getMSTeamsPullRequestApprovalPayload(p.(*api.PullRequestPayload), event) case models.HookEventRepository: return getMSTeamsRepositoryPayload(p.(*api.RepositoryPayload)) diff --git a/modules/webhook/slack.go b/modules/webhook/slack.go index 361e15ece5..e3715ab00c 100644 --- a/modules/webhook/slack.go +++ b/modules/webhook/slack.go @@ -271,7 +271,7 @@ func getSlackPullRequestApprovalPayload(p *api.PullRequestPayload, slack *SlackM var text string switch p.Action { - case api.HookIssueSynchronized: + case api.HookIssueReviewed: action, err := parseHookPullRequestEventType(event) if err != nil { return nil, err @@ -324,15 +324,16 @@ func GetSlackPayload(p api.Payloader, event models.HookEventType, meta string) ( return getSlackDeletePayload(p.(*api.DeletePayload), slack) case models.HookEventFork: return getSlackForkPayload(p.(*api.ForkPayload), slack) - case models.HookEventIssues: + case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone: return getSlackIssuesPayload(p.(*api.IssuePayload), slack) - case models.HookEventIssueComment: + case models.HookEventIssueComment, models.HookEventPullRequestComment: return getSlackIssueCommentPayload(p.(*api.IssueCommentPayload), slack) case models.HookEventPush: return getSlackPushPayload(p.(*api.PushPayload), slack) - case models.HookEventPullRequest: + case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel, + models.HookEventPullRequestMilestone, models.HookEventPullRequestSync: return getSlackPullRequestPayload(p.(*api.PullRequestPayload), slack) - case models.HookEventPullRequestRejected, models.HookEventPullRequestApproved, models.HookEventPullRequestComment: + case models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewComment: return getSlackPullRequestApprovalPayload(p.(*api.PullRequestPayload), slack, event) case models.HookEventRepository: return getSlackRepositoryPayload(p.(*api.RepositoryPayload), slack) diff --git a/modules/webhook/telegram.go b/modules/webhook/telegram.go index 47d54f7cb9..cf096e2c66 100644 --- a/modules/webhook/telegram.go +++ b/modules/webhook/telegram.go @@ -151,7 +151,7 @@ func getTelegramPullRequestPayload(p *api.PullRequestPayload) (*TelegramPayload, func getTelegramPullRequestApprovalPayload(p *api.PullRequestPayload, event models.HookEventType) (*TelegramPayload, error) { var text, attachmentText string switch p.Action { - case api.HookIssueSynchronized: + case api.HookIssueReviewed: action, err := parseHookPullRequestEventType(event) if err != nil { return nil, err @@ -203,15 +203,16 @@ func GetTelegramPayload(p api.Payloader, event models.HookEventType, meta string return getTelegramDeletePayload(p.(*api.DeletePayload)) case models.HookEventFork: return getTelegramForkPayload(p.(*api.ForkPayload)) - case models.HookEventIssues: + case models.HookEventIssues, models.HookEventIssueAssign, models.HookEventIssueLabel, models.HookEventIssueMilestone: return getTelegramIssuesPayload(p.(*api.IssuePayload)) - case models.HookEventIssueComment: + case models.HookEventIssueComment, models.HookEventPullRequestComment: return getTelegramIssueCommentPayload(p.(*api.IssueCommentPayload)) case models.HookEventPush: return getTelegramPushPayload(p.(*api.PushPayload)) - case models.HookEventPullRequest: + case models.HookEventPullRequest, models.HookEventPullRequestAssign, models.HookEventPullRequestLabel, + models.HookEventPullRequestMilestone, models.HookEventPullRequestSync: return getTelegramPullRequestPayload(p.(*api.PullRequestPayload)) - case models.HookEventPullRequestRejected, models.HookEventPullRequestApproved, models.HookEventPullRequestComment: + case models.HookEventPullRequestReviewRejected, models.HookEventPullRequestReviewApproved, models.HookEventPullRequestReviewComment: return getTelegramPullRequestApprovalPayload(p.(*api.PullRequestPayload), event) case models.HookEventRepository: return getTelegramRepositoryPayload(p.(*api.RepositoryPayload)) |