-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
Makefile
130 lines (102 loc) · 3.28 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
129
130
.DEFAULT_GOAL = test
.PHONY: FORCE
# enable consistent Go 1.12/1.13 GOPROXY behavior.
export GOPROXY = https://proxy.golang.org
BINARY = golangci-lint
ifeq ($(OS),Windows_NT)
BINARY := $(BINARY).exe
endif
# Build
build: $(BINARY)
.PHONY: build
build_race:
go build -race -o $(BINARY) ./cmd/golangci-lint
.PHONY: build_race
clean:
rm -f $(BINARY)
rm -f test/path
rm -f tools/Dracula.itermcolors
rm -f tools/svg-term
rm -rf tools/node_modules
.PHONY: clean
# Test
test: export GOLANGCI_LINT_INSTALLED = true
test: CGO_ENABLED=1
test: build
GL_TEST_RUN=1 ./$(BINARY) run -v
GL_TEST_RUN=1 go test -v -parallel 2 ./...
.PHONY: test
test_race: build_race
GL_TEST_RUN=1 ./$(BINARY) run -v --timeout=5m
.PHONY: test_race
# ex: T=output.go make test_integration
# the value of `T` is the name of a file from `test/testdata`
test_integration:
GL_TEST_RUN=1 go test -v ./test -count 1 -run TestSourcesFromTestdata/$T
.PHONY: test_integration
# ex: T=multiple-issues-fix.go make test_integration_fix
# the value of `T` is the name of a file from `test/testdata/fix`
test_integration_fix: build
GL_TEST_RUN=1 go test -v ./test -count 1 -run TestFix/$T
.PHONY: test_integration_fix
# Maintenance
fast_generate: assets/github-action-config.json
.PHONY: fast_generate
fast_check_generated:
$(MAKE) --always-make fast_generate
git checkout -- go.mod go.sum # can differ between go1.16 and go1.17
git diff --exit-code # check no changes
# Benchmark
# Benchmark with a local version
# LINTER=gosec VERSION=v1.59.0 make bench_local
bench_local: hyperfine
@:$(call check_defined, LINTER VERSION, 'missing parameter(s)')
@./scripts/bench/bench_local.sh $(LINTER) $(VERSION)
.PHONY: bench_local
# Benchmark between 2 existing versions
# make bench_version LINTER=gosec VERSION_OLD=v1.58.2 VERSION_NEW=v1.59.0
bench_version: hyperfine
@:$(call check_defined, LINTER VERSION_OLD VERSION_NEW, 'missing parameter(s)')
@./scripts/bench/bench_version.sh $(LINTER) $(VERSION_OLD) $(VERSION_NEW)
.PHONY: bench_version
hyperfine:
@which hyperfine > /dev/null || (echo "Please install hyperfine https://github.com/sharkdp/hyperfine#installation" && exit 1)
.PHONY: hyperfine
# Non-PHONY targets (real files)
$(BINARY): FORCE
go build -o $@ ./cmd/golangci-lint
docs/static/demo.gif: FORCE
vhs docs/golangci-lint.tape
assets/github-action-config.json: FORCE $(BINARY)
# go run ./scripts/gen_github_action_config/main.go $@
cd ./scripts/gen_github_action_config/; go run ./main.go ../../$@
go.mod: FORCE
go mod tidy
go mod verify
go.sum: go.mod
website_copy_jsonschema:
go run ./scripts/website/copy_jsonschema/
.PHONY: website_copy_jsonschema
website_expand_templates:
go run ./scripts/website/expand_templates/
.PHONY: website_expand_templates
website_dump_info:
go run ./scripts/website/dump_info/
.PHONY: website_dump_info
update_contributors_list:
cd .github/contributors && npm run all
# Functions
# Check that given variables are set and all have non-empty values,
# die with an error otherwise.
#
# Params:
# 1. Variable name(s) to test.
# 2. (optional) Error message to print.
#
# https://stackoverflow.com/a/10858332/8228109
check_defined = \
$(strip $(foreach 1,$1, \
$(call __check_defined,$1,$(strip $(value 2)))))
__check_defined = \
$(if $(value $1),, \
$(error Undefined $1$(if $2, ($2))))