*: determine version from git

This commit is contained in:
Eric Chiang 2016-08-09 14:38:09 -07:00
parent b8e80ffa3a
commit e6f34e1051
4 changed files with 36 additions and 21 deletions

View file

@ -1,33 +1,24 @@
PROJ="poke" PROJ=poke
ORG_PATH="github.com/coreos" ORG_PATH=github.com/coreos
REPO_PATH="$(ORG_PATH)/$(PROJ)" REPO_PATH=$(ORG_PATH)/$(PROJ)
export PATH := $(PWD)/bin:$(PATH) export PATH := $(PWD)/bin:$(PATH)
export GOBIN=$(PWD)/bin export GOBIN=$(PWD)/bin
export GO15VENDOREXPERIMENT=1 export GO15VENDOREXPERIMENT=1
export CGO_ENABLED:=0
LD_FLAGS="-w -X $(REPO_PATH)/version.Version=$(shell ./scripts/git-version)"
GOOS=$(shell go env GOOS) GOOS=$(shell go env GOOS)
GOARCH=$(shell go env GOARCH) GOARCH=$(shell go env GOARCH)
COMMIT=$(shell git rev-parse HEAD)
# check if the current commit has a matching tag
TAG=$(shell git describe --exact-match --abbrev=0 --tags $(COMMIT) 2> /dev/null || true)
ifeq ($(TAG),)
VERSION=$(TAG)
else
VERSION=$(COMMIT)
endif
build: bin/poke bin/example-app build: bin/poke bin/example-app
bin/poke: FORCE bin/poke: FORCE
@go install $(REPO_PATH)/cmd/poke @go install -ldflags $(LD_FLAGS) $(REPO_PATH)/cmd/poke
bin/example-app: FORCE bin/example-app: FORCE
@go install $(REPO_PATH)/cmd/example-app @go install -ldflags $(LD_FLAGS) $(REPO_PATH)/cmd/example-app
test: test:
@go test $(shell go list ./... | grep -v '/vendor/') @go test $(shell go list ./... | grep -v '/vendor/')

View file

@ -11,8 +11,11 @@ import (
func commandVersion() *cobra.Command { func commandVersion() *cobra.Command {
return &cobra.Command{ return &cobra.Command{
Use: "version", Use: "version",
Short: "Print the version and exit",
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
fmt.Printf(`v%s %s %s %s fmt.Printf(`dex Version:%s
Go Version: %s
Go OS/ARCH: %s %s
`, version.Version, runtime.Version(), runtime.GOOS, runtime.GOARCH) `, version.Version, runtime.Version(), runtime.GOOS, runtime.GOARCH)
}, },
} }

21
scripts/git-version Executable file
View file

@ -0,0 +1,21 @@
#!/bin/bash -e
# parse the current git commit hash
COMMIT=`git rev-parse HEAD`
# check if the current commit has a matching tag
TAG=$(git describe --exact-match --abbrev=0 --tags ${COMMIT} 2> /dev/null || true)
# use the matching tag as the version, if available
if [ -z "$TAG" ]; then
VERSION=$COMMIT
else
VERSION=$TAG
fi
# check for changed files (not untracked files)
if [ -n "$(git diff --shortstat 2> /dev/null | tail -n1)" ]; then
VERSION="${VERSION}-dirty"
fi
echo $VERSION

View file

@ -1,5 +1,5 @@
// Package version contains version information for this app. // Package version contains version information for this app.
package version package version
// Version is the semantic version of the server. // Version is set by the build scripts.
const Version = "0.1.0" var Version = "was not built properly"