mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-05-25 11:22:16 +00:00
Webhook for Pull Request approval/rejection (#5027)
This commit is contained in:
parent
8bb0a6f425
commit
945804f800
6 changed files with 168 additions and 20 deletions
|
@ -9,10 +9,11 @@ import (
|
|||
|
||||
"code.gitea.io/gitea/modules/log"
|
||||
"code.gitea.io/gitea/modules/util"
|
||||
"github.com/go-xorm/core"
|
||||
"github.com/go-xorm/xorm"
|
||||
api "code.gitea.io/sdk/gitea"
|
||||
|
||||
"github.com/go-xorm/builder"
|
||||
"github.com/go-xorm/core"
|
||||
"github.com/go-xorm/xorm"
|
||||
)
|
||||
|
||||
// ReviewType defines the sort of feedback a review gives
|
||||
|
@ -233,6 +234,43 @@ func createReview(e Engine, opts CreateReviewOptions) (*Review, error) {
|
|||
if _, err := e.Insert(review); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var reviewHookType HookEventType
|
||||
|
||||
switch opts.Type {
|
||||
case ReviewTypeApprove:
|
||||
reviewHookType = HookEventPullRequestApproved
|
||||
case ReviewTypeComment:
|
||||
reviewHookType = HookEventPullRequestComment
|
||||
case ReviewTypeReject:
|
||||
reviewHookType = HookEventPullRequestRejected
|
||||
default:
|
||||
// unsupported review webhook type here
|
||||
return review, nil
|
||||
}
|
||||
|
||||
pr := opts.Issue.PullRequest
|
||||
|
||||
if err := pr.LoadIssue(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
mode, err := AccessLevel(opts.Issue.Poster, opts.Issue.Repo)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := PrepareWebhooks(opts.Issue.Repo, reviewHookType, &api.PullRequestPayload{
|
||||
Action: api.HookIssueSynchronized,
|
||||
Index: opts.Issue.Index,
|
||||
PullRequest: pr.APIFormat(),
|
||||
Repository: opts.Issue.Repo.APIFormat(mode),
|
||||
Sender: opts.Reviewer.APIFormat(),
|
||||
}); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
go HookQueue.Add(opts.Issue.Repo.ID)
|
||||
|
||||
return review, nil
|
||||
}
|
||||
|
||||
|
@ -285,10 +323,10 @@ type PullReviewersWithType struct {
|
|||
func GetReviewersByPullID(pullID int64) (issueReviewers []*PullReviewersWithType, err error) {
|
||||
irs := []*PullReviewersWithType{}
|
||||
if x.Dialect().DBType() == core.MSSQL {
|
||||
err = x.SQL(`SELECT [user].*, review.type, review.review_updated_unix FROM
|
||||
(SELECT review.id, review.type, review.reviewer_id, max(review.updated_unix) as review_updated_unix
|
||||
FROM review WHERE review.issue_id=? AND (review.type = ? OR review.type = ?)
|
||||
GROUP BY review.id, review.type, review.reviewer_id) as review
|
||||
err = x.SQL(`SELECT [user].*, review.type, review.review_updated_unix FROM
|
||||
(SELECT review.id, review.type, review.reviewer_id, max(review.updated_unix) as review_updated_unix
|
||||
FROM review WHERE review.issue_id=? AND (review.type = ? OR review.type = ?)
|
||||
GROUP BY review.id, review.type, review.reviewer_id) as review
|
||||
INNER JOIN [user] ON review.reviewer_id = [user].id ORDER BY review_updated_unix DESC`,
|
||||
pullID, ReviewTypeApprove, ReviewTypeReject).
|
||||
Find(&irs)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue