mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 02:04:11 +01:00 
			
		
		
		
	Improve workflow event triggers (#23613)
Follow #23037 Fix [#22598 comment](https://github.com/go-gitea/gitea/issues/22958#issuecomment-1475763042) Workflows with `pull_request` trigger event can't be triggered by `pull_request_sync` event. This PR adds the `canGithubEventMatch` function to check if a Github event can match any Gitea event. If the Github event matches a Gitea event, the related workflows should be triggered. --------- Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		
							parent
							
								
									389e83f7eb
								
							
						
					
					
						commit
						e7f0bcf884
					
				@ -5,8 +5,6 @@ package actions
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	webhook_module "code.gitea.io/gitea/modules/webhook"
 | 
			
		||||
 | 
			
		||||
	"github.com/nektos/act/pkg/jobparser"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
@ -25,17 +23,48 @@ const (
 | 
			
		||||
	githubEventPullRequestComment       = "pull_request_comment"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func convertFromGithubEvent(evt *jobparser.Event) string {
 | 
			
		||||
	switch evt.Name {
 | 
			
		||||
	case githubEventPullRequest, githubEventPullRequestTarget, githubEventPullRequestReview,
 | 
			
		||||
		githubEventPullRequestReviewComment:
 | 
			
		||||
		return string(webhook_module.HookEventPullRequest)
 | 
			
		||||
// canGithubEventMatch check if the input Github event can match any Gitea event.
 | 
			
		||||
func canGithubEventMatch(eventName string, triggedEvent webhook_module.HookEventType) bool {
 | 
			
		||||
	switch eventName {
 | 
			
		||||
	case githubEventRegistryPackage:
 | 
			
		||||
		return string(webhook_module.HookEventPackage)
 | 
			
		||||
	case githubEventCreate, githubEventDelete, githubEventFork, githubEventPush,
 | 
			
		||||
		githubEventIssues, githubEventIssueComment, githubEventRelease, githubEventPullRequestComment:
 | 
			
		||||
		fallthrough
 | 
			
		||||
		return triggedEvent == webhook_module.HookEventPackage
 | 
			
		||||
 | 
			
		||||
	case githubEventIssues:
 | 
			
		||||
		switch triggedEvent {
 | 
			
		||||
		case webhook_module.HookEventIssues,
 | 
			
		||||
			webhook_module.HookEventIssueAssign,
 | 
			
		||||
			webhook_module.HookEventIssueLabel,
 | 
			
		||||
			webhook_module.HookEventIssueMilestone:
 | 
			
		||||
			return true
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	case githubEventPullRequest, githubEventPullRequestTarget:
 | 
			
		||||
		switch triggedEvent {
 | 
			
		||||
		case webhook_module.HookEventPullRequest,
 | 
			
		||||
			webhook_module.HookEventPullRequestSync,
 | 
			
		||||
			webhook_module.HookEventPullRequestAssign,
 | 
			
		||||
			webhook_module.HookEventPullRequestLabel:
 | 
			
		||||
			return true
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	case githubEventPullRequestReview:
 | 
			
		||||
		switch triggedEvent {
 | 
			
		||||
		case webhook_module.HookEventPullRequestReviewApproved,
 | 
			
		||||
			webhook_module.HookEventPullRequestReviewComment,
 | 
			
		||||
			webhook_module.HookEventPullRequestReviewRejected:
 | 
			
		||||
			return true
 | 
			
		||||
 | 
			
		||||
		default:
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	default:
 | 
			
		||||
		return evt.Name
 | 
			
		||||
		return eventName == string(triggedEvent)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										113
									
								
								modules/actions/github_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								modules/actions/github_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,113 @@
 | 
			
		||||
// Copyright 2023 The Gitea Authors. All rights reserved.
 | 
			
		||||
// SPDX-License-Identifier: MIT
 | 
			
		||||
 | 
			
		||||
package actions
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	webhook_module "code.gitea.io/gitea/modules/webhook"
 | 
			
		||||
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestCanGithubEventMatch(t *testing.T) {
 | 
			
		||||
	testCases := []struct {
 | 
			
		||||
		desc           string
 | 
			
		||||
		eventName      string
 | 
			
		||||
		triggeredEvent webhook_module.HookEventType
 | 
			
		||||
		expected       bool
 | 
			
		||||
	}{
 | 
			
		||||
		// registry_package event
 | 
			
		||||
		{
 | 
			
		||||
			"registry_package matches",
 | 
			
		||||
			githubEventRegistryPackage,
 | 
			
		||||
			webhook_module.HookEventPackage,
 | 
			
		||||
			true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"registry_package cannot match",
 | 
			
		||||
			githubEventRegistryPackage,
 | 
			
		||||
			webhook_module.HookEventPush,
 | 
			
		||||
			false,
 | 
			
		||||
		},
 | 
			
		||||
		// issues event
 | 
			
		||||
		{
 | 
			
		||||
			"issue matches",
 | 
			
		||||
			githubEventIssues,
 | 
			
		||||
			webhook_module.HookEventIssueLabel,
 | 
			
		||||
			true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"issue cannot match",
 | 
			
		||||
			githubEventIssues,
 | 
			
		||||
			webhook_module.HookEventIssueComment,
 | 
			
		||||
			false,
 | 
			
		||||
		},
 | 
			
		||||
		// issue_comment event
 | 
			
		||||
		{
 | 
			
		||||
			"issue_comment matches",
 | 
			
		||||
			githubEventIssueComment,
 | 
			
		||||
			webhook_module.HookEventIssueComment,
 | 
			
		||||
			true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"issue_comment cannot match",
 | 
			
		||||
			githubEventIssueComment,
 | 
			
		||||
			webhook_module.HookEventIssues,
 | 
			
		||||
			false,
 | 
			
		||||
		},
 | 
			
		||||
		// pull_request event
 | 
			
		||||
		{
 | 
			
		||||
			"pull_request matches",
 | 
			
		||||
			githubEventPullRequest,
 | 
			
		||||
			webhook_module.HookEventPullRequestSync,
 | 
			
		||||
			true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"pull_request cannot match",
 | 
			
		||||
			githubEventPullRequest,
 | 
			
		||||
			webhook_module.HookEventPullRequestComment,
 | 
			
		||||
			false,
 | 
			
		||||
		},
 | 
			
		||||
		// pull_request_target event
 | 
			
		||||
		{
 | 
			
		||||
			"pull_request_target matches",
 | 
			
		||||
			githubEventPullRequest,
 | 
			
		||||
			webhook_module.HookEventPullRequest,
 | 
			
		||||
			true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"pull_request_target cannot match",
 | 
			
		||||
			githubEventPullRequest,
 | 
			
		||||
			webhook_module.HookEventPullRequestComment,
 | 
			
		||||
			false,
 | 
			
		||||
		},
 | 
			
		||||
		// pull_request_review event
 | 
			
		||||
		{
 | 
			
		||||
			"pull_request_review matches",
 | 
			
		||||
			githubEventPullRequestReview,
 | 
			
		||||
			webhook_module.HookEventPullRequestReviewComment,
 | 
			
		||||
			true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"pull_request_review cannot match",
 | 
			
		||||
			githubEventPullRequestReview,
 | 
			
		||||
			webhook_module.HookEventPullRequestComment,
 | 
			
		||||
			false,
 | 
			
		||||
		},
 | 
			
		||||
		// other events
 | 
			
		||||
		{
 | 
			
		||||
			"create event",
 | 
			
		||||
			githubEventCreate,
 | 
			
		||||
			webhook_module.HookEventCreate,
 | 
			
		||||
			true,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, tc := range testCases {
 | 
			
		||||
		t.Run(tc.desc, func(t *testing.T) {
 | 
			
		||||
			assert.Equalf(t, tc.expected, canGithubEventMatch(tc.eventName, tc.triggeredEvent), "canGithubEventMatch(%v, %v)", tc.eventName, tc.triggeredEvent)
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@ -99,7 +99,7 @@ func DetectWorkflows(commit *git.Commit, triggedEvent webhook_module.HookEventTy
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func detectMatched(commit *git.Commit, triggedEvent webhook_module.HookEventType, payload api.Payloader, evt *jobparser.Event) bool {
 | 
			
		||||
	if convertFromGithubEvent(evt) != string(triggedEvent) {
 | 
			
		||||
	if !canGithubEventMatch(evt.Name, triggedEvent) {
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user