9seconds 8 лет назад
Родитель
Сommit
26ba563064
3 измененных файлов: 95 добавлений и 0 удалений
  1. 80
    0
      Makefile
  2. 3
    0
      main.go
  3. 12
    0
      scripts/generate_version.sh

+ 80
- 0
Makefile Просмотреть файл

@@ -0,0 +1,80 @@
1
+ROOT_DIR     := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
2
+IMAGE_NAME   := mtg
3
+APP_NAME     := $(IMAGE_NAME)
4
+GOMETALINTER := gometalinter.v2
5
+
6
+VENDOR_FILES := $(shell find "$(ROOT_DIR)/vendor" 2>/dev/null || echo -n "vendor")
7
+CC_BINARIES  := $(shell bash -c "echo -n $(APP_NAME)-{linux,windows,darwin,freebsd,openbsd}-{386,amd64} $(APP_NAME)-linux-{arm,arm64}")
8
+APP_DEPS     := version.go $(VENDOR_FILES)
9
+
10
+COMMON_BUILD_FLAGS := -ldflags="-s -w"
11
+
12
+# -----------------------------------------------------------------------------
13
+
14
+$(APP_NAME): $(APP_DEPS)
15
+	@go build $(COMMON_BUILD_FLAGS) -o "$(APP_NAME)"
16
+
17
+static-$(APP_NAME): $(APP_DEPS)
18
+	@env CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo $(COMMON_BUILD_FLAGS) -o "$(APP_NAME)"
19
+
20
+$(APP_NAME)-%: GOOS=$(shell echo -n "$@" | sed 's?$(APP_NAME)-??' | cut -f1 -d-)
21
+$(APP_NAME)-%: GOARCH=$(shell echo -n "$@" | sed 's?$(APP_NAME)-??' | cut -f2 -d-)
22
+$(APP_NAME)-%: $(APP_DEPS) ccbuilds
23
+	@env "GOOS=$(GOOS)" "GOARCH=$(GOARCH)" \
24
+		go build \
25
+		$(COMMON_BUILD_FLAGS) \
26
+		-o "./ccbuilds/$(APP_NAME)-$(GOOS)-$(GOARCH)"
27
+
28
+ccbuilds:
29
+	@rm -rf ./ccbuilds && mkdir -p ./ccbuilds
30
+
31
+version.go:
32
+	@go generate main.go
33
+
34
+vendor: Gopkg.lock Gopkg.toml install-cli
35
+	@dep ensure
36
+
37
+# -----------------------------------------------------------------------------
38
+
39
+.PHONY: all
40
+all: $(APP_NAME)
41
+
42
+.PHONY: static
43
+static: static-$(APP_NAME)
44
+
45
+.PHONY: crosscompile
46
+crosscompile: $(CC_BINARIES)
47
+
48
+.PHONY: crosscompile-dir
49
+crosscompile-dir:
50
+	@rm -rf "$(CC_DIR)" && mkdir -p "$(CC_DIR)"
51
+
52
+.PHONY: test
53
+test: vendor install-cli
54
+	@go test -v ./...
55
+
56
+.PHONY: lint
57
+lint: vendor install-cli
58
+	@$(GOMETALINTER) --deadline=2m ./...
59
+
60
+.PHONY: clean
61
+clean:
62
+	@git clean -xfd && \
63
+		git reset --hard >/dev/null && \
64
+		git submodule foreach --recursive sh -c 'git clean -xfd && git reset --hard' >/dev/null
65
+
66
+.PHONY: docker
67
+docker:
68
+	@docker build --pull -t "$(IMAGE_NAME)" "$(ROOT_DIR)"
69
+
70
+.PHONY: install-cli
71
+install-cli: install-dep install-lint
72
+
73
+.PHONY: install-dep
74
+install-dep:
75
+	@go get github.com/golang/dep/cmd/dep
76
+
77
+.PHONY: install-lint
78
+install-lint:
79
+	@go get gopkg.in/alecthomas/gometalinter.v2 && \
80
+		$(GOMETALINTER) --install >/dev/null

+ 3
- 0
main.go Просмотреть файл

@@ -1,5 +1,7 @@
1 1
 package main
2 2
 
3
+//go:generate scripts/generate_version.sh
4
+
3 5
 import (
4 6
 	"encoding/hex"
5 7
 	"fmt"
@@ -68,6 +70,7 @@ var (
68 70
 )
69 71
 
70 72
 func main() {
73
+	app.Version(version)
71 74
 	kingpin.MustParse(app.Parse(os.Args[1:]))
72 75
 
73 76
 	secretBytes, err := hex.DecodeString(*secret)

+ 12
- 0
scripts/generate_version.sh Просмотреть файл

@@ -0,0 +1,12 @@
1
+#!/bin/sh
2
+set -eu
3
+
4
+PROJECT_DIR="$(git rev-parse --show-toplevel)"
5
+OUTPUT_FILE="${PROJECT_DIR}/version.go"
6
+
7
+cat > "$OUTPUT_FILE" <<EOF
8
+package main
9
+// autogenerated by $(basename "$0") on $(date -Ru)
10
+
11
+const version = "$(git describe --long --always) ($(go version)) [$(date -Ru)]"
12
+EOF

Загрузка…
Отмена
Сохранить