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  }