// 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 }