github.com/kamilsk/grafaman@v1.0.0-beta3.0.20201207211242-3e0d02dd84ce/Makefile (about) 1 # sourced by https://github.com/octomation/makefiles 2 3 .DEFAULT_GOAL = test-with-coverage 4 GIT_HOOKS = post-merge pre-commit pre-push 5 GO_VERSIONS = 1.14 1.15 6 7 SHELL := /bin/bash -euo pipefail # `explain set -euo pipefail` 8 9 OS = $(shell uname -s | tr '[:upper:]' '[:lower:]') 10 ARCH = $(shell uname -m | tr '[:upper:]' '[:lower:]') 11 12 GO111MODULE = on 13 GOFLAGS = -mod=vendor 14 GOPRIVATE = go.octolab.net 15 GOPROXY = direct 16 LOCAL = $(MODULE) 17 MODULE = `GO111MODULE=on go list -m $(GOFLAGS)` 18 PACKAGES = `GO111MODULE=on go list $(GOFLAGS) ./...` 19 PATHS = $(shell echo $(PACKAGES) | sed -e "s|$(MODULE)/||g" | sed -e "s|$(MODULE)|$(PWD)/*.go|g") 20 TIMEOUT = 1s 21 22 ifeq (, $(PACKAGES)) 23 PACKAGES = $(MODULE) 24 endif 25 26 ifeq (, $(PATHS)) 27 PATHS = . 28 endif 29 30 export GO111MODULE := $(GO111MODULE) 31 export GOFLAGS := $(GOFLAGS) 32 export GOPRIVATE := $(GOPRIVATE) 33 export GOPROXY := $(GOPROXY) 34 35 go-env: 36 @echo "GO111MODULE: `go env GO111MODULE`" 37 @echo "GOFLAGS: $(strip `go env GOFLAGS`)" 38 @echo "GOPRIVATE: $(strip `go env GOPRIVATE`)" 39 @echo "GOPROXY: $(strip `go env GOPROXY`)" 40 @echo "LOCAL: $(LOCAL)" 41 @echo "MODULE: $(MODULE)" 42 @echo "PACKAGES: $(PACKAGES)" 43 @echo "PATHS: $(strip $(PATHS))" 44 @echo "TIMEOUT: $(TIMEOUT)" 45 .PHONY: go-env 46 47 deps-check: 48 @go mod verify 49 @if command -v egg > /dev/null; then \ 50 egg deps check license; \ 51 egg deps check version; \ 52 fi 53 .PHONY: deps-check 54 55 deps-clean: 56 @go clean -modcache 57 .PHONY: deps-clean 58 59 deps-fetch: 60 @go mod download 61 @if [[ "`go env GOFLAGS`" =~ -mod=vendor ]]; then go mod vendor; fi 62 .PHONY: deps-fetch 63 64 deps-tidy: 65 @go mod tidy 66 @if [[ "`go env GOFLAGS`" =~ -mod=vendor ]]; then go mod vendor; fi 67 .PHONY: deps-tidy 68 69 deps-update: selector = '{{if not (or .Main .Indirect)}}{{.Path}}{{end}}' 70 deps-update: 71 @if command -v egg > /dev/null; then \ 72 packages="`egg deps list`"; \ 73 else \ 74 packages="`go list -f $(selector) -m -mod=readonly all`"; \ 75 fi; \ 76 if [[ "`go version`" == *1.1[1-3]* ]]; then \ 77 go get -d -mod= -u $$packages; \ 78 else \ 79 go get -d -u $$packages; \ 80 fi; \ 81 if [[ "`go env GOFLAGS`" =~ -mod=vendor ]]; then go mod vendor; fi 82 .PHONY: deps-update 83 84 deps-update-all: 85 @if [[ "`go version`" == *1.1[1-3]* ]]; then \ 86 go get -d -mod= -u ./...; \ 87 else \ 88 go get -d -u ./...; \ 89 fi; \ 90 if [[ "`go env GOFLAGS`" =~ -mod=vendor ]]; then go mod vendor; fi 91 .PHONY: deps-update-all 92 93 go-fmt: 94 @if command -v goimports > /dev/null; then \ 95 goimports -local $(LOCAL) -ungroup -w $(PATHS); \ 96 else \ 97 gofmt -s -w $(PATHS); \ 98 fi 99 .PHONY: go-fmt 100 101 go-generate: 102 @go generate $(PACKAGES) 103 .PHONY: go-generate 104 105 lint: 106 @golangci-lint run ./... 107 @looppointer ./... 108 .PHONY: lint 109 110 test: 111 @go test -race -timeout $(TIMEOUT) $(PACKAGES) 112 .PHONY: test 113 114 test-clean: 115 @go clean -testcache 116 .PHONY: test-clean 117 118 test-with-coverage: 119 @go test -cover -timeout $(TIMEOUT) $(PACKAGES) | column -t | sort -r 120 .PHONY: test-with-coverage 121 122 test-with-coverage-profile: 123 @go test -cover -covermode count -coverprofile c.out -timeout $(TIMEOUT) $(PACKAGES) 124 .PHONY: test-with-coverage-profile 125 126 test-with-coverage-report: test-with-coverage-profile 127 @go tool cover -html c.out 128 .PHONY: test-with-coverage-report 129 130 BINARY = $(BINPATH)/$(shell basename $(MAIN)) 131 BINPATH = $(PWD)/bin/$(OS)/$(ARCH) 132 COMMIT = $(shell git rev-parse --verify HEAD) 133 DATE = $(shell date +%Y-%m-%dT%T%Z) 134 LDFLAGS = -ldflags "-s -w -X main.commit=$(COMMIT) -X main.date=$(DATE)" 135 MAIN = $(MODULE) 136 137 export GOBIN := $(BINPATH) 138 export PATH := $(BINPATH):$(PATH) 139 140 build-env: 141 @echo "BINARY: $(BINARY)" 142 @echo "BINPATH: $(BINPATH)" 143 @echo "COMMIT: $(COMMIT)" 144 @echo "DATE: $(DATE)" 145 @echo "GOBIN: `go env GOBIN`" 146 @echo "LDFLAGS: $(LDFLAGS)" 147 @echo "MAIN: $(MAIN)" 148 @echo "PATH: $$PATH" 149 .PHONY: build-env 150 151 build: 152 @go build -o $(BINARY) $(LDFLAGS) $(MAIN) 153 .PHONY: build 154 155 build-clean: 156 @rm -f $(BINARY) 157 .PHONY: build-clean 158 159 install: 160 @go install $(LDFLAGS) $(MAIN) 161 .PHONY: install 162 163 install-clean: 164 @go clean -cache 165 .PHONY: install-clean 166 167 dist-check: 168 @goreleaser --snapshot --skip-publish --rm-dist 169 .PHONY: dist-check 170 171 dist-dump: 172 @godownloader .goreleaser.yml > bin/install 173 .PHONY: dist-dump 174 175 TOOLFLAGS = -mod= 176 177 tools-env: 178 @echo "GOBIN: `go env GOBIN`" 179 @echo "TOOLFLAGS: $(TOOLFLAGS)" 180 .PHONY: tools-env 181 182 toolset: 183 @( \ 184 GOFLAGS=$(TOOLFLAGS); \ 185 cd tools; \ 186 go mod tidy; \ 187 go mod download; \ 188 if [[ "`go env GOFLAGS`" =~ -mod=vendor ]]; then go mod vendor; fi; \ 189 go generate tools.go; \ 190 ) 191 .PHONY: toolset 192 193 ifdef GIT_HOOKS 194 195 hooks: unhook 196 @for hook in $(GIT_HOOKS); do cp githooks/$$hook .git/hooks/; done 197 .PHONY: hooks 198 199 unhook: 200 @ls .git/hooks | grep -v .sample | sed 's|.*|.git/hooks/&|' | xargs rm -f || true 201 .PHONY: unhook 202 203 define hook_tpl 204 $(1): 205 @githooks/$(1) 206 .PHONY: $(1) 207 endef 208 209 render_hook_tpl = $(eval $(call hook_tpl,$(hook))) 210 $(foreach hook,$(GIT_HOOKS),$(render_hook_tpl)) 211 212 endif 213 214 ifdef GO_VERSIONS 215 216 define go_tpl 217 go$(1): 218 @docker run \ 219 --rm -it \ 220 -v $(PWD):/src \ 221 -w /src \ 222 golang:$(1) bash 223 .PHONY: go$(1) 224 endef 225 226 render_go_tpl = $(eval $(call go_tpl,$(version))) 227 $(foreach version,$(GO_VERSIONS),$(render_go_tpl)) 228 229 endif 230 231 232 init: deps test lint hooks 233 @git config core.autocrlf input 234 .PHONY: init 235 236 clean: build-clean deps-clean install-clean test-clean 237 .PHONY: clean 238 239 deps: deps-fetch toolset 240 .PHONY: deps 241 242 env: go-env build-env tools-env 243 .PHONY: env 244 245 format: go-fmt 246 .PHONY: format 247 248 generate: go-generate format 249 .PHONY: generate 250 251 refresh: deps-tidy update deps generate format test build 252 .PHONY: refresh 253 254 update: deps-update 255 .PHONY: update