github.com/comcast/canticle@v0.0.0-20161108184242-c53cface56e8/canticles/genversion.go (about) 1 package canticles 2 3 import ( 4 "flag" 5 "log" 6 "os" 7 ) 8 9 type GenVersion struct { 10 flags *flag.FlagSet 11 Verbose bool 12 Stable bool 13 } 14 15 func NewGenVersion() *GenVersion { 16 f := flag.NewFlagSet("genversion", flag.ExitOnError) 17 v := &GenVersion{ 18 flags: f, 19 } 20 f.BoolVar(&v.Verbose, "v", false, "Be verbose when getting stuff") 21 f.BoolVar(&v.Stable, "stable", false, "When true, not generate date or host build info so builds can be stable") 22 return v 23 } 24 25 var genversion = NewGenVersion() 26 27 var GenVersionCommand = &Command{ 28 Name: "genversion", 29 UsageLine: "genversion [-v] [path]", 30 ShortDescription: "Generate a version go package containing revision of all current dependencies.", 31 LongDescription: `The genversion command will generate a package containing all deps from the current path for use in reporting version information in built applications. 32 33 Specify -v to print out a verbose set of operations instead of just errors.`, 34 Flags: genversion.flags, 35 Cmd: genversion, 36 } 37 38 func (g *GenVersion) Run(args []string) { 39 if g.Verbose { 40 Verbose = true 41 } 42 defer func() { Verbose = false }() 43 wd, err := os.Getwd() 44 if err != nil { 45 log.Fatal(err) 46 } 47 if err := g.SaveProjectDeps(wd); err != nil { 48 log.Fatal(err) 49 } 50 } 51 52 func (g *GenVersion) SaveProjectDeps(path string) error { 53 gopath, err := EnvGoPath() 54 if err != nil { 55 return err 56 } 57 s := NewSave() 58 s.Resolver = &PreferLocalResolution{} 59 deps, err := s.ReadDeps(gopath, path) 60 if err != nil { 61 return err 62 } 63 sources, err := s.GetSources(gopath, path, deps) 64 if err != nil { 65 return err 66 } 67 LogVerbose("Discovered sources:\n%+v", sources) 68 cantdeps, err := s.Resolver.ResolveConflicts(sources) 69 if err != nil { 70 return err 71 } 72 r := &LocalRepoResolver{LocalPath: gopath} 73 pkg, err := PackageName(gopath, path) 74 if err != nil { 75 return err 76 } 77 v, err := r.ResolveRepo(pkg, nil) 78 if err != nil { 79 return err 80 } 81 rev, err := v.GetRev() 82 if err != nil { 83 return err 84 } 85 LogVerbose("Resolved conflicts:\n%+v", cantdeps) 86 bi, err := NewBuildInfo(rev, g.Stable, cantdeps) 87 if err != nil { 88 return err 89 } 90 LogVerbose("Writing version files to:%s", path) 91 return bi.WriteFiles(path) 92 }