Move pull webhook to notification (#8805)
* Move pull webhook to notification * fix fmt
This commit is contained in:
		
							parent
							
								
									05e7715c4b
								
							
						
					
					
						commit
						aaeef295bb
					
				
					 7 changed files with 84 additions and 71 deletions
				
			
		|  | @ -30,6 +30,7 @@ type Notifier interface { | ||||||
| 
 | 
 | ||||||
| 	NotifyNewPullRequest(*models.PullRequest) | 	NotifyNewPullRequest(*models.PullRequest) | ||||||
| 	NotifyMergePullRequest(*models.PullRequest, *models.User, *git.Repository) | 	NotifyMergePullRequest(*models.PullRequest, *models.User, *git.Repository) | ||||||
|  | 	NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) | ||||||
| 	NotifyPullRequestReview(*models.PullRequest, *models.Review, *models.Comment) | 	NotifyPullRequestReview(*models.PullRequest, *models.Review, *models.Comment) | ||||||
| 
 | 
 | ||||||
| 	NotifyCreateIssueComment(*models.User, *models.Repository, | 	NotifyCreateIssueComment(*models.User, *models.Repository, | ||||||
|  |  | ||||||
|  | @ -46,6 +46,10 @@ func (*NullNotifier) NotifyPullRequestReview(pr *models.PullRequest, r *models.R | ||||||
| func (*NullNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) { | func (*NullNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *models.User, baseRepo *git.Repository) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // NotifyPullRequestSynchronized places a place holder function
 | ||||||
|  | func (*NullNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) { | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // NotifyUpdateComment places a place holder function
 | // NotifyUpdateComment places a place holder function
 | ||||||
| func (*NullNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) { | func (*NullNotifier) NotifyUpdateComment(doer *models.User, c *models.Comment, oldContent string) { | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -73,6 +73,13 @@ func NotifyNewPullRequest(pr *models.PullRequest) { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // NotifyPullRequestSynchronized notifies Synchronized pull request
 | ||||||
|  | func NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) { | ||||||
|  | 	for _, notifier := range notifiers { | ||||||
|  | 		notifier.NotifyPullRequestSynchronized(doer, pr) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // NotifyPullRequestReview notifies new pull request review
 | // NotifyPullRequestReview notifies new pull request review
 | ||||||
| func NotifyPullRequestReview(pr *models.PullRequest, review *models.Review, comment *models.Comment) { | func NotifyPullRequestReview(pr *models.PullRequest, review *models.Review, comment *models.Comment) { | ||||||
| 	for _, notifier := range notifiers { | 	for _, notifier := range notifiers { | ||||||
|  |  | ||||||
|  | @ -520,3 +520,65 @@ func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Re | ||||||
| 		log.Error("PrepareWebhooks: %v", err) | 		log.Error("PrepareWebhooks: %v", err) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review *models.Review, comment *models.Comment) { | ||||||
|  | 	var reviewHookType models.HookEventType | ||||||
|  | 
 | ||||||
|  | 	switch review.Type { | ||||||
|  | 	case models.ReviewTypeApprove: | ||||||
|  | 		reviewHookType = models.HookEventPullRequestApproved | ||||||
|  | 	case models.ReviewTypeComment: | ||||||
|  | 		reviewHookType = models.HookEventPullRequestComment | ||||||
|  | 	case models.ReviewTypeReject: | ||||||
|  | 		reviewHookType = models.HookEventPullRequestRejected | ||||||
|  | 	default: | ||||||
|  | 		// unsupported review webhook type here
 | ||||||
|  | 		log.Error("Unsupported review webhook type") | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := pr.LoadIssue(); err != nil { | ||||||
|  | 		log.Error("pr.LoadIssue: %v", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	mode, err := models.AccessLevel(review.Issue.Poster, review.Issue.Repo) | ||||||
|  | 	if err != nil { | ||||||
|  | 		log.Error("models.AccessLevel: %v", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	if err := webhook.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{ | ||||||
|  | 		Action:      api.HookIssueSynchronized, | ||||||
|  | 		Index:       review.Issue.Index, | ||||||
|  | 		PullRequest: pr.APIFormat(), | ||||||
|  | 		Repository:  review.Issue.Repo.APIFormat(mode), | ||||||
|  | 		Sender:      review.Reviewer.APIFormat(), | ||||||
|  | 		Review: &api.ReviewPayload{ | ||||||
|  | 			Type:    string(reviewHookType), | ||||||
|  | 			Content: review.Content, | ||||||
|  | 		}, | ||||||
|  | 	}); err != nil { | ||||||
|  | 		log.Error("PrepareWebhooks: %v", err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *models.PullRequest) { | ||||||
|  | 	if err := pr.LoadIssue(); err != nil { | ||||||
|  | 		log.Error("pr.LoadIssue: %v", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 	if err := pr.Issue.LoadAttributes(); err != nil { | ||||||
|  | 		log.Error("LoadAttributes: %v", err) | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if err := webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ | ||||||
|  | 		Action:      api.HookIssueSynchronized, | ||||||
|  | 		Index:       pr.Issue.Index, | ||||||
|  | 		PullRequest: pr.Issue.PullRequest.APIFormat(), | ||||||
|  | 		Repository:  pr.Issue.Repo.APIFormat(models.AccessModeNone), | ||||||
|  | 		Sender:      doer.APIFormat(), | ||||||
|  | 	}); err != nil { | ||||||
|  | 		log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -20,10 +20,9 @@ import ( | ||||||
| 	"code.gitea.io/gitea/modules/cache" | 	"code.gitea.io/gitea/modules/cache" | ||||||
| 	"code.gitea.io/gitea/modules/git" | 	"code.gitea.io/gitea/modules/git" | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
|  | 	"code.gitea.io/gitea/modules/notification" | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" |  | ||||||
| 	"code.gitea.io/gitea/modules/timeutil" | 	"code.gitea.io/gitea/modules/timeutil" | ||||||
| 	"code.gitea.io/gitea/modules/webhook" |  | ||||||
| 
 | 
 | ||||||
| 	"github.com/mcuadros/go-version" | 	"github.com/mcuadros/go-version" | ||||||
| ) | ) | ||||||
|  | @ -360,16 +359,7 @@ func Merge(pr *models.PullRequest, doer *models.User, baseGitRepo *git.Repositor | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	mode, _ := models.AccessLevel(doer, pr.Issue.Repo) | 	notification.NotifyIssueChangeStatus(doer, pr.Issue, true) | ||||||
| 	if err = webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ |  | ||||||
| 		Action:      api.HookIssueClosed, |  | ||||||
| 		Index:       pr.Index, |  | ||||||
| 		PullRequest: pr.APIFormat(), |  | ||||||
| 		Repository:  pr.Issue.Repo.APIFormat(mode), |  | ||||||
| 		Sender:      doer.APIFormat(), |  | ||||||
| 	}); err != nil { |  | ||||||
| 		log.Error("PrepareWebhooks: %v", err) |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -11,8 +11,6 @@ import ( | ||||||
| 	"code.gitea.io/gitea/modules/git" | 	"code.gitea.io/gitea/modules/git" | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
| 	"code.gitea.io/gitea/modules/notification" | 	"code.gitea.io/gitea/modules/notification" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" |  | ||||||
| 	"code.gitea.io/gitea/modules/webhook" |  | ||||||
| 	issue_service "code.gitea.io/gitea/services/issue" | 	issue_service "code.gitea.io/gitea/services/issue" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -90,23 +88,9 @@ func AddTestPullRequestTask(doer *models.User, repoID int64, branch string, isSy | ||||||
| 		if err == nil { | 		if err == nil { | ||||||
| 			for _, pr := range prs { | 			for _, pr := range prs { | ||||||
| 				pr.Issue.PullRequest = pr | 				pr.Issue.PullRequest = pr | ||||||
| 				if err = pr.Issue.LoadAttributes(); err != nil { | 				notification.NotifyPullRequestSynchronized(doer, pr) | ||||||
| 					log.Error("LoadAttributes: %v", err) |  | ||||||
| 					continue |  | ||||||
| 				} |  | ||||||
| 				if err = webhook.PrepareWebhooks(pr.Issue.Repo, models.HookEventPullRequest, &api.PullRequestPayload{ |  | ||||||
| 					Action:      api.HookIssueSynchronized, |  | ||||||
| 					Index:       pr.Issue.Index, |  | ||||||
| 					PullRequest: pr.Issue.PullRequest.APIFormat(), |  | ||||||
| 					Repository:  pr.Issue.Repo.APIFormat(models.AccessModeNone), |  | ||||||
| 					Sender:      doer.APIFormat(), |  | ||||||
| 				}); err != nil { |  | ||||||
| 					log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err) |  | ||||||
| 					continue |  | ||||||
| 				} |  | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 
 |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	addHeadRepoTasks(prs) | 	addHeadRepoTasks(prs) | ||||||
|  |  | ||||||
|  | @ -7,8 +7,7 @@ package pull | ||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	"code.gitea.io/gitea/modules/notification" | ||||||
| 	"code.gitea.io/gitea/modules/webhook" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // CreateReview creates a new review based on opts
 | // CreateReview creates a new review based on opts
 | ||||||
|  | @ -18,7 +17,9 @@ func CreateReview(opts models.CreateReviewOptions) (*models.Review, error) { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return review, reviewHook(review) | 	notification.NotifyPullRequestReview(review.Issue.PullRequest, review, nil) | ||||||
|  | 
 | ||||||
|  | 	return review, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // UpdateReview updates a review
 | // UpdateReview updates a review
 | ||||||
|  | @ -28,43 +29,7 @@ func UpdateReview(review *models.Review) error { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return reviewHook(review) | 	notification.NotifyPullRequestReview(review.Issue.PullRequest, review, nil) | ||||||
| } | 
 | ||||||
| 
 | 	return nil | ||||||
| func reviewHook(review *models.Review) error { |  | ||||||
| 	var reviewHookType models.HookEventType |  | ||||||
| 
 |  | ||||||
| 	switch review.Type { |  | ||||||
| 	case models.ReviewTypeApprove: |  | ||||||
| 		reviewHookType = models.HookEventPullRequestApproved |  | ||||||
| 	case models.ReviewTypeComment: |  | ||||||
| 		reviewHookType = models.HookEventPullRequestComment |  | ||||||
| 	case models.ReviewTypeReject: |  | ||||||
| 		reviewHookType = models.HookEventPullRequestRejected |  | ||||||
| 	default: |  | ||||||
| 		// unsupported review webhook type here
 |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	pr := review.Issue.PullRequest |  | ||||||
| 
 |  | ||||||
| 	if err := pr.LoadIssue(); err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	mode, err := models.AccessLevel(review.Issue.Poster, review.Issue.Repo) |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	return webhook.PrepareWebhooks(review.Issue.Repo, reviewHookType, &api.PullRequestPayload{ |  | ||||||
| 		Action:      api.HookIssueSynchronized, |  | ||||||
| 		Index:       review.Issue.Index, |  | ||||||
| 		PullRequest: pr.APIFormat(), |  | ||||||
| 		Repository:  review.Issue.Repo.APIFormat(mode), |  | ||||||
| 		Sender:      review.Reviewer.APIFormat(), |  | ||||||
| 		Review: &api.ReviewPayload{ |  | ||||||
| 			Type:    string(reviewHookType), |  | ||||||
| 			Content: review.Content, |  | ||||||
| 		}, |  | ||||||
| 	}) |  | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue