From 6d6487e288ba49bacfaed39b89253b4cb415666e Mon Sep 17 00:00:00 2001 From: James Nugent Date: Thu, 17 Dec 2015 12:21:43 -0500 Subject: [PATCH] Make gofmt errors fail build and add `make fmt` We may want to consider requiring `gofmt -s` compliance in future builds, but for now we just use `gofmt`. --- Makefile | 22 ++++++++++++++-------- scripts/build.sh | 2 ++ scripts/gofmtcheck.sh | 13 +++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) create mode 100755 scripts/gofmtcheck.sh diff --git a/Makefile b/Makefile index 5ecb1ce01..dfb301034 100644 --- a/Makefile +++ b/Makefile @@ -4,12 +4,12 @@ VETARGS?=-asmdecl -atomic -bool -buildtags -copylocks -methods -nilfunc -printf default: test # bin generates the releaseable binaries for Terraform -bin: generate +bin: fmtcheck generate @sh -c "'$(CURDIR)/scripts/build.sh'" # dev creates binaries for testing Terraform locally. These are put # into ./bin/ as well as $GOPATH/bin -dev: generate +dev: fmtcheck generate @TF_DEV=1 sh -c "'$(CURDIR)/scripts/build.sh'" quickdev: generate @@ -18,22 +18,22 @@ quickdev: generate # Shorthand for quickly building the core of Terraform. Note that some # changes will require a rebuild of everything, in which case the dev # target should be used. -core-dev: generate +core-dev: fmtcheck generate go install github.com/hashicorp/terraform # Shorthand for building and installing just one plugin for local testing. # Run as (for example): make plugin-dev PLUGIN=provider-aws -plugin-dev: generate +plugin-dev: fmtcheck generate go install github.com/hashicorp/terraform/builtin/bins/$(PLUGIN) mv $(GOPATH)/bin/$(PLUGIN) $(GOPATH)/bin/terraform-$(PLUGIN) # test runs the unit tests and vets the code -test: generate +test: fmtcheck generate TF_ACC= go test $(TEST) $(TESTARGS) -timeout=30s -parallel=4 @$(MAKE) vet # testacc runs acceptance tests -testacc: generate +testacc: fmtcheck generate @if [ "$(TEST)" = "./..." ]; then \ echo "ERROR: Set TEST to a specific package. For example,"; \ echo " make testacc TEST=./builtin/providers/aws"; \ @@ -42,7 +42,7 @@ testacc: generate TF_ACC=1 go test $(TEST) -v $(TESTARGS) -timeout 90m # testrace runs the race checker -testrace: generate +testrace: fmtcheck generate TF_ACC= go test -race $(TEST) $(TESTARGS) # updatedeps installs all the dependencies that Terraform needs to run @@ -84,4 +84,10 @@ vet: generate: go generate ./... -.PHONY: bin default generate test updatedeps vet +fmt: + gofmt -w . + +fmtcheck: + @sh -c "'$(CURDIR)/scripts/gofmtcheck.sh'" + +.PHONY: bin default generate test updatedeps vet fmt fmtcheck diff --git a/scripts/build.sh b/scripts/build.sh index 2553f5b6f..222e1879e 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -18,6 +18,7 @@ GIT_DIRTY=$(test -n "`git status --porcelain`" && echo "+CHANGES" || true) XC_ARCH=${XC_ARCH:-"386 amd64 arm"} XC_OS=${XC_OS:-linux darwin windows freebsd openbsd} + # Get dependencies unless running in quick mode if [ "${TF_QUICKDEV}x" == "x" ]; then echo "==> Getting dependencies..." @@ -30,6 +31,7 @@ rm -f bin/* rm -rf pkg/* mkdir -p bin/ + # If its dev mode, only build for ourself if [ "${TF_DEV}x" != "x" ]; then XC_OS=$(go env GOOS) diff --git a/scripts/gofmtcheck.sh b/scripts/gofmtcheck.sh new file mode 100755 index 000000000..315571042 --- /dev/null +++ b/scripts/gofmtcheck.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Check gofmt +echo "==> Checking that code complies with gofmt requirements..." +gofmt_files=$(gofmt -l .) +if [[ -n ${gofmt_files} ]]; then + echo 'gofmt needs running on the following files:' + echo "${gofmt_files}" + echo "You can use the command: \`make fmt\` to reformat code." + exit 1 +fi + +exit 0