github.com/webonyx/up@v0.7.4-0.20180808230834-91b94e551323/internal/cli/root/root.go (about) 1 package root 2 3 import ( 4 "os" 5 "runtime" 6 7 "github.com/apex/log" 8 "github.com/apex/log/handlers/cli" 9 "github.com/apex/log/handlers/delta" 10 "github.com/pkg/errors" 11 "github.com/tj/kingpin" 12 13 "github.com/apex/up" 14 "github.com/apex/up/internal/util" 15 "github.com/apex/up/platform/event" 16 "github.com/apex/up/platform/lambda" 17 "github.com/apex/up/reporter" 18 ) 19 20 // Cmd is the root command. 21 var Cmd = kingpin.New("up", "") 22 23 // Command registers a command. 24 var Command = Cmd.Command 25 26 // Init function. 27 var Init func() (*up.Config, *up.Project, error) 28 29 func init() { 30 log.SetHandler(cli.Default) 31 32 Cmd.Example(`up`, "Deploy the project to the staging environment.") 33 Cmd.Example(`up deploy production`, "Deploy the project to the production stage.") 34 Cmd.Example(`up url`, "Show the staging endpoint url.") 35 Cmd.Example(`up logs -f`, "Tail project logs.") 36 Cmd.Example(`up logs 'error or fatal'`, "Show error or fatal level logs.") 37 Cmd.Example(`up run build`, "Run build command manually.") 38 Cmd.Example(`up help team`, "Show help and examples for a command.") 39 Cmd.Example(`up help team members`, "Show help and examples for a sub-command.") 40 41 workdir := Cmd.Flag("chdir", "Change working directory.").Default(".").Short('C').String() 42 verbose := Cmd.Flag("verbose", "Enable verbose log output.").Short('v').Bool() 43 format := Cmd.Flag("format", "Output formatter.").Default("text").String() 44 45 Cmd.PreAction(func(ctx *kingpin.ParseContext) error { 46 os.Chdir(*workdir) 47 48 if *verbose { 49 log.SetHandler(delta.Default) 50 log.SetLevel(log.DebugLevel) 51 log.Debugf("up version %s (os: %s, arch: %s)", Cmd.GetVersion(), runtime.GOOS, runtime.GOARCH) 52 } 53 54 Init = func() (*up.Config, *up.Project, error) { 55 c, err := up.ReadConfig("up.json") 56 if err != nil { 57 return nil, nil, errors.Wrap(err, "reading config") 58 } 59 60 events := make(event.Events) 61 p := up.New(c, events).WithPlatform(lambda.New(c, events)) 62 63 switch { 64 case *verbose: 65 go reporter.Discard(events) 66 case *format == "plain" || util.IsCI(): 67 go reporter.Plain(events) 68 default: 69 go reporter.Text(events) 70 } 71 72 return c, p, nil 73 } 74 75 return nil 76 }) 77 }