74859ff3c0
This patch removes the porter tool which hands out free ports from a given range with a library which does the same thing. The challenge for acquiring free ports in concurrent go test runs is that go packages are tested concurrently and run in separate processes. There has to be some inter-process synchronization in preventing processes allocating the same ports. freeport allocates blocks of ports from a range expected to be not in heavy use and implements a system-wide mutex by binding to the first port of that block for the lifetime of the application. Ports are then provided sequentially from that block and are tested on localhost before being returned as available.
123 lines
3.9 KiB
Makefile
123 lines
3.9 KiB
Makefile
SHELL = bash
|
|
GOTOOLS = \
|
|
github.com/elazarl/go-bindata-assetfs/... \
|
|
github.com/jteeuwen/go-bindata/... \
|
|
github.com/magiconair/vendorfmt/cmd/vendorfmt \
|
|
github.com/mitchellh/gox \
|
|
golang.org/x/tools/cmd/cover \
|
|
golang.org/x/tools/cmd/stringer \
|
|
github.com/axw/gocov/gocov \
|
|
gopkg.in/matm/v1/gocov-html
|
|
|
|
GOTAGS ?=
|
|
GOFILES ?= $(shell go list ./... | grep -v /vendor/)
|
|
GOOS=$(shell go env GOOS)
|
|
GOARCH=$(shell go env GOARCH)
|
|
|
|
# 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)
|
|
GIT_IMPORT=github.com/hashicorp/consul/version
|
|
GOLDFLAGS=-X $(GIT_IMPORT).GitCommit=$(GIT_COMMIT)$(GIT_DIRTY) -X $(GIT_IMPORT).GitDescribe=$(GIT_DESCRIBE)
|
|
|
|
export GOLDFLAGS
|
|
|
|
# all builds binaries for all targets
|
|
all: bin
|
|
|
|
bin: tools
|
|
@mkdir -p bin/
|
|
@GOTAGS='$(GOTAGS)' sh -c "'$(CURDIR)/scripts/build.sh'"
|
|
|
|
# dev creates binaries for testing locally - these are put into ./bin and $GOPATH
|
|
dev: changelogfmt vendorfmt dev-build
|
|
|
|
dev-build:
|
|
@echo "--> Building consul"
|
|
mkdir -p pkg/$(GOOS)_$(GOARCH)/ bin/
|
|
go install -ldflags '$(GOLDFLAGS)' -tags '$(GOTAGS)'
|
|
cp $(GOPATH)/bin/consul bin/
|
|
cp $(GOPATH)/bin/consul pkg/$(GOOS)_$(GOARCH)
|
|
|
|
vendorfmt:
|
|
@echo "--> Formatting vendor/vendor.json"
|
|
test -x $(GOPATH)/bin/vendorfmt || go get -u github.com/magiconair/vendorfmt/cmd/vendorfmt
|
|
vendorfmt
|
|
|
|
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:
|
|
mkdir -p pkg/linux_amd64/
|
|
GOOS=linux GOARCH=amd64 go build -ldflags '$(GOLDFLAGS)' -tags '$(GOTAGS)' -o pkg/linux_amd64/consul
|
|
|
|
# dist builds binaries for all platforms and packages them for distribution
|
|
dist:
|
|
@GOTAGS='$(GOTAGS)' sh -c "'$(CURDIR)/scripts/dist.sh'"
|
|
|
|
cov:
|
|
gocov test $(GOFILES) | gocov-html > /tmp/coverage.html
|
|
open /tmp/coverage.html
|
|
|
|
test: other-consul dev-build vet
|
|
@echo "--> Running go test"
|
|
@rm -f test.log exit-code
|
|
go test -tags '$(GOTAGS)' -i ./...
|
|
go test $(GOTEST_FLAGS) -tags '$(GOTAGS)' -timeout 5m -v ./... &>test.log ; echo $$? > exit-code
|
|
@echo "Exit code: $$(cat exit-code)" >> test.log
|
|
@grep -A5 'DATA RACE' test.log || true
|
|
@grep -A10 'panic: test timed out' test.log || true
|
|
@grep -A1 -- '--- SKIP:' test.log || true
|
|
@grep -A1 -- '--- FAIL:' test.log || true
|
|
@grep '^FAIL' test.log || true
|
|
@test "$$TRAVIS" == "true" && cat test.log || true
|
|
@if [ "$$(cat exit-code)" == "0" ] ; then echo "PASS" ; exit 0 ; else exit 1 ; fi
|
|
|
|
test-race:
|
|
$(MAKE) GOTEST_FLAGS=-race
|
|
|
|
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 $(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
|
|
|
|
# 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.
|
|
ui:
|
|
@sh -c "'$(CURDIR)/scripts/ui.sh'"
|
|
|
|
# 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 ./pkg/web_ui/...
|
|
@mv bindata_assetfs.go agent/
|
|
$(MAKE) format
|
|
|
|
tools:
|
|
go get -u -v $(GOTOOLS)
|
|
|
|
.PHONY: all ci bin dev dist cov test cover format vet ui static-assets tools vendorfmt
|