diff --git a/Makefile b/Makefile index 7c5d2a47f..ef888f5bf 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ .PHONY: info info: $(MAKE) -C $(ROOTFS) $@ - + .PHONY: gocheck ifndef GOPATH $(error No GOPATH set) @@ -54,37 +54,19 @@ container: all $(MAKE) -C $(ROOTFS) $@ .PHONY: test-unit -test-unit: +test-unit: @echo Running tests... go test -v $(GO_PKGS) -.PHONY: .test-style -test-style: lint vet - @if [[ -z $(shell gofmt -e -l -s $(GO_DIRS) | wc -l) ]]; then \ - echo "gofmt check failed:"; gofmt -e -d -s $(GO_DIRS); exit 1; \ - fi - .PHONY: test-flake8 test-flake8: @echo Running flake8... flake8 expansion @echo ---------------- -.PHONY: lint -lint: - @echo Running golint... - @for i in $(GO_PKGS); do \ - golint $$i; \ - done - @echo ----------------- - -.PHONY: vet -vet: - @echo Running go vet... - @for i in $(GO_DIRS); do \ - go tool vet $$i; \ - done - @echo ----------------- +.PHONY: test-style +test-style: + @scripts/validate-go.sh HAS_GLIDE := $(shell command -v glide;) HAS_GOLINT := $(shell command -v golint;) diff --git a/scripts/validate-go.sh b/scripts/validate-go.sh new file mode 100755 index 000000000..264ff3e89 --- /dev/null +++ b/scripts/validate-go.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +# Copyright 2016 The Kubernetes Authors All rights reserved. +# +# 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. + +set -eo pipefail + +[[ "$TRACE" ]] && set -x + +readonly reset=$(tput sgr0) +readonly red=$(tput bold; tput setaf 1) +readonly green=$(tput bold; tput setaf 2) +readonly yellow=$(tput bold; tput setaf 3) + +exit_code=0 + +find_go_files() { + git ls-files '*.go' +} + +echo "==> Running golint..." +for pkg in $(glide nv); do + if golint_out=$(golint "$pkg" 2>&1); then + echo "${yellow}${golint_out}${reset}" + fi +done + +echo "==> Running go vet..." +if ! vet_out=$(go vet "$(glide nv)" 2>&1); then + echo + echo "${red}${vet_out}${reset}" + exit_code=1 +fi + +echo "==> Running gofmt..." +failed_fmt=$(find_go_files | xargs gofmt -s -l) +if [[ -n "${failed_fmt}" ]]; then + echo "${red}" + echo "gofmt check failed:" + echo "$failed_fmt" + echo "${reset}" + exit_code=1 +fi + +exit ${exit_code}