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  }