📚 govvv - Awesome Go Library for Software Packages

“go build” wrapper to easily add version information into Go binaries.
Detailed Description of govvv
govvv
The simple Go binary versioning tool that wraps the go build command.
:warning::warning::warning: DEPRECATED: Go now offers build info natively. Please migrate to use that instead. I am no longer planning to maintain this project.

Stop worrying about -ldflags and go get github.com/ahmetb/govvv now.
Build Variables
| Variable | Description | Example |
|---|---|---|
main.GitCommit | short commit hash of source tree | 0b5ed7a |
main.GitBranch | current branch name the code is built off | master |
main.GitState | whether there are uncommitted changes | clean or dirty |
main.GitSummary | output of git describe --tags --dirty --always | v1.0.0, v1.0.1-5-g585c78f-dirty, fbd157c |
main.BuildDate | RFC3339 formatted UTC date | 2016-08-04T18:07:54Z |
main.Version | contents of ./VERSION file, if exists, or the value passed via the -version option | 2.0.0 |
Using govvv is easy
Just add the build variables you want to the main package and run:
| old | :sparkles: new :sparkles: |
|---|---|
go build | govvv build |
go install | govvv install |
Version your app with govvv
Create a VERSION file in your build root directory and add a Version
variable to your main package.

Do you have your own way of specifying Version? No problem:
govvv lets you specify custom -ldflags
Your existing -ldflags argument will still be preserved:
govvv build -ldflags "-X main.BuildNumber=$buildnum" myapp
and the -ldflags constructed by govvv will be appended to your flag.
Don’t want to depend on govvv? It’s fine!
You can just pass a -print argument and govvv will just print the
go build command with -ldflags for you and will not execute the go tool:
$ govvv build -print
go build \
-ldflags \
"-X main.GitCommit=57b9870 -X main.GitBranch=dry-run -X main.GitState=dirty -X main.Version=0.1.0 -X main.BuildDate=2016-08-08T20:50:21Z"
Still don’t want to wrap the go tool? Well, try -flags to retrieve the LDFLAGS govvv prepares:
$ go build -ldflags="$(govvv -flags)"
Want to use a different package?
You can pass a -pkg argument with the full package name, and govvv will
set the build variables in that package instead of main. For example:
# build with govvv
$ govvv build -pkg github.com/myacct/myproj/mypkg
# build with go
$ go build -ldflags="$(govvv -flags -pkg $(go list ./mypkg))"
Want to use a different version?
You can pass a -version argument with the desired version, and govvv will
use the specified version instead of obtaining it from the ./VERSION file.
For example:
# build with govvv
$ govvv build -version 1.2.3
# build with go
$ go build -ldflags="$(govvv -flags -version 1.2.3)"
Try govvv today
$ go get github.com/ahmetb/govvv
govvv is distributed under Apache 2.0 License.
Copyright 2016 Ahmet Alp Balkan