github.com/vieux/docker@v0.6.3-0.20161004191708-e097c2a938c7/cli/command/plugin/push.go (about) 1 // +build experimental 2 3 package plugin 4 5 import ( 6 "fmt" 7 8 "golang.org/x/net/context" 9 10 "github.com/docker/docker/cli" 11 "github.com/docker/docker/cli/command" 12 "github.com/docker/docker/reference" 13 "github.com/docker/docker/registry" 14 "github.com/spf13/cobra" 15 ) 16 17 func newPushCommand(dockerCli *command.DockerCli) *cobra.Command { 18 cmd := &cobra.Command{ 19 Use: "push PLUGIN", 20 Short: "Push a plugin", 21 Args: cli.ExactArgs(1), 22 RunE: func(cmd *cobra.Command, args []string) error { 23 return runPush(dockerCli, args[0]) 24 }, 25 } 26 return cmd 27 } 28 29 func runPush(dockerCli *command.DockerCli, name string) error { 30 named, err := reference.ParseNamed(name) // FIXME: validate 31 if err != nil { 32 return err 33 } 34 if reference.IsNameOnly(named) { 35 named = reference.WithDefaultTag(named) 36 } 37 ref, ok := named.(reference.NamedTagged) 38 if !ok { 39 return fmt.Errorf("invalid name: %s", named.String()) 40 } 41 42 ctx := context.Background() 43 44 repoInfo, err := registry.ParseRepositoryInfo(named) 45 if err != nil { 46 return err 47 } 48 authConfig := command.ResolveAuthConfig(ctx, dockerCli, repoInfo.Index) 49 50 encodedAuth, err := command.EncodeAuthToBase64(authConfig) 51 if err != nil { 52 return err 53 } 54 return dockerCli.Client().PluginPush(ctx, ref.String(), encodedAuth) 55 }