github.com/apex/up@v1.7.1/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 region := Cmd.Flag("region", "Target region id.").String() 45 46 Cmd.PreAction(func(ctx *kingpin.ParseContext) error { 47 os.Chdir(*workdir) 48 49 if *verbose { 50 log.SetHandler(delta.Default) 51 log.SetLevel(log.DebugLevel) 52 log.Debugf("up version %s (os: %s, arch: %s)", Cmd.GetVersion(), runtime.GOOS, runtime.GOARCH) 53 } 54 55 Init = func() (*up.Config, *up.Project, error) { 56 c, err := up.ReadConfig("up.json") 57 if err != nil { 58 return nil, nil, errors.Wrap(err, "reading config") 59 } 60 61 if *region != "" { 62 c.Regions = []string{*region} 63 } 64 65 events := make(event.Events) 66 p := up.New(c, events).WithPlatform(lambda.New(c, events)) 67 68 switch { 69 case *verbose: 70 go reporter.Discard(events) 71 case *format == "plain" || util.IsCI(): 72 go reporter.Plain(events) 73 default: 74 go reporter.Text(events) 75 } 76 77 return c, p, nil 78 } 79 80 return nil 81 }) 82 }