Skip to content
Golang Cobra & Goreleaser Versioning library
Go Shell Makefile
Branch: master
Clone or download
christopherhein adding CHANGELOG.md
Signed-off-by: Christopher Hein <me@chrishein.com>
Latest commit 55c09f8 Aug 15, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example
hack adding changelog in markdown Aug 14, 2019
.gitignore adding go.* and new ignored files Aug 12, 2019
.travis.yml adding tests for the cobra function Aug 13, 2019
CHANGELOG.md adding CHANGELOG.md Aug 15, 2019
CONTRIBUTING.adoc
LICENSE.txt
Makefile version bump Aug 15, 2019
VERSION version bump Aug 15, 2019
go.mod adding vendored packages Aug 14, 2019
go.sum adding vendored packages Aug 14, 2019
readme.adoc adding yaml outputter Aug 14, 2019
version.go adding yaml outputter Aug 14, 2019
version_test.go

readme.adoc

Go Version

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.

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.

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
},
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:

$ ./my-cli version
{"Version":"dev","Commit":"<SOMEHASH>","Date":"<SOMEDATE>"}

Or to make this human readable you could use:

$ ./my-cli -s

Version: dev
Commit: <SOMEHASH>
Date: <SOMEDATE>

Testing

To run the test suite all you need to do is run.

go test -v ./...

Contributing

You can’t perform that action at this time.