@@ -15,8 +15,12 @@ type TaskStages interface {
15
15
// Read a task stage by ID
16
16
Read (ctx context.Context , taskStageID string , options * TaskStageReadOptions ) (* TaskStage , error )
17
17
18
- // List all task stages for a given rrun
18
+ // List all task stages for a given run
19
19
List (ctx context.Context , runID string , options * TaskStageListOptions ) (* TaskStageList , error )
20
+
21
+ // **Note: This function is still in BETA and subject to change.**
22
+ // Override a task stage for a given run
23
+ Override (ctx context.Context , taskStageID string , options TaskStageOverrideOptions ) (* TaskStage , error )
20
24
}
21
25
22
26
// taskStages implements TaskStages
@@ -33,19 +37,51 @@ const (
33
37
PreApply Stage = "pre_apply"
34
38
)
35
39
40
+ // TaskStageStatus is an enum that represents all possible statuses for a task stage
41
+ type TaskStageStatus string
42
+
43
+ const (
44
+ TaskStagePending TaskStageStatus = "pending"
45
+ TaskStageRunning TaskStageStatus = "running"
46
+ TaskStagePassed TaskStageStatus = "passed"
47
+ TaskStageFailed TaskStageStatus = "failed"
48
+ TaskStageAwaitingOverride TaskStageStatus = "awaiting_override"
49
+ )
50
+
51
+ // Permissions represents the permission types for overridding a task stage
52
+ type Permissions struct {
53
+ CanOverridePolicy * bool `jsonapi:"attr,can-override-policy"`
54
+ CanOverrideTasks * bool `jsonapi:"attr,can-override-tasks"`
55
+ CanOverride * bool `jsonapi:"attr,can-override"`
56
+ }
57
+
58
+ // Actions represents a task stage actions
59
+ type Actions struct {
60
+ IsOverridable * bool `jsonapi:"attr,is-overridable"`
61
+ }
62
+
36
63
// TaskStage represents a TFC/E run's stage where run tasks can occur
37
64
type TaskStage struct {
38
65
ID string `jsonapi:"primary,task-stages"`
39
66
Stage Stage `jsonapi:"attr,stage"`
67
+ Status TaskStageStatus `jsonapi:"attr,status"`
40
68
StatusTimestamps TaskStageStatusTimestamps `jsonapi:"attr,status-timestamps"`
41
69
CreatedAt time.Time `jsonapi:"attr,created-at,iso8601"`
42
70
UpdatedAt time.Time `jsonapi:"attr,updated-at,iso8601"`
71
+ Permissions * Permissions `jsonapi:"attr,permissions"`
72
+ Actions * Actions `jsonapi:"attr,actions"`
43
73
44
74
Run * Run `jsonapi:"relation,run"`
45
75
TaskResults []* TaskResult `jsonapi:"relation,task-results"`
46
76
PolicyEvaluations []* PolicyEvaluation `jsonapi:"relation,policy-evaluations"`
47
77
}
48
78
79
+ // TaskStageOverrideOptions represents the options for overriding a TaskStage.
80
+ type TaskStageOverrideOptions struct {
81
+ // An optional explanation for why the stage was overridden
82
+ Comment * string `json:"comment,omitempty"`
83
+ }
84
+
49
85
// TaskStageList represents a list of task stages
50
86
type TaskStageList struct {
51
87
* Pagination
@@ -66,6 +102,9 @@ type TaskStageIncludeOpt string
66
102
67
103
const TaskStageTaskResults TaskStageIncludeOpt = "task_results"
68
104
105
+ // **Note: This field is still in BETA and subject to change.**
106
+ const PolicyEvaluationsTaskResults TaskStageIncludeOpt = "policy_evaluations"
107
+
69
108
// TaskStageReadOptions represents the set of options when reading a task stage
70
109
type TaskStageReadOptions struct {
71
110
// Optional: A list of relations to include.
@@ -123,6 +162,28 @@ func (s *taskStages) List(ctx context.Context, runID string, options *TaskStageL
123
162
return tlist , nil
124
163
}
125
164
165
+ // **Note: This function is still in BETA and subject to change.**
166
+ // Override a task stages for a run
167
+ func (s * taskStages ) Override (ctx context.Context , taskStageID string , options TaskStageOverrideOptions ) (* TaskStage , error ) {
168
+ if ! validStringID (& taskStageID ) {
169
+ return nil , ErrInvalidTaskStageID
170
+ }
171
+
172
+ u := fmt .Sprintf ("task-stages/%s/actions/override" , taskStageID )
173
+ req , err := s .client .NewRequest ("POST" , u , & options )
174
+ if err != nil {
175
+ return nil , err
176
+ }
177
+
178
+ t := & TaskStage {}
179
+ err = req .Do (ctx , t )
180
+ if err != nil {
181
+ return nil , err
182
+ }
183
+
184
+ return t , nil
185
+ }
186
+
126
187
func (o * TaskStageReadOptions ) valid () error {
127
188
if o == nil {
128
189
return nil // nothing to validate
@@ -140,6 +201,8 @@ func validateTaskStageIncludeParams(params []TaskStageIncludeOpt) error {
140
201
switch p {
141
202
case TaskStageTaskResults :
142
203
// do nothing
204
+ case PolicyEvaluationsTaskResults :
205
+ // do nothing
143
206
default :
144
207
return ErrInvalidIncludeValue
145
208
}
0 commit comments