@@ -20,7 +20,7 @@ type Setter interface {
2020 workspaceID string ,
2121 workflow * oapi.Workflow ,
2222 inputs map [string ]any ,
23- ) error
23+ ) ( * oapi. WorkflowRunResult , error )
2424}
2525
2626var _ Setter = & PostgresSetter {}
@@ -48,17 +48,17 @@ func (s *PostgresSetter) CreateWorkflowRun(
4848 workspaceID string ,
4949 workflow * oapi.Workflow ,
5050 inputs map [string ]any ,
51- ) error {
51+ ) ( * oapi. WorkflowRunResult , error ) {
5252 dispatchContext := s .buildDispatchContext (workflow , inputs )
5353
5454 workflowIDUUID , err := uuid .Parse (workflow .Id )
5555 if err != nil {
56- return fmt .Errorf ("parse workflow id: %w" , err )
56+ return nil , fmt .Errorf ("parse workflow id: %w" , err )
5757 }
5858
5959 tx , err := db .GetPool (ctx ).Begin (ctx )
6060 if err != nil {
61- return fmt .Errorf ("begin transaction: %w" , err )
61+ return nil , fmt .Errorf ("begin transaction: %w" , err )
6262 }
6363 defer func () { _ = tx .Rollback (ctx ) }()
6464
@@ -69,30 +69,42 @@ func (s *PostgresSetter) CreateWorkflowRun(
6969 Inputs : inputs ,
7070 })
7171 if err != nil {
72- return fmt .Errorf ("insert workflow run: %w" , err )
72+ return nil , fmt .Errorf ("insert workflow run: %w" , err )
7373 }
7474
75+ jobs := make ([]oapi.WorkflowRunJob , 0 , len (workflow .Jobs ))
7576 for _ , jobAgent := range workflow .Jobs {
7677 isMatchingSelector , err := selector .Match (ctx , jobAgent .Selector , * dispatchContext )
7778 if err != nil {
78- return fmt .Errorf ("match selector: %w" , err )
79+ return nil , fmt .Errorf ("match selector: %w" , err )
7980 }
8081 if ! isMatchingSelector {
8182 continue
8283 }
83- if err := s .dispatchJobForAgent (
84+ job , err := s .dispatchJobForAgent (
8485 ctx ,
8586 queries ,
8687 jobAgent ,
8788 workflowRun .ID ,
8889 dispatchContext ,
8990 workspaceID ,
90- ); err != nil {
91- return err
91+ )
92+ if err != nil {
93+ return nil , err
9294 }
95+ jobs = append (jobs , job )
9396 }
9497
95- return tx .Commit (ctx )
98+ if err := tx .Commit (ctx ); err != nil {
99+ return nil , fmt .Errorf ("commit transaction: %w" , err )
100+ }
101+
102+ return & oapi.WorkflowRunResult {
103+ Id : workflowRun .ID .String (),
104+ WorkflowId : workflow .Id ,
105+ Inputs : inputs ,
106+ Jobs : jobs ,
107+ }, nil
96108}
97109
98110// mergeWorkflowJobAgentConfig builds the JobAgentConfig that ends up on a
@@ -136,34 +148,34 @@ func (s *PostgresSetter) dispatchJobForAgent(
136148 workflowRunID uuid.UUID ,
137149 dispatchContext * oapi.DispatchContext ,
138150 workspaceID string ,
139- ) error {
151+ ) (oapi. WorkflowRunJob , error ) {
140152 jobAgentIDUUID , err := uuid .Parse (jobAgent .Ref )
141153 if err != nil {
142- return fmt .Errorf ("parse job agent id: %w" , err )
154+ return oapi. WorkflowRunJob {}, fmt .Errorf ("parse job agent id: %w" , err )
143155 }
144156 workspaceIDUUID , err := uuid .Parse (workspaceID )
145157 if err != nil {
146- return fmt .Errorf ("parse workspace id: %w" , err )
158+ return oapi. WorkflowRunJob {}, fmt .Errorf ("parse workspace id: %w" , err )
147159 }
148160 runner , err := queries .GetJobAgentByID (ctx , jobAgentIDUUID )
149161 if err != nil {
150- return fmt .Errorf ("get job agent: %w" , err )
162+ return oapi. WorkflowRunJob {}, fmt .Errorf ("get job agent: %w" , err )
151163 }
152164 if runner .WorkspaceID != workspaceIDUUID {
153- return fmt .Errorf (
165+ return oapi. WorkflowRunJob {}, fmt .Errorf (
154166 "job agent %s does not belong to workspace %s" ,
155167 jobAgentIDUUID , workspaceIDUUID ,
156168 )
157169 }
158170 mergedConfig := mergeWorkflowJobAgentConfig (runner .Config , jobAgent .Config )
159171 jobAgentConfig , err := json .Marshal (mergedConfig )
160172 if err != nil {
161- return fmt .Errorf ("marshal job agent config: %w" , err )
173+ return oapi. WorkflowRunJob {}, fmt .Errorf ("marshal job agent config: %w" , err )
162174 }
163175 jobDispatchContext := buildJobDispatchContext (dispatchContext , runner , mergedConfig )
164176 dispatchContextJSON , err := json .Marshal (jobDispatchContext )
165177 if err != nil {
166- return fmt .Errorf ("marshal dispatch context: %w" , err )
178+ return oapi. WorkflowRunJob {}, fmt .Errorf ("marshal dispatch context: %w" , err )
167179 }
168180
169181 now := pgtype.Timestamptz {Time : time .Now ().UTC (), Valid : true }
@@ -178,14 +190,14 @@ func (s *PostgresSetter) dispatchJobForAgent(
178190 CreatedAt : now ,
179191 UpdatedAt : now ,
180192 }); err != nil {
181- return fmt .Errorf ("insert job: %w" , err )
193+ return oapi. WorkflowRunJob {}, fmt .Errorf ("insert job: %w" , err )
182194 }
183195
184196 if _ , err := queries .InsertWorkflowJob (ctx , db.InsertWorkflowJobParams {
185197 WorkflowRunID : workflowRunID ,
186198 JobID : jobID ,
187199 }); err != nil {
188- return fmt .Errorf ("insert workflow job: %w" , err )
200+ return oapi. WorkflowRunJob {}, fmt .Errorf ("insert workflow job: %w" , err )
189201 }
190202
191203 if err := s .queue .Enqueue (ctx , reconcile.EnqueueParams {
@@ -194,8 +206,11 @@ func (s *PostgresSetter) dispatchJobForAgent(
194206 ScopeType : "job" ,
195207 ScopeID : jobID .String (),
196208 }); err != nil {
197- return fmt .Errorf ("enqueue job dispatch: %w" , err )
209+ return oapi. WorkflowRunJob {}, fmt .Errorf ("enqueue job dispatch: %w" , err )
198210 }
199211
200- return nil
212+ return oapi.WorkflowRunJob {
213+ JobId : jobID .String (),
214+ JobAgentId : jobAgentIDUUID .String (),
215+ }, nil
201216}
0 commit comments