github.com/jenkins-x/jx/v2@v2.1.155/pkg/cmd/get/get_stream.go (about)

     1  package get
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/jenkins-x/jx/v2/pkg/versionstream"
     7  
     8  	"github.com/jenkins-x/jx/v2/pkg/cmd/helper"
     9  
    10  	"github.com/jenkins-x/jx-logging/pkg/log"
    11  	"github.com/jenkins-x/jx/v2/pkg/util"
    12  	"github.com/pkg/errors"
    13  
    14  	"github.com/spf13/cobra"
    15  
    16  	"github.com/jenkins-x/jx/v2/pkg/cmd/opts"
    17  	"github.com/jenkins-x/jx/v2/pkg/cmd/templates"
    18  )
    19  
    20  // GetStreamOptions the command line options
    21  type GetStreamOptions struct {
    22  	Options
    23  
    24  	Kind               string
    25  	VersionsRepository string
    26  	VersionsGitRef     string
    27  }
    28  
    29  var (
    30  	getStreamLong = templates.LongDesc(`
    31  		Displays the version of a chart, package or docker image from the Version Stream
    32  
    33  		For more information see: [https://jenkins-x.io/about/concepts/version-stream/](https://jenkins-x.io/about/concepts/version-stream/)
    34  
    35  `)
    36  
    37  	getStreamExample = templates.Examples(`
    38  		# List the version of a docker image
    39  		jx get stream -k docker gcr.io/jenkinsxio/builder-jx
    40  
    41  		# List the version of a chart
    42  		jx get stream -k charts jenkins-x/tekton
    43  	`)
    44  )
    45  
    46  // NewCmdGetStream creates the command
    47  func NewCmdGetStream(commonOpts *opts.CommonOptions) *cobra.Command {
    48  	options := &GetStreamOptions{
    49  		Options: Options{
    50  			CommonOptions: commonOpts,
    51  		},
    52  	}
    53  
    54  	cmd := &cobra.Command{
    55  		Use:     "stream",
    56  		Short:   "Displays the version of a chart, package or docker image from the Version Stream",
    57  		Long:    getStreamLong,
    58  		Example: getStreamExample,
    59  		Aliases: []string{"url"},
    60  		Run: func(cmd *cobra.Command, args []string) {
    61  			options.Cmd = cmd
    62  			options.Args = args
    63  			err := options.Run()
    64  			helper.CheckErr(err)
    65  		},
    66  	}
    67  	cmd.Flags().StringVarP(&options.Kind, "kind", "k", "docker", "The kind of version. Possible values: "+strings.Join(versionstream.KindStrings, ", "))
    68  	cmd.Flags().StringVarP(&options.VersionsRepository, "repo", "r", "", "Jenkins X versions Git repo")
    69  	cmd.Flags().StringVarP(&options.VersionsGitRef, "versions-ref", "", "", "Jenkins X versions Git repository reference (tag, branch, sha etc)")
    70  	return cmd
    71  }
    72  
    73  // Run implements this command
    74  func (o *GetStreamOptions) Run() error {
    75  	resolver, err := o.CreateVersionResolver(o.VersionsRepository, o.VersionsGitRef)
    76  	if err != nil {
    77  		return errors.Wrap(err, "failed to create the VersionResolver")
    78  	}
    79  	args := o.Args
    80  	if len(args) == 0 {
    81  		return util.MissingArgument("name")
    82  	}
    83  	name := args[0]
    84  
    85  	kind := versionstream.VersionKind(o.Kind)
    86  	if kind == versionstream.KindDocker {
    87  		result, err := resolver.ResolveDockerImage(name)
    88  		if err != nil {
    89  			return errors.Wrapf(err, "failed to resolve docker image %s", name)
    90  		}
    91  		log.Logger().Infof("resolved image %s to %s", util.ColorInfo(name), util.ColorInfo(result))
    92  		return nil
    93  	}
    94  
    95  	n, err := resolver.StableVersionNumber(kind, name)
    96  	if err != nil {
    97  		return errors.Wrapf(err, "failed to resolve %s version of %s", o.Kind, name)
    98  	}
    99  
   100  	log.Logger().Infof("resolved %s %s to version: %s", util.ColorInfo(name), util.ColorInfo(o.Kind), util.ColorInfo(n))
   101  	return nil
   102  }