github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/cmds/version/cmd.go (about) 1 package version 2 3 import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "io" 8 "io/ioutil" 9 "os" 10 11 "github.com/gobuffalo/plugins" 12 "github.com/gobuffalo/plugins/plugio" 13 "github.com/gobuffalo/plugins/plugprint" 14 "github.com/spf13/pflag" 15 ) 16 17 var _ plugins.Plugin = &Cmd{} 18 var _ plugio.OutNeeder = &Cmd{} 19 var _ plugprint.Describer = &Cmd{} 20 var _ plugprint.FlagPrinter = &Cmd{} 21 22 // Cmd is responsible for the `buffalo version` command. 23 type Cmd struct { 24 help bool 25 json bool 26 stdout io.Writer 27 } 28 29 func (c *Cmd) SetStdout(w io.Writer) error { 30 c.stdout = w 31 return nil 32 } 33 34 func (vc *Cmd) PrintFlags(w io.Writer) error { 35 flags := vc.Flags() 36 flags.SetOutput(w) 37 flags.PrintDefaults() 38 return nil 39 } 40 41 func (vc *Cmd) PluginName() string { 42 return "version" 43 } 44 45 func (vc *Cmd) Description() string { 46 return "Print the version information" 47 } 48 49 func (i Cmd) String() string { 50 return i.PluginName() 51 } 52 53 func (vc *Cmd) Flags() *pflag.FlagSet { 54 flags := pflag.NewFlagSet(vc.String(), pflag.ContinueOnError) 55 flags.SetOutput(ioutil.Discard) 56 flags.BoolVarP(&vc.help, "help", "h", false, "print this help") 57 flags.BoolVarP(&vc.json, "json", "j", false, "Print information in json format") 58 return flags 59 } 60 61 func (vc *Cmd) Main(ctx context.Context, root string, args []string) error { 62 flags := vc.Flags() 63 if err := flags.Parse(args); err != nil { 64 return err 65 } 66 67 out := vc.stdout 68 if vc.stdout == nil { 69 out = os.Stdout 70 } 71 if vc.help { 72 return plugprint.Print(out, vc) 73 } 74 75 if !vc.json { 76 fmt.Fprintln(out, Version) 77 return nil 78 } 79 80 enc := json.NewEncoder(out) 81 enc.SetIndent("", " ") 82 return enc.Encode(map[string]string{ 83 "version": Version, 84 }) 85 86 }