go-xkcdreader/cmd/version.go
surtur 4b6e655ebf
All checks were successful
continuous-integration/drone/push Build is passing
use github.com/spf13/cobra for app cmds
* add 'version' command - "go-xkcdreader version" returns a formatted
  version of the app
* test (among other things) that the version in flake.nix matches the
  version hardcoded in app's go code (cmd/version.go)
2022-05-12 15:54:16 +02:00

48 lines
1.1 KiB
Go

package cmd
import (
"fmt"
"os"
"github.com/spf13/cobra"
)
// version holds app version string
var version = "v0.0.0"
// used to determine whether to print short or long version string
var shortVersion = false
var cmdVersion = &cobra.Command{
Use: "version",
Short: "Print version information and exit",
Long: `All software has versions. This is ` + appName + `'s`,
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println(getVersion())
return nil
},
PersistentPostRun: func(cmd *cobra.Command, args []string) {
// exit with code 0 after showing the version
os.Exit(0)
},
}
// get (short if -s/--short flag is supplied) version
func getVersion() string {
if !shortVersion {
return appName + " - " + version
}
return GetShortVersion()
}
// GetShortVersion returns a bare version string
func GetShortVersion() string {
return version
}
// the init func registers the commands and flags with cobra
func init() {
cmdVersion.Flags().BoolVarP(&shortVersion, "short", "s", false, "print just the version string and nothing else")
Root.AddCommand(cmdVersion)
}