terraform/Makefile

92 lines
2.7 KiB
Makefile
Raw Normal View History

2014-05-23 01:56:28 +02:00
TEST?=./...
Makefile: add vet target Add a vet target in order to catch suspicious constructs reported by go vet. Vet has successfully detected problems in the past, for example, see 482460c4c8a663ec2882bbddbb32da8e990de080 fc36b1cd9490233a3d220365fac3bc65679fe6de 68a41035a92606b6943c517fd874b54e8237485f 7b704fb77d6430cde07703f7cc8574484630d85c 4f3f85b1651d0c34c27c79cdbb772ecc07d6665a 95fa353ee928a42de1923d0f961e40d4ce201443 4bfe18b40d0749c073b3c4ba23f5c908436815d0 Some vet flags are noisy. In particular, the following flags reports a large amount of generally unharmful constructs: -assign: check for useless assignments -composites: check that composite literals used field-keyed elements -shadow: check for shadowed variables -shadowstrict: whether to be strict about shadowing -unreachable: check for unreachable code In order to skip running the flags mentioned above, vet is invoked on a directory basis with 'go tool vet .' since package- level type-checking with 'go vet' doesn't accept flags. Hence, each file is vetted in isolation, which is weaker than package-level type-checking. But nevertheless, it might catch suspicious constructs that pose a real problem. The vet target runs the following flags on the entire repo: -asmdecl: check assembly against Go declarations -atomic: check for common mistaken usages of the sync/atomic package -bool: check for mistakes involving boolean operators -buildtags: check that +build tags are valid -copylocks: check that locks are not passed by value -methods: check that canonically named methods are canonically defined -nilfunc: check for comparisons between functions and nil -printf: check printf-like invocations -rangeloops: check that range loop variables are used correctly -shift: check for useless shifts -structtags: check that struct field tags have canonical format and apply to exported fields as needed -unsafeptr: check for misuse of unsafe.Pointer Now and then, it might make sense to check the output of VETARGS=-unreachable make vet manually, just in case it detects several lines of dead code etc.
2015-01-16 22:20:32 +01:00
VETARGS?=-asmdecl -atomic -bool -buildtags -copylocks -methods -nilfunc -printf -rangeloops -shift -structtags -unsafeptr
2014-05-23 01:56:28 +02:00
default: test
2015-01-27 03:19:22 +01:00
# bin generates the releaseable binaries for Terraform
2015-01-13 19:32:03 +01:00
bin: generate
@sh -c "'$(CURDIR)/scripts/build.sh'"
2015-01-27 03:19:22 +01:00
# dev creates binaries for testing Terraform locally. These are put
# into ./bin/ as well as $GOPATH/bin
2015-01-13 19:32:03 +01:00
dev: generate
@TF_DEV=1 sh -c "'$(CURDIR)/scripts/build.sh'"
2014-07-28 19:53:36 +02:00
quickdev: generate
@TF_QUICKDEV=1 TF_DEV=1 sh -c "'$(CURDIR)/scripts/build.sh'"
# 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
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
go install github.com/hashicorp/terraform/builtin/bins/$(PLUGIN)
mv $(GOPATH)/bin/$(PLUGIN) $(GOPATH)/bin/terraform-$(PLUGIN)
release: updatedeps
gox
@$(MAKE) bin
2015-01-27 03:19:22 +01:00
# test runs the unit tests and vets the code
2015-01-13 19:32:03 +01:00
test: generate
TF_ACC= go test $(TEST) $(TESTARGS) -timeout=30s -parallel=4
Makefile: add vet target Add a vet target in order to catch suspicious constructs reported by go vet. Vet has successfully detected problems in the past, for example, see 482460c4c8a663ec2882bbddbb32da8e990de080 fc36b1cd9490233a3d220365fac3bc65679fe6de 68a41035a92606b6943c517fd874b54e8237485f 7b704fb77d6430cde07703f7cc8574484630d85c 4f3f85b1651d0c34c27c79cdbb772ecc07d6665a 95fa353ee928a42de1923d0f961e40d4ce201443 4bfe18b40d0749c073b3c4ba23f5c908436815d0 Some vet flags are noisy. In particular, the following flags reports a large amount of generally unharmful constructs: -assign: check for useless assignments -composites: check that composite literals used field-keyed elements -shadow: check for shadowed variables -shadowstrict: whether to be strict about shadowing -unreachable: check for unreachable code In order to skip running the flags mentioned above, vet is invoked on a directory basis with 'go tool vet .' since package- level type-checking with 'go vet' doesn't accept flags. Hence, each file is vetted in isolation, which is weaker than package-level type-checking. But nevertheless, it might catch suspicious constructs that pose a real problem. The vet target runs the following flags on the entire repo: -asmdecl: check assembly against Go declarations -atomic: check for common mistaken usages of the sync/atomic package -bool: check for mistakes involving boolean operators -buildtags: check that +build tags are valid -copylocks: check that locks are not passed by value -methods: check that canonically named methods are canonically defined -nilfunc: check for comparisons between functions and nil -printf: check printf-like invocations -rangeloops: check that range loop variables are used correctly -shift: check for useless shifts -structtags: check that struct field tags have canonical format and apply to exported fields as needed -unsafeptr: check for misuse of unsafe.Pointer Now and then, it might make sense to check the output of VETARGS=-unreachable make vet manually, just in case it detects several lines of dead code etc.
2015-01-16 22:20:32 +01:00
@$(MAKE) vet
2014-05-23 01:56:28 +02:00
2015-01-27 03:19:22 +01:00
# testacc runs acceptance tests
2015-01-13 19:32:03 +01:00
testacc: generate
@if [ "$(TEST)" = "./..." ]; then \
echo "ERROR: Set TEST to a specific package. For example,"; \
2015-05-29 19:56:15 +02:00
echo " make testacc TEST=./builtin/providers/aws"; \
exit 1; \
fi
TF_ACC=1 go test $(TEST) -v $(TESTARGS) -timeout 90m
2015-01-27 03:19:22 +01:00
# testrace runs the race checker
2015-01-13 19:32:03 +01:00
testrace: generate
2014-07-10 22:33:57 +02:00
TF_ACC= go test -race $(TEST) $(TESTARGS)
2014-07-01 19:04:23 +02:00
2015-01-27 03:19:22 +01:00
# updatedeps installs all the dependencies that Terraform needs to run
# and build.
2015-01-13 19:32:03 +01:00
updatedeps:
go get -u github.com/mitchellh/gox
go get -u golang.org/x/tools/cmd/stringer
go list ./... \
| xargs go list -f '{{join .Deps "\n"}}' \
| grep -v github.com/hashicorp/terraform \
2015-07-31 00:34:58 +02:00
| grep -v '/internal/' \
| sort -u \
| xargs go get -f -u -v
2014-06-26 19:33:39 +02:00
2015-02-16 18:58:17 +01:00
cover:
@go tool cover 2>/dev/null; if [ $$? -eq 3 ]; then \
go get -u golang.org/x/tools/cmd/cover; \
fi
go test $(TEST) -coverprofile=coverage.out
go tool cover -html=coverage.out
rm coverage.out
2015-01-27 03:19:22 +01:00
# vet runs the Go source code static analysis tool `vet` to find
# any common errors.
Makefile: add vet target Add a vet target in order to catch suspicious constructs reported by go vet. Vet has successfully detected problems in the past, for example, see 482460c4c8a663ec2882bbddbb32da8e990de080 fc36b1cd9490233a3d220365fac3bc65679fe6de 68a41035a92606b6943c517fd874b54e8237485f 7b704fb77d6430cde07703f7cc8574484630d85c 4f3f85b1651d0c34c27c79cdbb772ecc07d6665a 95fa353ee928a42de1923d0f961e40d4ce201443 4bfe18b40d0749c073b3c4ba23f5c908436815d0 Some vet flags are noisy. In particular, the following flags reports a large amount of generally unharmful constructs: -assign: check for useless assignments -composites: check that composite literals used field-keyed elements -shadow: check for shadowed variables -shadowstrict: whether to be strict about shadowing -unreachable: check for unreachable code In order to skip running the flags mentioned above, vet is invoked on a directory basis with 'go tool vet .' since package- level type-checking with 'go vet' doesn't accept flags. Hence, each file is vetted in isolation, which is weaker than package-level type-checking. But nevertheless, it might catch suspicious constructs that pose a real problem. The vet target runs the following flags on the entire repo: -asmdecl: check assembly against Go declarations -atomic: check for common mistaken usages of the sync/atomic package -bool: check for mistakes involving boolean operators -buildtags: check that +build tags are valid -copylocks: check that locks are not passed by value -methods: check that canonically named methods are canonically defined -nilfunc: check for comparisons between functions and nil -printf: check printf-like invocations -rangeloops: check that range loop variables are used correctly -shift: check for useless shifts -structtags: check that struct field tags have canonical format and apply to exported fields as needed -unsafeptr: check for misuse of unsafe.Pointer Now and then, it might make sense to check the output of VETARGS=-unreachable make vet manually, just in case it detects several lines of dead code etc.
2015-01-16 22:20:32 +01:00
vet:
@go tool vet 2>/dev/null ; if [ $$? -eq 3 ]; then \
go get golang.org/x/tools/cmd/vet; \
fi
@echo "go tool vet $(VETARGS) ."
@go tool vet $(VETARGS) . ; if [ $$? -eq 1 ]; then \
echo ""; \
echo "Vet found suspicious constructs. Please check the reported constructs"; \
echo "and fix them if necessary before submitting the code for review."; \
2015-05-30 19:52:24 +02:00
exit 1; \
Makefile: add vet target Add a vet target in order to catch suspicious constructs reported by go vet. Vet has successfully detected problems in the past, for example, see 482460c4c8a663ec2882bbddbb32da8e990de080 fc36b1cd9490233a3d220365fac3bc65679fe6de 68a41035a92606b6943c517fd874b54e8237485f 7b704fb77d6430cde07703f7cc8574484630d85c 4f3f85b1651d0c34c27c79cdbb772ecc07d6665a 95fa353ee928a42de1923d0f961e40d4ce201443 4bfe18b40d0749c073b3c4ba23f5c908436815d0 Some vet flags are noisy. In particular, the following flags reports a large amount of generally unharmful constructs: -assign: check for useless assignments -composites: check that composite literals used field-keyed elements -shadow: check for shadowed variables -shadowstrict: whether to be strict about shadowing -unreachable: check for unreachable code In order to skip running the flags mentioned above, vet is invoked on a directory basis with 'go tool vet .' since package- level type-checking with 'go vet' doesn't accept flags. Hence, each file is vetted in isolation, which is weaker than package-level type-checking. But nevertheless, it might catch suspicious constructs that pose a real problem. The vet target runs the following flags on the entire repo: -asmdecl: check assembly against Go declarations -atomic: check for common mistaken usages of the sync/atomic package -bool: check for mistakes involving boolean operators -buildtags: check that +build tags are valid -copylocks: check that locks are not passed by value -methods: check that canonically named methods are canonically defined -nilfunc: check for comparisons between functions and nil -printf: check printf-like invocations -rangeloops: check that range loop variables are used correctly -shift: check for useless shifts -structtags: check that struct field tags have canonical format and apply to exported fields as needed -unsafeptr: check for misuse of unsafe.Pointer Now and then, it might make sense to check the output of VETARGS=-unreachable make vet manually, just in case it detects several lines of dead code etc.
2015-01-16 22:20:32 +01:00
fi
2015-01-27 03:19:22 +01:00
# generate runs `go generate` to build the dynamically generated
# source files.
generate:
go generate ./...
Makefile: add vet target Add a vet target in order to catch suspicious constructs reported by go vet. Vet has successfully detected problems in the past, for example, see 482460c4c8a663ec2882bbddbb32da8e990de080 fc36b1cd9490233a3d220365fac3bc65679fe6de 68a41035a92606b6943c517fd874b54e8237485f 7b704fb77d6430cde07703f7cc8574484630d85c 4f3f85b1651d0c34c27c79cdbb772ecc07d6665a 95fa353ee928a42de1923d0f961e40d4ce201443 4bfe18b40d0749c073b3c4ba23f5c908436815d0 Some vet flags are noisy. In particular, the following flags reports a large amount of generally unharmful constructs: -assign: check for useless assignments -composites: check that composite literals used field-keyed elements -shadow: check for shadowed variables -shadowstrict: whether to be strict about shadowing -unreachable: check for unreachable code In order to skip running the flags mentioned above, vet is invoked on a directory basis with 'go tool vet .' since package- level type-checking with 'go vet' doesn't accept flags. Hence, each file is vetted in isolation, which is weaker than package-level type-checking. But nevertheless, it might catch suspicious constructs that pose a real problem. The vet target runs the following flags on the entire repo: -asmdecl: check assembly against Go declarations -atomic: check for common mistaken usages of the sync/atomic package -bool: check for mistakes involving boolean operators -buildtags: check that +build tags are valid -copylocks: check that locks are not passed by value -methods: check that canonically named methods are canonically defined -nilfunc: check for comparisons between functions and nil -printf: check printf-like invocations -rangeloops: check that range loop variables are used correctly -shift: check for useless shifts -structtags: check that struct field tags have canonical format and apply to exported fields as needed -unsafeptr: check for misuse of unsafe.Pointer Now and then, it might make sense to check the output of VETARGS=-unreachable make vet manually, just in case it detects several lines of dead code etc.
2015-01-16 22:20:32 +01:00
.PHONY: bin default generate test updatedeps vet