github.com/khulnasoft/cli@v0.0.0-20240402070845-01bcad7beefa/cli/command/image/tag.go (about)

     1  package image
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/khulnasoft/cli/cli"
     7  	"github.com/khulnasoft/cli/cli/command"
     8  	"github.com/khulnasoft/cli/cli/command/completion"
     9  	"github.com/spf13/cobra"
    10  )
    11  
    12  type tagOptions struct {
    13  	image string
    14  	name  string
    15  }
    16  
    17  // NewTagCommand creates a new `docker tag` command
    18  func NewTagCommand(dockerCli command.Cli) *cobra.Command {
    19  	var opts tagOptions
    20  
    21  	cmd := &cobra.Command{
    22  		Use:   "tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]",
    23  		Short: "Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE",
    24  		Args:  cli.ExactArgs(2),
    25  		RunE: func(cmd *cobra.Command, args []string) error {
    26  			opts.image = args[0]
    27  			opts.name = args[1]
    28  			return runTag(cmd.Context(), dockerCli, opts)
    29  		},
    30  		Annotations: map[string]string{
    31  			"aliases": "docker image tag, docker tag",
    32  		},
    33  		ValidArgsFunction: completion.ImageNames(dockerCli),
    34  	}
    35  
    36  	flags := cmd.Flags()
    37  	flags.SetInterspersed(false)
    38  
    39  	return cmd
    40  }
    41  
    42  func runTag(ctx context.Context, dockerCli command.Cli, opts tagOptions) error {
    43  	return dockerCli.Client().ImageTag(ctx, opts.image, opts.name)
    44  }