This repository has been archived by the owner on Oct 17, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
123 lines (100 loc) · 3.8 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
include $(SELF_DIR)/.ci/common.mk
SHELL=/bin/bash -o pipefail
html_report := coverage.html
test := .ci/test-cover.sh
convert-test-data := .ci/convert-test-data.sh
coverfile := cover.out
coverage_xml := coverage.xml
junit_xml := junit.xml
test_log := test.log
lint_check := .ci/lint.sh
metalint_check := .ci/metalint.sh
metalint_config := .metalinter.json
metalint_exclude := .excludemetalint
package_root := github.com/m3db/m3msg
gopath_prefix := $(GOPATH)/src
vendor_prefix := vendor
mockgen_package := github.com/golang/mock/mockgen
mocks_output_dir := generated/mocks/mocks
mocks_rules_dir := generated/mocks
protoc_go_package := github.com/golang/protobuf/protoc-gen-go
proto_output_dir := generated/proto
proto_rules_dir := generated/proto
auto_gen := .ci/auto-gen.sh
license_dir := .ci/uber-licence
license_node_modules := $(license_dir)/node_modules
BUILD := $(abspath ./bin)
LINUX_AMD64_ENV := GOOS=linux GOARCH=amd64 CGO_ENABLED=0
VENDOR_ENV := GO15VENDOREXPERIMENT=1
.PHONY: setup
setup:
mkdir -p $(BUILD)
.PHONY: lint
lint:
@which golint > /dev/null || go get -u github.com/golang/lint/golint
$(VENDOR_ENV) $(lint_check)
.PHONY: metalint
metalint: install-metalinter install-linter-badtime
@($(metalint_check) $(metalint_config) $(metalint_exclude) && echo "metalinted successfully!") || (echo "metalinter failed" && exit 1)
.PHONY: test-internal
test-internal:
@which go-junit-report > /dev/null || go get -u github.com/sectioneight/go-junit-report
@$(VENDOR_ENV) $(test) $(coverfile) | tee $(test_log)
.PHONY: test-integration
test-integration:
go test -v -tags=integration ./integration
.PHONY: test-xml
test-xml: test-internal
go-junit-report < $(test_log) > $(junit_xml)
gocov convert $(coverfile) | gocov-xml > $(coverage_xml)
@$(convert-test-data) $(coverage_xml)
@rm $(coverfile) &> /dev/null
.PHONY: test
test: test-internal
gocov convert $(coverfile) | gocov report
.PHONY: testhtml
testhtml: test-internal
gocov convert $(coverfile) | gocov-html > $(html_report) && open $(html_report)
@rm -f $(test_log) &> /dev/null
.PHONY: test-ci-unit
test-ci-unit: test-internal
@which goveralls > /dev/null || go get -u -f github.com/mattn/goveralls
goveralls -coverprofile=$(coverfile) -service=travis-ci || echo -e "\x1b[31mCoveralls failed\x1b[m"
.PHONY: test-ci-integration
test-ci-integration:
$(test_ci_integration)
.PHONY: install-mockgen
install-mockgen: install-vendor
@echo Installing mockgen
glide install
.PHONY: install-licence-bin
install-license-bin: install-vendor
@echo Installing node modules
[ -d $(license_node_modules) ] || (cd $(license_dir) && npm install)
.PHONY: install-proto-bin
install-proto-bin: install-vendor
@echo Installing protobuf binaries
@echo Note: the protobuf compiler v3.0.0 can be downloaded from https://github.com/google/protobuf/releases or built from source at https://github.com/google/protobuf.
go install $(package_root)/$(vendor_prefix)/$(protoc_go_package)
.PHONY: mock-gen
mock-gen: install-mockgen install-license-bin install-util-mockclean
@echo Generating mocks
PACKAGE=$(package_root) $(auto_gen) $(mocks_output_dir) $(mocks_rules_dir)
.PHONY: mock-gen-deps
mock-gen-no-deps:
@echo Generating mocks
PACKAGE=$(package_root) $(auto_gen) $(mocks_output_dir) $(mocks_rules_dir)
.PHONY: proto-gen
proto-gen: install-proto-bin install-license-bin
@echo Generating protobuf files
PACKAGE=$(package_root) $(auto_gen) $(proto_output_dir) $(proto_rules_dir)
.PHONY: all-gen
all-gen:
.PHONY: clean
clean:
@rm -f *.html *.xml *.out *.test
.PHONY: all
all: metalint test-ci-unit test-ci-integration
@echo make all successfully finished
.DEFAULT_GOAL := all