Makefile raw
1 # Directory to put `go install`ed binaries in.
2 export GOBIN ?= $(shell pwd)/bin
3
4 GO_FILES := $(shell \
5 find . '(' -path '*/.*' -o -path './vendor' ')' -prune \
6 -o -name '*.go' -print | cut -b3-)
7
8 .PHONY: bench
9 bench: bin/benchstat bin/benchart
10 go test -timeout 3h -count=5 -run=xxx -bench=BenchmarkRateLimiter ./... | tee stat.txt
11 @$(GOBIN)/benchstat stat.txt
12 @$(GOBIN)/benchstat -csv stat.txt > stat.csv
13 @$(GOBIN)/benchart 'RateLimiter;xAxisType=log' stat.csv stat.html
14 @open stat.html
15
16 bin/benchstat: tools/go.mod
17 @cd tools && go install golang.org/x/perf/cmd/benchstat
18
19 bin/benchart: tools/go.mod
20 @cd tools && go install github.com/storozhukBM/benchart
21
22 bin/golint: tools/go.mod
23 @cd tools && go install golang.org/x/lint/golint
24
25 bin/staticcheck: tools/go.mod
26 @cd tools && go install honnef.co/go/tools/cmd/staticcheck
27
28 .PHONY: build
29 build:
30 go build ./...
31
32 .PHONY: cover
33 cover:
34 go test -coverprofile=cover.out -coverpkg=./... -v ./...
35 go tool cover -html=cover.out -o cover.html
36
37 .PHONY: gofmt
38 gofmt:
39 $(eval FMT_LOG := $(shell mktemp -t gofmt.XXXXX))
40 @gofmt -e -s -l $(GO_FILES) > $(FMT_LOG) || true
41 @[ ! -s "$(FMT_LOG)" ] || (echo "gofmt failed:" | cat - $(FMT_LOG) && false)
42
43 .PHONY: golint
44 golint: bin/golint
45 @$(GOBIN)/golint -set_exit_status ./...
46
47 .PHONY: lint
48 lint: gofmt golint staticcheck
49
50 .PHONY: staticcheck
51 staticcheck: bin/staticcheck
52 @$(GOBIN)/staticcheck ./...
53
54 .PHONY: test
55 test:
56 go test -race ./...
57