-
Notifications
You must be signed in to change notification settings - Fork 0
/
action_build.go
108 lines (99 loc) · 3.38 KB
/
action_build.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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package pipeline
import (
"database/sql"
"github.com/lib/pq"
"github.com/ovh/cds/engine/api/database"
"github.com/ovh/cds/sdk"
)
func loadActionBuildsByStagePosition(db database.Querier, pipelineBuildID int64, stagePosition int) ([]sdk.ActionBuild, error) {
actionBuilds := []sdk.ActionBuild{}
query := `SELECT action_build.status, action_build.id, action.name
FROM action_build
JOIN pipeline_action ON pipeline_action.id = action_build.pipeline_action_id
JOIN action ON action.id = pipeline_action.action_id
JOIN pipeline_stage ON pipeline_stage.id = pipeline_action.pipeline_stage_id
WHERE action_build.pipeline_build_id = $1 and pipeline_stage.build_order = $2`
rows, err := db.Query(query, pipelineBuildID, stagePosition)
if err != nil {
return actionBuilds, err
}
defer rows.Close()
for rows.Next() {
var actionBuild sdk.ActionBuild
var status string
err = rows.Scan(&status, &actionBuild.ID, &actionBuild.ActionName)
if err != nil {
return actionBuilds, err
}
actionBuild.Status = sdk.StatusFromString(status)
actionBuilds = append(actionBuilds, actionBuild)
}
return actionBuilds, nil
}
// LoadActionStatus Load status of action_build for the given pipeline_action
func LoadActionStatus(db database.Querier, pipelineActionID int64, pipelineBuildID int64) (sdk.Status, error) {
query := `SELECT status FROM action_build WHERE pipeline_action_id = $1 AND pipeline_build_id = $2`
var status string
err := db.QueryRow(query, pipelineActionID, pipelineBuildID).Scan(&status)
statusAction := sdk.StatusFromString(status)
return statusAction, err
}
func loadStageAndActionBuilds(db database.Querier, pb *sdk.PipelineBuild) error {
query := LoadPipelineBuildStage
stagesRows, err := db.Query(query, pb.ID)
if err != nil {
return err
}
defer stagesRows.Close()
stages := []sdk.Stage{}
for stagesRows.Next() {
var start, done pq.NullTime
var pipelineActionID sql.NullInt64
var buildOrder int
var stagename string
err = stagesRows.Scan(&start, &done, &pipelineActionID, &stagename, &buildOrder)
if err != nil {
return err
}
if len(stages) < buildOrder {
stages = append(stages, sdk.Stage{
Name: stagename,
BuildOrder: buildOrder,
ActionBuilds: []sdk.ActionBuild{},
})
}
if start.Valid && done.Valid && pipelineActionID.Valid {
stages[buildOrder-1].ActionBuilds = append(stages[buildOrder-1].ActionBuilds, sdk.ActionBuild{
Start: start.Time,
Done: done.Time,
PipelineActionID: pipelineActionID.Int64,
})
}
}
pb.Stages = stages
return nil
}
func loadAllActionBuilds(db database.Querier, pipelineBuildID int64) ([]sdk.ActionBuild, error) {
actionBuilds := []sdk.ActionBuild{}
query := `SELECT action_build.status, action_build.id, action.name
FROM action_build
JOIN pipeline_action ON pipeline_action.id = action_build.pipeline_action_id
JOIN action ON action.id = pipeline_action.action_id
WHERE action_build.pipeline_build_id = $1`
rows, err := db.Query(query, pipelineBuildID)
if err != nil {
return actionBuilds, err
}
defer rows.Close()
for rows.Next() {
var actionBuild sdk.ActionBuild
var status string
err = rows.Scan(&status, &actionBuild.ID, &actionBuild.ActionName)
if err != nil {
return actionBuilds, err
}
actionBuild.Status = sdk.StatusFromString(status)
actionBuilds = append(actionBuilds, actionBuild)
}
return actionBuilds, nil
}