2017-04-27 18:49:43 +00:00
|
|
|
SHELL = bash
|
2016-05-07 20:02:12 +00:00
|
|
|
GOTOOLS = \
|
|
|
|
github.com/elazarl/go-bindata-assetfs/... \
|
2018-02-07 15:36:39 +00:00
|
|
|
github.com/hashicorp/go-bindata/... \
|
2017-07-18 04:46:25 +00:00
|
|
|
github.com/magiconair/vendorfmt/cmd/vendorfmt \
|
2016-05-07 20:02:12 +00:00
|
|
|
github.com/mitchellh/gox \
|
|
|
|
golang.org/x/tools/cmd/cover \
|
2017-06-29 10:55:01 +00:00
|
|
|
golang.org/x/tools/cmd/stringer \
|
|
|
|
github.com/axw/gocov/gocov \
|
|
|
|
gopkg.in/matm/v1/gocov-html
|
2017-06-29 12:50:47 +00:00
|
|
|
|
2017-08-30 11:25:14 +00:00
|
|
|
GOTAGS ?=
|
2017-04-26 22:47:57 +00:00
|
|
|
GOFILES ?= $(shell go list ./... | grep -v /vendor/)
|
2018-02-21 12:53:35 +00:00
|
|
|
ifeq ($(origin GOTEST_PKGS_EXCLUDE), undefined)
|
2018-02-21 12:20:33 +00:00
|
|
|
GOTEST_PKGS ?= "./..."
|
2018-02-21 12:53:35 +00:00
|
|
|
else
|
|
|
|
GOTEST_PKGS=$(shell go list ./... | sed 's/github.com\/hashicorp\/consul/./' | egrep -v "^($(GOTEST_PKGS_EXCLUDE))$$")
|
|
|
|
endif
|
2017-04-18 22:03:51 +00:00
|
|
|
GOOS=$(shell go env GOOS)
|
|
|
|
GOARCH=$(shell go env GOARCH)
|
2018-01-04 19:38:20 +00:00
|
|
|
GOPATH=$(shell go env GOPATH)
|
2017-04-18 22:03:51 +00:00
|
|
|
|
2018-06-08 14:20:54 +00:00
|
|
|
ASSETFS_PATH?=agent/bindata_assetfs.go
|
2017-04-18 22:03:51 +00:00
|
|
|
# Get the git commit
|
2018-06-08 14:20:54 +00:00
|
|
|
GIT_COMMIT?=$(shell git rev-parse --short HEAD)
|
|
|
|
GIT_DIRTY?=$(shell test -n "`git status --porcelain`" && echo "+CHANGES" || true)
|
|
|
|
GIT_DESCRIBE?=$(shell git describe --tags --always)
|
2017-04-18 22:03:51 +00:00
|
|
|
GIT_IMPORT=github.com/hashicorp/consul/version
|
|
|
|
GOLDFLAGS=-X $(GIT_IMPORT).GitCommit=$(GIT_COMMIT)$(GIT_DIRTY) -X $(GIT_IMPORT).GitDescribe=$(GIT_DESCRIBE)
|
|
|
|
|
2018-06-08 14:20:54 +00:00
|
|
|
GO_BUILD_TAG?=consul-build-go
|
|
|
|
UI_BUILD_TAG?=consul-build-ui
|
|
|
|
UI_LEGACY_BUILD_TAG?=consul-build-ui-legacy
|
|
|
|
BUILD_CONTAINER_NAME?=consul-builder
|
|
|
|
|
|
|
|
export GO_BUILD_TAG
|
|
|
|
export UI_BUILD_TAG
|
|
|
|
export UI_LEGACY_BUILD_TAG
|
|
|
|
export BUILD_CONTAINER_NAME
|
|
|
|
export GIT_COMMIT
|
|
|
|
export GIT_DIRTY
|
|
|
|
export GIT_DESCRIBE
|
|
|
|
export GOTAGS
|
2017-04-18 22:03:51 +00:00
|
|
|
export GOLDFLAGS
|
2013-12-06 23:43:07 +00:00
|
|
|
|
2016-02-18 04:36:48 +00:00
|
|
|
# all builds binaries for all targets
|
2016-10-25 20:49:57 +00:00
|
|
|
all: bin
|
|
|
|
|
|
|
|
bin: tools
|
2013-12-06 23:43:07 +00:00
|
|
|
@mkdir -p bin/
|
2017-03-23 23:06:25 +00:00
|
|
|
@GOTAGS='$(GOTAGS)' sh -c "'$(CURDIR)/scripts/build.sh'"
|
2015-10-22 18:16:01 +00:00
|
|
|
|
2015-10-22 19:00:35 +00:00
|
|
|
# dev creates binaries for testing locally - these are put into ./bin and $GOPATH
|
2017-10-04 18:56:28 +00:00
|
|
|
dev: changelogfmt vendorfmt dev-build
|
2017-07-18 07:22:49 +00:00
|
|
|
|
|
|
|
dev-build:
|
2017-09-25 18:40:42 +00:00
|
|
|
@echo "--> Building consul"
|
2017-05-04 11:31:56 +00:00
|
|
|
mkdir -p pkg/$(GOOS)_$(GOARCH)/ bin/
|
2017-04-18 22:03:51 +00:00
|
|
|
go install -ldflags '$(GOLDFLAGS)' -tags '$(GOTAGS)'
|
2017-04-28 23:40:50 +00:00
|
|
|
cp $(GOPATH)/bin/consul bin/
|
2017-04-18 22:03:51 +00:00
|
|
|
cp $(GOPATH)/bin/consul pkg/$(GOOS)_$(GOARCH)
|
2015-10-22 18:16:01 +00:00
|
|
|
|
2017-07-18 07:22:49 +00:00
|
|
|
vendorfmt:
|
2017-09-25 18:40:42 +00:00
|
|
|
@echo "--> Formatting vendor/vendor.json"
|
2017-07-18 07:22:49 +00:00
|
|
|
test -x $(GOPATH)/bin/vendorfmt || go get -u github.com/magiconair/vendorfmt/cmd/vendorfmt
|
|
|
|
vendorfmt
|
|
|
|
|
2017-10-04 18:56:28 +00:00
|
|
|
changelogfmt:
|
|
|
|
@echo "--> Making [GH-xxxx] references clickable..."
|
|
|
|
@sed -E 's|([^\[])\[GH-([0-9]+)\]|\1[[GH-\2](https://github.com/hashicorp/consul/issues/\2)]|g' CHANGELOG.md > changelog.tmp && mv changelog.tmp CHANGELOG.md
|
|
|
|
|
2017-06-28 14:48:00 +00:00
|
|
|
# linux builds a linux package independent of the source platform
|
2017-05-04 11:31:56 +00:00
|
|
|
linux:
|
|
|
|
mkdir -p pkg/linux_amd64/
|
|
|
|
GOOS=linux GOARCH=amd64 go build -ldflags '$(GOLDFLAGS)' -tags '$(GOTAGS)' -o pkg/linux_amd64/consul
|
|
|
|
|
2016-02-18 04:36:48 +00:00
|
|
|
# dist builds binaries for all platforms and packages them for distribution
|
|
|
|
dist:
|
2017-03-23 23:06:25 +00:00
|
|
|
@GOTAGS='$(GOTAGS)' sh -c "'$(CURDIR)/scripts/dist.sh'"
|
2015-10-22 18:16:01 +00:00
|
|
|
|
2013-12-06 23:43:07 +00:00
|
|
|
cov:
|
2017-04-26 22:47:57 +00:00
|
|
|
gocov test $(GOFILES) | gocov-html > /tmp/coverage.html
|
2013-12-06 23:43:07 +00:00
|
|
|
open /tmp/coverage.html
|
|
|
|
|
2017-10-21 19:15:01 +00:00
|
|
|
test: other-consul dev-build vet
|
2017-09-25 18:40:42 +00:00
|
|
|
@echo "--> Running go test"
|
|
|
|
@rm -f test.log exit-code
|
2018-02-21 12:20:33 +00:00
|
|
|
go test -tags '$(GOTAGS)' -i $(GOTEST_PKGS)
|
2018-02-20 15:32:44 +00:00
|
|
|
@# Dump verbose output to test.log so we can surface test names on failure but
|
|
|
|
@# hide it from travis as it exceeds their log limits and causes job to be
|
|
|
|
@# terminated (over 4MB and over 10k lines in the UI). We need to output
|
|
|
|
@# _something_ to stop them terminating us due to inactivity...
|
2018-02-21 12:20:33 +00:00
|
|
|
{ go test $(GOTEST_FLAGS) -tags '$(GOTAGS)' -timeout 5m $(GOTEST_PKGS) 2>&1 ; echo $$? > exit-code ; } | tee test.log | egrep '^(ok|FAIL)\s*github.com/hashicorp/consul'
|
2017-09-25 18:40:42 +00:00
|
|
|
@echo "Exit code: $$(cat exit-code)" >> test.log
|
2017-06-29 12:50:47 +00:00
|
|
|
@grep -A5 'DATA RACE' test.log || true
|
|
|
|
@grep -A10 'panic: test timed out' test.log || true
|
2017-09-25 18:40:42 +00:00
|
|
|
@grep -A1 -- '--- SKIP:' test.log || true
|
2017-06-29 12:50:47 +00:00
|
|
|
@grep -A1 -- '--- FAIL:' test.log || true
|
|
|
|
@grep '^FAIL' test.log || true
|
2017-09-25 18:40:42 +00:00
|
|
|
@if [ "$$(cat exit-code)" == "0" ] ; then echo "PASS" ; exit 0 ; else exit 1 ; fi
|
2017-06-29 12:50:47 +00:00
|
|
|
|
|
|
|
test-race:
|
|
|
|
$(MAKE) GOTEST_FLAGS=-race
|
2017-05-22 19:24:38 +00:00
|
|
|
|
2017-09-25 18:40:42 +00:00
|
|
|
other-consul:
|
|
|
|
@echo "--> Checking for other consul instances"
|
|
|
|
@if ps -ef | grep 'consul agent' | grep -v grep ; then \
|
|
|
|
echo "Found other running consul agents. This may affect your tests." ; \
|
|
|
|
exit 1 ; \
|
|
|
|
fi
|
|
|
|
|
2016-02-13 00:50:37 +00:00
|
|
|
cover:
|
2017-04-26 22:47:57 +00:00
|
|
|
go test $(GOFILES) --cover
|
2013-12-06 23:43:07 +00:00
|
|
|
|
2016-02-13 00:50:37 +00:00
|
|
|
format:
|
2014-05-06 05:45:54 +00:00
|
|
|
@echo "--> Running go fmt"
|
2017-04-26 22:47:57 +00:00
|
|
|
@go fmt $(GOFILES)
|
2014-05-06 05:38:21 +00:00
|
|
|
|
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.
2015-01-17 06:44:10 +00:00
|
|
|
vet:
|
2017-03-23 23:06:25 +00:00
|
|
|
@echo "--> Running go vet"
|
2018-02-22 23:57:09 +00:00
|
|
|
@go vet -tags '$(GOTAGS)' $(GOFILES); if [ $$? -eq 1 ]; then \
|
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.
2015-01-17 06:44:10 +00:00
|
|
|
echo ""; \
|
|
|
|
echo "Vet found suspicious constructs. Please check the reported constructs"; \
|
2017-03-23 23:06:25 +00:00
|
|
|
echo "and fix them if necessary before submitting the code for review."; \
|
|
|
|
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
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.
2015-01-17 06:44:10 +00:00
|
|
|
fi
|
|
|
|
|
2017-06-21 21:43:07 +00:00
|
|
|
# Build the static web ui and build static assets inside a Docker container, the
|
|
|
|
# same way a release build works. This implicitly does a "make static-assets" at
|
|
|
|
# the end.
|
2016-11-02 22:53:02 +00:00
|
|
|
ui:
|
|
|
|
@sh -c "'$(CURDIR)/scripts/ui.sh'"
|
|
|
|
|
2017-06-21 21:43:07 +00:00
|
|
|
# If you've run "make ui" manually then this will get called for you. This is
|
|
|
|
# also run as part of the release build script when it verifies that there are no
|
|
|
|
# changes to the UI assets that aren't checked in.
|
2016-02-13 00:50:37 +00:00
|
|
|
static-assets:
|
2018-06-08 14:20:54 +00:00
|
|
|
@go-bindata-assetfs -pkg agent -prefix pkg -o $(ASSETFS_PATH) ./pkg/web_ui/...
|
2015-11-30 19:24:08 +00:00
|
|
|
$(MAKE) format
|
|
|
|
|
2016-02-13 01:09:18 +00:00
|
|
|
tools:
|
|
|
|
go get -u -v $(GOTOOLS)
|
|
|
|
|
2018-06-08 14:20:54 +00:00
|
|
|
docker-images:
|
|
|
|
@$(MAKE) -C build-support/docker images
|
|
|
|
|
|
|
|
go-build-image:
|
|
|
|
@$(MAKE) -C build-support/docker go-build-image
|
|
|
|
|
|
|
|
ui-build-image:
|
|
|
|
@$(MAKE) -C build-support/docker ui-build-image
|
|
|
|
|
|
|
|
ui-legacy-build-image:
|
|
|
|
@$(MAKE) -C build-support/docker ui-legacy-build-image
|
|
|
|
|
|
|
|
static-assets-docker: go-build-image
|
|
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/build.sh assetfs
|
|
|
|
|
|
|
|
go-docker: go-build-image
|
|
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/build.sh consul
|
|
|
|
|
|
|
|
ui-docker: ui-build-image
|
|
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/build.sh ui
|
|
|
|
|
|
|
|
ui-legacy-docker: ui-legacy-build-image
|
|
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/build.sh ui-legacy
|
|
|
|
|
|
|
|
release-docker: ui-docker ui-legacy-docker static-assets-docker go-docker
|
|
|
|
|
|
|
|
.PHONY: all ci bin dev dist cov test cover format vet ui static-assets tools vendorfmt
|
|
|
|
.PHONY: docker-images go-build-iamge ui-build-image ui-legacy-build-image static-assets-docker go-docker ui-docker ui-legacy-docker release-docker
|