Merge pull request #41 from pohly/go-version
Go version 1.13, helper scripts
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
|
# 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.
|
# to something like "| grep -v 'github.com/kubernetes-csi/project/pkg/foobar'". See usage below.
|
||||||
|
|
||||||
build-%:
|
build-%: check-go-version-go
|
||||||
mkdir -p bin
|
mkdir -p bin
|
||||||
CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-X main.version=$(REV) -extldflags "-static"' -o ./bin/$* ./cmd/$*
|
CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-X main.version=$(REV) -extldflags "-static"' -o ./bin/$* ./cmd/$*
|
||||||
if [ "$$ARCH" = "amd64" ]; then \
|
if [ "$$ARCH" = "amd64" ]; then \
|
||||||
@@ -97,7 +97,7 @@ push: $(CMDS:%=push-%)
|
|||||||
clean:
|
clean:
|
||||||
-rm -rf bin
|
-rm -rf bin
|
||||||
|
|
||||||
test:
|
test: check-go-version-go
|
||||||
|
|
||||||
.PHONY: test-go
|
.PHONY: test-go
|
||||||
test: test-go
|
test: test-go
|
||||||
@@ -154,43 +154,7 @@ test-fmt:
|
|||||||
test: test-vendor
|
test: test-vendor
|
||||||
test-vendor:
|
test-vendor:
|
||||||
@ echo; echo "### $@:"
|
@ echo; echo "### $@:"
|
||||||
@ if [ -f Gopkg.toml ]; then \
|
@ ./release-tools/verify-vendor.sh
|
||||||
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
|
|
||||||
|
|
||||||
.PHONY: test-subtree
|
.PHONY: test-subtree
|
||||||
test: test-subtree
|
test: test-subtree
|
||||||
@@ -216,3 +180,11 @@ test-shellcheck:
|
|||||||
./release-tools/verify-shellcheck.sh "$$dir" || ret=1; \
|
./release-tools/verify-shellcheck.sh "$$dir" || ret=1; \
|
||||||
done; \
|
done; \
|
||||||
exit $$ret
|
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 "$*"
|
||||||
|
@@ -6,7 +6,7 @@ git:
|
|||||||
depth: false
|
depth: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- go: 1.12.4
|
- go: 1.13.3
|
||||||
before_script:
|
before_script:
|
||||||
- mkdir -p bin
|
- mkdir -p bin
|
||||||
- wget https://github.com/golang/dep/releases/download/v0.5.1/dep-linux-amd64 -O bin/dep
|
- wget https://github.com/golang/dep/releases/download/v0.5.1/dep-linux-amd64 -O bin/dep
|
||||||
|
23
update-vendor.sh
Executable file
23
update-vendor.sh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright 2019 The Kubernetes Authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
if [ -f Gopkg.toml ]; then
|
||||||
|
echo "Repo uses 'dep' for vendoring."
|
||||||
|
(set -x; dep ensure)
|
||||||
|
elif [ -f go.mod ]; then
|
||||||
|
release-tools/verify-go-version.sh "go"
|
||||||
|
(set -x; env GO111MODULE=on go mod tidy && env GO111MODULE=on go mod vendor)
|
||||||
|
fi
|
51
verify-go-version.sh
Executable file
51
verify-go-version.sh
Executable file
@@ -0,0 +1,51 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright 2019 The Kubernetes Authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
GO="$1"
|
||||||
|
|
||||||
|
if [ ! "$GO" ]; then
|
||||||
|
echo >&2 "usage: $0 <path to go binary>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
die () {
|
||||||
|
echo "ERROR: $*"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
version=$("$GO" version) || die "determining version of $GO failed"
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
majorminor=$(echo "$version" | sed -e 's/.*go\([0-9]*\)\.\([0-9]*\).*/\1.\2/')
|
||||||
|
# shellcheck disable=SC2001
|
||||||
|
expected=$(grep "^ *- go:" "release-tools/travis.yml" | sed -e 's/.*go: *\([0-9]*\)\.\([0-9]*\).*/\1.\2/')
|
||||||
|
|
||||||
|
if [ "$majorminor" != "$expected" ]; then
|
||||||
|
cat >&2 <<EOF
|
||||||
|
|
||||||
|
======================================================
|
||||||
|
WARNING
|
||||||
|
|
||||||
|
This projects is tested with Go v$expected.
|
||||||
|
Your current Go version is v$majorminor.
|
||||||
|
This may or may not be close enough.
|
||||||
|
|
||||||
|
In particular test-gofmt and test-vendor
|
||||||
|
are known to be sensitive to the version of
|
||||||
|
Go.
|
||||||
|
======================================================
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
60
verify-vendor.sh
Executable file
60
verify-vendor.sh
Executable file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright 2019 The Kubernetes Authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
if [ -f Gopkg.toml ]; then
|
||||||
|
echo "Repo uses 'dep' for vendoring."
|
||||||
|
case "$(dep version 2>/dev/null | grep 'version *:')" in
|
||||||
|
*v0.[56789]*)
|
||||||
|
if dep check; then
|
||||||
|
echo "vendor up-to-date"
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*) echo "skipping check, dep >= 0.5 required";;
|
||||||
|
esac
|
||||||
|
elif [ -f go.mod ]; then
|
||||||
|
echo "Repo uses 'go mod'."
|
||||||
|
# shellcheck disable=SC2235
|
||||||
|
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 ! (set -x; env GO111MODULE=on go mod tidy); then
|
||||||
|
echo "ERROR: vendor check failed."
|
||||||
|
exit 1
|
||||||
|
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
|
||||||
|
exit 1
|
||||||
|
elif [ -d vendor ]; then
|
||||||
|
if ! (set -x; env GO111MODULE=on go mod vendor); then
|
||||||
|
echo "ERROR: vendor check failed."
|
||||||
|
exit 1
|
||||||
|
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
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "Go dependencies and vendor directory up-to-date."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Go dependencies up-to-date."
|
||||||
|
fi
|
||||||
|
fi
|
Reference in New Issue
Block a user