@@ -12,6 +12,7 @@ import (
12
12
13
13
"github.com/fsamin/go-dump"
14
14
"github.com/go-gorp/gorp"
15
+ "github.com/lib/pq"
15
16
"go.opencensus.io/stats"
16
17
17
18
"github.com/ovh/cds/engine/api/database/gorpmapping"
@@ -238,6 +239,15 @@ func LoadLastRun(db gorp.SqlExecutor, projectkey, workflowname string, loadOpts
238
239
return loadRun (db , loadOpts , query , projectkey , workflowname )
239
240
}
240
241
242
+ // LoadLastRuns returns the last run per workflowIDs
243
+ func LoadLastRuns (db gorp.SqlExecutor , workflowIDs []int64 , limit int ) ([]sdk.WorkflowRun , error ) {
244
+ query := fmt .Sprintf (`select %s
245
+ from workflow_run
246
+ where workflow_run.workflow_id = ANY($1)
247
+ order by workflow_run.workflow_id, workflow_run.num desc limit $2` , wfRunfields )
248
+ return loadRuns (db , query , pq .Int64Array (workflowIDs ), limit )
249
+ }
250
+
241
251
// LoadRun returns a specific run
242
252
func LoadRun (ctx context.Context , db gorp.SqlExecutor , projectkey , workflowname string , number int64 , loadOpts LoadRunOptions ) (* sdk.WorkflowRun , error ) {
243
253
_ , end := observability .Span (ctx , "workflow.LoadRun" ,
@@ -284,6 +294,22 @@ func LoadAndLockRunByJobID(db gorp.SqlExecutor, id int64, loadOpts LoadRunOption
284
294
return loadRun (db , loadOpts , query , id )
285
295
}
286
296
297
+ func loadRuns (db gorp.SqlExecutor , query string , args ... interface {}) ([]sdk.WorkflowRun , error ) {
298
+ runs := []Run {}
299
+ if _ , err := db .Select (& runs , query , args ... ); err != nil {
300
+ return nil , sdk .WrapError (err , "Unable to load runs" )
301
+ }
302
+ wruns := make ([]sdk.WorkflowRun , len (runs ))
303
+ for i := range runs {
304
+ wr := sdk .WorkflowRun (runs [i ])
305
+ if err := loadRunTags (db , & wr ); err != nil {
306
+ return nil , sdk .WrapError (err , "Unable to load tags" )
307
+ }
308
+ wruns [i ] = wr
309
+ }
310
+ return wruns , nil
311
+ }
312
+
287
313
//LoadRuns loads all runs
288
314
//It returns runs, offset, limit count and an error
289
315
func LoadRuns (db gorp.SqlExecutor , projectkey , workflowname string , offset , limit int , tagFilter map [string ]string ) ([]sdk.WorkflowRun , int , int , int , error ) {
@@ -367,18 +393,9 @@ func LoadRuns(db gorp.SqlExecutor, projectkey, workflowname string, offset, limi
367
393
args = append (args , strings .Join (tags , "," ))
368
394
}
369
395
370
- runs := []Run {}
371
- if _ , err := db .Select (& runs , query , args ... ); err != nil {
372
- return nil , 0 , 0 , 0 , sdk .WrapError (errc , "Unable to load runs" )
373
- }
374
- wruns := make ([]sdk.WorkflowRun , len (runs ))
375
- for i := range runs {
376
- wr := sdk .WorkflowRun (runs [i ])
377
- if err := loadRunTags (db , & wr ); err != nil {
378
- return nil , 0 , 0 , 0 , sdk .WrapError (err , "Unable to load tags" )
379
- }
380
-
381
- wruns [i ] = wr
396
+ wruns , err := loadRuns (db , query , args ... )
397
+ if err != nil {
398
+ return nil , 0 , 0 , 0 , err
382
399
}
383
400
384
401
return wruns , offset , limit , int (count ), nil
0 commit comments