mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 08:02:36 +09:00 
			
		
		
		
	Implements - https://docs.github.com/en/rest/actions/workflow-jobs?apiVersion=2022-11-28#list-jobs-for-a-workflow-run--code-samples - https://docs.github.com/en/rest/actions/workflow-jobs?apiVersion=2022-11-28#get-a-job-for-a-workflow-run--code-samples - https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#list-workflow-runs-for-a-repository - https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#get-a-workflow-run - `/actions/runs` for global + user + org (Gitea only) - `/actions/jobs` for global + user + org + repository (Gitea only) - workflow_run webhook + action trigger - limitations - workflow id is assigned to a string, this may result into problems in strongly typed clients Fixes - workflow_job webhook url to no longer contain the `runs/<run>` part to align with api - workflow instance does now use it's name inside the file instead of filename if set Refactoring - Moved a lot of logic from workflows/workflow_job into a shared module used by both webhook and api TODO - [x] Verify Keda Compatibility - [x] Edit Webhook API bug is resolved Closes https://github.com/go-gitea/gitea/issues/23670 Closes https://github.com/go-gitea/gitea/issues/23796 Closes https://github.com/go-gitea/gitea/issues/24898 Replaces https://github.com/go-gitea/gitea/pull/28047 and is much more complete --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
		
			
				
	
	
		
			128 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			4.4 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"
 | 
						|
}
 | 
						|
 | 
						|
// 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
 | 
						|
)
 |