GOTOOLS = github.com/mitchellh/gox golang.org/x/tools/cmd/stringer
DEPS = $( shell go list -f '{{range .TestImports}}{{.}} {{end}}' ./...)
PACKAGES = $( shell go list ./...)
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
c9333b1b9b472feb5cad80e2c8276d41b64bde88
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 issue.
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 the
disabled flags manually.
For example, `VETARGS=-unreachable make vet` can detect several
lines of dead code that can be deleted, etc.
10 years ago
VETARGS ?= -asmdecl -atomic -bool -buildtags -copylocks -methods \
-nilfunc -printf -rangeloops -shift -structtags -unsafeptr
VERSION ?= $( shell awk -F\" '/^const Version/ { print $$2; exit }' version.go)
all : deps format
@mkdir -p bin/
@bash --norc -i ./scripts/build.sh
# bin generates the releasable binaries
bin : generate
@sh -c " ' $( CURDIR) /scripts/build.sh' "
# dev creates binaries for testing locally - these are put into ./bin and $GOPATH
dev : generate
@CONSUL_DEV= 1 sh -c " ' $( CURDIR) /scripts/build.sh' "
# dist creates the binaries for distibution
dist : bin
@sh -c " ' $( CURDIR) /scripts/dist.sh' $( VERSION) "
cov :
gocov test ./... | gocov-html > /tmp/coverage.html
open /tmp/coverage.html
deps :
@echo "--> Installing build dependencies"
@go get -v $( GOTOOLS)
@go get -d -v ./... $( DEPS)
updatedeps : deps
go get -u -v $( GOTOOLS)
go list ./... \
| xargs go list -f '{{join .Deps "\n"}}' \
| grep -v github.com/hashicorp/consul \
| grep -v '/internal/' \
| sort -u \
| xargs go get -f -u -v
test : deps
@$( MAKE) vet
@./scripts/verify_no_uuid.sh
@./scripts/test.sh
cover : deps
./scripts/verify_no_uuid.sh
go list ./... | xargs -n1 go test --cover
format : deps
@echo "--> Running go fmt"
@go fmt $( PACKAGES)
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
c9333b1b9b472feb5cad80e2c8276d41b64bde88
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 issue.
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 the
disabled flags manually.
For example, `VETARGS=-unreachable make vet` can detect several
lines of dead code that can be deleted, etc.
10 years ago
vet :
@go tool vet 2>/dev/null ; if [ $$ ? -eq 3 ] ; then \
go get golang.org/x/tools/cmd/vet; \
fi
@echo " --> Running 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 reviewal." ; \
fi
# generate runs `go generate` to build the dynamically generated source files
generate : deps
find . -type f -name '.DS_Store' -delete
go generate ./...
web :
./scripts/website_run.sh
web-push :
./scripts/website_push.sh
.PHONY : all bin dev dist cov deps test vet web web -push generate test -nodep