Makefile raw
1 -include .env
2 BIN_DIR := $(GOPATH)/bin
3
4 INTEGRATION_DIR := ./test/integration
5 FIXTURES_DIR := $(INTEGRATION_DIR)/fixtures
6
7 TEST_TAGS := integration
8 TEST_TIMEOUT := 5h
9
10 SKIP_DOCKER ?= 0
11 GOLANGCILINT := golangci-lint
12 GOLANGCILINT_IMG := golangci/golangci-lint:latest
13 GOLANGCILINT_ARGS := run
14
15 LINODE_URL ?= https://api.linode.com/
16
17 PACKAGES := $(shell go list ./... | grep -v integration)
18
19 SKIP_LINT ?= 0
20
21 .PHONY: build vet test refresh-fixtures clean clean-cov clean-fixtures lint run_fixtures sanitize fixtures godoc test-int test-unit test-smoke testcov tidy
22
23 test: build lint test-unit test-int
24
25 citest: lint test
26
27 test-unit:
28 go test -v $(PACKAGES) $(TEST_ARGS)
29 cd test && make test-unit
30
31 test-int:
32 cd test && make test-int TEST_TIMEOUT=$(TEST_TIMEOUT)
33
34 testcov-func:
35 @go test -v -coverprofile="coverage.txt" . > /dev/null 2>&1
36 @go tool cover -func coverage.txt
37
38 # Note for WSL Users, set BROWSER=wslview
39 testcov-html:
40 @go test -v -coverprofile="coverage.txt" . > /dev/null 2>&1
41 @go tool cover -html coverage.txt
42
43 test-smoke:
44 cd test && make test-smoke TEST_TIMEOUT=$(TEST_TIMEOUT)
45
46 build: vet lint
47 go build ./...
48 cd k8s && go build ./...
49
50 vet:
51 go vet ./...
52 cd k8s && go vet ./...
53
54 lint:
55 ifeq ($(SKIP_LINT), 1)
56 @echo Skipping lint stage
57 else ifeq ($(SKIP_DOCKER), 1)
58 $(GOLANGCILINT) $(GOLANGCILINT_ARGS)
59 else
60 docker run --rm -v $(shell pwd):/app -w /app $(GOLANGCILINT_IMG) $(GOLANGCILINT) $(GOLANGCILINT_ARGS)
61 endif
62
63 clean: clean-cov
64
65 clean-cov:
66 @-rm -f coverage.txt
67
68 clean-fixtures:
69 @-rm -f fixtures/*.yaml
70
71 refresh-fixtures: clean-fixtures fixtures
72
73 run_fixtures:
74 @echo "* Running fixtures"
75 cd $(INTEGRATION_DIR) && \
76 LINODE_FIXTURE_MODE="record" \
77 LINODE_TOKEN=$(LINODE_TOKEN) \
78 LINODE_API_VERSION="v4beta" \
79 LINODE_URL="$(LINODE_URL)" \
80 GO111MODULE="on" \
81 go test -timeout=$(TEST_TIMEOUT) -v $(TEST_ARGS)
82
83 sanitize:
84 @echo "* Sanitizing fixtures"
85 @for yaml in $(FIXTURES_DIR)/*yaml; do \
86 sed -E -i.bak \
87 -e 's_stats/20[0-9]{2}/[1-9][0-2]?_stats/2018/1_g' \
88 -e 's/(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/1234::5678/g' \
89 $$yaml; \
90 done
91 @find $(FIXTURES_DIR) -name *yaml.bak -exec rm {} \;
92
93 fixtures: run_fixtures sanitize
94
95 godoc:
96 @godoc -http=:6060
97
98 tidy:
99 go mod tidy
100 cd k8s && go mod tidy
101 cd test && go mod tidy
102