]> git.lizzy.rs Git - micro.git/commitdiff
try to set a more matching version number
authorFlorian Sundermann <boombuler@gmail.com>
Tue, 27 Sep 2016 11:25:17 +0000 (13:25 +0200)
committerFlorian Sundermann <boombuler@gmail.com>
Tue, 27 Sep 2016 11:25:17 +0000 (13:25 +0200)
Makefile
tools/build-version.go [new file with mode: 0644]

index 2480d529b64e9c96d71f213fa9ce3dcedf112fb6..38956d27e780e2164669184473ecba3736e46bd5 100644 (file)
--- 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 (file)
index 0000000..a8e68d0
--- /dev/null
@@ -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())
+}