-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
105 lines (82 loc) · 2.1 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
##################
# Variables #
##################
GIT_VERSION = $(shell git rev-list -1 HEAD)
BUILD_DATE = $(shell date -u)
ifdef RELEASE
EXAMPLE_VERSION := $(RELEASE)
else
EXAMPLE_VERSION := dev
endif
ifdef ARCHIVE_OUTDIR
OUTPUT_PATH := $(ARCHIVE_OUTDIR)
else
OUTPUT_PATH := .
endif
LOCAL_OS := $(shell uname)
ifeq ($(LOCAL_OS),Linux)
TARGET_OS_LOCAL = linux
else ifeq ($(LOCAL_OS),Darwin)
TARGET_OS_LOCAL = darwin
else
TARGET_OS_LOCAL ?= windows
endif
export GOOS ?= $(TARGET_OS_LOCAL)
ifeq ($(GOOS),windows)
BINARY_EXT_LOCAL:=.exe
GOLANGCI_LINT:=golangci-lint.exe
export ARCHIVE_EXT = .zip
else
BINARY_EXT_LOCAL:=
GOLANGCI_LINT:=golangci-lint
export ARCHIVE_EXT = .tar.gz
endif
export BINARY_EXT ?= $(BINARY_EXT_LOCAL)
##################
# Linting/Verify #
##################
lint-prepare:
ifeq (,$(shell which golangci-lint))
@echo "Installing golangci-lint"
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOPATH)/bin v1.23.1 > /dev/null 2>&1
else
@echo "golangci-lint is installed"
endif
lint:
@echo "Linting"
golangci-lint run ./...
vet:
@echo "Vetting"
go vet ./...
##################
# Testing #
##################
test:
go test -v ./... -cover -race -covermode=atomic
##################
# Build #
##################
LDFLAGS:=-X main.commit=$(GIT_VERSION) -X main.version=$(EXAMPLE_VERSION) -X "main.date=$(BUILD_DATE)"
build::
GOOS=$(GOOS) GOARCH=amd64 go build -ldflags='$(LDFLAGS)' -o example$(BINARY_EXT) main.go
##################
# Release #
##################
archive:
ifeq ("$(wildcard $(OUTPUT_PATH))", "")
mkdir -p $(OUTPUT_PATH)
endif
ifeq ($(GOOS),windows)
zip $(OUTPUT_PATH)/example_$(GOOS)_amd64$(ARCHIVE_EXT) example$(BINARY_EXT)
else
tar -czvf "$(OUTPUT_PATH)/example_$(GOOS)_amd64$(ARCHIVE_EXT)" "example$(BINARY_EXT)"
endif
release: build archive generate-checksum
##################
# Verify #
##################
generate-checksum:
cd $(OUTPUT_PATH)
sha256sum example_$(GOOS)_amd64$(ARCHIVE_EXT) >> checksums.sha256
verify-checksum:
sha256sum -c $(OUTPUT_PATH)/checksums.sha256