github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/cli/command/plugin/push.go (about) 1 package plugin 2 3 import ( 4 "fmt" 5 6 "golang.org/x/net/context" 7 8 "github.com/docker/distribution/reference" 9 "github.com/docker/docker/cli" 10 "github.com/docker/docker/cli/command" 11 "github.com/docker/docker/cli/command/image" 12 "github.com/docker/docker/pkg/jsonmessage" 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 [OPTIONS] PLUGIN[:TAG]", 20 Short: "Push a plugin to a registry", 21 Args: cli.ExactArgs(1), 22 RunE: func(cmd *cobra.Command, args []string) error { 23 return runPush(dockerCli, args[0]) 24 }, 25 } 26 27 flags := cmd.Flags() 28 29 command.AddTrustSigningFlags(flags) 30 31 return cmd 32 } 33 34 func runPush(dockerCli *command.DockerCli, name string) error { 35 named, err := reference.ParseNormalizedNamed(name) 36 if err != nil { 37 return err 38 } 39 if _, ok := named.(reference.Canonical); ok { 40 return fmt.Errorf("invalid name: %s", name) 41 } 42 43 named = reference.TagNameOnly(named) 44 45 ctx := context.Background() 46 47 repoInfo, err := registry.ParseRepositoryInfo(named) 48 if err != nil { 49 return err 50 } 51 authConfig := command.ResolveAuthConfig(ctx, dockerCli, repoInfo.Index) 52 53 encodedAuth, err := command.EncodeAuthToBase64(authConfig) 54 if err != nil { 55 return err 56 } 57 58 responseBody, err := dockerCli.Client().PluginPush(ctx, reference.FamiliarString(named), encodedAuth) 59 if err != nil { 60 return err 61 } 62 defer responseBody.Close() 63 64 if command.IsTrusted() { 65 repoInfo.Class = "plugin" 66 return image.PushTrustedReference(dockerCli, repoInfo, named, authConfig, responseBody) 67 } 68 69 return jsonmessage.DisplayJSONMessagesToStream(responseBody, dockerCli.Out(), nil) 70 }