@@ -37,8 +37,8 @@ vet: ## Run go vet against code.
3737 go vet ./...
3838
3939.PHONY : lint
40- lint : golangci-lint # # Run golangci-lint on the code.
41- $(GOLANGCILINT ) run ./...
40+ lint : golangci-lint # # Run golangci-lint linter
41+ $(GOLANGCI_LINT ) run
4242
4343.PHONY : check-license
4444check-license : addlicense # # Check that every file has a license header present.
@@ -69,30 +69,46 @@ $(LOCALBIN):
6969ADDLICENSE ?= $(LOCALBIN ) /addlicense
7070GOIMPORTS ?= $(LOCALBIN ) /goimports
7171MOCKGEN ?= $(LOCALBIN ) /mockgen
72- GOLANGCILINT ?= $(LOCALBIN ) /golangci-lint
72+ GOLANGCI_LINT ?= $(LOCALBIN ) /golangci-lint
7373
7474# # Tool Versions
7575ADDLICENSE_VERSION ?= v1.1.1
76- GOIMPORTS_VERSION ?= v0.31 .0
76+ GOIMPORTS_VERSION ?= v0.34 .0
7777MOCKGEN_VERSION ?= v0.5.2
78- GOLANGCILINT_VERSION ?= v2.1
78+ GOLANGCI_LINT_VERSION ?= v2.1
7979
8080.PHONY : addlicense
8181addlicense : $(ADDLICENSE ) # # Download addlicense locally if necessary.
8282$(ADDLICENSE ) : $(LOCALBIN )
83- test -s $( LOCALBIN ) /addlicense || GOBIN= $( LOCALBIN ) go install github.com/google/addlicense@ $(ADDLICENSE_VERSION )
83+ $( call go-install-tool, $( ADDLICENSE ) , github.com/google/addlicense, $(ADDLICENSE_VERSION ) )
8484
8585.PHONY : goimports
8686goimports : $(GOIMPORTS ) # # Download goimports locally if necessary.
8787$(GOIMPORTS ) : $(LOCALBIN )
88- test -s $( LOCALBIN ) /goimports || GOBIN= $( LOCALBIN ) go install golang.org/x/tools/cmd/goimports@ $(GOIMPORTS_VERSION )
88+ $( call go-install-tool, $( GOIMPORTS ) , golang.org/x/tools/cmd/goimports, $(GOIMPORTS_VERSION ) )
8989
9090.PHONY : mockgen
9191mockgen : $(MOCKGEN ) # # Download mockgen locally if necessary.
9292$(MOCKGEN ) : $(LOCALBIN )
93- test -s $(LOCALBIN ) /mockgen || GOBIN=$(LOCALBIN ) go install go.uber.org/mock/mockgen@$(MOCKGEN_VERSION )
94-
95- .PHONY : goimports
96- golangci-lint : $(GOLANGCILINT ) # # Download golangci-lint locally if necessary.
97- $(GOLANGCILINT ) : $(LOCALBIN )
98- test -s $(LOCALBIN ) /golangci-lint || GOBIN=$(LOCALBIN ) go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@$(GOLANGCILINT_VERSION )
93+ $(call go-install-tool,$(MOCKGEN ) ,go.uber.org/mock/mockgen,$(MOCKGEN_VERSION ) )
94+
95+ .PHONY : golangci-lint
96+ golangci-lint : $(GOLANGCI_LINT ) # # Download golangci-lint locally if necessary.
97+ $(GOLANGCI_LINT ) : $(LOCALBIN )
98+ $(call go-install-tool,$(GOLANGCI_LINT ) ,github.com/golangci/golangci-lint/v2/cmd/golangci-lint,${GOLANGCI_LINT_VERSION})
99+
100+ # go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
101+ # $1 - target path with name of binary
102+ # $2 - package url which can be installed
103+ # $3 - specific version of package
104+ define go-install-tool
105+ @[ -f "$(1 ) -$(3 ) " ] || { \
106+ set -e; \
107+ package=$(2 ) @$(3 ) ;\
108+ echo "Downloading $${package}" ;\
109+ rm -f $(1 ) || true ;\
110+ GOBIN=$(LOCALBIN ) go install $${package} ;\
111+ mv $(1 ) $(1 ) -$(3 ) ;\
112+ } ;\
113+ ln -sf $(1 ) -$(3 ) $(1 )
114+ endef
0 commit comments