2020-12-25

Build Go Application with Version Information from Git

golang   programming   index

To automatically add version information to a Go application, we can pass that information from git through build arguments.

This can be especially useful, if we are using git tags.

For example, the following will get the latest git tag, the last commit hash, and whether there are locally modified uncommitted (dirty) files.

$ git describe --always --long --dirty
v0.12.1-0-gca3521e-dirty

More information on the options are available with man git-describe.

To pass this information into our program, we can define a global variable, and assign it through build arguments.

So, define a variable appver in the main.

package main

import (
	"fmt"
)

var (
	appver = "undefined"
)

func main() {
	fmt.Println(appver)
}

And build while assinging main.appver.

go build -ldflags="-X main.appver=$(git describe --always --long --dirty)" main.go

Same flags will work with go run.

Additionally, one can pass other variables like build time.

To get the version of Go itself, import "runtime" and get it with runtime.Version().