David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 1 | # Directory to place `go install`ed binaries into. |
| 2 | export GOBIN ?= $(shell pwd)/bin |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 3 | |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 4 | GOLINT = $(GOBIN)/golint |
| 5 | GEN_ATOMICINT = $(GOBIN)/gen-atomicint |
| 6 | GEN_ATOMICWRAPPER = $(GOBIN)/gen-atomicwrapper |
| 7 | STATICCHECK = $(GOBIN)/staticcheck |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 8 | |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 9 | GO_FILES ?= $(shell find . '(' -path .git -o -path vendor ')' -prune -o -name '*.go' -print) |
| 10 | |
| 11 | # Also update ignore section in .codecov.yml. |
| 12 | COVER_IGNORE_PKGS = \ |
| 13 | go.uber.org/atomic/internal/gen-atomicint \ |
| 14 | go.uber.org/atomic/internal/gen-atomicwrapper |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 15 | |
| 16 | .PHONY: build |
| 17 | build: |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 18 | go build ./... |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 19 | |
| 20 | .PHONY: test |
| 21 | test: |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 22 | go test -race ./... |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 23 | |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 24 | .PHONY: gofmt |
| 25 | gofmt: |
| 26 | $(eval FMT_LOG := $(shell mktemp -t gofmt.XXXXX)) |
| 27 | gofmt -e -s -l $(GO_FILES) > $(FMT_LOG) || true |
| 28 | @[ ! -s "$(FMT_LOG)" ] || (echo "gofmt failed:" && cat $(FMT_LOG) && false) |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 29 | |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 30 | $(GOLINT): |
| 31 | cd tools && go install golang.org/x/lint/golint |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 32 | |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 33 | $(STATICCHECK): |
| 34 | cd tools && go install honnef.co/go/tools/cmd/staticcheck |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 35 | |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 36 | $(GEN_ATOMICWRAPPER): $(wildcard ./internal/gen-atomicwrapper/*) |
| 37 | go build -o $@ ./internal/gen-atomicwrapper |
| 38 | |
| 39 | $(GEN_ATOMICINT): $(wildcard ./internal/gen-atomicint/*) |
| 40 | go build -o $@ ./internal/gen-atomicint |
| 41 | |
| 42 | .PHONY: golint |
| 43 | golint: $(GOLINT) |
| 44 | $(GOLINT) ./... |
| 45 | |
| 46 | .PHONY: staticcheck |
| 47 | staticcheck: $(STATICCHECK) |
| 48 | $(STATICCHECK) ./... |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 49 | |
| 50 | .PHONY: lint |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 51 | lint: gofmt golint staticcheck generatenodirty |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 52 | |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 53 | # comma separated list of packages to consider for code coverage. |
| 54 | COVER_PKG = $(shell \ |
| 55 | go list -find ./... | \ |
| 56 | grep -v $(foreach pkg,$(COVER_IGNORE_PKGS),-e "^$(pkg)$$") | \ |
| 57 | paste -sd, -) |
Matteo Scandolo | a428586 | 2020-12-01 18:10:10 -0800 | [diff] [blame] | 58 | |
David K. Bainbridge | 0663189 | 2021-08-19 13:07:00 +0000 | [diff] [blame] | 59 | .PHONY: cover |
| 60 | cover: |
| 61 | go test -coverprofile=cover.out -coverpkg $(COVER_PKG) -v ./... |
| 62 | go tool cover -html=cover.out -o cover.html |
| 63 | |
| 64 | .PHONY: generate |
| 65 | generate: $(GEN_ATOMICINT) $(GEN_ATOMICWRAPPER) |
| 66 | go generate ./... |
| 67 | |
| 68 | .PHONY: generatenodirty |
| 69 | generatenodirty: |
| 70 | @[ -z "$$(git status --porcelain)" ] || ( \ |
| 71 | echo "Working tree is dirty. Commit your changes first."; \ |
| 72 | exit 1 ) |
| 73 | @make generate |
| 74 | @status=$$(git status --porcelain); \ |
| 75 | [ -z "$$status" ] || ( \ |
| 76 | echo "Working tree is dirty after `make generate`:"; \ |
| 77 | echo "$$status"; \ |
| 78 | echo "Please ensure that the generated code is up-to-date." ) |