39 lines
897 B
Go
39 lines
897 B
Go
|
// Copyright 2024 The Gitea Authors. All rights reserved.
|
||
|
// SPDX-License-Identifier: MIT
|
||
|
|
||
|
package actions
|
||
|
|
||
|
import (
|
||
|
actions_model "code.gitea.io/gitea/models/actions"
|
||
|
"code.gitea.io/gitea/modules/container"
|
||
|
)
|
||
|
|
||
|
// GetAllRerunJobs get all jobs that need to be rerun when job should be rerun
|
||
|
func GetAllRerunJobs(job *actions_model.ActionRunJob, allJobs []*actions_model.ActionRunJob) []*actions_model.ActionRunJob {
|
||
|
rerunJobs := []*actions_model.ActionRunJob{job}
|
||
|
rerunJobsIDSet := make(container.Set[string])
|
||
|
rerunJobsIDSet.Add(job.JobID)
|
||
|
|
||
|
for {
|
||
|
found := false
|
||
|
for _, j := range allJobs {
|
||
|
if rerunJobsIDSet.Contains(j.JobID) {
|
||
|
continue
|
||
|
}
|
||
|
for _, need := range j.Needs {
|
||
|
if rerunJobsIDSet.Contains(need) {
|
||
|
found = true
|
||
|
rerunJobs = append(rerunJobs, j)
|
||
|
rerunJobsIDSet.Add(j.JobID)
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if !found {
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return rerunJobs
|
||
|
}
|