...
1
2GOLANGCI_LINT_VERSION=v1.42.1
3
4LINTER=./bin/golangci-lint
5LINTER_VERSION_FILE=./bin/.golangci-lint-version-$(GOLANGCI_LINT_VERSION)
6
7ALL_SOURCES := $(shell find * -type f -name "*.go")
8
9COVERAGE_PROFILE_RAW=./build/coverage_raw.out
10COVERAGE_PROFILE_RAW_HTML=./build/coverage_raw.html
11COVERAGE_PROFILE_FILTERED=./build/coverage.out
12COVERAGE_PROFILE_FILTERED_HTML=./build/coverage.html
13COVERAGE_ENFORCER_FLAGS=-skipcode "// COVERAGE" -packagestats -filestats -showcode
14
15TEST_BINARY=./build/go-sdk-events.test
16ALLOCATIONS_LOG=./build/allocations.out
17
18.PHONY: build clean test test-coverage lint
19
20build:
21 go build ./...
22
23clean:
24 go clean
25
26test:
27 go test -race ./...
28
29test-coverage: $(COVERAGE_PROFILE_RAW)
30 go run github.com/launchdarkly-labs/go-coverage-enforcer@latest $(COVERAGE_ENFORCER_FLAGS) -outprofile $(COVERAGE_PROFILE_FILTERED) $(COVERAGE_PROFILE_RAW)
31 go tool cover -html $(COVERAGE_PROFILE_FILTERED) -o $(COVERAGE_PROFILE_FILTERED_HTML)
32 go tool cover -html $(COVERAGE_PROFILE_RAW) -o $(COVERAGE_PROFILE_RAW_HTML)
33
34$(COVERAGE_PROFILE_RAW): $(ALL_SOURCES)
35 @mkdir -p ./build
36 go test -coverprofile $(COVERAGE_PROFILE_RAW) ./... >/dev/null
37
38benchmarks: build
39 @mkdir -p ./build
40 go test -benchmem '-run=^$$' '-bench=.*' ./... | tee build/benchmarks.out
41 @if grep <build/benchmarks.out 'NoAlloc.*[1-9][0-9]* allocs/op'; then echo "Unexpected heap allocations detected in benchmarks!"; exit 1; fi
42
43# See CONTRIBUTING.md regarding the use of the benchmark-allocs target. Notes about this implementation:
44# 1. We precompile the test code because otherwise the allocation traces will include the actions of the compiler itself.
45# 2. "benchtime=3x" means the run count (b.N) is set to 3. Setting it to 1 would produce less redundant output, but the
46# benchmark statistics seem to be less reliable if the run count is less than 3 - they will report a higher allocation
47# count per run, possibly because the first run
48benchmark-allocs:
49 @if [ -z "$$BENCHMARK" ]; then echo "must specify BENCHMARK=" && exit 1; fi
50 @mkdir -p ./build
51 @echo Precompiling test code to $(TEST_BINARY)
52 @go test -c -o $(TEST_BINARY) >/dev/null 2>&1
53 @echo "Generating heap allocation traces in $(ALLOCATIONS_LOG) for benchmark(s): $$BENCHMARK"
54 @echo "You should see some benchmark result output; if you do not, you may have misspelled the benchmark name/regex"
55 @GODEBUG=allocfreetrace=1 $(TEST_BINARY) -test.run=none -test.bench=$$BENCHMARK -test.benchmem -test.benchtime=1x 2>$(ALLOCATIONS_LOG)
56
57$(LINTER_VERSION_FILE):
58 rm -f $(LINTER)
59 curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s $(GOLANGCI_LINT_VERSION)
60 touch $(LINTER_VERSION_FILE)
61
62lint: $(LINTER_VERSION_FILE)
63 $(LINTER) run ./...
View as plain text