1export GO15VENDOREXPERIMENT=1
2
3PACKAGES := $(shell glide nv)
4
5GO_FILES := $(shell \
6	find . '(' -path '*/.*' -o -path './vendor' ')' -prune \
7	-o -name '*.go' -print | cut -b3-)
8
9.PHONY: install
10install:
11	glide --version || go get github.com/Masterminds/glide
12	glide install
13
14.PHONY: build
15build:
16	go build -i $(PACKAGES)
17
18.PHONY: test
19test:
20	go test -cover -race $(PACKAGES)
21
22.PHONY: gofmt
23gofmt:
24	$(eval FMT_LOG := $(shell mktemp -t gofmt.XXXXX))
25	@gofmt -e -s -l $(GO_FILES) > $(FMT_LOG) || true
26	@[ ! -s "$(FMT_LOG)" ] || (echo "gofmt failed:" | cat - $(FMT_LOG) && false)
27
28.PHONY: govet
29govet:
30	$(eval VET_LOG := $(shell mktemp -t govet.XXXXX))
31	@go vet $(PACKAGES) 2>&1 \
32		| grep -v '^exit status' > $(VET_LOG) || true
33	@[ ! -s "$(VET_LOG)" ] || (echo "govet failed:" | cat - $(VET_LOG) && false)
34
35.PHONY: golint
36golint:
37	@go get github.com/golang/lint/golint
38	$(eval LINT_LOG := $(shell mktemp -t golint.XXXXX))
39	@cat /dev/null > $(LINT_LOG)
40	@$(foreach pkg, $(PACKAGES), golint $(pkg) >> $(LINT_LOG) || true;)
41	@[ ! -s "$(LINT_LOG)" ] || (echo "golint failed:" | cat - $(LINT_LOG) && false)
42
43.PHONY: staticcheck
44staticcheck:
45	@go get honnef.co/go/tools/cmd/staticcheck
46	$(eval STATICCHECK_LOG := $(shell mktemp -t staticcheck.XXXXX))
47	@staticcheck $(PACKAGES) 2>&1 > $(STATICCHECK_LOG) || true
48	@[ ! -s "$(STATICCHECK_LOG)" ] || (echo "staticcheck failed:" | cat - $(STATICCHECK_LOG) && false)
49
50.PHONY: lint
51lint: gofmt govet golint staticcheck
52
53.PHONY: cover
54cover:
55	./scripts/cover.sh $(shell go list $(PACKAGES))
56	go tool cover -html=cover.out -o cover.html
57
58update-license:
59	@go get go.uber.org/tools/update-license
60	@update-license \
61		$(shell go list -json $(PACKAGES) | \
62			jq -r '.Dir + "/" + (.GoFiles | .[])')
63
64##############################################################################
65
66.PHONY: install_ci
67install_ci: install
68	go get github.com/wadey/gocovmerge
69	go get github.com/mattn/goveralls
70	go get golang.org/x/tools/cmd/cover
71
72.PHONY: test_ci
73test_ci: install_ci
74	./scripts/cover.sh $(shell go list $(PACKAGES))
75