@@ -36,29 +36,6 @@ GO_VERSION ?= $(shell $(GO) version)
3636GO_VERSION_NUMBER ?= $(word 3, $(GO_VERSION))
3737PRE_GO_111 ?= $(shell echo $(GO_VERSION_NUMBER) | grep -E 'go1\.(10|[0-9])\.')
3838
39- GOVENDOR :=
40- GO111MODULE :=
41- ifeq (, $(PRE_GO_111))
42- ifneq (,$(wildcard go.mod))
43- # Enforce Go modules support just in case the directory is inside GOPATH (and for Travis CI).
44- GO111MODULE := on
45-
46- ifneq (,$(wildcard vendor))
47- # Always use the local vendor/ directory to satisfy the dependencies.
48- GOOPTS := $(GOOPTS) -mod=vendor
49- endif
50- endif
51- else
52- ifneq (,$(wildcard go.mod))
53- ifneq (,$(wildcard vendor))
54- $(warning This repository requires Go >= 1.11 because of Go modules)
55- $(warning Some recipes may not work as expected as the current Go runtime is '$(GO_VERSION_NUMBER)')
56- endif
57- else
58- # This repository isn't using Go modules (yet).
59- GOVENDOR := $(FIRST_GOPATH)/bin/govendor
60- endif
61- endif
6239PROMU := $(FIRST_GOPATH)/bin/promu
6340pkgs = ./...
6441
@@ -78,17 +55,26 @@ ifneq ($(shell which gotestsum),)
7855endif
7956endif
8057
81- PROMU_VERSION ?= 0.12 .0
58+ PROMU_VERSION ?= 0.14 .0
8259PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz
8360
61+ SKIP_GOLANGCI_LINT :=
8462GOLANGCI_LINT :=
8563GOLANGCI_LINT_OPTS ?=
86- GOLANGCI_LINT_VERSION ?= v1.39.0
64+ GOLANGCI_LINT_VERSION ?= v1.51.2
8765# golangci-lint only supports linux, darwin and windows platforms on i386/amd64.
8866# windows isn't included here because of the path separator being different.
8967ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin))
9068 ifeq ($(GOHOSTARCH),$(filter $(GOHOSTARCH),amd64 i386))
91- GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint
69+ # If we're in CI and there is an Actions file, that means the linter
70+ # is being run in Actions, so we don't need to run it here.
71+ ifneq (,$(SKIP_GOLANGCI_LINT))
72+ GOLANGCI_LINT :=
73+ else ifeq (,$(CIRCLE_JOB))
74+ GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint
75+ else ifeq (,$(wildcard .github/workflows/golangci-lint.yml))
76+ GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint
77+ endif
9278 endif
9379endif
9480
@@ -105,6 +91,8 @@ BUILD_DOCKER_ARCHS = $(addprefix common-docker-,$(DOCKER_ARCHS))
10591PUBLISH_DOCKER_ARCHS = $(addprefix common-docker-publish-,$(DOCKER_ARCHS))
10692TAG_DOCKER_ARCHS = $(addprefix common-docker-tag-latest-,$(DOCKER_ARCHS))
10793
94+ SANITIZED_DOCKER_IMAGE_TAG := $(subst +,-,$(DOCKER_IMAGE_TAG))
95+
10896ifeq ($(GOHOSTARCH),amd64)
10997 ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin windows))
11098 # Only supported on amd64
@@ -118,7 +106,7 @@ endif
118106%: common-% ;
119107
120108.PHONY: common-all
121- common-all: precheck style check_license lint unused build test
109+ common-all: precheck style check_license lint yamllint unused build test
122110
123111.PHONY: common-style
124112common-style:
@@ -144,87 +132,72 @@ common-check_license:
144132.PHONY: common-deps
145133common-deps:
146134 @echo ">> getting dependencies"
147- ifdef GO111MODULE
148- GO111MODULE=$(GO111MODULE) $(GO) mod download
149- else
150- $(GO) get $(GOOPTS) -t ./...
151- endif
135+ $(GO) mod download
152136
153137.PHONY: update-go-deps
154138update-go-deps:
155139 @echo ">> updating Go dependencies"
156140 @for m in $$($(GO) list -mod=readonly -m -f '{{ if and (not .Indirect) (not .Main)}}{{.Path}}{{end}}' all); do \
157- $(GO) get $$m; \
141+ $(GO) get -d $$m; \
158142 done
159- GO111MODULE=$(GO111MODULE) $(GO) mod tidy
160- ifneq (,$(wildcard vendor))
161- GO111MODULE=$(GO111MODULE) $(GO) mod vendor
162- endif
143+ $(GO) mod tidy
163144
164145.PHONY: common-test-short
165146common-test-short: $(GOTEST_DIR)
166147 @echo ">> running short tests"
167- GO111MODULE=$(GO111MODULE) $(GOTEST) -short $(GOOPTS) $(pkgs)
148+ $(GOTEST) -short $(GOOPTS) $(pkgs)
168149
169150.PHONY: common-test
170151common-test: $(GOTEST_DIR)
171152 @echo ">> running all tests"
172- GO111MODULE=$(GO111MODULE) $(GOTEST) $(test-flags) $(GOOPTS) $(pkgs)
153+ $(GOTEST) $(test-flags) $(GOOPTS) $(pkgs)
173154
174155$(GOTEST_DIR):
175156 @mkdir -p $@
176157
177158.PHONY: common-format
178159common-format:
179160 @echo ">> formatting code"
180- GO111MODULE=$(GO111MODULE) $(GO) fmt $(pkgs)
161+ $(GO) fmt $(pkgs)
181162
182163.PHONY: common-vet
183164common-vet:
184165 @echo ">> vetting code"
185- GO111MODULE=$(GO111MODULE) $(GO) vet $(GOOPTS) $(pkgs)
166+ $(GO) vet $(GOOPTS) $(pkgs)
186167
187168.PHONY: common-lint
188169common-lint: $(GOLANGCI_LINT)
189170ifdef GOLANGCI_LINT
190171 @echo ">> running golangci-lint"
191- ifdef GO111MODULE
192172# 'go list' needs to be executed before staticcheck to prepopulate the modules cache.
193173# Otherwise staticcheck might fail randomly for some reason not yet explained.
194- GO111MODULE=$(GO111MODULE) $(GO) list -e -compiled -test=true -export=false -deps=true -find=false -tags= -- ./... > /dev/null
195- GO111MODULE=$(GO111MODULE) $(GOLANGCI_LINT) run $(GOLANGCI_LINT_OPTS) $(pkgs)
196- else
197- $(GOLANGCI_LINT) run $(pkgs)
174+ $(GO) list -e -compiled -test=true -export=false -deps=true -find=false -tags= -- ./... > /dev/null
175+ $(GOLANGCI_LINT) run $(GOLANGCI_LINT_OPTS) $(pkgs)
198176endif
177+
178+ .PHONY: common-yamllint
179+ common-yamllint:
180+ @echo ">> running yamllint on all YAML files in the repository"
181+ ifeq (, $(shell which yamllint))
182+ @echo "yamllint not installed so skipping"
183+ else
184+ yamllint .
199185endif
200186
201187# For backward-compatibility.
202188.PHONY: common-staticcheck
203189common-staticcheck: lint
204190
205191.PHONY: common-unused
206- common-unused: $(GOVENDOR)
207- ifdef GOVENDOR
208- @echo ">> running check for unused packages"
209- @$(GOVENDOR) list +unused | grep . && exit 1 || echo 'No unused packages'
210- else
211- ifdef GO111MODULE
192+ common-unused:
212193 @echo ">> running check for unused/missing packages in go.mod"
213- GO111MODULE=$(GO111MODULE) $(GO) mod tidy
214- ifeq (,$(wildcard vendor))
194+ $(GO) mod tidy
215195 @git diff --exit-code -- go.sum go.mod
216- else
217- @echo ">> running check for unused packages in vendor/"
218- GO111MODULE=$(GO111MODULE) $(GO) mod vendor
219- @git diff --exit-code -- go.sum go.mod vendor/
220- endif
221- endif
222- endif
223196
224197.PHONY: common-build
225198common-build: promu
226199 @echo ">> building binaries"
227- GO111MODULE=$(GO111MODULE) $(PROMU) build --prefix $(PREFIX) $(PROMU_BINARIES)
200+ $(PROMU) build --prefix $(PREFIX) $(PROMU_BINARIES)
228201
229202.PHONY: common-tarball
230203common-tarball: promu
@@ -234,7 +207,7 @@ common-tarball: promu
234207.PHONY: common-docker $(BUILD_DOCKER_ARCHS)
235208common-docker: $(BUILD_DOCKER_ARCHS)
236209$(BUILD_DOCKER_ARCHS): common-docker-%:
237- docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG )" \
210+ docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG )" \
238211 -f $(DOCKERFILE_PATH) \
239212 --build-arg ARCH="$*" \
240213 --build-arg OS="linux" \
@@ -243,19 +216,19 @@ $(BUILD_DOCKER_ARCHS): common-docker-%:
243216.PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS)
244217common-docker-publish: $(PUBLISH_DOCKER_ARCHS)
245218$(PUBLISH_DOCKER_ARCHS): common-docker-publish-%:
246- docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG )"
219+ docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG )"
247220
248221DOCKER_MAJOR_VERSION_TAG = $(firstword $(subst ., ,$(shell cat VERSION)))
249222.PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS)
250223common-docker-tag-latest: $(TAG_DOCKER_ARCHS)
251224$(TAG_DOCKER_ARCHS): common-docker-tag-latest-%:
252- docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG )" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest"
253- docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(DOCKER_IMAGE_TAG )" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"
225+ docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG )" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest"
226+ docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG )" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)"
254227
255228.PHONY: common-docker-manifest
256229common-docker-manifest:
257- DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG )" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(DOCKER_IMAGE_TAG ))
258- DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(DOCKER_IMAGE_TAG )"
230+ DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG )" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(SANITIZED_DOCKER_IMAGE_TAG ))
231+ DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG )"
259232
260233.PHONY: promu
261234promu: $(PROMU)
@@ -280,12 +253,6 @@ $(GOLANGCI_LINT):
280253 | sh -s -- -b $(FIRST_GOPATH)/bin $(GOLANGCI_LINT_VERSION)
281254endif
282255
283- ifdef GOVENDOR
284- .PHONY: $(GOVENDOR)
285- $(GOVENDOR):
286- GOOS= GOARCH= $(GO) get -u github.com/kardianos/govendor
287- endif
288-
289256.PHONY: precheck
290257precheck::
291258
0 commit comments