Fixed version info be set when go install

vasser created

Change summary

Makefile         | 16 +++++-----------
commands/root.go | 42 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 11 deletions(-)

Detailed changes

Makefile 🔗

@@ -1,8 +1,5 @@
 all: build
 
-GIT_COMMIT:=$(shell git rev-list -1 HEAD)
-GIT_LAST_TAG:=$(shell git describe --abbrev=0 --tags)
-GIT_EXACT_TAG:=$(shell git name-rev --name-only --tags HEAD)
 UNAME_S := $(shell uname -s)
 XARGS:=xargs -r
 ifeq ($(UNAME_S),Darwin)
@@ -10,30 +7,27 @@ ifeq ($(UNAME_S),Darwin)
 endif
 
 COMMANDS_PATH:=github.com/MichaelMure/git-bug/commands
-LDFLAGS:=-X ${COMMANDS_PATH}.GitCommit=${GIT_COMMIT} \
-	-X ${COMMANDS_PATH}.GitLastTag=${GIT_LAST_TAG} \
-	-X ${COMMANDS_PATH}.GitExactTag=${GIT_EXACT_TAG}
 
 .PHONY: build
 build:
 	go generate
-	go build -ldflags "$(LDFLAGS)" .
+	go build .
 
 # produce a build debugger friendly
 .PHONY: debug-build
 debug-build:
 	go generate
-	go build -ldflags "$(LDFLAGS)" -gcflags=all="-N -l" .
+	go build -gcflags=all="-N -l" .
 
 .PHONY: install
 install:
 	go generate
-	go install -ldflags "$(LDFLAGS)" .
+	go install .
 
 .PHONY: releases
 releases:
 	go generate
-	go run github.com/mitchellh/gox@v1.0.1 -ldflags "$(LDFLAGS)" -osarch '!darwin/386' -output "dist/{{.Dir}}_{{.OS}}_{{.Arch}}"
+	go run github.com/mitchellh/gox@v1.0.1 -osarch '!darwin/386' -output "dist/{{.Dir}}_{{.OS}}_{{.Arch}}"
 
 secure: secure-practices secure-vulnerabilities
 
@@ -62,7 +56,7 @@ pack-webui:
 # produce a build that will fetch the web UI from the filesystem instead of from the binary
 .PHONY: debug-webui
 debug-webui:
-	go build -ldflags "$(LDFLAGS)" -tags=debugwebui
+	go build -tags=debugwebui
 
 .PHONY: clean-local-bugs
 clean-local-bugs:

commands/root.go 🔗

@@ -4,6 +4,9 @@ package commands
 import (
 	"fmt"
 	"os"
+	"os/exec"
+	"runtime/debug"
+	"strings"
 
 	"github.com/spf13/cobra"
 
@@ -31,6 +34,8 @@ the same git remote you are already using to collaborate with other people.
 `,
 
 		PersistentPreRun: func(cmd *cobra.Command, args []string) {
+			GitLastTag, GitExactTag, GitCommit = getTagsAndCommit()
+
 			root := cmd.Root()
 
 			if GitExactTag == "undefined" {
@@ -90,3 +95,40 @@ func Execute() {
 		os.Exit(1)
 	}
 }
+
+func getTagsAndCommit() (tag, exacttag, commit string) {
+	var t, e, c string
+
+	info, ok := debug.ReadBuildInfo()
+
+	if !ok {
+		fmt.Println("could not get commit")
+	}
+
+	for _, kv := range info.Settings {
+		switch kv.Key {
+		case "vcs.revision":
+			c = kv.Value
+		}
+	}
+
+	cmd := exec.Command("git", "describe", "--tags", "--abbrev=0")
+	stdout, err := cmd.Output()
+
+	if err != nil {
+		fmt.Printf("could not get last tag: %v\n", err.Error())
+	}
+
+	t = strings.TrimSuffix(string(stdout), "\n")
+
+	cmd = exec.Command("git", "name-rev", "--name-only", "--tags", "HEAD")
+	stdout, err = cmd.Output()
+
+	if err != nil {
+		fmt.Printf("could not get exact tag: %v\n", err.Error())
+	}
+
+	e = strings.TrimSuffix(string(stdout), "\n")
+
+	return t, e, c
+}