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 ;
@@ -31,7 +33,7 @@ public class CreateBuildImpl implements CreateBuild {
3133
3234 private final FetchFlow fetchFlow ;
3335 private final FetchFlowYamlContent fetchFlowYamlContent ;
34- private final ParseYaml parseYamlV2 ;
36+ private final ParseYaml < DockerV2 , StepV2 , CommandV2 > parseYamlV2 ;
3537 private final BuildRepo buildRepo ;
3638 private final BuildYamlRepo buildYamlRepo ;
3739 private final JobRepo jobRepo ;
@@ -43,10 +45,7 @@ public Build invoke(Long flowId, Build.Trigger trigger, @Nullable Variables inpu
4345 var flow = fetchFlow .invoke (flowId );
4446
4547 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 ());
48+ var flowYamlObj = parseYamlV2 .invoke (yaml );
5049
5150 var build = new Build ();
5251 build .setFlowId (flow .getId ());
@@ -65,11 +64,35 @@ public Build invoke(Long flowId, Build.Trigger trigger, @Nullable Variables inpu
6564 buildYaml .setUpdatedBy (build .getUpdatedBy ());
6665 buildYamlRepo .save (buildYaml );
6766
68-
67+ createJobs ( flowYamlObj . getNext (), build , new HashSet <>());
6968 log .info ("build {} is created for flow {} with trigger {}" , build .getBuildAlias (), flowId , trigger );
7069 return build ;
7170 }
7271
72+ private void createJobs (List <StepV2 > steps , Build build , Set <Job .Id > saved ) {
73+ for (var step : steps ) {
74+ var id = new Job .Id (build .getId (), step .getName ());
75+ if (saved .contains (id )) {
76+ continue ;
77+ }
78+
79+ var next = step .getNext ();
80+
81+ var job = new Job ();
82+ job .setId (id );
83+ job .setNext (next .stream ().map ((StepV2 ::getName )).toArray (String []::new ));
84+ job .setStatus (Job .Status .CREATED );
85+ job .setAgentTags (step .getAgents ().toArray (new String [0 ]));
86+ job .setCreatedBy (build .getCreatedBy ());
87+ job .setUpdatedBy (build .getUpdatedBy ());
88+
89+ jobRepo .save (job );
90+ saved .add (id );
91+
92+ createJobs (step .getNext (), build , saved );
93+ }
94+ }
95+
7396 private Variables toBuildVariables (Flow flow , Variables inputs ) {
7497 if (inputs == null ) {
7598 return flow .getVariables ();
0 commit comments