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 }