@@ -29,6 +29,7 @@ import (
29
29
"github.com/pkg/errors"
30
30
"github.com/sirupsen/logrus"
31
31
32
+ gogithub "github.com/google/go-github/v29/github"
32
33
"k8s.io/release/pkg/command"
33
34
"k8s.io/release/pkg/github"
34
35
"k8s.io/release/pkg/kubepkg/options"
@@ -44,8 +45,8 @@ const (
44
45
ChannelNightly ChannelType = "nightly"
45
46
46
47
minimumKubernetesVersion = "1.13.0"
47
- minimumCNIVersion = "0.7.5"
48
- pre117CNIVersion = "0.7.5"
48
+ MinimumCNIVersion = "0.7.5"
49
+ Pre117CNIVersion = "0.7.5"
49
50
50
51
kubeadmConf = "10-kubeadm.conf"
51
52
)
@@ -85,18 +86,47 @@ var (
85
86
86
87
type Client struct {
87
88
options * options.Options
88
- version * release.Version
89
- github * github.GitHub
89
+ impl Impl
90
90
}
91
91
92
92
func New (o * options.Options ) * Client {
93
93
return & Client {
94
94
options : o ,
95
- version : release .NewVersion (),
96
- github : github .New (),
95
+ impl : & impl {},
97
96
}
98
97
}
99
98
99
+ func (c * Client ) SetImpl (impl Impl ) {
100
+ c .impl = impl
101
+ }
102
+
103
+ type impl struct {}
104
+
105
+ //go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
106
+ //counterfeiter:generate . Impl
107
+ type Impl interface {
108
+ RunSuccessWithWorkDir (workDir , cmd string , args ... string ) error
109
+ RunSuccess (workDir , cmd string , args ... string ) error
110
+ Releases (owner , repo string , includePrereleases bool ) ([]* gogithub.RepositoryRelease , error )
111
+ GetKubeVersion (versionType release.VersionType ) (string , error )
112
+ }
113
+
114
+ func (i * impl ) RunSuccessWithWorkDir (workDir , cmd string , args ... string ) error {
115
+ return command .NewWithWorkDir (workDir , cmd , args ... ).RunSuccess ()
116
+ }
117
+
118
+ func (i * impl ) RunSuccess (workDir , cmd string , args ... string ) error {
119
+ return command .New (cmd , args ... ).RunSuccess ()
120
+ }
121
+
122
+ func (i * impl ) Releases (owner , repo string , includePrereleases bool ) ([]* gogithub.RepositoryRelease , error ) {
123
+ return github .New ().Releases (owner , repo , includePrereleases )
124
+ }
125
+
126
+ func (i * impl ) GetKubeVersion (versionType release.VersionType ) (string , error ) {
127
+ return release .NewVersion ().GetKubeVersion (versionType )
128
+ }
129
+
100
130
type Build struct {
101
131
Type options.BuildType
102
132
Package string
@@ -250,12 +280,12 @@ func (c *Client) buildPackage(build Build, packageDef *PackageDefinition, arch,
250
280
}
251
281
}
252
282
253
- bc .KubernetesVersion , err = c .getKubernetesVersion (pd )
283
+ bc .KubernetesVersion , err = c .GetKubernetesVersion (pd )
254
284
if err != nil {
255
285
return errors .Wrap (err , "getting Kubernetes version" )
256
286
}
257
287
258
- bc .DownloadLinkBase , err = c .getDownloadLinkBase (pd )
288
+ bc .DownloadLinkBase , err = c .GetDownloadLinkBase (pd )
259
289
if err != nil {
260
290
return errors .Wrap (err , "getting Kubernetes download link base" )
261
291
}
@@ -266,14 +296,14 @@ func (c *Client) buildPackage(build Build, packageDef *PackageDefinition, arch,
266
296
// of "+" with "-", so that we build with a valid Debian package version.
267
297
bc .KubernetesVersion = strings .Replace (bc .KubernetesVersion , "+" , "-" , 1 )
268
298
269
- bc .Version , err = c .getPackageVersion (pd )
299
+ bc .Version , err = c .GetPackageVersion (pd )
270
300
if err != nil {
271
301
return errors .Wrap (err , "getting package version" )
272
302
}
273
303
274
304
logrus .Infof ("%s package version: %s" , bc .Name , bc .Version )
275
305
276
- bc .Dependencies , err = getDependencies (pd )
306
+ bc .Dependencies , err = GetDependencies (pd )
277
307
if err != nil {
278
308
return errors .Wrap (err , "getting dependencies" )
279
309
}
@@ -282,16 +312,16 @@ func (c *Client) buildPackage(build Build, packageDef *PackageDefinition, arch,
282
312
283
313
bc .BuildArch = getBuildArch (bc .GoArch , bc .Type )
284
314
285
- bc .CNIDownloadLink , err = getCNIDownloadLink (pd , bc .GoArch )
315
+ bc .CNIDownloadLink , err = GetCNIDownloadLink (pd , bc .GoArch )
286
316
if err != nil {
287
317
return errors .Wrap (err , "getting CNI download link" )
288
318
}
289
319
290
320
logrus .Infof ("Building %s package for %s/%s architecture..." , bc .Package , bc .GoArch , bc .BuildArch )
291
- return bc .run ()
321
+ return c .run (bc )
292
322
}
293
323
294
- func (bc * buildConfig ) run () error {
324
+ func (c * Client ) run (bc * buildConfig ) error {
295
325
workspaceInfo , err := os .Stat (bc .workspace )
296
326
if err != nil {
297
327
return err
@@ -323,31 +353,30 @@ func (bc *buildConfig) run() error {
323
353
case options .BuildDeb :
324
354
logrus .Infof ("Running dpkg-buildpackage for %s (%s/%s)" , bc .Package , bc .GoArch , bc .BuildArch )
325
355
326
- dpkgErr := command . NewWithWorkDir (
356
+ if err := c . impl . RunSuccessWithWorkDir (
327
357
specDirWithArch ,
328
358
"dpkg-buildpackage" ,
329
359
"--unsigned-source" ,
330
360
"--unsigned-changes" ,
331
361
"--build=binary" ,
332
362
"--host-arch" ,
333
363
bc .BuildArch ,
334
- ).RunSuccess ()
335
-
336
- if dpkgErr != nil {
337
- return dpkgErr
364
+ ); err != nil {
365
+ return errors .Wrap (err , "running debian package build" )
338
366
}
339
367
340
368
fileName := fmt .Sprintf ("%s_%s-%s_%s.deb" , bc .Package , bc .Version , bc .Revision , bc .BuildArch )
341
369
dstParts := []string {"bin" , string (bc .Channel ), fileName }
342
370
343
371
dstPath := filepath .Join (dstParts ... )
344
- if mkdirErr := os .MkdirAll (dstPath , os .FileMode (0777 )); mkdirErr != nil {
345
- return mkdirErr
372
+ if err := os .MkdirAll (dstPath , os .FileMode (0777 )); err != nil {
373
+ return err
346
374
}
347
375
348
- mvErr := command .New ("mv" , filepath .Join (specDir , fileName ), dstPath ).RunSuccess ()
349
- if mvErr != nil {
350
- return mvErr
376
+ if err := c .impl .RunSuccess (
377
+ "mv" , filepath .Join (specDir , fileName ), dstPath ,
378
+ ); err != nil {
379
+ return err
351
380
}
352
381
353
382
logrus .Infof ("Successfully built %s" , dstPath )
@@ -358,17 +387,17 @@ func (bc *buildConfig) run() error {
358
387
return nil
359
388
}
360
389
361
- func (c * Client ) getPackageVersion (packageDef * PackageDefinition ) (string , error ) {
390
+ func (c * Client ) GetPackageVersion (packageDef * PackageDefinition ) (string , error ) {
362
391
if packageDef == nil {
363
392
return "" , errors .New ("package definition cannot be nil" )
364
393
}
365
394
366
395
logrus .Infof ("Setting version for %s package..." , packageDef .Name )
367
396
switch packageDef .Name {
368
397
case "kubernetes-cni" :
369
- return getCNIVersion (packageDef )
398
+ return GetCNIVersion (packageDef )
370
399
case "cri-tools" :
371
- return c .getCRIToolsVersion (packageDef )
400
+ return c .GetCRIToolsVersion (packageDef )
372
401
}
373
402
374
403
logrus .Infof (
@@ -378,7 +407,7 @@ func (c *Client) getPackageVersion(packageDef *PackageDefinition) (string, error
378
407
return util .TrimTagPrefix (packageDef .KubernetesVersion ), nil
379
408
}
380
409
381
- func (c * Client ) getKubernetesVersion (packageDef * PackageDefinition ) (string , error ) {
410
+ func (c * Client ) GetKubernetesVersion (packageDef * PackageDefinition ) (string , error ) {
382
411
if packageDef == nil {
383
412
return "" , errors .New ("package definition cannot be nil" )
384
413
}
@@ -389,15 +418,15 @@ func (c *Client) getKubernetesVersion(packageDef *PackageDefinition) (string, er
389
418
}
390
419
switch packageDef .Channel {
391
420
case ChannelTesting :
392
- return c .version .GetKubeVersion (release .VersionTypeStablePreRelease )
421
+ return c .impl .GetKubeVersion (release .VersionTypeStablePreRelease )
393
422
case ChannelNightly :
394
- return c .version .GetKubeVersion (release .VersionTypeCILatest )
423
+ return c .impl .GetKubeVersion (release .VersionTypeCILatest )
395
424
}
396
425
397
- return c .version .GetKubeVersion (release .VersionTypeStable )
426
+ return c .impl .GetKubeVersion (release .VersionTypeStable )
398
427
}
399
428
400
- func getCNIVersion (packageDef * PackageDefinition ) (string , error ) {
429
+ func GetCNIVersion (packageDef * PackageDefinition ) (string , error ) {
401
430
if packageDef == nil {
402
431
return "" , errors .New ("package definition cannot be nil" )
403
432
}
@@ -416,20 +445,20 @@ func getCNIVersion(packageDef *PackageDefinition) (string, error) {
416
445
417
446
if packageDef .Version != "" {
418
447
if kubeSemver .LT (v117 ) {
419
- logrus .Infof ("Kubernetes version earlier than 1.17 must use CNI version <= %s" , pre117CNIVersion )
420
- logrus .Infof ("Setting CNI version to %s" , pre117CNIVersion )
421
- return pre117CNIVersion , nil
448
+ logrus .Infof ("Kubernetes version earlier than 1.17 must use CNI version <= %s" , Pre117CNIVersion )
449
+ logrus .Infof ("Setting CNI version to %s" , Pre117CNIVersion )
450
+ return Pre117CNIVersion , nil
422
451
}
423
452
424
453
logrus .Infof ("Setting CNI version to %s" , packageDef .Version )
425
454
return packageDef .Version , nil
426
455
}
427
456
428
- logrus .Infof ("Setting CNI version to %s" , minimumCNIVersion )
429
- return minimumCNIVersion , nil
457
+ logrus .Infof ("Setting CNI version to %s" , MinimumCNIVersion )
458
+ return MinimumCNIVersion , nil
430
459
}
431
460
432
- func (c * Client ) getCRIToolsVersion (packageDef * PackageDefinition ) (string , error ) {
461
+ func (c * Client ) GetCRIToolsVersion (packageDef * PackageDefinition ) (string , error ) {
433
462
if packageDef == nil {
434
463
return "" , errors .New ("package definition cannot be nil" )
435
464
}
@@ -470,7 +499,7 @@ func (c *Client) getCRIToolsVersion(packageDef *PackageDefinition) (string, erro
470
499
471
500
criToolsVersion := fmt .Sprintf ("%s.%s.0" , criToolsMajor , criToolsMinor )
472
501
473
- releases , err := c .github .Releases ("kubernetes-sigs" , "cri-tools" , false )
502
+ releases , err := c .impl .Releases ("kubernetes-sigs" , "cri-tools" , false )
474
503
if err != nil {
475
504
return "" , err
476
505
}
@@ -506,27 +535,27 @@ func (c *Client) getCRIToolsVersion(packageDef *PackageDefinition) (string, erro
506
535
return criToolsVersion , nil
507
536
}
508
537
509
- func (c * Client ) getDownloadLinkBase (packageDef * PackageDefinition ) (string , error ) {
538
+ func (c * Client ) GetDownloadLinkBase (packageDef * PackageDefinition ) (string , error ) {
510
539
if packageDef == nil {
511
540
return "" , errors .New ("package definition cannot be nil" )
512
541
}
513
542
514
543
if packageDef .Channel == ChannelNightly {
515
- return c .getCIBuildsDownloadLinkBase (packageDef )
544
+ return c .GetCIBuildsDownloadLinkBase (packageDef )
516
545
}
517
546
518
- return getDefaultReleaseDownloadLinkBase (packageDef )
547
+ return GetDefaultReleaseDownloadLinkBase (packageDef )
519
548
}
520
549
521
- func (c * Client ) getCIBuildsDownloadLinkBase (packageDef * PackageDefinition ) (string , error ) {
550
+ func (c * Client ) GetCIBuildsDownloadLinkBase (packageDef * PackageDefinition ) (string , error ) {
522
551
if packageDef == nil {
523
552
return "" , errors .New ("package definition cannot be nil" )
524
553
}
525
554
526
555
ciVersion := packageDef .KubernetesVersion
527
556
if ciVersion == "" {
528
557
var err error
529
- ciVersion , err = c .version .GetKubeVersion (release .VersionTypeCILatest )
558
+ ciVersion , err = c .impl .GetKubeVersion (release .VersionTypeCILatest )
530
559
if err != nil {
531
560
return "" , err
532
561
}
@@ -535,7 +564,7 @@ func (c *Client) getCIBuildsDownloadLinkBase(packageDef *PackageDefinition) (str
535
564
return fmt .Sprintf ("https://dl.k8s.io/ci/%s" , util .AddTagPrefix (ciVersion )), nil
536
565
}
537
566
538
- func getDefaultReleaseDownloadLinkBase (packageDef * PackageDefinition ) (string , error ) {
567
+ func GetDefaultReleaseDownloadLinkBase (packageDef * PackageDefinition ) (string , error ) {
539
568
if packageDef == nil {
540
569
return "" , errors .New ("package definition cannot be nil" )
541
570
}
@@ -547,7 +576,7 @@ func getDefaultReleaseDownloadLinkBase(packageDef *PackageDefinition) (string, e
547
576
), nil
548
577
}
549
578
550
- func getDependencies (packageDef * PackageDefinition ) (map [string ]string , error ) {
579
+ func GetDependencies (packageDef * PackageDefinition ) (map [string ]string , error ) {
551
580
if packageDef == nil {
552
581
return nil , errors .New ("package definition cannot be nil" )
553
582
}
@@ -556,11 +585,11 @@ func getDependencies(packageDef *PackageDefinition) (map[string]string, error) {
556
585
557
586
switch packageDef .Name {
558
587
case "kubelet" :
559
- deps ["kubernetes-cni" ] = minimumCNIVersion
588
+ deps ["kubernetes-cni" ] = MinimumCNIVersion
560
589
case "kubeadm" :
561
590
deps ["kubelet" ] = minimumKubernetesVersion
562
591
deps ["kubectl" ] = minimumKubernetesVersion
563
- deps ["kubernetes-cni" ] = minimumCNIVersion
592
+ deps ["kubernetes-cni" ] = MinimumCNIVersion
564
593
deps ["cri-tools" ] = minimumCRIToolsVersion
565
594
}
566
595
@@ -571,7 +600,7 @@ func getBuildArch(goArch string, buildType options.BuildType) string {
571
600
return buildArchMap [goArch ][buildType ]
572
601
}
573
602
574
- func getCNIDownloadLink (packageDef * PackageDefinition , arch string ) (string , error ) {
603
+ func GetCNIDownloadLink (packageDef * PackageDefinition , arch string ) (string , error ) {
575
604
if packageDef == nil {
576
605
return "" , errors .New ("package definition cannot be nil" )
577
606
}
@@ -581,7 +610,7 @@ func getCNIDownloadLink(packageDef *PackageDefinition, arch string) (string, err
581
610
return "" , err
582
611
}
583
612
584
- v075 , err := semver .Make (pre117CNIVersion )
613
+ v075 , err := semver .Make (Pre117CNIVersion )
585
614
if err != nil {
586
615
return "" , err
587
616
}
0 commit comments