= Go Version
image::https://travis-ci.org/christopherhein/go-version.svg?branch=master[link="https://travis-ci.org/christopherhein/go-version"]
This package gives allows you to use https://github.com/spf13/cobra and
https://github.com/goreleaser/goreleaser together to output your version in a
simple way. Supporting multiple flags for mutating the output.
== Usage
To use this package you will need to create `cobra` command for version such as
this.
[source,go]
----
package main
import (
"fmt"
goversion "go.hein.dev/go-version"
"github.com/spf13/cobra"
)
var (
shortened = false
version = "dev"
commit = "none"
date = "unknown"
output = "json"
versionCmd = &cobra.Command{
Use: "version",
Short: "Version will output the current build information",
Long: ``,
Run: func(_ *cobra.Command, _ []string) {
resp := goVersion.FuncWithOutput(shortened, version, commit, date, output)
fmt.Print(resp)
return
},
}
)
func init() {
versionCmd.Flags().BoolVarP(&shortened, "short", "s", false, "Print just the version number.")
versionCmd.Flags().StringVarP(&output, "output", "o", "json", "Output format. One of 'yaml' or 'json'.")
rootCmd.AddCommand(versionCmd)
}
----
When you do this then you can pass in these flags at build time. _If you'd like
more control of the output you can change the `Run` function to something more
like this.
[source,go]
----
Run: func(_ *cobra.Command, _ []string) {
var response string
versionOutput := New(version, commit, date)
if shortened {
response = versionOutput.ToShortened()
} else {
response = versionOutput.ToJSON()
}
fmt.Printf("%+v", response)
return
},
----
[source,shell]
----
go build -ldflags "-X main.commit=<SOMEHASH> -X main.date=<SOMEDATE>"
----
This then gives your CLI the ability to use this for the JSON output:
[source,shell]
----
$ ./my-cli version
{"Version":"dev","Commit":"<SOMEHASH>","Date":"<SOMEDATE>"}
----
Or to make this human readable you could use:
[source,shell]
----
$ ./my-cli -s
Version: dev
Commit: <SOMEHASH>
Date: <SOMEDATE>
----
== Testing
To run the test suite all you need to do is run.
[source,shell]
----
go test -v ./...
----
== Contributing
If you want to contribute check out
https://github.com/christopherhein/go-version/blob/master/CONTRIBUTING.adoc