better handling of Go version
Some operations are sensitive to the version of Go that is used. In the past, formatting of source differed depending on the version. Right now it is the content of the vendor directory which changes when switch back and forth between 1.12 and 1.13. We don't want to impose a certain workflow on developers, like forcing all invocations of Go to run inside a container. If developers want that, they can set up their development environment accordingly. But we should warn about this aspect to raise awareness. "make" invocations which involve Go now compare against the projects Go version (specified in travis.yml) once at the beginning. This is only a warning because we don't know which future version will be compatible with the project. Vendor directory handling gets updated, too: verification is now a separate script (became too complex for make) and there is a corresponding "update-vendor.sh". In contrast to verification, updating vendor is not integrated into make and thus itself invokes the go version check.
This commit is contained in:
50
build.make
50
build.make
@@ -62,7 +62,7 @@ ARCH := $(if $(GOARCH),$(GOARCH),$(shell go env GOARCH))
|
||||
# Specific packages can be excluded from each of the tests below by setting the *_FILTER_CMD variables
|
||||
# to something like "| grep -v 'github.com/kubernetes-csi/project/pkg/foobar'". See usage below.
|
||||
|
||||
build-%:
|
||||
build-%: check-go-version-go
|
||||
mkdir -p bin
|
||||
CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-X main.version=$(REV) -extldflags "-static"' -o ./bin/$* ./cmd/$*
|
||||
if [ "$$ARCH" = "amd64" ]; then \
|
||||
@@ -97,7 +97,7 @@ push: $(CMDS:%=push-%)
|
||||
clean:
|
||||
-rm -rf bin
|
||||
|
||||
test:
|
||||
test: check-go-version-go
|
||||
|
||||
.PHONY: test-go
|
||||
test: test-go
|
||||
@@ -154,43 +154,7 @@ test-fmt:
|
||||
test: test-vendor
|
||||
test-vendor:
|
||||
@ echo; echo "### $@:"
|
||||
@ if [ -f Gopkg.toml ]; then \
|
||||
echo "Repo uses 'dep' for vendoring."; \
|
||||
case "$$(dep version 2>/dev/null | grep 'version *:')" in \
|
||||
*v0.[56789]*) dep check && echo "vendor up-to-date" || false;; \
|
||||
*) echo "skipping check, dep >= 0.5 required";; \
|
||||
esac; \
|
||||
elif [ -f go.mod ]; then \
|
||||
echo "Repo uses 'go mod'."; \
|
||||
if [ "$${JOB_NAME}" ] && \
|
||||
( [ "$${JOB_TYPE}" != "presubmit" ] || \
|
||||
[ $$( (git diff "${PULL_BASE_SHA}..HEAD" -- go.mod go.sum vendor release-tools; \
|
||||
git diff "${PULL_BASE_SHA}..HEAD" | grep -e '^@@.*@@ import (' -e '^[+-]import') | \
|
||||
wc -l) -eq 0 ] ); then \
|
||||
echo "Skipping vendor check because the Prow pre-submit job does not affect dependencies."; \
|
||||
elif ! GO111MODULE=on go mod tidy; then \
|
||||
echo "ERROR: vendor check failed."; \
|
||||
false; \
|
||||
elif [ $$(git status --porcelain -- go.mod go.sum | wc -l) -gt 0 ]; then \
|
||||
echo "ERROR: go module files *not* up-to-date, they did get modified by 'GO111MODULE=on go mod tidy':"; \
|
||||
git diff -- go.mod go.sum; \
|
||||
false; \
|
||||
elif [ -d vendor ]; then \
|
||||
if ! GO111MODULE=on go mod vendor; then \
|
||||
echo "ERROR: vendor check failed."; \
|
||||
false; \
|
||||
elif [ $$(git status --porcelain -- vendor | wc -l) -gt 0 ]; then \
|
||||
echo "ERROR: vendor directory *not* up-to-date, it did get modified by 'GO111MODULE=on go mod vendor':"; \
|
||||
git status -- vendor; \
|
||||
git diff -- vendor; \
|
||||
false; \
|
||||
else \
|
||||
echo "Go dependencies and vendor directory up-to-date."; \
|
||||
fi; \
|
||||
else \
|
||||
echo "Go dependencies up-to-date."; \
|
||||
fi; \
|
||||
fi
|
||||
@ ./release-tools/verify-vendor.sh
|
||||
|
||||
.PHONY: test-subtree
|
||||
test: test-subtree
|
||||
@@ -216,3 +180,11 @@ test-shellcheck:
|
||||
./release-tools/verify-shellcheck.sh "$$dir" || ret=1; \
|
||||
done; \
|
||||
exit $$ret
|
||||
|
||||
# Targets in the makefile can depend on check-go-version-<path to go binary>
|
||||
# to trigger a warning if the x.y version of that binary does not match
|
||||
# what the project uses. Make ensures that this is only checked once per
|
||||
# invocation.
|
||||
.PHONY: check-go-version-%
|
||||
check-go-version-%:
|
||||
./release-tools/verify-go-version.sh "$*"
|
||||
|
Reference in New Issue
Block a user