update Go mod support
It turned out that changes like https://github.com/kubernetes-csi/csi-lib-utils/pull/33 should better have been committed after `go mod tidy` because that adds some indirect dependencies in that example. The revised `test-vendor` checks for that and (just in case that this ever becomes desired) allows projects to not have a vendor directory when using `go mod`. How to use `go mod` properly gets documented in the README.md, because there are such pitfalls.
This commit is contained in:
55
build.make
55
build.make
@@ -125,6 +125,26 @@ test-fmt:
|
||||
# - the fabricated merge commit leaves go.mod, go.sum and vendor dir unchanged
|
||||
# - release-tools also didn't change (changing rules or Go version might lead to
|
||||
# a different result and thus must be tested)
|
||||
# - import statements not changed (because if they change, go.mod might have to be updated)
|
||||
#
|
||||
# "git diff" is intelligent enough to annotate changes inside the "import" block in
|
||||
# the start of the diff hunk:
|
||||
#
|
||||
# diff --git a/rpc/common.go b/rpc/common.go
|
||||
# index bb4a5c4..5fa4271 100644
|
||||
# --- a/rpc/common.go
|
||||
# +++ b/rpc/common.go
|
||||
# @@ -21,7 +21,6 @@ import (
|
||||
# "fmt"
|
||||
# "time"
|
||||
#
|
||||
# - "google.golang.org/grpc"
|
||||
# "google.golang.org/grpc/codes"
|
||||
# "google.golang.org/grpc/status"
|
||||
#
|
||||
# We rely on that to find such changes.
|
||||
#
|
||||
# Vendoring is optional when using go.mod.
|
||||
.PHONY: test-vendor
|
||||
test: test-vendor
|
||||
test-vendor:
|
||||
@@ -135,22 +155,37 @@ test-vendor:
|
||||
*v0.[56789]*) dep check && echo "vendor up-to-date" || false;; \
|
||||
*) echo "skipping check, dep >= 0.5 required";; \
|
||||
esac; \
|
||||
else \
|
||||
echo "Repo uses 'go mod' for vendoring."; \
|
||||
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 | wc -l) -eq 0 ] ); then \
|
||||
echo "Skipping vendor check because the Prow pre-submit job does not change vendoring."; \
|
||||
elif ! GO111MODULE=on go mod vendor; then \
|
||||
[ $$( (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 -- 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; \
|
||||
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;
|
||||
fi
|
||||
|
||||
.PHONY: test-subtree
|
||||
test: test-subtree
|
||||
|
Reference in New Issue
Block a user