Makefile raw

   1  # Directory containing the Makefile.
   2  PROJECT_ROOT = $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
   3  
   4  export GOBIN ?= $(PROJECT_ROOT)/bin
   5  export PATH := $(GOBIN):$(PATH)
   6  
   7  GOVULNCHECK = $(GOBIN)/govulncheck
   8  BENCH_FLAGS ?= -cpuprofile=cpu.pprof -memprofile=mem.pprof -benchmem
   9  
  10  # Directories containing independent Go modules.
  11  MODULE_DIRS = . ./exp ./benchmarks ./zapgrpc/internal/test
  12  
  13  # Directories that we want to track coverage for.
  14  COVER_DIRS = . ./exp
  15  
  16  .PHONY: all
  17  all: lint test
  18  
  19  .PHONY: lint
  20  lint: golangci-lint tidy-lint license-lint
  21  
  22  .PHONY: golangci-lint
  23  golangci-lint:
  24  	@$(foreach mod,$(MODULE_DIRS), \
  25  		(cd $(mod) && \
  26  		echo "[lint] golangci-lint: $(mod)" && \
  27  		golangci-lint run --path-prefix $(mod)) &&) true
  28  
  29  .PHONY: tidy
  30  tidy:
  31  	@$(foreach dir,$(MODULE_DIRS), \
  32  		(cd $(dir) && go mod tidy) &&) true
  33  
  34  .PHONY: tidy-lint
  35  tidy-lint:
  36  	@$(foreach mod,$(MODULE_DIRS), \
  37  		(cd $(mod) && \
  38  		echo "[lint] tidy: $(mod)" && \
  39  		go mod tidy && \
  40  		git diff --exit-code -- go.mod go.sum) &&) true
  41  
  42  
  43  .PHONY: license-lint
  44  license-lint:
  45  	./checklicense.sh
  46  
  47  $(GOVULNCHECK):
  48  	cd tools && go install golang.org/x/vuln/cmd/govulncheck
  49  
  50  .PHONY: test
  51  test:
  52  	@$(foreach dir,$(MODULE_DIRS),(cd $(dir) && go test -race ./...) &&) true
  53  
  54  .PHONY: cover
  55  cover:
  56  	@$(foreach dir,$(COVER_DIRS), ( \
  57  		cd $(dir) && \
  58  		go test -race -coverprofile=cover.out -coverpkg=./... ./... \
  59  		&& go tool cover -html=cover.out -o cover.html) &&) true
  60  
  61  .PHONY: bench
  62  BENCH ?= .
  63  bench:
  64  	@$(foreach dir,$(MODULE_DIRS), ( \
  65  		cd $(dir) && \
  66  		go list ./... | xargs -n1 go test -bench=$(BENCH) -run="^$$" $(BENCH_FLAGS) \
  67  	) &&) true
  68  
  69  .PHONY: updatereadme
  70  updatereadme:
  71  	rm -f README.md
  72  	cat .readme.tmpl | go run internal/readme/readme.go > README.md
  73  
  74  .PHONY: vulncheck
  75  vulncheck: $(GOVULNCHECK)
  76  	$(GOVULNCHECK) ./...
  77