diff options
author | Jason Song <i@wolfogre.com> | 2024-03-21 15:01:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-21 15:01:35 +0800 |
commit | b150ff0bab3fc6c419edf1569a0271ebcb9734fa (patch) | |
tree | 244e3ab96a5fad845f3a8cbe8b9612f317aa92ca /models | |
parent | 3ee39db34efd532626d710de6717bf3c6255c10e (diff) | |
download | gitea-b150ff0bab3fc6c419edf1569a0271ebcb9734fa.tar.gz gitea-b150ff0bab3fc6c419edf1569a0271ebcb9734fa.zip |
Cancel previous runs of the same PR automatically (#29961)
Follow #25716. Also cancel previous runs for `pull_request_sync`.
It's not a bug since it original PR said "if the event is push".
The main change is
https://github.com/go-gitea/gitea/pull/29961/files#diff-08adda3f8ae0360937f46abb1f4418603bd3518522baa356be11c6c7ac4abcc3.
And also rename `CancelRunningJobs` to `CancelPreviousJobs` to make it
more clear.
Diffstat (limited to 'models')
-rw-r--r-- | models/actions/run.go | 9 | ||||
-rw-r--r-- | models/actions/schedule.go | 4 |
2 files changed, 7 insertions, 6 deletions
diff --git a/models/actions/run.go b/models/actions/run.go index 7b3125949b..fa9db0b554 100644 --- a/models/actions/run.go +++ b/models/actions/run.go @@ -170,15 +170,16 @@ func updateRepoRunsNumbers(ctx context.Context, repo *repo_model.Repository) err return err } -// CancelRunningJobs cancels all running and waiting jobs associated with a specific workflow. -func CancelRunningJobs(ctx context.Context, repoID int64, ref, workflowID string, event webhook_module.HookEventType) error { - // Find all runs in the specified repository, reference, and workflow with statuses 'Running' or 'Waiting'. +// CancelPreviousJobs cancels all previous jobs of the same repository, reference, workflow, and event. +// It's useful when a new run is triggered, and all previous runs needn't be continued anymore. +func CancelPreviousJobs(ctx context.Context, repoID int64, ref, workflowID string, event webhook_module.HookEventType) error { + // Find all runs in the specified repository, reference, and workflow with non-final status runs, total, err := db.FindAndCount[ActionRun](ctx, FindRunOptions{ RepoID: repoID, Ref: ref, WorkflowID: workflowID, TriggerEvent: event, - Status: []Status{StatusRunning, StatusWaiting}, + Status: []Status{StatusRunning, StatusWaiting, StatusBlocked}, }) if err != nil { return err diff --git a/models/actions/schedule.go b/models/actions/schedule.go index d450e7aa07..3646a046a0 100644 --- a/models/actions/schedule.go +++ b/models/actions/schedule.go @@ -127,14 +127,14 @@ func CleanRepoScheduleTasks(ctx context.Context, repo *repo_model.Repository) er return fmt.Errorf("DeleteCronTaskByRepo: %v", err) } // cancel running cron jobs of this repository and delete old schedules - if err := CancelRunningJobs( + if err := CancelPreviousJobs( ctx, repo.ID, repo.DefaultBranch, "", webhook_module.HookEventSchedule, ); err != nil { - return fmt.Errorf("CancelRunningJobs: %v", err) + return fmt.Errorf("CancelPreviousJobs: %v", err) } return nil } |