diff --git a/Dockerfile b/Dockerfile index b54fda5614..3cf5eb5ce5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -105,6 +105,10 @@ RUN curl -sSL https://storage.googleapis.com/golang/go${GOFMT_VERSION}.$(go env # Grab Go's cover tool for dead-simple code coverage testing RUN go get golang.org/x/tools/cmd/cover +# Grab Go's vet tool for examining go code to find suspicious constructs +# and help prevent errors that the compiler might not catch +RUN go get golang.org/x/tools/cmd/vet + # TODO replace FPM with some very minimal debhelper stuff RUN gem install --no-rdoc --no-ri fpm --version 1.3.2 diff --git a/Makefile b/Makefile index 9bf1b16c94..7978b632ca 100644 --- a/Makefile +++ b/Makefile @@ -77,7 +77,7 @@ test-docker-py: build $(DOCKER_RUN_DOCKER) hack/make.sh binary test-docker-py validate: build - $(DOCKER_RUN_DOCKER) hack/make.sh validate-gofmt validate-dco validate-toml + $(DOCKER_RUN_DOCKER) hack/make.sh validate-dco validate-gofmt validate-toml validate-vet shell: build $(DOCKER_RUN_DOCKER) bash diff --git a/hack/make.sh b/hack/make.sh index 1ab1d8137e..3bcb265b3c 100755 --- a/hack/make.sh +++ b/hack/make.sh @@ -45,6 +45,7 @@ DEFAULT_BUNDLES=( validate-dco validate-gofmt validate-toml + validate-vet binary diff --git a/hack/make/validate-vet b/hack/make/validate-vet new file mode 100644 index 0000000000..994a6ac03d --- /dev/null +++ b/hack/make/validate-vet @@ -0,0 +1,22 @@ +#!/bin/bash + +source "$(dirname "$BASH_SOURCE")/.validate" + +IFS=$'\n' +files=( $(validate_diff --diff-filter=ACMR --name-only -- '*.go' | grep -v '^vendor/' || true) ) +unset IFS + +for f in "${files[@]}"; do + # we use "git show" here to validate that what's committed is vetted + failedVet=$(git show "$VALIDATE_HEAD:$f" | go vet) + if [ $failedVet ]; then + fails=yes + echo $failedVet + fi +done + +if [ $fails ]; then + echo 'Please review and resolve the above issues and commit the result.' +else + echo 'All Go source files have been vetted.' +fi