mirror of https://github.com/docker/docs.git
				
				
				
			
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
| // +build experimental
 | |
| 
 | |
| package plugin
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 
 | |
| 	"golang.org/x/net/context"
 | |
| 
 | |
| 	"github.com/docker/docker/api/client"
 | |
| 	"github.com/docker/docker/cli"
 | |
| 	"github.com/docker/docker/reference"
 | |
| 	"github.com/docker/docker/registry"
 | |
| 	"github.com/spf13/cobra"
 | |
| )
 | |
| 
 | |
| func newPushCommand(dockerCli *client.DockerCli) *cobra.Command {
 | |
| 	cmd := &cobra.Command{
 | |
| 		Use:   "push",
 | |
| 		Short: "Push a plugin",
 | |
| 		Args:  cli.ExactArgs(1),
 | |
| 		RunE: func(cmd *cobra.Command, args []string) error {
 | |
| 			return runPush(dockerCli, args[0])
 | |
| 		},
 | |
| 	}
 | |
| 	return cmd
 | |
| }
 | |
| 
 | |
| func runPush(dockerCli *client.DockerCli, name string) error {
 | |
| 	named, err := reference.ParseNamed(name) // FIXME: validate
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	named = reference.WithDefaultTag(named)
 | |
| 	ref, ok := named.(reference.NamedTagged)
 | |
| 	if !ok {
 | |
| 		return fmt.Errorf("invalid name: %s", named.String())
 | |
| 	}
 | |
| 
 | |
| 	ctx := context.Background()
 | |
| 
 | |
| 	repoInfo, err := registry.ParseRepositoryInfo(named)
 | |
| 	authConfig := dockerCli.ResolveAuthConfig(ctx, repoInfo.Index)
 | |
| 
 | |
| 	encodedAuth, err := client.EncodeAuthToBase64(authConfig)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	return dockerCli.Client().PluginPush(ctx, ref.String(), encodedAuth)
 | |
| }
 |