2831c8993d
* Move the watch package into the api module It was already just a thin wrapper around the API anyways. The biggest change was to the testing. Instead of using a test agent directly from the agent package it now uses the binary on the PATH just like the other API tests. The other big changes were to fix up the connect based watch tests so that we didn’t need to pull in the connect package (and therefore all of Consul)
278 lines
8.8 KiB
Makefile
278 lines
8.8 KiB
Makefile
SHELL = bash
|
|
GOTOOLS = \
|
|
github.com/elazarl/go-bindata-assetfs/go-bindata-assetfs \
|
|
github.com/hashicorp/go-bindata/go-bindata \
|
|
github.com/mitchellh/gox \
|
|
golang.org/x/tools/cmd/cover \
|
|
golang.org/x/tools/cmd/stringer \
|
|
github.com/gogo/protobuf/protoc-gen-gofast \
|
|
github.com/vektra/mockery/cmd/mockery
|
|
|
|
GOTAGS ?=
|
|
GOMODULES ?= ./... ./api/... ./sdk/...
|
|
GOFILES ?= $(shell go list $(GOMODULES) | grep -v /vendor/)
|
|
ifeq ($(origin GOTEST_PKGS_EXCLUDE), undefined)
|
|
GOTEST_PKGS ?= $(GOMODULES)
|
|
else
|
|
GOTEST_PKGS=$(shell go list $(GOMODULES) | sed 's/github.com\/hashicorp\/consul/./' | egrep -v "^($(GOTEST_PKGS_EXCLUDE))$$")
|
|
endif
|
|
GOOS?=$(shell go env GOOS)
|
|
GOARCH?=$(shell go env GOARCH)
|
|
GOPATH=$(shell go env GOPATH)
|
|
|
|
ASSETFS_PATH?=agent/bindata_assetfs.go
|
|
# Get the git commit
|
|
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 --match "v*")
|
|
GIT_IMPORT=github.com/hashicorp/consul/version
|
|
GOLDFLAGS=-X $(GIT_IMPORT).GitCommit=$(GIT_COMMIT)$(GIT_DIRTY) -X $(GIT_IMPORT).GitDescribe=$(GIT_DESCRIBE)
|
|
|
|
ifeq ($(FORCE_REBUILD),1)
|
|
NOCACHE=--no-cache
|
|
else
|
|
NOCACHE=
|
|
endif
|
|
|
|
DOCKER_BUILD_QUIET?=1
|
|
ifeq (${DOCKER_BUILD_QUIET},1)
|
|
QUIET=-q
|
|
else
|
|
QUIET=
|
|
endif
|
|
|
|
CONSUL_DEV_IMAGE?=consul-dev
|
|
GO_BUILD_TAG?=consul-build-go
|
|
UI_BUILD_TAG?=consul-build-ui
|
|
BUILD_CONTAINER_NAME?=consul-builder
|
|
CONSUL_IMAGE_VERSION?=latest
|
|
|
|
DIST_TAG?=1
|
|
DIST_BUILD?=1
|
|
DIST_SIGN?=1
|
|
|
|
ifdef DIST_VERSION
|
|
DIST_VERSION_ARG=-v "$(DIST_VERSION)"
|
|
else
|
|
DIST_VERSION_ARG=
|
|
endif
|
|
|
|
ifdef DIST_RELEASE_DATE
|
|
DIST_DATE_ARG=-d "$(DIST_RELEASE_DATE)"
|
|
else
|
|
DIST_DATE_ARG=
|
|
endif
|
|
|
|
ifdef DIST_PRERELEASE
|
|
DIST_REL_ARG=-r "$(DIST_PRERELEASE)"
|
|
else
|
|
DIST_REL_ARG=
|
|
endif
|
|
|
|
PUB_GIT?=1
|
|
PUB_WEBSITE?=1
|
|
|
|
ifeq ($(PUB_GIT),1)
|
|
PUB_GIT_ARG=-g
|
|
else
|
|
PUB_GIT_ARG=
|
|
endif
|
|
|
|
ifeq ($(PUB_WEBSITE),1)
|
|
PUB_WEBSITE_ARG=-w
|
|
else
|
|
PUB_WEBSITE_ARG=
|
|
endif
|
|
|
|
NOGOX?=1
|
|
|
|
export NOGOX
|
|
export GO_BUILD_TAG
|
|
export UI_BUILD_TAG
|
|
export BUILD_CONTAINER_NAME
|
|
export GIT_COMMIT
|
|
export GIT_DIRTY
|
|
export GIT_DESCRIBE
|
|
export GOTAGS
|
|
export GOLDFLAGS
|
|
|
|
|
|
DEV_PUSH?=0
|
|
ifeq ($(DEV_PUSH),1)
|
|
DEV_PUSH_ARG=
|
|
else
|
|
DEV_PUSH_ARG=--no-push
|
|
endif
|
|
|
|
# all builds binaries for all targets
|
|
all: bin
|
|
|
|
bin: tools
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/build-local.sh
|
|
|
|
# dev creates binaries for testing locally - these are put into ./bin and $GOPATH
|
|
dev: changelogfmt dev-build
|
|
|
|
dev-build:
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/build-local.sh -o $(GOOS) -a $(GOARCH)
|
|
|
|
dev-docker: linux
|
|
@echo "Pulling consul container image - $(CONSUL_IMAGE_VERSION)"
|
|
@docker pull consul:$(CONSUL_IMAGE_VERSION) >/dev/null
|
|
@echo "Building Consul Development container - $(CONSUL_DEV_IMAGE)"
|
|
@docker build $(NOCACHE) $(QUIET) -t '$(CONSUL_DEV_IMAGE)' --build-arg CONSUL_IMAGE_VERSION=$(CONSUL_IMAGE_VERSION) $(CURDIR)/pkg/bin/linux_amd64 -f $(CURDIR)/build-support/docker/Consul-Dev.dockerfile
|
|
|
|
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
|
|
|
|
# linux builds a linux package independent of the source platform
|
|
linux:
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/build-local.sh -o linux -a amd64
|
|
|
|
# dist builds binaries for all platforms and packages them for distribution
|
|
dist:
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/release.sh -t '$(DIST_TAG)' -b '$(DIST_BUILD)' -S '$(DIST_SIGN)' $(DIST_VERSION_ARG) $(DIST_DATE_ARG) $(DIST_REL_ARG)
|
|
|
|
verify:
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/verify.sh
|
|
|
|
publish:
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/publish.sh $(PUB_GIT_ARG) $(PUB_WEBSITE_ARG)
|
|
|
|
dev-tree:
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/dev.sh $(DEV_PUSH_ARG)
|
|
|
|
cov:
|
|
go test $(GOMODULES) -coverprofile=coverage.out
|
|
go tool cover -html=coverage.out
|
|
|
|
test: other-consul dev-build vet test-install-deps test-internal
|
|
|
|
test-install-deps:
|
|
go test -tags '$(GOTAGS)' -i $(GOTEST_PKGS)
|
|
|
|
update-vendor:
|
|
@echo "--> Running go mod vendor"
|
|
@go mod vendor
|
|
@echo "--> Removing vendoring of our own nested modules"
|
|
@rm -rf vendor/github.com/hashicorp/consul
|
|
@grep -v "hashicorp/consul/" < vendor/modules.txt > vendor/modules.txt.new
|
|
@mv vendor/modules.txt.new vendor/modules.txt
|
|
|
|
test-internal:
|
|
@echo "--> Running go test"
|
|
@rm -f test.log exit-code
|
|
@# 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...
|
|
{ go test -v $(GOTEST_FLAGS) -tags '$(GOTAGS)' $(GOTEST_PKGS) 2>&1 ; echo $$? > exit-code ; } | tee test.log | egrep '^(ok|FAIL|panic:|--- FAIL|--- PASS)'
|
|
@echo "Exit code: $$(cat exit-code)"
|
|
@# This prints all the race report between ====== lines
|
|
@awk '/^WARNING: DATA RACE/ {do_print=1; print "=================="} do_print==1 {print} /^={10,}/ {do_print=0}' test.log || true
|
|
@grep -A10 'panic: ' test.log || true
|
|
@# Prints all the failure output until the next non-indented line - testify
|
|
@# helpers often output multiple lines for readability but useless if we can't
|
|
@# see them. Un-intuitive order of matches is necessary. No || true because
|
|
@# awk always returns true even if there is no match and it breaks non-bash
|
|
@# shells locally.
|
|
@awk '/^[^[:space:]]/ {do_print=0} /--- SKIP/ {do_print=1} do_print==1 {print}' test.log
|
|
@awk '/^[^[:space:]]/ {do_print=0} /--- FAIL/ {do_print=1} do_print==1 {print}' test.log
|
|
@grep '^FAIL' test.log || true
|
|
@if [ "$$(cat exit-code)" == "0" ] ; then echo "PASS" ; exit 0 ; else exit 1 ; fi
|
|
|
|
test-race:
|
|
$(MAKE) GOTEST_FLAGS=-race
|
|
|
|
# Run tests with config for CI so `make test` can still be local-dev friendly.
|
|
test-ci: other-consul dev-build vet test-install-deps
|
|
@ if ! GOTEST_FLAGS="-short -timeout 8m -p 3 -parallel 4" make test-internal; then \
|
|
echo " ============"; \
|
|
echo " Retrying 1/2"; \
|
|
echo " ============"; \
|
|
if ! GOTEST_FLAGS="-timeout 9m -p 1 -parallel 1" make test-internal; then \
|
|
echo " ============"; \
|
|
echo " Retrying 2/2"; \
|
|
echo " ============"; \
|
|
GOTEST_FLAGS="-timeout 9m -p 1 -parallel 1" make test-internal; \
|
|
fi \
|
|
fi
|
|
|
|
test-flake: other-consul vet test-install-deps
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/test-flake.sh --pkg "$(FLAKE_PKG)" --test "$(FLAKE_TEST)" --cpus "$(FLAKE_CPUS)" --n "$(FLAKE_N)"
|
|
|
|
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
|
|
|
|
cover:
|
|
go test $(GOFILES) --cover
|
|
|
|
format:
|
|
@echo "--> Running go fmt"
|
|
@go fmt $(GOFILES)
|
|
|
|
vet:
|
|
@echo "--> Running go vet"
|
|
@go vet -tags '$(GOTAGS)' $(GOFILES); 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."; \
|
|
exit 1; \
|
|
fi
|
|
|
|
# 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.
|
|
static-assets:
|
|
@go-bindata-assetfs -pkg agent -prefix pkg -o $(ASSETFS_PATH) ./pkg/web_ui/...
|
|
@go fmt $(ASSETFS_PATH)
|
|
|
|
|
|
# Build the static web ui and build static assets inside a Docker container
|
|
ui: ui-docker static-assets-docker
|
|
|
|
tools:
|
|
go get -u -v $(GOTOOLS)
|
|
|
|
version:
|
|
@echo -n "Version: "
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/version.sh
|
|
@echo -n "Version + release: "
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/version.sh -r
|
|
@echo -n "Version + git: "
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/version.sh -g
|
|
@echo -n "Version + release + git: "
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/version.sh -r -g
|
|
|
|
|
|
docker-images: go-build-image ui-build-image
|
|
|
|
go-build-image:
|
|
@echo "Building Golang build container"
|
|
@docker build $(NOCACHE) $(QUIET) --build-arg 'GOTOOLS=$(GOTOOLS)' -t $(GO_BUILD_TAG) - < build-support/docker/Build-Go.dockerfile
|
|
|
|
ui-build-image:
|
|
@echo "Building UI build container"
|
|
@docker build $(NOCACHE) $(QUIET) -t $(UI_BUILD_TAG) - < build-support/docker/Build-UI.dockerfile
|
|
|
|
static-assets-docker: go-build-image
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/build-docker.sh static-assets
|
|
|
|
consul-docker: go-build-image
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/build-docker.sh consul
|
|
|
|
ui-docker: ui-build-image
|
|
@$(SHELL) $(CURDIR)/build-support/scripts/build-docker.sh ui
|
|
|
|
proto:
|
|
protoc agent/connect/ca/plugin/*.proto --gofast_out=plugins=grpc:../../..
|
|
|
|
.PHONY: all ci bin dev dist cov test test-ci test-internal test-install-deps cover format vet ui static-assets tools
|
|
.PHONY: docker-images go-build-image ui-build-image static-assets-docker consul-docker ui-docker
|
|
.PHONY: version proto
|