Skip to content

Commit d50ed0a

Browse files
authored
Support requested_reviewers data in comment webhook events (#26178)
close #25833 Currently, the information for "requested_reviewers" is only included in the webhook event for reviews. I would like to suggest adding this information to the webhook event for "PullRequest comment" as well, as they both pertain to the "PullRequest" event. Also, The reviewer information for the Pull Request is not displayed when it is approved or rejected.
1 parent 5242e52 commit d50ed0a

File tree

2 files changed

+50
-39
lines changed

2 files changed

+50
-39
lines changed

modules/structs/hook.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -217,13 +217,14 @@ const (
217217

218218
// IssueCommentPayload represents a payload information of issue comment event.
219219
type IssueCommentPayload struct {
220-
Action HookIssueCommentAction `json:"action"`
221-
Issue *Issue `json:"issue"`
222-
Comment *Comment `json:"comment"`
223-
Changes *ChangesPayload `json:"changes,omitempty"`
224-
Repository *Repository `json:"repository"`
225-
Sender *User `json:"sender"`
226-
IsPull bool `json:"is_pull"`
220+
Action HookIssueCommentAction `json:"action"`
221+
Issue *Issue `json:"issue"`
222+
PullRequest *PullRequest `json:"pull_request,omitempty"`
223+
Comment *Comment `json:"comment"`
224+
Changes *ChangesPayload `json:"changes,omitempty"`
225+
Repository *Repository `json:"repository"`
226+
Sender *User `json:"sender"`
227+
IsPull bool `json:"is_pull"`
227228
}
228229

229230
// JSONPayload implements Payload

services/webhook/notifier.go

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func (m *webhookNotifier) IssueClearLabels(ctx context.Context, doer *user_model
5959
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventPullRequestLabel, &api.PullRequestPayload{
6060
Action: api.HookIssueLabelCleared,
6161
Index: issue.Index,
62-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
62+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
6363
Repository: convert.ToRepo(ctx, issue.Repo, permission),
6464
Sender: convert.ToUser(ctx, doer, nil),
6565
})
@@ -150,7 +150,7 @@ func (m *webhookNotifier) IssueChangeAssignee(ctx context.Context, doer *user_mo
150150
}
151151
apiPullRequest := &api.PullRequestPayload{
152152
Index: issue.Index,
153-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
153+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
154154
Repository: convert.ToRepo(ctx, issue.Repo, permission),
155155
Sender: convert.ToUser(ctx, doer, nil),
156156
}
@@ -201,7 +201,7 @@ func (m *webhookNotifier) IssueChangeTitle(ctx context.Context, doer *user_model
201201
From: oldTitle,
202202
},
203203
},
204-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
204+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
205205
Repository: convert.ToRepo(ctx, issue.Repo, permission),
206206
Sender: convert.ToUser(ctx, doer, nil),
207207
})
@@ -236,7 +236,7 @@ func (m *webhookNotifier) IssueChangeStatus(ctx context.Context, doer *user_mode
236236
// Merge pull request calls issue.changeStatus so we need to handle separately.
237237
apiPullRequest := &api.PullRequestPayload{
238238
Index: issue.Index,
239-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
239+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
240240
Repository: convert.ToRepo(ctx, issue.Repo, permission),
241241
Sender: convert.ToUser(ctx, doer, nil),
242242
CommitID: commitID,
@@ -307,7 +307,7 @@ func (m *webhookNotifier) NewPullRequest(ctx context.Context, pull *issues_model
307307
if err := PrepareWebhooks(ctx, EventSource{Repository: pull.Issue.Repo}, webhook_module.HookEventPullRequest, &api.PullRequestPayload{
308308
Action: api.HookIssueOpened,
309309
Index: pull.Issue.Index,
310-
PullRequest: convert.ToAPIPullRequest(ctx, pull, nil),
310+
PullRequest: convert.ToAPIPullRequest(ctx, pull, pull.Issue.Poster),
311311
Repository: convert.ToRepo(ctx, pull.Issue.Repo, permission),
312312
Sender: convert.ToUser(ctx, pull.Issue.Poster, nil),
313313
}); err != nil {
@@ -336,7 +336,7 @@ func (m *webhookNotifier) IssueChangeContent(ctx context.Context, doer *user_mod
336336
From: oldContent,
337337
},
338338
},
339-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
339+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
340340
Repository: convert.ToRepo(ctx, issue.Repo, permission),
341341
Sender: convert.ToUser(ctx, doer, nil),
342342
})
@@ -375,17 +375,20 @@ func (m *webhookNotifier) UpdateComment(ctx context.Context, doer *user_model.Us
375375
}
376376

377377
var eventType webhook_module.HookEventType
378+
var pullRequest *api.PullRequest
378379
if c.Issue.IsPull {
379380
eventType = webhook_module.HookEventPullRequestComment
381+
pullRequest = convert.ToAPIPullRequest(ctx, c.Issue.PullRequest, doer)
380382
} else {
381383
eventType = webhook_module.HookEventIssueComment
382384
}
383385

384386
permission, _ := access_model.GetUserRepoPermission(ctx, c.Issue.Repo, doer)
385387
if err := PrepareWebhooks(ctx, EventSource{Repository: c.Issue.Repo}, eventType, &api.IssueCommentPayload{
386-
Action: api.HookIssueCommentEdited,
387-
Issue: convert.ToAPIIssue(ctx, doer, c.Issue),
388-
Comment: convert.ToAPIComment(ctx, c.Issue.Repo, c),
388+
Action: api.HookIssueCommentEdited,
389+
Issue: convert.ToAPIIssue(ctx, doer, c.Issue),
390+
PullRequest: pullRequest,
391+
Comment: convert.ToAPIComment(ctx, c.Issue.Repo, c),
389392
Changes: &api.ChangesPayload{
390393
Body: &api.ChangesFromPayload{
391394
From: oldContent,
@@ -403,20 +406,23 @@ func (m *webhookNotifier) CreateIssueComment(ctx context.Context, doer *user_mod
403406
issue *issues_model.Issue, comment *issues_model.Comment, mentions []*user_model.User,
404407
) {
405408
var eventType webhook_module.HookEventType
409+
var pullRequest *api.PullRequest
406410
if issue.IsPull {
407411
eventType = webhook_module.HookEventPullRequestComment
412+
pullRequest = convert.ToAPIPullRequest(ctx, issue.PullRequest, doer)
408413
} else {
409414
eventType = webhook_module.HookEventIssueComment
410415
}
411416

412417
permission, _ := access_model.GetUserRepoPermission(ctx, repo, doer)
413418
if err := PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, eventType, &api.IssueCommentPayload{
414-
Action: api.HookIssueCommentCreated,
415-
Issue: convert.ToAPIIssue(ctx, doer, issue),
416-
Comment: convert.ToAPIComment(ctx, repo, comment),
417-
Repository: convert.ToRepo(ctx, repo, permission),
418-
Sender: convert.ToUser(ctx, doer, nil),
419-
IsPull: issue.IsPull,
419+
Action: api.HookIssueCommentCreated,
420+
Issue: convert.ToAPIIssue(ctx, doer, issue),
421+
PullRequest: pullRequest,
422+
Comment: convert.ToAPIComment(ctx, repo, comment),
423+
Repository: convert.ToRepo(ctx, repo, permission),
424+
Sender: convert.ToUser(ctx, doer, nil),
425+
IsPull: issue.IsPull,
420426
}); err != nil {
421427
log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err)
422428
}
@@ -440,20 +446,23 @@ func (m *webhookNotifier) DeleteComment(ctx context.Context, doer *user_model.Us
440446
}
441447

442448
var eventType webhook_module.HookEventType
449+
var pullRequest *api.PullRequest
443450
if comment.Issue.IsPull {
444451
eventType = webhook_module.HookEventPullRequestComment
452+
pullRequest = convert.ToAPIPullRequest(ctx, comment.Issue.PullRequest, doer)
445453
} else {
446454
eventType = webhook_module.HookEventIssueComment
447455
}
448456

449457
permission, _ := access_model.GetUserRepoPermission(ctx, comment.Issue.Repo, doer)
450458
if err := PrepareWebhooks(ctx, EventSource{Repository: comment.Issue.Repo}, eventType, &api.IssueCommentPayload{
451-
Action: api.HookIssueCommentDeleted,
452-
Issue: convert.ToAPIIssue(ctx, doer, comment.Issue),
453-
Comment: convert.ToAPIComment(ctx, comment.Issue.Repo, comment),
454-
Repository: convert.ToRepo(ctx, comment.Issue.Repo, permission),
455-
Sender: convert.ToUser(ctx, doer, nil),
456-
IsPull: comment.Issue.IsPull,
459+
Action: api.HookIssueCommentDeleted,
460+
Issue: convert.ToAPIIssue(ctx, doer, comment.Issue),
461+
PullRequest: pullRequest,
462+
Comment: convert.ToAPIComment(ctx, comment.Issue.Repo, comment),
463+
Repository: convert.ToRepo(ctx, comment.Issue.Repo, permission),
464+
Sender: convert.ToUser(ctx, doer, nil),
465+
IsPull: comment.Issue.IsPull,
457466
}); err != nil {
458467
log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err)
459468
}
@@ -525,7 +534,7 @@ func (m *webhookNotifier) IssueChangeLabels(ctx context.Context, doer *user_mode
525534
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventPullRequestLabel, &api.PullRequestPayload{
526535
Action: api.HookIssueLabelUpdated,
527536
Index: issue.Index,
528-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
537+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
529538
Repository: convert.ToRepo(ctx, issue.Repo, access_model.Permission{AccessMode: perm.AccessModeOwner}),
530539
Sender: convert.ToUser(ctx, doer, nil),
531540
})
@@ -567,7 +576,7 @@ func (m *webhookNotifier) IssueChangeMilestone(ctx context.Context, doer *user_m
567576
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventPullRequestMilestone, &api.PullRequestPayload{
568577
Action: hookAction,
569578
Index: issue.Index,
570-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
579+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
571580
Repository: convert.ToRepo(ctx, issue.Repo, permission),
572581
Sender: convert.ToUser(ctx, doer, nil),
573582
})
@@ -640,7 +649,7 @@ func (*webhookNotifier) MergePullRequest(ctx context.Context, doer *user_model.U
640649
// Merge pull request calls issue.changeStatus so we need to handle separately.
641650
apiPullRequest := &api.PullRequestPayload{
642651
Index: pr.Issue.Index,
643-
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
652+
PullRequest: convert.ToAPIPullRequest(ctx, pr, doer),
644653
Repository: convert.ToRepo(ctx, pr.Issue.Repo, permission),
645654
Sender: convert.ToUser(ctx, doer, nil),
646655
Action: api.HookIssueClosed,
@@ -668,7 +677,7 @@ func (m *webhookNotifier) PullRequestChangeTargetBranch(ctx context.Context, doe
668677
From: oldBranch,
669678
},
670679
},
671-
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
680+
PullRequest: convert.ToAPIPullRequest(ctx, pr, doer),
672681
Repository: convert.ToRepo(ctx, issue.Repo, mode),
673682
Sender: convert.ToUser(ctx, doer, nil),
674683
}); err != nil {
@@ -703,11 +712,12 @@ func (m *webhookNotifier) PullRequestReview(ctx context.Context, pr *issues_mode
703712
return
704713
}
705714
if err := PrepareWebhooks(ctx, EventSource{Repository: review.Issue.Repo}, reviewHookType, &api.PullRequestPayload{
706-
Action: api.HookIssueReviewed,
707-
Index: review.Issue.Index,
708-
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
709-
Repository: convert.ToRepo(ctx, review.Issue.Repo, permission),
710-
Sender: convert.ToUser(ctx, review.Reviewer, nil),
715+
Action: api.HookIssueReviewed,
716+
Index: review.Issue.Index,
717+
PullRequest: convert.ToAPIPullRequest(ctx, pr, review.Reviewer),
718+
RequestedReviewer: convert.ToUser(ctx, review.Reviewer, nil),
719+
Repository: convert.ToRepo(ctx, review.Issue.Repo, permission),
720+
Sender: convert.ToUser(ctx, review.Reviewer, nil),
711721
Review: &api.ReviewPayload{
712722
Type: string(reviewHookType),
713723
Content: review.Content,
@@ -729,7 +739,7 @@ func (m *webhookNotifier) PullRequestReviewRequest(ctx context.Context, doer *us
729739
}
730740
apiPullRequest := &api.PullRequestPayload{
731741
Index: issue.Index,
732-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
742+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
733743
RequestedReviewer: convert.ToUser(ctx, reviewer, nil),
734744
Repository: convert.ToRepo(ctx, issue.Repo, permission),
735745
Sender: convert.ToUser(ctx, doer, nil),
@@ -774,7 +784,7 @@ func (m *webhookNotifier) PullRequestSynchronized(ctx context.Context, doer *use
774784
if err := PrepareWebhooks(ctx, EventSource{Repository: pr.Issue.Repo}, webhook_module.HookEventPullRequestSync, &api.PullRequestPayload{
775785
Action: api.HookIssueSynchronized,
776786
Index: pr.Issue.Index,
777-
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
787+
PullRequest: convert.ToAPIPullRequest(ctx, pr, doer),
778788
Repository: convert.ToRepo(ctx, pr.Issue.Repo, access_model.Permission{AccessMode: perm.AccessModeOwner}),
779789
Sender: convert.ToUser(ctx, doer, nil),
780790
}); err != nil {

0 commit comments

Comments
 (0)