@@ -31,6 +31,7 @@ import (
31
31
const (
32
32
bundlePrefix = "finch-support"
33
33
platformFileName = "platform.yaml"
34
+ versionFileName = "version-output.txt"
34
35
logPrefix = "logs"
35
36
configPrefix = "configs"
36
37
additionalPrefix = "misc"
@@ -48,14 +49,22 @@ type BundleBuilder interface {
48
49
GenerateSupportBundle ([]string , []string ) (string , error )
49
50
}
50
51
52
+ // SystemDeps provides methods to get system dependencies.
53
+ //
54
+ //go:generate mockgen -copyright_file=../../copyright_header -destination=../mocks/pkg_support.go -package=mocks -mock_names SystemDeps=SupportSystemDeps . SystemDeps
55
+ type SystemDeps interface {
56
+ system.ExecutableFinder
57
+ }
58
+
51
59
type bundleBuilder struct {
52
- logger flog.Logger
53
- fs afero.Fs
54
- config BundleConfig
55
- finch fpath.Finch
56
- ecc command.Creator
57
- ncc command.NerdctlCmdCreator
58
- lima wrapper.LimaWrapper
60
+ logger flog.Logger
61
+ fs afero.Fs
62
+ config BundleConfig
63
+ finch fpath.Finch
64
+ ecc command.Creator
65
+ ncc command.NerdctlCmdCreator
66
+ lima wrapper.LimaWrapper
67
+ systemDeps SystemDeps
59
68
}
60
69
61
70
// NewBundleBuilder produces a new BundleBuilder.
@@ -67,15 +76,17 @@ func NewBundleBuilder(
67
76
ecc command.Creator ,
68
77
ncc command.NerdctlCmdCreator ,
69
78
lima wrapper.LimaWrapper ,
79
+ systemDeps SystemDeps ,
70
80
) BundleBuilder {
71
81
return & bundleBuilder {
72
- logger : logger ,
73
- fs : fs ,
74
- config : config ,
75
- finch : finch ,
76
- ecc : ecc ,
77
- ncc : ncc ,
78
- lima : lima ,
82
+ logger : logger ,
83
+ fs : fs ,
84
+ config : config ,
85
+ finch : finch ,
86
+ ecc : ecc ,
87
+ ncc : ncc ,
88
+ lima : lima ,
89
+ systemDeps : systemDeps ,
79
90
}
80
91
}
81
92
@@ -108,6 +119,13 @@ func (bb *bundleBuilder) GenerateSupportBundle(additionalFiles []string, exclude
108
119
return "" , err
109
120
}
110
121
122
+ bb .logger .Debugln ("Collecting finch version output..." )
123
+ version := bb .getFinchVersion ()
124
+ err = writeVersionOutput (writer , version , zipPrefix )
125
+ if err != nil {
126
+ return "" , err
127
+ }
128
+
111
129
bb .logger .Debugln ("Copying in log files..." )
112
130
for _ , file := range bb .config .LogFiles () {
113
131
if fileShouldBeExcluded (file , excludeFiles ) {
@@ -320,6 +338,21 @@ func getFinchVersion() string {
320
338
return version .Version
321
339
}
322
340
341
+ func (bb * bundleBuilder ) getFinchVersion () string {
342
+ // get current finch executable
343
+ executable , err := bb .systemDeps .Executable ()
344
+ if err != nil {
345
+ return ""
346
+ }
347
+ cmd := bb .ecc .Create (executable , "version" )
348
+ out , err := cmd .Output ()
349
+ if err != nil {
350
+ return ""
351
+ }
352
+ output := string (out )
353
+ return output
354
+ }
355
+
323
356
func writePlatformData (writer * zip.Writer , platform * PlatformData , prefix string ) error {
324
357
platformFile , err := writer .Create (path .Join (prefix , platformFileName ))
325
358
if err != nil {
@@ -371,3 +404,17 @@ func fileShouldBeExcluded(filename string, exclude []string) bool {
371
404
func isFileFromVM (filename string ) bool {
372
405
return strings .HasPrefix (filename , "vm:" )
373
406
}
407
+
408
+ func writeVersionOutput (writer * zip.Writer , version , prefix string ) error {
409
+ versionFile , err := writer .Create (path .Join (prefix , versionFileName ))
410
+ if err != nil {
411
+ return err
412
+ }
413
+
414
+ _ , err = versionFile .Write ([]byte (version ))
415
+ if err != nil {
416
+ return err
417
+ }
418
+
419
+ return nil
420
+ }
0 commit comments