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 (
|
import (
|
||||||
webhook_module "code.gitea.io/gitea/modules/webhook"
|
webhook_module "code.gitea.io/gitea/modules/webhook"
|
||||||
|
|
||||||
"github.com/nektos/act/pkg/jobparser"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -25,17 +23,48 @@ const (
|
||||||
githubEventPullRequestComment = "pull_request_comment"
|
githubEventPullRequestComment = "pull_request_comment"
|
||||||
)
|
)
|
||||||
|
|
||||||
func convertFromGithubEvent(evt *jobparser.Event) string {
|
// canGithubEventMatch check if the input Github event can match any Gitea event.
|
||||||
switch evt.Name {
|
func canGithubEventMatch(eventName string, triggedEvent webhook_module.HookEventType) bool {
|
||||||
case githubEventPullRequest, githubEventPullRequestTarget, githubEventPullRequestReview,
|
switch eventName {
|
||||||
githubEventPullRequestReviewComment:
|
|
||||||
return string(webhook_module.HookEventPullRequest)
|
|
||||||
case githubEventRegistryPackage:
|
case githubEventRegistryPackage:
|
||||||
return string(webhook_module.HookEventPackage)
|
return triggedEvent == webhook_module.HookEventPackage
|
||||||
case githubEventCreate, githubEventDelete, githubEventFork, githubEventPush,
|
|
||||||
githubEventIssues, githubEventIssueComment, githubEventRelease, githubEventPullRequestComment:
|
case githubEventIssues:
|
||||||
fallthrough
|
switch triggedEvent {
|
||||||
|
case webhook_module.HookEventIssues,
|
||||||
|
webhook_module.HookEventIssueAssign,
|
||||||
|
webhook_module.HookEventIssueLabel,
|
||||||
|
webhook_module.HookEventIssueMilestone:
|
||||||
|
return true
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return evt.Name
|
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 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 {
|
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
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue