Implement some action notifier functions (#29173)
Fix #29166 Add support for the following activity types of `pull_request` - assigned - unassigned - review_requested - review_request_removed - milestoned - demilestoned
This commit is contained in:
parent
67adc5c1dc
commit
1a6e1cbada
|
@ -52,7 +52,9 @@ func canGithubEventMatch(eventName string, triggedEvent webhook_module.HookEvent
|
||||||
case webhook_module.HookEventPullRequest,
|
case webhook_module.HookEventPullRequest,
|
||||||
webhook_module.HookEventPullRequestSync,
|
webhook_module.HookEventPullRequestSync,
|
||||||
webhook_module.HookEventPullRequestAssign,
|
webhook_module.HookEventPullRequestAssign,
|
||||||
webhook_module.HookEventPullRequestLabel:
|
webhook_module.HookEventPullRequestLabel,
|
||||||
|
webhook_module.HookEventPullRequestReviewRequest,
|
||||||
|
webhook_module.HookEventPullRequestMilestone:
|
||||||
return true
|
return true
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -221,7 +221,9 @@ func detectMatched(gitRepo *git.Repository, commit *git.Commit, triggedEvent web
|
||||||
webhook_module.HookEventPullRequest,
|
webhook_module.HookEventPullRequest,
|
||||||
webhook_module.HookEventPullRequestSync,
|
webhook_module.HookEventPullRequestSync,
|
||||||
webhook_module.HookEventPullRequestAssign,
|
webhook_module.HookEventPullRequestAssign,
|
||||||
webhook_module.HookEventPullRequestLabel:
|
webhook_module.HookEventPullRequestLabel,
|
||||||
|
webhook_module.HookEventPullRequestReviewRequest,
|
||||||
|
webhook_module.HookEventPullRequestMilestone:
|
||||||
return matchPullRequestEvent(gitRepo, commit, payload.(*api.PullRequestPayload), evt)
|
return matchPullRequestEvent(gitRepo, commit, payload.(*api.PullRequestPayload), evt)
|
||||||
|
|
||||||
case // pull_request_review
|
case // pull_request_review
|
||||||
|
@ -397,13 +399,13 @@ func matchPullRequestEvent(gitRepo *git.Repository, commit *git.Commit, prPayloa
|
||||||
} else {
|
} else {
|
||||||
// See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request
|
// See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request
|
||||||
// Actions with the same name:
|
// Actions with the same name:
|
||||||
// opened, edited, closed, reopened, assigned, unassigned
|
// opened, edited, closed, reopened, assigned, unassigned, review_requested, review_request_removed, milestoned, demilestoned
|
||||||
// Actions need to be converted:
|
// Actions need to be converted:
|
||||||
// synchronized -> synchronize
|
// synchronized -> synchronize
|
||||||
// label_updated -> labeled
|
// label_updated -> labeled
|
||||||
// label_cleared -> unlabeled
|
// label_cleared -> unlabeled
|
||||||
// Unsupported activity types:
|
// Unsupported activity types:
|
||||||
// converted_to_draft, ready_for_review, locked, unlocked, review_requested, review_request_removed, auto_merge_enabled, auto_merge_disabled
|
// converted_to_draft, ready_for_review, locked, unlocked, auto_merge_enabled, auto_merge_disabled, enqueued, dequeued
|
||||||
|
|
||||||
action := prPayload.Action
|
action := prPayload.Action
|
||||||
switch action {
|
switch action {
|
||||||
|
|
|
@ -101,11 +101,40 @@ func (n *actionsNotifier) IssueChangeStatus(ctx context.Context, doer *user_mode
|
||||||
Notify(ctx)
|
Notify(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IssueChangeAssignee notifies assigned or unassigned to notifiers
|
||||||
|
func (n *actionsNotifier) IssueChangeAssignee(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, assignee *user_model.User, removed bool, comment *issues_model.Comment) {
|
||||||
|
ctx = withMethod(ctx, "IssueChangeAssignee")
|
||||||
|
|
||||||
|
var action api.HookIssueAction
|
||||||
|
if removed {
|
||||||
|
action = api.HookIssueUnassigned
|
||||||
|
} else {
|
||||||
|
action = api.HookIssueAssigned
|
||||||
|
}
|
||||||
|
notifyIssueChange(ctx, doer, issue, webhook_module.HookEventPullRequestAssign, action)
|
||||||
|
}
|
||||||
|
|
||||||
|
// IssueChangeMilestone notifies assignee to notifiers
|
||||||
|
func (n *actionsNotifier) IssueChangeMilestone(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, oldMilestoneID int64) {
|
||||||
|
ctx = withMethod(ctx, "IssueChangeMilestone")
|
||||||
|
|
||||||
|
var action api.HookIssueAction
|
||||||
|
if issue.MilestoneID > 0 {
|
||||||
|
action = api.HookIssueMilestoned
|
||||||
|
} else {
|
||||||
|
action = api.HookIssueDemilestoned
|
||||||
|
}
|
||||||
|
notifyIssueChange(ctx, doer, issue, webhook_module.HookEventPullRequestMilestone, action)
|
||||||
|
}
|
||||||
|
|
||||||
func (n *actionsNotifier) IssueChangeLabels(ctx context.Context, doer *user_model.User, issue *issues_model.Issue,
|
func (n *actionsNotifier) IssueChangeLabels(ctx context.Context, doer *user_model.User, issue *issues_model.Issue,
|
||||||
_, _ []*issues_model.Label,
|
_, _ []*issues_model.Label,
|
||||||
) {
|
) {
|
||||||
ctx = withMethod(ctx, "IssueChangeLabels")
|
ctx = withMethod(ctx, "IssueChangeLabels")
|
||||||
|
notifyIssueChange(ctx, doer, issue, webhook_module.HookEventPullRequestLabel, api.HookIssueLabelUpdated)
|
||||||
|
}
|
||||||
|
|
||||||
|
func notifyIssueChange(ctx context.Context, doer *user_model.User, issue *issues_model.Issue, event webhook_module.HookEventType, action api.HookIssueAction) {
|
||||||
var err error
|
var err error
|
||||||
if err = issue.LoadRepo(ctx); err != nil {
|
if err = issue.LoadRepo(ctx); err != nil {
|
||||||
log.Error("LoadRepo: %v", err)
|
log.Error("LoadRepo: %v", err)
|
||||||
|
@ -117,20 +146,15 @@ func (n *actionsNotifier) IssueChangeLabels(ctx context.Context, doer *user_mode
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
permission, _ := access_model.GetUserRepoPermission(ctx, issue.Repo, issue.Poster)
|
|
||||||
if issue.IsPull {
|
if issue.IsPull {
|
||||||
if err = issue.LoadPullRequest(ctx); err != nil {
|
if err = issue.LoadPullRequest(ctx); err != nil {
|
||||||
log.Error("loadPullRequest: %v", err)
|
log.Error("loadPullRequest: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if err = issue.PullRequest.LoadIssue(ctx); err != nil {
|
newNotifyInputFromIssue(issue, event).
|
||||||
log.Error("LoadIssue: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
newNotifyInputFromIssue(issue, webhook_module.HookEventPullRequestLabel).
|
|
||||||
WithDoer(doer).
|
WithDoer(doer).
|
||||||
WithPayload(&api.PullRequestPayload{
|
WithPayload(&api.PullRequestPayload{
|
||||||
Action: api.HookIssueLabelUpdated,
|
Action: action,
|
||||||
Index: issue.Index,
|
Index: issue.Index,
|
||||||
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
|
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
|
||||||
Repository: convert.ToRepo(ctx, issue.Repo, access_model.Permission{AccessMode: perm_model.AccessModeNone}),
|
Repository: convert.ToRepo(ctx, issue.Repo, access_model.Permission{AccessMode: perm_model.AccessModeNone}),
|
||||||
|
@ -140,10 +164,11 @@ func (n *actionsNotifier) IssueChangeLabels(ctx context.Context, doer *user_mode
|
||||||
Notify(ctx)
|
Notify(ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
newNotifyInputFromIssue(issue, webhook_module.HookEventIssueLabel).
|
permission, _ := access_model.GetUserRepoPermission(ctx, issue.Repo, issue.Poster)
|
||||||
|
newNotifyInputFromIssue(issue, event).
|
||||||
WithDoer(doer).
|
WithDoer(doer).
|
||||||
WithPayload(&api.IssuePayload{
|
WithPayload(&api.IssuePayload{
|
||||||
Action: api.HookIssueLabelUpdated,
|
Action: action,
|
||||||
Index: issue.Index,
|
Index: issue.Index,
|
||||||
Issue: convert.ToAPIIssue(ctx, issue),
|
Issue: convert.ToAPIIssue(ctx, issue),
|
||||||
Repository: convert.ToRepo(ctx, issue.Repo, permission),
|
Repository: convert.ToRepo(ctx, issue.Repo, permission),
|
||||||
|
@ -305,6 +330,39 @@ func (n *actionsNotifier) PullRequestReview(ctx context.Context, pr *issues_mode
|
||||||
}).Notify(ctx)
|
}).Notify(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (n *actionsNotifier) PullRequestReviewRequest(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("PullRequestReviewRequest: issue is not a pull request: %v", issue.ID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx = withMethod(ctx, "PullRequestReviewRequest")
|
||||||
|
|
||||||
|
permission, _ := access_model.GetUserRepoPermission(ctx, issue.Repo, doer)
|
||||||
|
if err := issue.LoadPullRequest(ctx); err != nil {
|
||||||
|
log.Error("LoadPullRequest failed: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var action api.HookIssueAction
|
||||||
|
if isRequest {
|
||||||
|
action = api.HookIssueReviewRequested
|
||||||
|
} else {
|
||||||
|
action = api.HookIssueReviewRequestRemoved
|
||||||
|
}
|
||||||
|
newNotifyInputFromIssue(issue, webhook_module.HookEventPullRequestReviewRequest).
|
||||||
|
WithDoer(doer).
|
||||||
|
WithPayload(&api.PullRequestPayload{
|
||||||
|
Action: action,
|
||||||
|
Index: issue.Index,
|
||||||
|
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
|
||||||
|
RequestedReviewer: convert.ToUser(ctx, reviewer, nil),
|
||||||
|
Repository: convert.ToRepo(ctx, issue.Repo, permission),
|
||||||
|
Sender: convert.ToUser(ctx, doer, nil),
|
||||||
|
}).
|
||||||
|
WithPullRequest(issue.PullRequest).
|
||||||
|
Notify(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
func (*actionsNotifier) MergePullRequest(ctx context.Context, doer *user_model.User, pr *issues_model.PullRequest) {
|
func (*actionsNotifier) MergePullRequest(ctx context.Context, doer *user_model.User, pr *issues_model.PullRequest) {
|
||||||
ctx = withMethod(ctx, "MergePullRequest")
|
ctx = withMethod(ctx, "MergePullRequest")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue