10000 feat(worker): worker download from latest workflow run (#4104) · ovh/cds@eb6c007 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit eb6c007

Browse files
fsaminyesnault
authored andcommitted
feat(worker): worker download from latest workflow run (#4104)
close #4095
1 parent feceb12 commit eb6c007

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

docs/content/docs/components/worker/download.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ worker download [flags]
3737
## Options
3838

3939
```
40-
--number string Workflow Number to download from. Optional, default: current workflow run
40+
--number string Workflow Number to download from. Optional, default: if workflow is the current workflow: current run, else latest run
4141
--pattern string Pattern matching files to download. Optional, default: *
4242
--tag string Tag matching files to download. Optional
4343
--workflow string Workflow name to download from. Optional, default: current workflow

engine/worker/cmd_download.go

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/spf13/cobra"
1616

1717
"github.com/ovh/cds/sdk"
18+
"github.com/ovh/cds/sdk/cdsclient"
1819
)
1920

2021
var (
@@ -139,18 +140,40 @@ func (wk *currentWorker) downloadHandler(w http.ResponseWriter, r *http.Request)
139140

140141
sendLog := getLogger(wk, wk.currentJob.wJob.ID, wk.currentJob.currentStep)
141142

143+
currentProject := sdk.ParameterValue(wk.currentJob.params, "cds.project")
144+
currentWorkflow := sdk.ParameterValue(wk.currentJob.params, "cds.workflow")
142145
if reqArgs.Workflow == "" {
143-
reqArgs.Workflow = sdk.ParameterValue(wk.currentJob.params, "cds.workflow")
146+
reqArgs.Workflow = currentWorkflow
144147
}
145148

149+
// If the reqArgs.Number is empty and if the reqArgs.Workflow is the current workflow, take the current build number
146150
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
154177
}
155178
}
156179

0 commit comments

Comments
 (0)
0