summaryrefslogtreecommitdiffstats
path: root/services/webhook
diff options
context:
space:
mode:
author谈笑风生间 <makonike@anyview.fun>2023-05-25 10:06:27 +0800
committerGitHub <noreply@github.com>2023-05-24 22:06:27 -0400
commit309354c70ee994a1e8f261d7bc24e7473e601d02 (patch)
tree89a96f611eef8b37e17dcead9767ff8d9ba976ef /services/webhook
parent93c6a9a652460f89fc719024c435cacbb235d302 (diff)
downloadgitea-309354c70ee994a1e8f261d7bc24e7473e601d02.tar.gz
gitea-309354c70ee994a1e8f261d7bc24e7473e601d02.zip
New webhook trigger for receiving Pull Request review requests (#24481)
close https://github.com/go-gitea/gitea/issues/16321 Provided a webhook trigger for requesting someone to review the Pull Request. Some modifications have been made to the returned `PullRequestPayload` based on the GitHub webhook settings, including: - add a description of the current reviewer object as `RequestedReviewer` . - setting the action to either **review_requested** or **review_request_removed** based on the operation. - adding the `RequestedReviewers` field to the issues_model.PullRequest. This field will be loaded into the PullRequest through `LoadRequestedReviewers()` when `ToAPIPullRequest` is called. After the Pull Request is merged, I will supplement the relevant documentation.
Diffstat (limited to 'services/webhook')
-rw-r--r--services/webhook/notifier.go28
-rw-r--r--services/webhook/payloader.go2
2 files changed, 29 insertions, 1 deletions
diff --git a/services/webhook/notifier.go b/services/webhook/notifier.go
index 1f7cb8d988..bd25e20805 100644
--- a/services/webhook/notifier.go
+++ b/services/webhook/notifier.go
@@ -719,6 +719,34 @@ func (m *webhookNotifier) NotifyPullRequestReview(ctx context.Context, pr *issue
}
}
+func (m *webhookNotifier) NotifyPullReviewRequest(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, reviewer *user_model.User, isRequest bool, comment *issues_model.Comment) {
+ if !issue.IsPull {
+ log.Warn("NotifyPullReviewRequest: issue is not a pull request: %v", issue.ID)
+ return
+ }
+ mode, _ := access_model.AccessLevelUnit(ctx, doer, issue.Repo, unit.TypePullRequests)
+ if err := issue.LoadPullRequest(ctx); err != nil {
+ log.Error("LoadPullRequest failed: %v", err)
+ return
+ }
+ apiPullRequest := &api.PullRequestPayload{
+ Index: issue.Index,
+ PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
+ RequestedReviewer: convert.ToUser(ctx, reviewer, nil),
+ Repository: convert.ToRepo(ctx, issue.Repo, mode),
+ Sender: convert.ToUser(ctx, doer, nil),
+ }
+ if isRequest {
+ apiPullRequest.Action = api.HookIssueReviewRequested
+ } else {
+ apiPullRequest.Action = api.HookIssueReviewRequestRemoved
+ }
+ if err := PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventPullRequestReviewRequest, apiPullRequest); err != nil {
+ log.Error("PrepareWebhooks [review_requested: %v]: %v", isRequest, err)
+ return
+ }
+}
+
func (m *webhookNotifier) NotifyCreateRef(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, refType, refFullName, refID string) {
apiPusher := convert.ToUser(ctx, pusher, nil)
apiRepo := convert.ToRepo(ctx, repo, perm.AccessModeNone)
diff --git a/services/webhook/payloader.go b/services/webhook/payloader.go
index 9eff25628b..d53e65fa5e 100644
--- a/services/webhook/payloader.go
+++ b/services/webhook/payloader.go
@@ -43,7 +43,7 @@ func convertPayloader(s PayloadConvertor, p api.Payloader, event webhook_module.
case webhook_module.HookEventPush:
return s.Push(p.(*api.PushPayload))
case webhook_module.HookEventPullRequest, webhook_module.HookEventPullRequestAssign, webhook_module.HookEventPullRequestLabel,
- webhook_module.HookEventPullRequestMilestone, webhook_module.HookEventPullRequestSync:
+ webhook_module.HookEventPullRequestMilestone, webhook_module.HookEventPullRequestSync, webhook_module.HookEventPullRequestReviewRequest:
return s.PullRequest(p.(*api.PullRequestPayload))
case webhook_module.HookEventPullRequestReviewApproved, webhook_module.HookEventPullRequestReviewRejected, webhook_module.HookEventPullRequestReviewComment:
return s.Review(p.(*api.PullRequestPayload), event)