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