mirror of
https://github.com/go-gitea/gitea.git
synced 2026-02-21 14:07:32 +01:00
Workflows triggered by pull_request_review events (approved, rejected, comment) complete successfully but never create a commit status on the PR. This makes them invisible in the merge checks UI, breaking any CI gate that re-evaluates on review submission. The commit status handler's switch statement was missing the three review event types, so they fell through to the default case which returned empty strings. Additionally, review events use PullRequestPayload but IsPullRequest() returns false for them (Event() returns "pull_request_approved" etc. instead of "pull_request"), so GetPullRequestEventPayload() refuses to parse their payload. Signed-off-by: Jörg Thalheim <joerg@thalheim.io> Co-authored-by: silverwind <me@silverwind.io>
142 lines
4.8 KiB
Go
142 lines
4.8 KiB
Go
// Copyright 2022 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package webhook
|
|
|
|
// HookEventType is the type of a hook event
|
|
type HookEventType string
|
|
|
|
// Types of hook events
|
|
const (
|
|
HookEventCreate HookEventType = "create"
|
|
HookEventDelete HookEventType = "delete"
|
|
HookEventFork HookEventType = "fork"
|
|
HookEventPush HookEventType = "push"
|
|
HookEventIssues HookEventType = "issues"
|
|
HookEventIssueAssign HookEventType = "issue_assign"
|
|
HookEventIssueLabel HookEventType = "issue_label"
|
|
HookEventIssueMilestone HookEventType = "issue_milestone"
|
|
HookEventIssueComment HookEventType = "issue_comment"
|
|
HookEventPullRequest HookEventType = "pull_request"
|
|
HookEventPullRequestAssign HookEventType = "pull_request_assign"
|
|
HookEventPullRequestLabel HookEventType = "pull_request_label"
|
|
HookEventPullRequestMilestone HookEventType = "pull_request_milestone"
|
|
HookEventPullRequestComment HookEventType = "pull_request_comment"
|
|
HookEventPullRequestReviewApproved HookEventType = "pull_request_review_approved"
|
|
HookEventPullRequestReviewRejected HookEventType = "pull_request_review_rejected"
|
|
HookEventPullRequestReviewComment HookEventType = "pull_request_review_comment"
|
|
HookEventPullRequestSync HookEventType = "pull_request_sync"
|
|
HookEventPullRequestReviewRequest HookEventType = "pull_request_review_request"
|
|
HookEventWiki HookEventType = "wiki"
|
|
HookEventRepository HookEventType = "repository"
|
|
HookEventRelease HookEventType = "release"
|
|
HookEventPackage HookEventType = "package"
|
|
HookEventStatus HookEventType = "status"
|
|
// once a new event added here, please also added to AllEvents() function
|
|
|
|
// FIXME: This event should be a group of pull_request_review_xxx events
|
|
HookEventPullRequestReview HookEventType = "pull_request_review"
|
|
// Actions event only
|
|
HookEventSchedule HookEventType = "schedule"
|
|
HookEventWorkflowRun HookEventType = "workflow_run"
|
|
HookEventWorkflowJob HookEventType = "workflow_job"
|
|
)
|
|
|
|
func AllEvents() []HookEventType {
|
|
return []HookEventType{
|
|
HookEventCreate,
|
|
HookEventDelete,
|
|
HookEventFork,
|
|
HookEventPush,
|
|
HookEventIssues,
|
|
HookEventIssueAssign,
|
|
HookEventIssueLabel,
|
|
HookEventIssueMilestone,
|
|
HookEventIssueComment,
|
|
HookEventPullRequest,
|
|
HookEventPullRequestAssign,
|
|
HookEventPullRequestLabel,
|
|
HookEventPullRequestMilestone,
|
|
HookEventPullRequestComment,
|
|
HookEventPullRequestReviewApproved,
|
|
HookEventPullRequestReviewRejected,
|
|
HookEventPullRequestReviewComment,
|
|
HookEventPullRequestSync,
|
|
HookEventPullRequestReviewRequest,
|
|
HookEventWiki,
|
|
HookEventRepository,
|
|
HookEventRelease,
|
|
HookEventPackage,
|
|
HookEventStatus,
|
|
HookEventWorkflowRun,
|
|
HookEventWorkflowJob,
|
|
}
|
|
}
|
|
|
|
// Event returns the HookEventType as an event string
|
|
func (h HookEventType) Event() string {
|
|
switch h {
|
|
case HookEventIssues, HookEventIssueAssign, HookEventIssueLabel, HookEventIssueMilestone:
|
|
return "issues"
|
|
case HookEventPullRequest, HookEventPullRequestAssign, HookEventPullRequestLabel, HookEventPullRequestMilestone,
|
|
HookEventPullRequestSync, HookEventPullRequestReviewRequest:
|
|
return "pull_request"
|
|
case HookEventIssueComment, HookEventPullRequestComment:
|
|
return "issue_comment"
|
|
case HookEventPullRequestReviewApproved:
|
|
return "pull_request_approved"
|
|
case HookEventPullRequestReviewRejected:
|
|
return "pull_request_rejected"
|
|
case HookEventPullRequestReviewComment:
|
|
return "pull_request_comment"
|
|
default:
|
|
return string(h)
|
|
}
|
|
}
|
|
|
|
func (h HookEventType) IsPullRequest() bool {
|
|
return h.Event() == "pull_request"
|
|
}
|
|
|
|
// IsPullRequestReview returns true for pull request review events
|
|
// (approved, rejected, comment). These events use the same PullRequestPayload
|
|
// as regular pull_request events.
|
|
func (h HookEventType) IsPullRequestReview() bool {
|
|
switch h {
|
|
case HookEventPullRequestReviewApproved,
|
|
HookEventPullRequestReviewRejected,
|
|
HookEventPullRequestReviewComment:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// HookType is the type of a webhook
|
|
type HookType = string
|
|
|
|
// Types of webhooks
|
|
const (
|
|
GITEA HookType = "gitea"
|
|
GOGS HookType = "gogs"
|
|
SLACK HookType = "slack"
|
|
DISCORD HookType = "discord"
|
|
DINGTALK HookType = "dingtalk"
|
|
TELEGRAM HookType = "telegram"
|
|
MSTEAMS HookType = "msteams"
|
|
FEISHU HookType = "feishu"
|
|
MATRIX HookType = "matrix"
|
|
WECHATWORK HookType = "wechatwork"
|
|
PACKAGIST HookType = "packagist"
|
|
)
|
|
|
|
// HookStatus is the status of a web hook
|
|
type HookStatus int
|
|
|
|
// Possible statuses of a web hook
|
|
const (
|
|
HookStatusNone HookStatus = iota
|
|
HookStatusSucceed
|
|
HookStatusFail
|
|
)
|