forked from cadence-workflow/cadence-go-client
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
128 lines (102 loc) · 4.24 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
124
125
126
127
128
.PHONY: test bins clean cover cover_ci
# default target
default: test
IMPORT_ROOT := go.uber.org/cadence
THRIFT_GENDIR := .gen/go
THRIFTRW_SRC := idl/github.com/uber/cadence/cadence.thrift idl/github.com/uber/cadence/admin.thrift
# one or more thriftrw-generated file(s), to create / depend on generated code
THRIFTRW_OUT := $(THRIFT_GENDIR)/cadence/idl.go
TEST_ARG ?= -coverprofile=$(BUILD)/cover.out -race
# general build-product folder, cleaned as part of `make clean`
BUILD := .build
# general bins folder. NOT cleaned via `make clean`
BINS := .bins
# Automatically gather all srcs + a "sentinel" thriftrw output file (which forces generation).
ALL_SRC := $(THRIFTRW_OUT) $(shell \
find . -name "*.go" | \
grep -v \
-e vendor/ \
-e .gen/ \
-e .build/ \
)
# Files that needs to run lint. excludes testify mocks and the thrift sentinel.
LINT_SRC := $(filter-out ./mock% $(THRIFTRW_OUT),$(ALL_SRC))
THRIFTRW_VERSION := v1.11.0
YARPC_VERSION := v1.29.1
GOLINT_VERSION := 470b6b0bb3005eda157f0275e2e4895055396a81
# versioned tools. just change the version vars above, it'll automatically trigger a rebuild.
$(BINS)/versions/thriftrw-$(THRIFTRW_VERSION):
./versioned_go_build.sh go.uber.org/thriftrw $(THRIFTRW_VERSION) $@
$(BINS)/versions/yarpc-$(YARPC_VERSION):
./versioned_go_build.sh go.uber.org/yarpc $(YARPC_VERSION) encoding/thrift/thriftrw-plugin-yarpc $@
$(BINS)/versions/golint-$(GOLINT_VERSION):
./versioned_go_build.sh golang.org/x/lint $(GOLINT_VERSION) golint $@
# stable tool targets. depend on / execute these instead of the versioned ones.
# this versioned-to-nice-name thing is mostly because thriftrw depends on the yarpc
# bin to be named "thriftrw-plugin-yarpc".
$(BINS)/thriftrw: $(BINS)/versions/thriftrw-$(THRIFTRW_VERSION)
@ln -fs $(CURDIR)/$< $@
$(BINS)/thriftrw-plugin-yarpc: $(BINS)/versions/yarpc-$(YARPC_VERSION)
@ln -fs $(CURDIR)/$< $@
$(BINS)/golint: $(BINS)/versions/golint-$(GOLINT_VERSION)
@ln -fs $(CURDIR)/$< $@
vendor: vendor/glide.updated
vendor/glide.updated: glide.lock
glide install
touch vendor/glide.updated
$(THRIFTRW_OUT): $(THRIFTRW_SRC) $(BINS)/thriftrw $(BINS)/thriftrw-plugin-yarpc
@echo 'thriftrw: $(THRIFTRW_SRC)'
@mkdir -p $(dir $@)
@# needs to be able to find the thriftrw-plugin-yarpc bin in PATH
$(foreach source,$(THRIFTRW_SRC),\
PATH="$(BINS)" \
$(BINS)/thriftrw \
--plugin=yarpc \
--pkg-prefix=$(IMPORT_ROOT)/$(THRIFT_GENDIR) \
--out=$(THRIFT_GENDIR) $(source);)
clean_thrift:
rm -rf .gen
# `make copyright` or depend on "copyright" to force-run licensegen,
# or depend on $(BUILD)/copyright to let it run as needed.
copyright $(BUILD)/copyright: $(ALL_SRC)
@mkdir -p $(BUILD)
go run ./internal/cmd/tools/copyright/licensegen.go --verifyOnly
@touch $(BUILD)/copyright
$(BUILD)/dummy: vendor/glide.updated $(ALL_SRC)
go build -i -o $@ internal/cmd/dummy/dummy.go
test $(BUILD)/cover.out: $(BUILD)/copyright $(BUILD)/dummy $(ALL_SRC)
go test ./... $(TEST_ARG)
bins: $(ALL_SRC) $(BUILD)/copyright lint $(BUILD)/dummy
cover: $(BUILD)/cover.out
go tool cover -html=$(BUILD)/cover.out;
cover_ci: $(BUILD)/cover.out
goveralls -coverprofile=$(BUILD)/cover.out -service=travis-ci || echo -e "\x1b[31mCoveralls failed\x1b[m";
# golint fails to report many lint failures if it is only given a single file
# to work on at a time, and it can't handle multiple packages at once, *and*
# we can't exclude files from its checks, so for best results we need to give
# it a whitelist of every file in every package that we want linted, per package.
#
# so lint + this golint func works like:
# - iterate over all lintable dirs (outputs "./folder/")
# - find .go files in a dir (via wildcard, so not recursively)
# - filter to only files in LINT_SRC
# - if it's not empty, run golint against the list
define lint_if_present
test -n "$1" && $(BINS)/golint -set_exit_status $1
endef
lint: $(BINS)/golint $(ALL_SRC)
$(foreach pkg,\
$(sort $(dir $(LINT_SRC))), \
$(call lint_if_present,$(filter $(wildcard $(pkg)*.go),$(LINT_SRC))) || ERR=1; \
) test -z "$$ERR" || exit 1
@OUTPUT=`gofmt -l $(ALL_SRC) 2>&1`; \
if [ "$$OUTPUT" ]; then \
echo "Run 'make fmt'. gofmt must be run on the following files:"; \
echo "$$OUTPUT"; \
exit 1; \
fi
fmt:
@gofmt -w $(ALL_SRC)
clean:
rm -Rf $(BUILD)
rm -Rf .gen