diff options
author | ChristopherHX <christopher.homberger@web.de> | 2025-03-10 23:58:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-10 15:58:48 -0700 |
commit | a92d5f65ce14f1f8d5e9a45f3c356a760c167e45 (patch) | |
tree | bb99d6e495ee10c179e8f2cd8495ea96f876a677 /services/actions | |
parent | e47bba046c7d76dbd3b61afcc4e3e33baa9ec817 (diff) | |
download | gitea-a92d5f65ce14f1f8d5e9a45f3c356a760c167e45.tar.gz gitea-a92d5f65ce14f1f8d5e9a45f3c356a760c167e45.zip |
Fix auto concurrency cancellation skips commit status updates (#33764)
* add missing commit status
* conflicts with concurrency support
Closes #33763
Co-authored-by: Giteabot <teabot@gitea.io>
Diffstat (limited to 'services/actions')
-rw-r--r-- | services/actions/clear_tasks.go | 22 | ||||
-rw-r--r-- | services/actions/notifier_helper.go | 6 | ||||
-rw-r--r-- | services/actions/schedule_tasks.go | 2 | ||||
-rw-r--r-- | services/actions/workflow.go | 2 |
4 files changed, 26 insertions, 6 deletions
diff --git a/services/actions/clear_tasks.go b/services/actions/clear_tasks.go index 67373782d5..9d613b68a5 100644 --- a/services/actions/clear_tasks.go +++ b/services/actions/clear_tasks.go @@ -10,10 +10,12 @@ import ( actions_model "code.gitea.io/gitea/models/actions" "code.gitea.io/gitea/models/db" + repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/modules/actions" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/timeutil" + webhook_module "code.gitea.io/gitea/modules/webhook" ) // StopZombieTasks stops the task which have running status, but haven't been updated for a long time @@ -32,6 +34,24 @@ func StopEndlessTasks(ctx context.Context) error { }) } +func notifyWorkflowJobStatusUpdate(ctx context.Context, jobs []*actions_model.ActionRunJob) { + if len(jobs) > 0 { + CreateCommitStatus(ctx, jobs...) + } +} + +func CancelPreviousJobs(ctx context.Context, repoID int64, ref, workflowID string, event webhook_module.HookEventType) error { + jobs, err := actions_model.CancelPreviousJobs(ctx, repoID, ref, workflowID, event) + notifyWorkflowJobStatusUpdate(ctx, jobs) + return err +} + +func CleanRepoScheduleTasks(ctx context.Context, repo *repo_model.Repository) error { + jobs, err := actions_model.CleanRepoScheduleTasks(ctx, repo) + notifyWorkflowJobStatusUpdate(ctx, jobs) + return err +} + func stopTasks(ctx context.Context, opts actions_model.FindTaskOptions) error { tasks, err := db.Find[actions_model.ActionTask](ctx, opts) if err != nil { @@ -67,7 +87,7 @@ func stopTasks(ctx context.Context, opts actions_model.FindTaskOptions) error { remove() } - CreateCommitStatus(ctx, jobs...) + notifyWorkflowJobStatusUpdate(ctx, jobs) return nil } diff --git a/services/actions/notifier_helper.go b/services/actions/notifier_helper.go index 2d8885dc32..87ea1a37f5 100644 --- a/services/actions/notifier_helper.go +++ b/services/actions/notifier_helper.go @@ -136,7 +136,7 @@ func notify(ctx context.Context, input *notifyInput) error { return nil } if unit_model.TypeActions.UnitGlobalDisabled() { - if err := actions_model.CleanRepoScheduleTasks(ctx, input.Repo); err != nil { + if err := CleanRepoScheduleTasks(ctx, input.Repo); err != nil { log.Error("CleanRepoScheduleTasks: %v", err) } return nil @@ -341,7 +341,7 @@ func handleWorkflows( // cancel running jobs if the event is push or pull_request_sync if run.Event == webhook_module.HookEventPush || run.Event == webhook_module.HookEventPullRequestSync { - if err := actions_model.CancelPreviousJobs( + if err := CancelPreviousJobs( ctx, run.RepoID, run.Ref, @@ -472,7 +472,7 @@ func handleSchedules( log.Error("CountSchedules: %v", err) return err } else if count > 0 { - if err := actions_model.CleanRepoScheduleTasks(ctx, input.Repo); err != nil { + if err := CleanRepoScheduleTasks(ctx, input.Repo); err != nil { log.Error("CleanRepoScheduleTasks: %v", err) } } diff --git a/services/actions/schedule_tasks.go b/services/actions/schedule_tasks.go index 18f3324fd2..ad1158313b 100644 --- a/services/actions/schedule_tasks.go +++ b/services/actions/schedule_tasks.go @@ -55,7 +55,7 @@ func startTasks(ctx context.Context) error { // cancel running jobs if the event is push if row.Schedule.Event == webhook_module.HookEventPush { // cancel running jobs of the same workflow - if err := actions_model.CancelPreviousJobs( + if err := CancelPreviousJobs( ctx, row.RepoID, row.Schedule.Ref, diff --git a/services/actions/workflow.go b/services/actions/workflow.go index ccdefa802d..5225f4dcad 100644 --- a/services/actions/workflow.go +++ b/services/actions/workflow.go @@ -256,7 +256,7 @@ func DispatchActionWorkflow(ctx reqctx.RequestContext, doer *user_model.User, re } // cancel running jobs of the same workflow - if err := actions_model.CancelPreviousJobs( + if err := CancelPreviousJobs( ctx, run.RepoID, run.Ref, |