/
run_job.go
48 lines (41 loc) · 1.11 KB
/
run_job.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package workflow_v2
import (
"context"
"github.com/ovh/cds/sdk"
)
func RetrieveJobToKeep(_ context.Context, w sdk.V2Workflow, runJobsMap map[string]sdk.V2WorkflowRunJob, runJobToRestart map[string]sdk.V2WorkflowRunJob) map[string]sdk.V2WorkflowRunJob {
runJobsToKeep := make(map[string]sdk.V2WorkflowRunJob)
// Browse all run jobs
allJobsLoop:
for runJobID, runJob := range runJobsMap {
// exclude job to restart
for id := range runJobToRestart {
if runJobID == id {
continue allJobsLoop
}
}
// Get all job ancestors
parentJobs := sdk.WorkflowJobParents(w, runJob.JobID)
// Check if in job ancestors there is a job to restart, if yes do not keep this job
for _, parentJobID := range parentJobs {
for _, rj := range runJobToRestart {
if rj.JobID == parentJobID {
continue allJobsLoop
}
}
}
// Keep this job and all ancestors
runJobsToKeep[runJob.ID] = runJob
for _, a := range parentJobs {
for _, rj := range runJobsMap {
if rj.JobID == a {
runJobsToKeep[rj.ID] = rj
if len(rj.Matrix) == 0 {
break
}
}
}
}
}
return runJobsToKeep
}