mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-25 08:59:31 -05:00
Make gitea webhooks openproject compatible (gitea#28435)
This PR adds some fields to the gitea webhook payload that [openproject](https://www.openproject.org/) expects to exists in order to process the webhooks. These fields do exists in Github's webhook payload so adding them makes Gitea's native webhook more compatible towards Github's.
This commit is contained in:
parent
1013da463f
commit
fb7b17d240
8 changed files with 102 additions and 23 deletions
|
@ -431,6 +431,21 @@ func (pr *PullRequest) GetGitHeadBranchRefName() string {
|
||||||
return fmt.Sprintf("%s%s", git.BranchPrefix, pr.HeadBranch)
|
return fmt.Sprintf("%s%s", git.BranchPrefix, pr.HeadBranch)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetReviewCommentsCount returns the number of review comments made on the diff of a PR review (not including comments on commits or issues in a PR)
|
||||||
|
func (pr *PullRequest) GetReviewCommentsCount(ctx context.Context) int {
|
||||||
|
opts := FindCommentsOptions{
|
||||||
|
Type: CommentTypeReview,
|
||||||
|
IssueID: pr.IssueID,
|
||||||
|
}
|
||||||
|
conds := opts.ToConds()
|
||||||
|
|
||||||
|
count, err := db.GetEngine(ctx).Where(conds).Count(new(Comment))
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return int(count)
|
||||||
|
}
|
||||||
|
|
||||||
// IsChecking returns true if this pull request is still checking conflict.
|
// IsChecking returns true if this pull request is still checking conflict.
|
||||||
func (pr *PullRequest) IsChecking() bool {
|
func (pr *PullRequest) IsChecking() bool {
|
||||||
return pr.Status == PullRequestStatusChecking
|
return pr.Status == PullRequestStatusChecking
|
||||||
|
|
|
@ -30,6 +30,7 @@ type PullRequestMeta struct {
|
||||||
HasMerged bool `json:"merged"`
|
HasMerged bool `json:"merged"`
|
||||||
Merged *time.Time `json:"merged_at"`
|
Merged *time.Time `json:"merged_at"`
|
||||||
IsWorkInProgress bool `json:"draft"`
|
IsWorkInProgress bool `json:"draft"`
|
||||||
|
HTMLURL string `json:"html_url"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RepositoryMeta basic repository information
|
// RepositoryMeta basic repository information
|
||||||
|
|
|
@ -21,8 +21,14 @@ type PullRequest struct {
|
||||||
Assignees []*User `json:"assignees"`
|
Assignees []*User `json:"assignees"`
|
||||||
RequestedReviewers []*User `json:"requested_reviewers"`
|
RequestedReviewers []*User `json:"requested_reviewers"`
|
||||||
State StateType `json:"state"`
|
State StateType `json:"state"`
|
||||||
|
Draft bool `json:"draft"`
|
||||||
IsLocked bool `json:"is_locked"`
|
IsLocked bool `json:"is_locked"`
|
||||||
Comments int `json:"comments"`
|
Comments int `json:"comments"`
|
||||||
|
// number of review comments made on the diff of a PR review (not including comments on commits or issues in a PR)
|
||||||
|
ReviewComments int `json:"review_comments"`
|
||||||
|
Additions int `json:"additions"`
|
||||||
|
Deletions int `json:"deletions"`
|
||||||
|
ChangedFiles int `json:"changed_files"`
|
||||||
|
|
||||||
HTMLURL string `json:"html_url"`
|
HTMLURL string `json:"html_url"`
|
||||||
DiffURL string `json:"diff_url"`
|
DiffURL string `json:"diff_url"`
|
||||||
|
|
|
@ -27,6 +27,8 @@ type User struct {
|
||||||
Email string `json:"email"`
|
Email string `json:"email"`
|
||||||
// URL to the user's avatar
|
// URL to the user's avatar
|
||||||
AvatarURL string `json:"avatar_url"`
|
AvatarURL string `json:"avatar_url"`
|
||||||
|
// URL to the user's gitea page
|
||||||
|
HTMLURL string `json:"html_url"`
|
||||||
// User locale
|
// User locale
|
||||||
Language string `json:"language"`
|
Language string `json:"language"`
|
||||||
// Is the user an administrator
|
// Is the user an administrator
|
||||||
|
|
|
@ -107,6 +107,8 @@ func toIssue(ctx context.Context, doer *user_model.User, issue *issues_model.Iss
|
||||||
if issue.PullRequest.HasMerged {
|
if issue.PullRequest.HasMerged {
|
||||||
apiIssue.PullRequest.Merged = issue.PullRequest.MergedUnix.AsTimePtr()
|
apiIssue.PullRequest.Merged = issue.PullRequest.MergedUnix.AsTimePtr()
|
||||||
}
|
}
|
||||||
|
// Add pr's html url
|
||||||
|
apiIssue.PullRequest.HTMLURL = issue.HTMLURL()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if issue.DeadlineUnix != 0 {
|
if issue.DeadlineUnix != 0 {
|
||||||
|
|
|
@ -61,29 +61,31 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
|
||||||
}
|
}
|
||||||
|
|
||||||
apiPullRequest := &api.PullRequest{
|
apiPullRequest := &api.PullRequest{
|
||||||
ID: pr.ID,
|
ID: pr.ID,
|
||||||
URL: pr.Issue.HTMLURL(),
|
URL: pr.Issue.HTMLURL(),
|
||||||
Index: pr.Index,
|
Index: pr.Index,
|
||||||
Poster: apiIssue.Poster,
|
Poster: apiIssue.Poster,
|
||||||
Title: apiIssue.Title,
|
Title: apiIssue.Title,
|
||||||
Body: apiIssue.Body,
|
Body: apiIssue.Body,
|
||||||
Labels: apiIssue.Labels,
|
Labels: apiIssue.Labels,
|
||||||
Milestone: apiIssue.Milestone,
|
Milestone: apiIssue.Milestone,
|
||||||
Assignee: apiIssue.Assignee,
|
Assignee: apiIssue.Assignee,
|
||||||
Assignees: apiIssue.Assignees,
|
Assignees: apiIssue.Assignees,
|
||||||
State: apiIssue.State,
|
State: apiIssue.State,
|
||||||
IsLocked: apiIssue.IsLocked,
|
Draft: pr.IsWorkInProgress(ctx),
|
||||||
Comments: apiIssue.Comments,
|
IsLocked: apiIssue.IsLocked,
|
||||||
HTMLURL: pr.Issue.HTMLURL(),
|
Comments: apiIssue.Comments,
|
||||||
DiffURL: pr.Issue.DiffURL(),
|
ReviewComments: pr.GetReviewCommentsCount(ctx),
|
||||||
PatchURL: pr.Issue.PatchURL(),
|
HTMLURL: pr.Issue.HTMLURL(),
|
||||||
HasMerged: pr.HasMerged,
|
DiffURL: pr.Issue.DiffURL(),
|
||||||
MergeBase: pr.MergeBase,
|
PatchURL: pr.Issue.PatchURL(),
|
||||||
Mergeable: pr.Mergeable(ctx),
|
HasMerged: pr.HasMerged,
|
||||||
Deadline: apiIssue.Deadline,
|
MergeBase: pr.MergeBase,
|
||||||
Created: pr.Issue.CreatedUnix.AsTimePtr(),
|
Mergeable: pr.Mergeable(ctx),
|
||||||
Updated: pr.Issue.UpdatedUnix.AsTimePtr(),
|
Deadline: apiIssue.Deadline,
|
||||||
PinOrder: apiIssue.PinOrder,
|
Created: pr.Issue.CreatedUnix.AsTimePtr(),
|
||||||
|
Updated: pr.Issue.UpdatedUnix.AsTimePtr(),
|
||||||
|
PinOrder: apiIssue.PinOrder,
|
||||||
|
|
||||||
AllowMaintainerEdit: pr.AllowMaintainerEdit,
|
AllowMaintainerEdit: pr.AllowMaintainerEdit,
|
||||||
|
|
||||||
|
@ -178,6 +180,12 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Outer scope variables to be used in diff calculation
|
||||||
|
var (
|
||||||
|
startCommitID string
|
||||||
|
endCommitID string
|
||||||
|
)
|
||||||
|
|
||||||
if git.IsErrBranchNotExist(err) {
|
if git.IsErrBranchNotExist(err) {
|
||||||
headCommitID, err := headGitRepo.GetRefCommitID(apiPullRequest.Head.Ref)
|
headCommitID, err := headGitRepo.GetRefCommitID(apiPullRequest.Head.Ref)
|
||||||
if err != nil && !git.IsErrNotExist(err) {
|
if err != nil && !git.IsErrNotExist(err) {
|
||||||
|
@ -186,6 +194,7 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
|
||||||
}
|
}
|
||||||
if err == nil {
|
if err == nil {
|
||||||
apiPullRequest.Head.Sha = headCommitID
|
apiPullRequest.Head.Sha = headCommitID
|
||||||
|
endCommitID = headCommitID
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
commit, err := headBranch.GetCommit()
|
commit, err := headBranch.GetCommit()
|
||||||
|
@ -196,8 +205,17 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
|
||||||
if err == nil {
|
if err == nil {
|
||||||
apiPullRequest.Head.Ref = pr.HeadBranch
|
apiPullRequest.Head.Ref = pr.HeadBranch
|
||||||
apiPullRequest.Head.Sha = commit.ID.String()
|
apiPullRequest.Head.Sha = commit.ID.String()
|
||||||
|
endCommitID = commit.ID.String()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate diff
|
||||||
|
startCommitID = pr.MergeBase
|
||||||
|
|
||||||
|
apiPullRequest.ChangedFiles, apiPullRequest.Additions, apiPullRequest.Deletions, err = gitRepo.GetDiffShortStat(startCommitID, endCommitID)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("GetDiffShortStat: %v", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(apiPullRequest.Head.Sha) == 0 && len(apiPullRequest.Head.Ref) != 0 {
|
if len(apiPullRequest.Head.Sha) == 0 && len(apiPullRequest.Head.Ref) != 0 {
|
||||||
|
|
|
@ -53,6 +53,7 @@ func toUser(ctx context.Context, user *user_model.User, signed, authed bool) *ap
|
||||||
FullName: user.FullName,
|
FullName: user.FullName,
|
||||||
Email: user.GetPlaceholderEmail(),
|
Email: user.GetPlaceholderEmail(),
|
||||||
AvatarURL: user.AvatarLink(ctx),
|
AvatarURL: user.AvatarLink(ctx),
|
||||||
|
HTMLURL: user.HTMLURL(),
|
||||||
Created: user.CreatedUnix.AsTime(),
|
Created: user.CreatedUnix.AsTime(),
|
||||||
Restricted: user.IsRestricted,
|
Restricted: user.IsRestricted,
|
||||||
Location: user.Location,
|
Location: user.Location,
|
||||||
|
|
34
templates/swagger/v1_json.tmpl
generated
34
templates/swagger/v1_json.tmpl
generated
|
@ -23413,6 +23413,11 @@
|
||||||
"description": "PullRequest represents a pull request",
|
"description": "PullRequest represents a pull request",
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
"additions": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"x-go-name": "Additions"
|
||||||
|
},
|
||||||
"allow_maintainer_edit": {
|
"allow_maintainer_edit": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"x-go-name": "AllowMaintainerEdit"
|
"x-go-name": "AllowMaintainerEdit"
|
||||||
|
@ -23434,6 +23439,11 @@
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"x-go-name": "Body"
|
"x-go-name": "Body"
|
||||||
},
|
},
|
||||||
|
"changed_files": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"x-go-name": "ChangedFiles"
|
||||||
|
},
|
||||||
"closed_at": {
|
"closed_at": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "date-time",
|
"format": "date-time",
|
||||||
|
@ -23449,10 +23459,19 @@
|
||||||
"format": "date-time",
|
"format": "date-time",
|
||||||
"x-go-name": "Created"
|
"x-go-name": "Created"
|
||||||
},
|
},
|
||||||
|
"deletions": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"x-go-name": "Deletions"
|
||||||
|
},
|
||||||
"diff_url": {
|
"diff_url": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"x-go-name": "DiffURL"
|
"x-go-name": "DiffURL"
|
||||||
},
|
},
|
||||||
|
"draft": {
|
||||||
|
"type": "boolean",
|
||||||
|
"x-go-name": "Draft"
|
||||||
|
},
|
||||||
"due_date": {
|
"due_date": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "date-time",
|
"format": "date-time",
|
||||||
|
@ -23529,6 +23548,12 @@
|
||||||
},
|
},
|
||||||
"x-go-name": "RequestedReviewers"
|
"x-go-name": "RequestedReviewers"
|
||||||
},
|
},
|
||||||
|
"review_comments": {
|
||||||
|
"description": "number of review comments made on the diff of a PR review (not including comments on commits or issues in a PR)",
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64",
|
||||||
|
"x-go-name": "ReviewComments"
|
||||||
|
},
|
||||||
"state": {
|
"state": {
|
||||||
"$ref": "#/definitions/StateType"
|
"$ref": "#/definitions/StateType"
|
||||||
},
|
},
|
||||||
|
@ -23559,6 +23584,10 @@
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"x-go-name": "IsWorkInProgress"
|
"x-go-name": "IsWorkInProgress"
|
||||||
},
|
},
|
||||||
|
"html_url": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "HTMLURL"
|
||||||
|
},
|
||||||
"merged": {
|
"merged": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"x-go-name": "HasMerged"
|
"x-go-name": "HasMerged"
|
||||||
|
@ -24904,6 +24933,11 @@
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"x-go-name": "FullName"
|
"x-go-name": "FullName"
|
||||||
},
|
},
|
||||||
|
"html_url": {
|
||||||
|
"description": "URL to the user's gitea page",
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "HTMLURL"
|
||||||
|
},
|
||||||
"id": {
|
"id": {
|
||||||
"description": "the user's id",
|
"description": "the user's id",
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
|
|
Loading…
Reference in a new issue