#!/bin/sh # script/version: output the version string to bake into the binary. # Our own extension to scripts-to-rule-them-all. The Makefile's LDFLAGS # call this rather than carrying a hardcoded constant, which is what used # to make every local build claim to be 1.0.0-rc.1 regardless of git # state. script/docker and script/cibuild pass its output to the image # build, which otherwise runs the same `git describe` itself. # # The version is `git describe --tags --always --dirty`: the tag on a # tagged commit, tag-N-gHASH on a commit after one, the short commit # when no tag is reachable, each with a "-dirty" suffix when tracked # files have uncommitted changes. Untracked files are ignored: a stray # scratch file does not change what was compiled. Outside a git checkout # (release tarball, `go install`), or in one with no commits, it is # "dev". # # Nothing here ever invents a version number. set -eu ROOT="$(cd "$(dirname "$0")/.." && pwd -P)" main() { cd "$ROOT" version="$(git describe --tags --always --dirty 2>/dev/null || true)" echo "${version:-dev}" } main "$@"