@@ -15,6 +15,7 @@ import (
15
15
"github.com/spf13/cobra"
16
16
17
17
"github.com/ovh/cds/sdk"
18
+ "github.com/ovh/cds/sdk/cdsclient"
18
19
)
19
20
20
21
var (
@@ -139,18 +140,40 @@ func (wk *currentWorker) downloadHandler(w http.ResponseWriter, r *http.Request)
139
140
140
141
sendLog := getLogger (wk , wk .currentJob .wJob .ID , wk .currentJob .currentStep )
141
142
143
+ currentProject := sdk .ParameterValue (wk .currentJob .params , "cds.project" )
144
+ currentWorkflow := sdk .ParameterValue (wk .currentJob .params , "cds.workflow" )
142
145
if reqArgs .Workflow == "" {
143
- reqArgs .Workflow = sdk . ParameterValue ( wk . currentJob . params , "cds.workflow" )
146
+ reqArgs .Workflow = currentWorkflow
144
147
}
145
148
149
+ // If the reqArgs.Number is empty and if the reqArgs.Workflow is the current workflow, take the current build number
146
150
if reqArgs .Number == 0 {
147
- var errN error
148
- buildNumberString := sdk .ParameterValue (wk .currentJob .params , "cds.run.number" )
149
- reqArgs .Number , errN = strconv .ParseInt (buildNumberString , 10 , 64 )
150
- if errN != nil {
151
- newError := sdk .NewError (sdk .ErrWrongRequest , fmt .Errorf ("Cannot parse '%s' as run number: %s" , buildNumberString , errN ))
152
- writeError (w , r , newError )
153
- return
151
+ if reqArgs .Workflow == currentWorkflow {
152
+ var errN error
153
+ buildNumberString := sdk .ParameterValue (wk .currentJob .params , "cds.run.number" )
154
+ reqArgs .Number , errN = strconv .ParseInt (buildNumberString , 10 , 64 )
155
+ if errN != nil {
156
+ newError := sdk .NewError (sdk .ErrWrongRequest , fmt .Errorf ("Cannot parse '%s' as run number: %s" , buildNumberString , errN ))
157
+ writeError (w , r , newError )
158
+ return
159
+ }
160
+ } else { // If this is another workflow, check the latest run
161
+ filters := []cdsclient.Filter {
162
+ {
163
+ Name : "workflow" ,
164
+ Value : reqArgs .Workflow ,
165
+ },
166
+ }
167
+ runs , err := wk .client .WorkflowRunSearch (currentProject , 0 , 0 , filters ... )
168
+ if err != nil {
169
+ writeError (w , r , err )
170
+ return
171
+ }
172
+ if len (runs ) < 1 {
173
+ writeError (w , r , fmt .Errorf ("workflow run not found" ))
174
+ return
175
+ }
176
+ reqArgs .Number = runs [0 ].Number
154
177
}
155
178
}
156
179
0 commit comments