github.com/ijc/docker-app@v0.6.1-0.20181012090447-c7ca8bc483fb/cmd/docker-app/root.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/docker/app/internal"
     7  	"github.com/docker/cli/cli"
     8  	"github.com/docker/cli/cli/command"
     9  	cliconfig "github.com/docker/cli/cli/config"
    10  	"github.com/docker/cli/cli/debug"
    11  	cliflags "github.com/docker/cli/cli/flags"
    12  	"github.com/spf13/cobra"
    13  	"github.com/spf13/pflag"
    14  )
    15  
    16  // rootCmd represents the base command when called without any subcommands
    17  // FIXME(vdemeester) use command.Cli interface
    18  func newRootCmd(dockerCli *command.DockerCli) *cobra.Command {
    19  	opts := cliflags.NewClientOptions()
    20  	var flags *pflag.FlagSet
    21  
    22  	cmd := &cobra.Command{
    23  		Use:          "docker-app",
    24  		Short:        "Docker Application Packages",
    25  		Long:         `Build and deploy Docker Application Packages.`,
    26  		SilenceUsage: true,
    27  		PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
    28  			opts.Common.SetDefaultOptions(flags)
    29  			dockerPreRun(opts)
    30  			return dockerCli.Initialize(opts)
    31  		},
    32  		Version: fmt.Sprintf("%s, build %s", internal.Version, internal.GitCommit),
    33  	}
    34  	cli.SetupRootCommand(cmd)
    35  	flags = cmd.Flags()
    36  	flags.BoolP("version", "v", false, "Print version information")
    37  	opts.Common.InstallFlags(flags)
    38  	cmd.SetVersionTemplate("docker-app version {{.Version}}\n")
    39  	addCommands(cmd, dockerCli)
    40  	return cmd
    41  }
    42  
    43  // addCommands adds all the commands from cli/command to the root command
    44  func addCommands(cmd *cobra.Command, dockerCli command.Cli) {
    45  	cmd.AddCommand(
    46  		deployCmd(dockerCli),
    47  		forkCmd(),
    48  		helmCmd(),
    49  		initCmd(),
    50  		inspectCmd(dockerCli),
    51  		mergeCmd(dockerCli),
    52  		pushCmd(),
    53  		renderCmd(dockerCli),
    54  		splitCmd(),
    55  		validateCmd(),
    56  		versionCmd(dockerCli),
    57  		completionCmd(dockerCli, cmd),
    58  	)
    59  	if internal.Experimental == "on" {
    60  		cmd.AddCommand(
    61  			imageAddCmd(),
    62  			imageLoadCmd(),
    63  			packCmd(dockerCli),
    64  			pullCmd(),
    65  			unpackCmd(),
    66  		)
    67  	}
    68  }
    69  
    70  func firstOrEmpty(list []string) string {
    71  	if len(list) != 0 {
    72  		return list[0]
    73  	}
    74  	return ""
    75  }
    76  
    77  func dockerPreRun(opts *cliflags.ClientOptions) {
    78  	cliflags.SetLogLevel(opts.Common.LogLevel)
    79  
    80  	if opts.ConfigDir != "" {
    81  		cliconfig.SetDir(opts.ConfigDir)
    82  	}
    83  
    84  	if opts.Common.Debug {
    85  		debug.Enable()
    86  	}
    87  }