github.com/tonto/cli@v0.0.0-20180104210444-aec958fa47db/bump.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "strings" 7 8 "github.com/coreos/go-semver/semver" 9 bumper "github.com/giantswarm/semver-bump/bump" 10 "github.com/giantswarm/semver-bump/storage" 11 "github.com/urfave/cli" 12 ) 13 14 type VType int 15 16 const ( 17 Patch VType = iota 18 Minor 19 Major 20 ) 21 22 var ( 23 initialVersion = "0.0.1" 24 ) 25 26 func bump() cli.Command { 27 cmd := bumpcmd{} 28 flags := append([]cli.Flag{}, cmd.flags()...) 29 return cli.Command{ 30 Name: "bump", 31 Usage: "bump function version", 32 Flags: flags, 33 Action: cmd.bump, 34 } 35 } 36 37 type bumpcmd struct { 38 verbose bool 39 major bool 40 minor bool 41 } 42 43 func (b *bumpcmd) flags() []cli.Flag { 44 return []cli.Flag{ 45 cli.BoolFlag{ 46 Name: "major", 47 Usage: "bumps major version", 48 Destination: &b.major, 49 }, 50 cli.BoolFlag{ 51 Name: "minor", 52 Usage: "bumps minor version", 53 Destination: &b.minor, 54 }, 55 cli.BoolFlag{ 56 Name: "verbose, v", 57 Usage: "verbose mode", 58 Destination: &b.verbose, 59 }, 60 } 61 } 62 63 // bump will take the found valid function and bump its version 64 func (b *bumpcmd) bump(c *cli.Context) error { 65 var t VType 66 if b.major { 67 t = Major 68 } else if b.minor { 69 t = Minor 70 } else { 71 t = Patch 72 } 73 74 wd, err := os.Getwd() 75 if err != nil { 76 return err 77 } 78 _, err = bumpItWd(wd, t) 79 return err 80 } 81 func bumpItWd(wd string, vtype VType) (*funcfile, error) { 82 fn, err := findFuncfile(wd) 83 if err != nil { 84 return nil, err 85 } 86 return bumpIt(fn, vtype) 87 } 88 89 // returns updated funcfile 90 func bumpIt(fpath string, vtype VType) (*funcfile, error) { 91 // fmt.Println("Bumping version in func file at: ", fpath) 92 funcfile, err := parseFuncfile(fpath) 93 if err != nil { 94 return nil, err 95 } 96 97 funcfile, err = bumpVersion(funcfile, vtype) 98 if err != nil { 99 return nil, err 100 } 101 102 if err := storeFuncfile(fpath, funcfile); err != nil { 103 return nil, err 104 } 105 fmt.Println("Bumped to version", funcfile.Version) 106 return funcfile, nil 107 } 108 109 func bumpVersion(funcfile *funcfile, t VType) (*funcfile, error) { 110 funcfile.Name = cleanImageName(funcfile.Name) 111 if funcfile.Version == "" { 112 funcfile.Version = initialVersion 113 return funcfile, nil 114 } 115 116 s, err := storage.NewVersionStorage("local", funcfile.Version) 117 if err != nil { 118 return nil, err 119 } 120 121 version := bumper.NewSemverBumper(s, "") 122 var newver *semver.Version 123 if t == Major { 124 newver, err = version.BumpMajorVersion("", "") 125 } else if t == Minor { 126 newver, err = version.BumpMinorVersion("", "") 127 } else { 128 newver, err = version.BumpPatchVersion("", "") 129 } 130 if err != nil { 131 return nil, err 132 } 133 134 funcfile.Version = newver.String() 135 return funcfile, nil 136 } 137 138 func cleanImageName(name string) string { 139 if i := strings.Index(name, ":"); i != -1 { 140 name = name[:i] 141 } 142 143 return name 144 }