summaryrefslogtreecommitdiffstats
path: root/modules/actions
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2024-01-12 22:50:38 +0100
committerGitHub <noreply@github.com>2024-01-12 22:50:38 +0100
commit97292da96048b036cbe36b3ea66503ac568a73e7 (patch)
tree3104c11d619e6b11a82d6a898354dc4cf64ed0be /modules/actions
parentAdd tests for #28765 (#28773) (diff)
downloadforgejo-97292da96048b036cbe36b3ea66503ac568a73e7.tar.xz
forgejo-97292da96048b036cbe36b3ea66503ac568a73e7.zip
Fix schedule tasks bugs (#28691)
Fix #28157 This PR fix the possible bugs about actions schedule. ## The Changes - Move `UpdateRepositoryUnit` and `SetRepoDefaultBranch` from models to service layer - Remove schedules plan from database and cancel waiting & running schedules tasks in this repository when actions unit has been disabled or global disabled. - Remove schedules plan from database and cancel waiting & running schedules tasks in this repository when default branch changed.
Diffstat (limited to 'modules/actions')
-rw-r--r--modules/actions/github.go4
-rw-r--r--modules/actions/workflows.go24
-rw-r--r--modules/actions/workflows_test.go7
3 files changed, 25 insertions, 10 deletions
diff --git a/modules/actions/github.go b/modules/actions/github.go
index 71f81a8903..fafea4e11a 100644
--- a/modules/actions/github.go
+++ b/modules/actions/github.go
@@ -22,6 +22,7 @@ const (
GithubEventRelease = "release"
GithubEventPullRequestComment = "pull_request_comment"
GithubEventGollum = "gollum"
+ GithubEventSchedule = "schedule"
)
// canGithubEventMatch check if the input Github event can match any Gitea event.
@@ -69,6 +70,9 @@ func canGithubEventMatch(eventName string, triggedEvent webhook_module.HookEvent
return false
}
+ case GithubEventSchedule:
+ return triggedEvent == webhook_module.HookEventSchedule
+
default:
return eventName == string(triggedEvent)
}
diff --git a/modules/actions/workflows.go b/modules/actions/workflows.go
index 408fdb8f8e..cbc7e011d1 100644
--- a/modules/actions/workflows.go
+++ b/modules/actions/workflows.go
@@ -22,7 +22,7 @@ import (
type DetectedWorkflow struct {
EntryName string
- TriggerEvent string
+ TriggerEvent *jobparser.Event
Content []byte
}
@@ -100,6 +100,7 @@ func DetectWorkflows(
commit *git.Commit,
triggedEvent webhook_module.HookEventType,
payload api.Payloader,
+ detectSchedule bool,
) ([]*DetectedWorkflow, []*DetectedWorkflow, error) {
entries, err := ListWorkflows(commit)
if err != nil {
@@ -114,6 +115,7 @@ func DetectWorkflows(
return nil, nil, err
}
+ // one workflow may have multiple events
events, err := GetEventsFromContent(content)
if err != nil {
log.Warn("ignore invalid workflow %q: %v", entry.Name(), err)
@@ -122,17 +124,18 @@ func DetectWorkflows(
for _, evt := range events {
log.Trace("detect workflow %q for event %#v matching %q", entry.Name(), evt, triggedEvent)
if evt.IsSchedule() {
- dwf := &DetectedWorkflow{
- EntryName: entry.Name(),
- TriggerEvent: evt.Name,
- Content: content,
+ if detectSchedule {
+ dwf := &DetectedWorkflow{
+ EntryName: entry.Name(),
+ TriggerEvent: evt,
+ Content: content,
+ }
+ schedules = append(schedules, dwf)
}
- schedules = append(schedules, dwf)
- }
- if detectMatched(gitRepo, commit, triggedEvent, payload, evt) {
+ } else if detectMatched(gitRepo, commit, triggedEvent, payload, evt) {
dwf := &DetectedWorkflow{
EntryName: entry.Name(),
- TriggerEvent: evt.Name,
+ TriggerEvent: evt,
Content: content,
}
workflows = append(workflows, dwf)
@@ -153,7 +156,8 @@ func detectMatched(gitRepo *git.Repository, commit *git.Commit, triggedEvent web
webhook_module.HookEventCreate,
webhook_module.HookEventDelete,
webhook_module.HookEventFork,
- webhook_module.HookEventWiki:
+ webhook_module.HookEventWiki,
+ webhook_module.HookEventSchedule:
if len(evt.Acts()) != 0 {
log.Warn("Ignore unsupported %s event arguments %v", triggedEvent, evt.Acts())
}
diff --git a/modules/actions/workflows_test.go b/modules/actions/workflows_test.go
index 2d57f19488..c8e1e553fe 100644
--- a/modules/actions/workflows_test.go
+++ b/modules/actions/workflows_test.go
@@ -118,6 +118,13 @@ func TestDetectMatched(t *testing.T) {
yamlOn: "on: gollum",
expected: true,
},
+ {
+ desc: "HookEventSchedue(schedule) matches GithubEventSchedule(schedule)",
+ triggedEvent: webhook_module.HookEventSchedule,
+ payload: nil,
+ yamlOn: "on: schedule",
+ expected: true,
+ },
}
for _, tc := range testCases {