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.tags/v1.22.0-rc0
@@ -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 |
@@ -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 | |||
} |
@@ -317,17 +317,17 @@ func handleWorkflows( | |||
continue | |||
} | |||
// cancel running jobs if the event is push | |||
if run.Event == webhook_module.HookEventPush { | |||
// cancel running jobs of the same workflow | |||
if err := actions_model.CancelRunningJobs( | |||
// 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( | |||
ctx, | |||
run.RepoID, | |||
run.Ref, | |||
run.WorkflowID, | |||
run.Event, | |||
); err != nil { | |||
log.Error("CancelRunningJobs: %v", err) | |||
log.Error("CancelPreviousJobs: %v", err) | |||
} | |||
} | |||
@@ -55,14 +55,14 @@ 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.CancelRunningJobs( | |||
if err := actions_model.CancelPreviousJobs( | |||
ctx, | |||
row.RepoID, | |||
row.Schedule.Ref, | |||
row.Schedule.WorkflowID, | |||
webhook_module.HookEventSchedule, | |||
); err != nil { | |||
log.Error("CancelRunningJobs: %v", err) | |||
log.Error("CancelPreviousJobs: %v", err) | |||
} | |||
} | |||
@@ -410,14 +410,14 @@ func RenameBranch(ctx context.Context, repo *repo_model.Repository, doer *user_m | |||
log.Error("DeleteCronTaskByRepo: %v", err) | |||
} | |||
// cancel running cron jobs of this repository and delete old schedules | |||
if err := actions_model.CancelRunningJobs( | |||
if err := actions_model.CancelPreviousJobs( | |||
ctx, | |||
repo.ID, | |||
from, | |||
"", | |||
webhook_module.HookEventSchedule, | |||
); err != nil { | |||
log.Error("CancelRunningJobs: %v", err) | |||
log.Error("CancelPreviousJobs: %v", err) | |||
} | |||
err2 = gitrepo.SetDefaultBranch(ctx, repo, to) | |||
@@ -575,14 +575,14 @@ func SetRepoDefaultBranch(ctx context.Context, repo *repo_model.Repository, gitR | |||
log.Error("DeleteCronTaskByRepo: %v", err) | |||
} | |||
// cancel running cron jobs of this repository and delete old schedules | |||
if err := actions_model.CancelRunningJobs( | |||
if err := actions_model.CancelPreviousJobs( | |||
ctx, | |||
repo.ID, | |||
oldDefaultBranchName, | |||
"", | |||
webhook_module.HookEventSchedule, | |||
); err != nil { | |||
log.Error("CancelRunningJobs: %v", err) | |||
log.Error("CancelPreviousJobs: %v", err) | |||
} | |||
if err := gitrepo.SetDefaultBranch(ctx, repo, newBranchName); err != nil { |