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  }