...

Source file src/edge-infra.dev/pkg/lib/cli/version.go

Documentation: edge-infra.dev/pkg/lib/cli

     1  package cli
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"io"
     7  	"runtime"
     8  	"text/tabwriter"
     9  
    10  	"edge-infra.dev/pkg/lib/build"
    11  	"edge-infra.dev/pkg/lib/cli/rags"
    12  	"edge-infra.dev/pkg/lib/cli/sink"
    13  )
    14  
    15  // NewVersionCmd creates a standard [edge-infra.dev/pkg/lib/cli/sink.Command]
    16  // for exposing version information in a CLI.
    17  func NewVersionCmd(v *build.Version) *sink.Command {
    18  	var (
    19  		short  bool
    20  		commit bool
    21  	)
    22  
    23  	versionCmd := &sink.Command{
    24  		Use:   "version [flags]",
    25  		Short: "Print CLI version information",
    26  		Flags: []*rags.Rag{
    27  			{
    28  				Name:  "commit",
    29  				Short: "c",
    30  				Usage: "Only print the versions commit hash",
    31  				Value: &rags.Bool{Var: &commit},
    32  			},
    33  			{
    34  				Name:  "short",
    35  				Short: "s",
    36  				Usage: "Only print the machine-readable semantic version string",
    37  				Value: &rags.Bool{Var: &short},
    38  			},
    39  		},
    40  		Exec: func(_ context.Context, r sink.Run) error {
    41  			if short {
    42  				fmt.Fprintln(r.Out(), v.String())
    43  				return nil
    44  			}
    45  
    46  			if commit {
    47  				fmt.Fprintln(r.Out(), v.Commit)
    48  				return nil
    49  			}
    50  
    51  			Version(r.Out(), v)
    52  			return nil
    53  		},
    54  	}
    55  	return versionCmd
    56  }
    57  
    58  // Version writes a CLI-friendly string representation of build.Version v to
    59  // w.
    60  func Version(w io.Writer, v *build.Version) {
    61  	tw := tabwriter.NewWriter(w, 8, 2, 2, ' ', 0)
    62  	defer tw.Flush()
    63  	fmt.Fprintln(tw, v.String()+"\t\t")
    64  	fmt.Fprintln(tw)
    65  
    66  	if v.ReleaseCandidate {
    67  		fmt.Fprintln(tw, "Release candidate:\t"+v.RCIdentifierStr()+"\t")
    68  	}
    69  
    70  	fmt.Fprintln(tw, "Commit:\t"+v.Commit+"\t")
    71  	fmt.Fprintln(tw, "Timestamp:\t"+v.Date().String()+"\t")
    72  	fmt.Fprintln(tw, "Go Version:\t"+runtime.Version()+"\t")
    73  	fmt.Fprintln(tw, "Go Compiler:\t"+runtime.Compiler+"\t")
    74  	fmt.Fprintln(tw, "Go Platform:\t"+runtime.GOOS+"/"+runtime.GOARCH+"\t")
    75  }
    76  

View as plain text