github.com/krishnamiriyala/courtney@v0.3.2/courtney.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 "strings" 8 9 "github.com/pkg/errors" 10 11 "github.com/krishnamiriyala/courtney/scanner" 12 "github.com/krishnamiriyala/courtney/shared" 13 "github.com/krishnamiriyala/courtney/tester" 14 "github.com/krishnamiriyala/patsy" 15 "github.com/krishnamiriyala/patsy/vos" 16 ) 17 18 func main() { 19 // TODO: notest 20 env := vos.Os() 21 22 enforceFlag := flag.Bool("e", false, "Enforce 100% code coverage") 23 verboseFlag := flag.Bool("v", false, "Verbose output on the screen") 24 shortFlag := flag.Bool("short", false, "Pass the short flag to the go test command") 25 timeoutFlag := flag.String("timeout", "", "Pass the timeout flag to the go test command") 26 outputFlag := flag.String("o", "", "Override coverage file location") 27 argsFlag := new(argsValue) 28 flag.Var(argsFlag, "t", "Argument to pass to the 'go test' command. Can be used more than once.") 29 loadFlag := flag.String("l", "", "Load coverage file(s) instead of running 'go test'") 30 31 flag.Parse() 32 33 setup := &shared.Setup{ 34 Env: env, 35 Paths: patsy.NewCache(env), 36 Enforce: *enforceFlag, 37 Verbose: *verboseFlag, 38 Short: *shortFlag, 39 Timeout: *timeoutFlag, 40 Output: *outputFlag, 41 TestArgs: argsFlag.args, 42 Load: *loadFlag, 43 } 44 if err := Run(setup); err != nil { 45 fmt.Printf("%+v", err) 46 os.Exit(1) 47 } 48 } 49 50 // Run initiates the command with the provided setup 51 func Run(setup *shared.Setup) error { 52 if err := setup.Parse(flag.Args()); err != nil { 53 return errors.Wrapf(err, "Parse") 54 } 55 56 s := scanner.New(setup) 57 if err := s.LoadProgram(); err != nil { 58 return errors.Wrapf(err, "LoadProgram") 59 } 60 if err := s.ScanPackages(); err != nil { 61 return errors.Wrapf(err, "ScanPackages") 62 } 63 64 t := tester.New(setup) 65 if setup.Load == "" { 66 if err := t.Test(); err != nil { 67 return errors.Wrapf(err, "Test") 68 } 69 } else { 70 if err := t.Load(); err != nil { 71 return errors.Wrapf(err, "Load") 72 } 73 } 74 if err := t.ProcessExcludes(s.Excludes); err != nil { 75 return errors.Wrapf(err, "ProcessExcludes") 76 } 77 if err := t.Save(); err != nil { 78 return errors.Wrapf(err, "Save") 79 } 80 if err := t.Enforce(); err != nil { 81 return errors.Wrapf(err, "Enforce") 82 } 83 84 return nil 85 } 86 87 type argsValue struct { 88 args []string 89 } 90 91 var _ flag.Value = (*argsValue)(nil) 92 93 func (v *argsValue) String() string { 94 if v == nil { 95 return "" 96 } 97 return strings.Join(v.args, " ") 98 } 99 func (v *argsValue) Set(s string) error { 100 v.args = append(v.args, s) 101 return nil 102 }