-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmakefile
More file actions
125 lines (102 loc) · 3.7 KB
/
makefile
File metadata and controls
125 lines (102 loc) · 3.7 KB
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
LDFLAGS=
BUILD_ENVPARMS:=CGO_ENABLED=0
LOCAL_BIN:=$(CURDIR)/bin
##################### GOX #####################
GOX_BIN:=$(LOCAL_BIN)/gox
# local gox
ifeq ($(wildcard $(GOX_BIN)),)
GOX_BIN:=
endif
# Check global bin version
ifneq (, $(shell which gox))
GOX_BIN:=$(shell which gox)
endif
##################### GOLANG-CI RELATED CHECKS #####################
# Check global GOLANGCI-LINT
GOLANGCI_BIN:=$(LOCAL_BIN)/golangci-lint ## local linter binary path
GOLANGCI_TAG:=1.61.0 ## linter version to use
GOLANGCI_LINTER_IMAGE:="golangci/golangci-lint" ## pipeline linter image to use in ci-lint target
# Check local bin version
ifneq ($(wildcard $(GOLANGCI_BIN)),)
GOLANGCI_BIN_VERSION:=$(shell $(GOLANGCI_BIN) --version)
ifneq ($(GOLANGCI_BIN_VERSION),)
GOLANGCI_BIN_VERSION_SHORT:=$(shell echo "$(GOLANGCI_BIN_VERSION)" | sed -E 's/.* version (.*) built from .* on .*/\1/g')
else
GOLANGCI_BIN_VERSION_SHORT:=0
endif
ifneq "$(GOLANGCI_TAG)" "$(word 1, $(sort $(GOLANGCI_TAG) $(GOLANGCI_BIN_VERSION_SHORT)))"
GOLANGCI_BIN:=
endif
endif
# Check global bin version
ifneq (, $(shell which golangci-lint))
GOLANGCI_VERSION:=$(shell golangci-lint --version 2> /dev/null )
ifneq ($(GOLANGCI_VERSION),)
GOLANGCI_VERSION_SHORT:=$(shell echo "$(GOLANGCI_VERSION)"|sed -E 's/.* version (.*) built from .* on .*/\1/g')
else
GOLANGCI_VERSION_SHORT:=0
endif
ifeq "$(GOLANGCI_TAG)" "$(word 1, $(sort $(GOLANGCI_TAG) $(GOLANGCI_VERSION_SHORT)))"
GOLANGCI_BIN:=$(shell which golangci-lint)
endif
endif
.PHONY: install-lint
install-lint: ## install golangci-lint binary
ifeq ($(wildcard $(GOLANGCI_BIN)),)
$(info Downloading golangci-lint v$(GOLANGCI_TAG))
GOBIN=$(LOCAL_BIN) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v$(GOLANGCI_TAG)
GOLANGCI_BIN:=$(LOCAL_BIN)/golangci-lint
endif
.PHONY: .lint-full
.lint-full: install-lint
$(GOLANGCI_BIN) run --config=.golangci.yml ./...
.PHONY: lint-full
lint-full: .lint-full
.PHONY: .bin-deps
.bin-deps:
mkdir -p bin
$(info Installing binary dependencies...)
GOBIN=$(LOCAL_BIN) go install github.com/mitchellh/gox@v1.0.1 && \
GOBIN=$(LOCAL_BIN) go install golang.org/x/tools/cmd/goimports@v0.1.9 && \
.PHONY: .deps
.deps:
$(info Install dependencies...)
go mod download
.PHONY: update-deps
update-deps: .deps .bin-deps
.PHONY: all
all: test build ## default scratch target: test and build
.PHONY: .test
.test:
$(info Running tests...)
go test ./...
.PHONY: test
test: .test ## run unit tests
# CMD_LIST список таргетов (через пробел) которые надо собрать
# можно переопределить в Makefile, по дефолту все из ./cmd кроме основного пакета
# пример переопределения CMD_LIST:= ./cmd/example ./cmd/app ./cmd/cron
ifndef CMD_LIST
CMD_LIST:=$(shell ls ./cmd | sed -e 's/^/.\/cmd\//')
endif
# определение текущий ос
ifndef HOSTOS
HOSTOS:=$(shell go env GOHOSTOS)
endif
# определение текущий архитектуры
ifndef HOSTARCH
HOSTARCH:=$(shell go env GOHOSTARCH)
endif
ifndef BIN_DIR
BIN_DIR=./bin
endif
# если нужно собрать только основной сервис, можно указать в Makefile SINGLE_BUILD=1
DISABLE_CMD_LIST_BUILD?=0
.PHONY: .build
.build:
# сначала собирается основной сервис, скачиваются нужные пакеты и все кладется в кеш для дальнейшего использования
$(info Building...)
@if [ -n "$(CMD_LIST)" ] && [ "$(DISABLE_CMD_LIST_BUILD)" != 1 ]; then\
$(BUILD_ENVPARMS) $(GOX_BIN) -output="$(BIN_DIR)" -osarch="$(HOSTOS)/$(HOSTARCH)" -ldflags "$(LDFLAGS)" $(CMD_LIST);\
fi
.PHONY: build
build: .build ## build project