@@ -2,7 +2,6 @@ package main
2
2
3
3
import (
4
4
"context"
5
- "encoding/json"
6
5
"fmt"
7
6
"os"
8
7
"regexp"
@@ -12,7 +11,6 @@ import (
12
11
13
12
"github.com/ovh/cds/cli"
14
13
"github.com/ovh/cds/sdk"
15
- "github.com/ovh/cds/sdk/cdn"
16
14
)
17
15
18
16
var workflowArtifactCmd = cli.Command {
@@ -23,141 +21,10 @@ var workflowArtifactCmd = cli.Command{
23
21
24
22
func workflowArtifact () * cobra.Command {
25
23
return cli .NewCommand (workflowArtifactCmd , nil , []* cobra.Command {
26
- cli .NewListCommand (workflowArtifactListCmd , workflowArtifactListRun , nil , withAllCommandModifiers ()... ),
27
24
cli .NewCommand (workflowArtifactDownloadCmd , workflowArtifactDownloadRun , nil , withAllCommandModifiers ()... ),
28
- cli .NewCommand (workflowArtifactCDNMigrateCmd , workflowArtifactCDNMigrate , nil , withAllCommandModifiers ()... ),
29
25
})
30
26
}
31
27
32
- var workflowArtifactCDNMigrateCmd = cli.Command {
33
- Name : "cdn-migrate" ,
34
- Short : "Migrate artifact into CDN" ,
35
- Long : `Migrate artifact from CDS to CDN
36
- cdsctl workflow artifact cdn-migrate <project_key> <workflow_name> <run_number>
37
-
38
- CDN does not manage artifact with same name inside a run. They will be renamed <num>_<artifact_name>
39
- Migrated artifacts will not be visible with cdsctl workflow result command
40
- ` ,
41
- Ctx : []cli.Arg {
42
- {Name : _ProjectKey },
43
- {Name : _WorkflowName },
44
- },
45
- Args : []cli.Arg {
46
- {Name : "number" },
47
- },
48
- }
49
-
50
- func workflowArtifactCDNMigrate (v cli.Values ) error {
51
- number , err := strconv .ParseInt (v .GetString ("number" ), 10 , 64 )
52
- if err != nil {
53
- return cli .NewError ("number parameter have to be an integer" )
54
- }
55
- projKey := v .GetString (_ProjectKey )
56
- wName := v .GetString (_WorkflowName )
57
-
58
- run , err := client .WorkflowRunGet (projKey , wName , number )
59
- if err != nil {
60
- return err
61
- }
62
-
63
- workflowArtifacts , err := client .WorkflowRunArtifacts (projKey , wName , number )
64
- if err != nil {
65
- return err
66
- }
67
-
68
- artName := make (map [string ]int64 )
69
- for _ , art := range workflowArtifacts {
70
- prefix := ""
71
- nb , has := artName [art .Name ]
72
- if has {
73
- prefix = fmt .Sprintf ("%d_" , nb )
74
- fmt .Printf ("%s/%s will be renamed to %s%s\n " , art .Name , art .Tag , prefix , art .Name )
75
-
76
- }
77
- artName [art .Name ] = nb + 1
78
- artName := prefix + art .Name
79
- // Call cdn to migrate
80
- sign := cdn.Signature {
81
- ProjectKey : projKey ,
82
- WorkflowName : wName ,
83
- WorkflowID : run .WorkflowID ,
84
- RunID : art .WorkflowID ,
85
- RunNumber : run .Number ,
86
- NodeRunID : art .WorkflowNodeRunID ,
87
- JobName : "" ,
88
- JobID : 0 ,
89
- Worker : & cdn.SignatureWorker {
90
- FileName : artName ,
91
- FilePerm : art .Perm ,
92
- RunResultType : string (sdk .CDNTypeItemRunResult ),
93
- },
94
- }
95
-
96
- // call cdn
97
- url := fmt .Sprintf ("/migrate/artifact/%s/%s/%d" , projKey , wName , art .ID )
98
- bts , _ := json .Marshal (sign )
99
- if bts , err := client .ServiceCallPOST (sdk .TypeCDN , url , bts ); err != nil {
100
- fmt .Printf ("unable to migrate %s: %s: %v\n " , art .Name , string (bts ), err )
101
- continue
102
- }
103
- fmt .Printf ("artifact %s migrated\n " , artName )
104
-
105
- }
106
- fmt .Printf ("Migration done." )
107
- return nil
108
- }
109
-
110
- var workflowArtifactListCmd = cli.Command {
111
- Name : "list" ,
112
- Short : "List artifacts of one Workflow Run" ,
113
- Ctx : []cli.Arg {
114
- {Name : _ProjectKey },
115
- {Name : _WorkflowName },
116
- },
117
- Args : []cli.Arg {
118
- {Name : "number" },
119
- },
120
- }
121
-
122
- func workflowArtifactListRun (v cli.Values ) (cli.ListResult , error ) {
123
- number , err := strconv .ParseInt (v .GetString ("number" ), 10 , 64 )
124
- if err != nil {
125
- return nil , cli .NewError ("number parameter have to be an integer" )
126
- }
127
-
128
- workflowArtifacts , err := client .WorkflowRunArtifacts (v .GetString (_ProjectKey ), v .GetString (_WorkflowName ), number )
129
- if err != nil {
130
- return nil , err
131
- }
132
-
133
- results , err := client .WorkflowRunResultsList (context .Background (), v .GetString (_ProjectKey ), v .GetString (_WorkflowName ), number )
134
- if err != nil {
135
- return nil , err
136
- }
137
-
138
- type Artifact struct {
139
- Name string `cli:"name"`
140
- Md5 string `cli:"md5"`
141
- }
142
-
143
- artifacts := make ([]Artifact , 0 , len (workflowArtifacts ))
144
- for _ , art := range workflowArtifacts {
145
- artifacts = append (artifacts , Artifact {Name : art .Name , Md5 : art .MD5sum })
146
- }
147
- for _ , runResult := range results {
148
- if runResult .Type != sdk .WorkflowRunResultTypeArtifact {
149
- continue
150
- }
151
- artiData , err := runResult .GetArtifact ()
152
- if err != nil {
153
- return nil , err
154
- }
155
- artifacts = append (artifacts , Artifact {Name : artiData .Name , Md5 : artiData .MD5 })
156
- }
157
-
158
- return cli .AsListResult (artifacts ), nil
159
- }
160
-
161
28
var workflowArtifactDownloadCmd = cli.Command {
162
29
Name : "download" ,
163
30
Short : "Download artifacts of one Workflow Run" ,
@@ -200,14 +67,6 @@ func workflowArtifactDownloadRun(v cli.Values) error {
200
67
cdnURL = confCDN .HTTPURL
201
68
}
202
69
203
- ok , err := downloadFromCDSAPI (v , number )
204
- if err != nil {
205
- return err
206
- }
207
- if ok {
208
- return nil
209
- }
210
-
211
70
// Search in result
212
71
results , err := client .WorkflowRunResultsList (context .Background (), v .GetString (_ProjectKey ), v .GetString (_WorkflowName ), number )
213
72
if err != nil {
@@ -222,6 +81,7 @@ func workflowArtifactDownloadRun(v cli.Values) error {
222
81
return cli .WrapError (err , "exclude parameter is not valid" )
223
82
}
224
83
}
84
+ var ok bool
225
85
for _ , runResult := range results {
226
86
if runResult .Type != sdk .WorkflowRunResultTypeArtifact {
227
87
continue
@@ -288,94 +148,3 @@ func workflowArtifactDownloadRun(v cli.Values) error {
288
148
}
289
149
return nil
290
150
}
291
-
292
- func downloadFromCDSAPI (v cli.Values , number int64 ) (bool , error ) {
293
- artifacts , err := client .WorkflowRunArtifacts (v .GetString (_ProjectKey ), v .GetString (_WorkflowName ), number )
294
- if err != nil {
295
- return false , err
296
- }
297
-
298
- var reg * regexp.Regexp
299
- if len (v .GetString ("exclude" )) > 0 {
300
- var err error
301
- reg , err = regexp .Compile (v .GetString ("exclude" ))
302
- if err != nil {
303
- return false , cli .WrapError (err , "exclude parameter is not valid" )
304
- }
305
- }
306
-
307
- var ok bool
308
-
309
- for _ , a := range artifacts {
310
- if v .GetString ("artifact-name" ) != "" && v .GetString ("artifact-name" ) != a .Name {
311
- continue
312
- }
313
- if v .GetString ("exclude" ) != "" && reg .MatchString (a .Name ) {
314
- fmt .Printf ("File %s is excluded from download\n " , a .Name )
315
- continue
316
- }
317
-
318
- var f * os.File
319
- var toDownload bool
320
- if _ , err := os .Stat (a .Name ); os .IsNotExist (err ) {
321
- toDownload = true
322
- } else {
323
- // file exists, check sha512
324
- var errf error
325
- f , errf = os .OpenFile (a .Name , os .O_RDWR | os .O_CREATE , os .FileMode (a .Perm ))
326
- if errf != nil {
327
- return ok , errf
328
- }
329
- sha512sum , err512 := sdk .FileSHA512sum (a .Name )
330
- if err512 != nil {
331
- return ok , err512
332
- }
333
-
334
- if sha512sum != a .SHA512sum {
335
- toDownload = true
336
- }
337
- }
338
-
339
- if toDownload {
340
- var errf error
341
- f , errf = os .OpenFile (a .Name , os .O_RDWR | os .O_CREATE | os .O_TRUNC , os .FileMode (a .Perm ))
342
- if errf != nil {
343
- return ok , errf
344
- }
345
- fmt .Printf ("Downloading %s...\n " , a .Name )
346
- if err := client .WorkflowNodeRunArtifactDownload (v .GetString (_ProjectKey ), v .GetString (_WorkflowName ), a , f ); err != nil {
347
- return ok , err
348
- }
349
- if err := f .Close (); err != nil {
350
- return ok , err
351
- }
352
- }
353
-
354
- sha512sum , err512 := sdk .FileSHA512sum (a .Name )
355
- if err512 != nil {
356
- return ok , err512
357
- }
358
-
359
- if sha512sum != a .SHA512sum {
360
- return ok , cli .NewError ("Invalid sha512sum \n downloaded file:%s\n %s:%s" , sha512sum , f .Name (), a .SHA512sum )
361
- }
362
-
363
- md5sum , errmd5 := sdk .FileMd5sum (a .Name )
364
- if errmd5 != nil {
365
- return ok , errmd5
366
- }
367
-
368
- if md5sum != a .MD5sum {
369
- return ok , cli .NewError ("Invalid md5sum \n downloaded file:%s\n %s:%s" , md5sum , f .Name (), a .MD5sum )
370
- }
371
-
372
- if toDownload {
373
- fmt .Printf ("File %s created, checksum OK\n " , f .Name ())
374
- } else {
375
- fmt .Printf ("File %s already downloaded, checksum OK\n " , f .Name ())
376
- }
377
-
378
- ok = true
379
- }
380
- return ok , nil
381
- }
0 commit comments