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)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 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.
 | 
			
		||||
func (pr *PullRequest) IsChecking() bool {
 | 
			
		||||
	return pr.Status == PullRequestStatusChecking
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,7 @@ type PullRequestMeta struct {
 | 
			
		|||
	HasMerged        bool       `json:"merged"`
 | 
			
		||||
	Merged           *time.Time `json:"merged_at"`
 | 
			
		||||
	IsWorkInProgress bool       `json:"draft"`
 | 
			
		||||
	HTMLURL          string     `json:"html_url"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// RepositoryMeta basic repository information
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,8 +21,14 @@ type PullRequest struct {
 | 
			
		|||
	Assignees          []*User    `json:"assignees"`
 | 
			
		||||
	RequestedReviewers []*User    `json:"requested_reviewers"`
 | 
			
		||||
	State              StateType  `json:"state"`
 | 
			
		||||
	Draft              bool       `json:"draft"`
 | 
			
		||||
	IsLocked           bool       `json:"is_locked"`
 | 
			
		||||
	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"`
 | 
			
		||||
	DiffURL  string `json:"diff_url"`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,6 +27,8 @@ type User struct {
 | 
			
		|||
	Email string `json:"email"`
 | 
			
		||||
	// URL to the user's avatar
 | 
			
		||||
	AvatarURL string `json:"avatar_url"`
 | 
			
		||||
	// URL to the user's gitea page
 | 
			
		||||
	HTMLURL string `json:"html_url"`
 | 
			
		||||
	// User locale
 | 
			
		||||
	Language string `json:"language"`
 | 
			
		||||
	// 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 {
 | 
			
		||||
				apiIssue.PullRequest.Merged = issue.PullRequest.MergedUnix.AsTimePtr()
 | 
			
		||||
			}
 | 
			
		||||
			// Add pr's html url
 | 
			
		||||
			apiIssue.PullRequest.HTMLURL = issue.HTMLURL()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if issue.DeadlineUnix != 0 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -61,29 +61,31 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	apiPullRequest := &api.PullRequest{
 | 
			
		||||
		ID:        pr.ID,
 | 
			
		||||
		URL:       pr.Issue.HTMLURL(),
 | 
			
		||||
		Index:     pr.Index,
 | 
			
		||||
		Poster:    apiIssue.Poster,
 | 
			
		||||
		Title:     apiIssue.Title,
 | 
			
		||||
		Body:      apiIssue.Body,
 | 
			
		||||
		Labels:    apiIssue.Labels,
 | 
			
		||||
		Milestone: apiIssue.Milestone,
 | 
			
		||||
		Assignee:  apiIssue.Assignee,
 | 
			
		||||
		Assignees: apiIssue.Assignees,
 | 
			
		||||
		State:     apiIssue.State,
 | 
			
		||||
		IsLocked:  apiIssue.IsLocked,
 | 
			
		||||
		Comments:  apiIssue.Comments,
 | 
			
		||||
		HTMLURL:   pr.Issue.HTMLURL(),
 | 
			
		||||
		DiffURL:   pr.Issue.DiffURL(),
 | 
			
		||||
		PatchURL:  pr.Issue.PatchURL(),
 | 
			
		||||
		HasMerged: pr.HasMerged,
 | 
			
		||||
		MergeBase: pr.MergeBase,
 | 
			
		||||
		Mergeable: pr.Mergeable(ctx),
 | 
			
		||||
		Deadline:  apiIssue.Deadline,
 | 
			
		||||
		Created:   pr.Issue.CreatedUnix.AsTimePtr(),
 | 
			
		||||
		Updated:   pr.Issue.UpdatedUnix.AsTimePtr(),
 | 
			
		||||
		PinOrder:  apiIssue.PinOrder,
 | 
			
		||||
		ID:             pr.ID,
 | 
			
		||||
		URL:            pr.Issue.HTMLURL(),
 | 
			
		||||
		Index:          pr.Index,
 | 
			
		||||
		Poster:         apiIssue.Poster,
 | 
			
		||||
		Title:          apiIssue.Title,
 | 
			
		||||
		Body:           apiIssue.Body,
 | 
			
		||||
		Labels:         apiIssue.Labels,
 | 
			
		||||
		Milestone:      apiIssue.Milestone,
 | 
			
		||||
		Assignee:       apiIssue.Assignee,
 | 
			
		||||
		Assignees:      apiIssue.Assignees,
 | 
			
		||||
		State:          apiIssue.State,
 | 
			
		||||
		Draft:          pr.IsWorkInProgress(ctx),
 | 
			
		||||
		IsLocked:       apiIssue.IsLocked,
 | 
			
		||||
		Comments:       apiIssue.Comments,
 | 
			
		||||
		ReviewComments: pr.GetReviewCommentsCount(ctx),
 | 
			
		||||
		HTMLURL:        pr.Issue.HTMLURL(),
 | 
			
		||||
		DiffURL:        pr.Issue.DiffURL(),
 | 
			
		||||
		PatchURL:       pr.Issue.PatchURL(),
 | 
			
		||||
		HasMerged:      pr.HasMerged,
 | 
			
		||||
		MergeBase:      pr.MergeBase,
 | 
			
		||||
		Mergeable:      pr.Mergeable(ctx),
 | 
			
		||||
		Deadline:       apiIssue.Deadline,
 | 
			
		||||
		Created:        pr.Issue.CreatedUnix.AsTimePtr(),
 | 
			
		||||
		Updated:        pr.Issue.UpdatedUnix.AsTimePtr(),
 | 
			
		||||
		PinOrder:       apiIssue.PinOrder,
 | 
			
		||||
 | 
			
		||||
		AllowMaintainerEdit: pr.AllowMaintainerEdit,
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -178,6 +180,12 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
 | 
			
		|||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Outer scope variables to be used in diff calculation
 | 
			
		||||
		var (
 | 
			
		||||
			startCommitID string
 | 
			
		||||
			endCommitID   string
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		if git.IsErrBranchNotExist(err) {
 | 
			
		||||
			headCommitID, err := headGitRepo.GetRefCommitID(apiPullRequest.Head.Ref)
 | 
			
		||||
			if err != nil && !git.IsErrNotExist(err) {
 | 
			
		||||
| 
						 | 
				
			
			@ -186,6 +194,7 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
 | 
			
		|||
			}
 | 
			
		||||
			if err == nil {
 | 
			
		||||
				apiPullRequest.Head.Sha = headCommitID
 | 
			
		||||
				endCommitID = headCommitID
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			commit, err := headBranch.GetCommit()
 | 
			
		||||
| 
						 | 
				
			
			@ -196,8 +205,17 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
 | 
			
		|||
			if err == nil {
 | 
			
		||||
				apiPullRequest.Head.Ref = pr.HeadBranch
 | 
			
		||||
				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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -53,6 +53,7 @@ func toUser(ctx context.Context, user *user_model.User, signed, authed bool) *ap
 | 
			
		|||
		FullName:    user.FullName,
 | 
			
		||||
		Email:       user.GetPlaceholderEmail(),
 | 
			
		||||
		AvatarURL:   user.AvatarLink(ctx),
 | 
			
		||||
		HTMLURL:     user.HTMLURL(),
 | 
			
		||||
		Created:     user.CreatedUnix.AsTime(),
 | 
			
		||||
		Restricted:  user.IsRestricted,
 | 
			
		||||
		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",
 | 
			
		||||
      "type": "object",
 | 
			
		||||
      "properties": {
 | 
			
		||||
        "additions": {
 | 
			
		||||
          "type": "integer",
 | 
			
		||||
          "format": "int64",
 | 
			
		||||
          "x-go-name": "Additions"
 | 
			
		||||
        },
 | 
			
		||||
        "allow_maintainer_edit": {
 | 
			
		||||
          "type": "boolean",
 | 
			
		||||
          "x-go-name": "AllowMaintainerEdit"
 | 
			
		||||
| 
						 | 
				
			
			@ -23434,6 +23439,11 @@
 | 
			
		|||
          "type": "string",
 | 
			
		||||
          "x-go-name": "Body"
 | 
			
		||||
        },
 | 
			
		||||
        "changed_files": {
 | 
			
		||||
          "type": "integer",
 | 
			
		||||
          "format": "int64",
 | 
			
		||||
          "x-go-name": "ChangedFiles"
 | 
			
		||||
        },
 | 
			
		||||
        "closed_at": {
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "format": "date-time",
 | 
			
		||||
| 
						 | 
				
			
			@ -23449,10 +23459,19 @@
 | 
			
		|||
          "format": "date-time",
 | 
			
		||||
          "x-go-name": "Created"
 | 
			
		||||
        },
 | 
			
		||||
        "deletions": {
 | 
			
		||||
          "type": "integer",
 | 
			
		||||
          "format": "int64",
 | 
			
		||||
          "x-go-name": "Deletions"
 | 
			
		||||
        },
 | 
			
		||||
        "diff_url": {
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "x-go-name": "DiffURL"
 | 
			
		||||
        },
 | 
			
		||||
        "draft": {
 | 
			
		||||
          "type": "boolean",
 | 
			
		||||
          "x-go-name": "Draft"
 | 
			
		||||
        },
 | 
			
		||||
        "due_date": {
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "format": "date-time",
 | 
			
		||||
| 
						 | 
				
			
			@ -23529,6 +23548,12 @@
 | 
			
		|||
          },
 | 
			
		||||
          "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": {
 | 
			
		||||
          "$ref": "#/definitions/StateType"
 | 
			
		||||
        },
 | 
			
		||||
| 
						 | 
				
			
			@ -23559,6 +23584,10 @@
 | 
			
		|||
          "type": "boolean",
 | 
			
		||||
          "x-go-name": "IsWorkInProgress"
 | 
			
		||||
        },
 | 
			
		||||
        "html_url": {
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "x-go-name": "HTMLURL"
 | 
			
		||||
        },
 | 
			
		||||
        "merged": {
 | 
			
		||||
          "type": "boolean",
 | 
			
		||||
          "x-go-name": "HasMerged"
 | 
			
		||||
| 
						 | 
				
			
			@ -24904,6 +24933,11 @@
 | 
			
		|||
          "type": "string",
 | 
			
		||||
          "x-go-name": "FullName"
 | 
			
		||||
        },
 | 
			
		||||
        "html_url": {
 | 
			
		||||
          "description": "URL to the user's gitea page",
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "x-go-name": "HTMLURL"
 | 
			
		||||
        },
 | 
			
		||||
        "id": {
 | 
			
		||||
          "description": "the user's id",
 | 
			
		||||
          "type": "integer",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue