33import com .flowci .build .business .CreateBuild ;
44import com .flowci .build .model .Build ;
55import com .flowci .build .model .BuildYaml ;
6+ import com .flowci .build .model .Job ;
67import com .flowci .build .repo .BuildRepo ;
78import com .flowci .build .repo .BuildYamlRepo ;
89import com .flowci .build .repo .JobRepo ;
1213import com .flowci .flow .business .FetchFlowYamlContent ;
1314import com .flowci .flow .model .Flow ;
1415import com .flowci .yaml .business .ParseYaml ;
15- import com .flowci .yaml .model .Command ;
16- import com .flowci .yaml .model .Step ;
16+ import com .flowci .yaml .model .v2 .CommandV2 ;
17+ import com .flowci .yaml .model .v2 .DockerV2 ;
18+ import com .flowci .yaml .model .v2 .StepV2 ;
1719import jakarta .annotation .Nullable ;
1820import jakarta .transaction .Transactional ;
1921import lombok .AllArgsConstructor ;
2325import java .util .HashSet ;
2426import java .util .List ;
2527import java .util .Set ;
28+ import java .util .stream .Collectors ;
2629
2730@ Slf4j
2831@ Component
@@ -31,7 +34,7 @@ public class CreateBuildImpl implements CreateBuild {
3134
3235 private final FetchFlow fetchFlow ;
3336 private final FetchFlowYamlContent fetchFlowYamlContent ;
34- private final ParseYaml parseYamlV2 ;
37+ private final ParseYaml < DockerV2 , StepV2 , CommandV2 > parseYamlV2 ;
3538 private final BuildRepo buildRepo ;
3639 private final BuildYamlRepo buildYamlRepo ;
3740 private final JobRepo jobRepo ;
@@ -43,10 +46,7 @@ public Build invoke(Long flowId, Build.Trigger trigger, @Nullable Variables inpu
4346 var flow = fetchFlow .invoke (flowId );
4447
4548 var yaml = fetchFlowYamlContent .invoke (flowId , false );
46- var yamlObj = parseYamlV2 .invoke (yaml );
47- var agentTags = yamlObj .getAgents () == null
48- ? Set .<String >of ()
49- : new HashSet <>(yamlObj .getAgents ());
49+ var flowYamlObj = parseYamlV2 .invoke (yaml );
5050
5151 var build = new Build ();
5252 build .setFlowId (flow .getId ());
@@ -65,11 +65,35 @@ public Build invoke(Long flowId, Build.Trigger trigger, @Nullable Variables inpu
6565 buildYaml .setUpdatedBy (build .getUpdatedBy ());
6666 buildYamlRepo .save (buildYaml );
6767
68-
68+ createJobs ( flowYamlObj . getNext (), build , 1 , new HashSet < Job . Id >());
6969 log .info ("build {} is created for flow {} with trigger {}" , build .getBuildAlias (), flowId , trigger );
7070 return build ;
7171 }
7272
73+ private void createJobs (List <StepV2 > steps , Build build , Integer sequence , Set <Job .Id > saved ) {
74+ for (var step : steps ) {
75+ var id = new Job .Id (build .getId (), step .getName ());
76+ if (saved .contains (id )) {
77+ continue ;
78+ }
79+
80+ var next = step .getNext ();
81+
82+ var job = new Job ();
83+ job .setId (id );
84+ job .setNext (next .stream ().map ((StepV2 ::getName )).toArray (String []::new ));
85+ job .setStatus (Job .Status .CREATED );
86+ job .setAgentTags (step .getAgents ().toArray (new String [0 ]));
87+ job .setCreatedBy (build .getCreatedBy ());
88+ job .setUpdatedBy (build .getUpdatedBy ());
89+
90+ jobRepo .save (job );
91+ saved .add (id );
92+
93+ createJobs (step .getNext (), build , sequence + 1 , saved );
94+ }
95+ }
96+
7397 private Variables toBuildVariables (Flow flow , Variables inputs ) {
7498 if (inputs == null ) {
7599 return flow .getVariables ();
0 commit comments