From 4bcb13efc0db43de978b8c1e3b5a2349ccb32e0b Mon Sep 17 00:00:00 2001 From: Florian Sundermann Date: Tue, 27 Sep 2016 13:25:17 +0200 Subject: [PATCH] try to set a more matching version number --- Makefile | 2 +- tools/build-version.go | 65 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 tools/build-version.go diff --git a/Makefile b/Makefile index 2480d529..38956d27 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ .PHONY: runtime -VERSION = $(shell git describe --tags --abbrev=0) +VERSION = $(shell go run tools/build-version.go) HASH = $(shell git rev-parse --short HEAD) DATE = $(shell go run tools/build-date.go) diff --git a/tools/build-version.go b/tools/build-version.go new file mode 100644 index 00000000..a8e68d01 --- /dev/null +++ b/tools/build-version.go @@ -0,0 +1,65 @@ +package main + +import ( + "fmt" + "os/exec" + "strings" + + "github.com/blang/semver" +) + +func getTag(match ...string) (string, *semver.PRVersion) { + args := append([]string{ + "describe", "--tags", + }, match...) + if tag, err := exec.Command("git", args...).Output(); err != nil { + return "", nil + } else { + tagParts := strings.Split(string(tag), "-") + if len(tagParts) == 3 { + if ahead, err := semver.NewPRVersion(tagParts[1]); err == nil { + return tagParts[0], &ahead + } + } + + return tagParts[0], nil + } +} + +func main() { + // Find the last vX.X.X Tag and get how many builds we are ahead of it. + versionStr, ahead := getTag("--match", "v*") + version, err := semver.ParseTolerant(versionStr) + if err != nil { + // no version tag found so just return what ever we can find. + fmt.Println(getTag()) + return + } + // Get the tag of the current revision. + tag, _ := getTag("--exact-match") + if tag == versionStr { + // Seems that we are going to build a release. + // So the version number should already be correct. + fmt.Println(version.String()) + return + } + + // If we don't have any tag assume "dev" + if tag == "" { + tag = "dev" + } + // Get the most likely next version: + version.Patch = version.Patch + 1 + + if pr, err := semver.NewPRVersion(tag); err == nil { + // append the tag as pre-release name + version.Pre = append(version.Pre, pr) + } + + if ahead != nil { + // if we know how many commits we are ahead of the last release, append that too. + version.Pre = append(version.Pre, *ahead) + } + + fmt.Println(version.String()) +}