44 "bytes"
55 "fmt"
66 "io/ioutil"
7+ "os"
78 "strings"
89
910 "gopkg.in/yaml.v3"
@@ -17,17 +18,29 @@ type Versions struct {
1718
1819// Load values.yaml
1920func Load (filename string ) (* Versions , error ) {
20- dat , err := ioutil .ReadFile (filename )
21- if err != nil {
22- return nil , err
23- }
21+ var v Versions
2422
25- v := Versions {
26- data : make (map [string ]interface {}),
27- filename : filename ,
28- }
29- err = yaml .Unmarshal (dat , v .data )
30- if err != nil {
23+ if _ , err := os .Stat (filename ); err == nil {
24+ dat , err := ioutil .ReadFile (filename )
25+ if err != nil {
26+ return nil , err
27+ }
28+
29+ v := Versions {
30+ data : make (map [string ]interface {}),
31+ filename : filename ,
32+ }
33+ err = yaml .Unmarshal (dat , v .data )
34+ if err != nil {
35+ return nil , err
36+ }
37+ } else if os .IsNotExist (err ) {
38+ fmt .Printf ("%s doesn't exist, initializing empty versions\n " , filename )
39+ v = Versions {
40+ data : make (map [string ]interface {}),
41+ filename : filename ,
42+ }
43+ } else {
3144 return nil , err
3245 }
3346
@@ -36,7 +49,15 @@ func Load(filename string) (*Versions, error) {
3649
3750// SetTag is a helper to set a tag for a given component
3851func (v * Versions ) SetTag (component , value string ) {
39- v .data [component ].(map [string ]interface {})["image" ].(map [string ]interface {})["tag" ] = value
52+ if v .data [component ] == nil {
53+ v .data [component ] = map [string ]interface {}{
54+ "image" : map [string ]interface {}{
55+ "tag" : value ,
56+ },
57+ }
58+ } else {
59+ v .data [component ].(map [string ]interface {})["image" ].(map [string ]interface {})["tag" ] = value
60+ }
4061}
4162
4263// Save dump the values in yaml to the file
0 commit comments