2018-05-22 17:28:04 +00:00
|
|
|
# Top level Makefile for the entire project
|
|
|
|
#
|
2018-06-25 23:24:52 +00:00
|
|
|
# This Makefile encodes the "go generate" prerequeisites ensuring that the proper tooling is installed and
|
|
|
|
# that the generate steps are executed when their prerequeisites files change.
|
|
|
|
#
|
2018-05-22 17:28:04 +00:00
|
|
|
# This Makefile follows a few conventions:
|
|
|
|
#
|
|
|
|
# * All cmds must be added to this top level Makefile.
|
|
|
|
# * All binaries are placed in ./bin, its recommended to add this directory to your PATH.
|
|
|
|
# * Each package that has a need to run go generate, must have its own Makefile for that purpose.
|
|
|
|
# * All recursive Makefiles must support the targets: all and clean.
|
|
|
|
#
|
|
|
|
|
2018-08-02 21:02:38 +00:00
|
|
|
SUBDIRS := query task
|
2018-07-23 21:42:03 +00:00
|
|
|
UISOURCES := $(shell find chronograf/ui -type f -not \( -path chronograf/ui/build/\* -o -path chronograf/ui/node_modules/\* -prune \) )
|
|
|
|
YARN := $(shell command -v yarn 2> /dev/null)
|
|
|
|
|
2018-05-22 17:28:04 +00:00
|
|
|
|
|
|
|
GO_ARGS=-tags '$(GO_TAGS)'
|
|
|
|
|
|
|
|
# Test vars can be used by all recursive Makefiles
|
2018-06-25 23:24:52 +00:00
|
|
|
export GOOS=$(shell go env GOOS)
|
2018-05-22 17:28:04 +00:00
|
|
|
export GO_BUILD=go build $(GO_ARGS)
|
ci: enable GOCACHE for Circle
With a clean GOCACHE, `make test-go` took about 30 seconds. It's hard to
tell the exact time since `make vendor` was implicitly executed in the
same block.
Now, `make test-go` uses GOCACHE and takes about 5 seconds to restore
the cache, then about 8 seconds to run through a fully cached set of
tests. If any test is actually broken or doesn't compile, this will give
us fast feedback.
But this change also runs `go test -race -count=1`, so that we fully
exercise any possible data races. That currently takes about 19 seconds.
Then finally we save GOCACHE, which has our `go test` results, and a
populated build cache for our test files, including built with the race
detector. Saving that takes about 14 seconds.
That means we took about 30 seconds originally to just run `go test
-count=1`, and now we take (5+8+19+14)=46 seconds to run plain go test
and go test with the race detector. There's probably an argument to be
made for just running with the race detector, but running both gives us
more coverage IMO, and it does allow us to run tests that aren't enabled
on race builds.
See https://circleci.com/gh/influxdata/platform/1840 for a run with full
caching.
2018-08-28 16:39:44 +00:00
|
|
|
export GO_TEST=go test $(GO_ARGS)
|
2018-05-22 17:28:04 +00:00
|
|
|
export GO_GENERATE=go generate $(GO_ARGS)
|
2018-05-22 22:19:04 +00:00
|
|
|
export GO_VET= go vet $(GO_ARGS)
|
2018-09-11 15:22:06 +00:00
|
|
|
export PATH := $(PWD)/bin/$(GOOS):$(PATH)
|
2018-05-22 17:28:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
# All go source files
|
|
|
|
SOURCES := $(shell find . -name '*.go' -not -name '*_test.go')
|
|
|
|
|
|
|
|
# All go source files excluding the vendored sources.
|
|
|
|
SOURCES_NO_VENDOR := $(shell find . -path ./vendor -prune -o -name "*.go" -not -name '*_test.go' -print)
|
|
|
|
|
|
|
|
# List of binary cmds to build
|
2018-06-25 23:24:52 +00:00
|
|
|
CMDS := \
|
|
|
|
bin/$(GOOS)/influx \
|
2018-08-31 17:52:40 +00:00
|
|
|
bin/$(GOOS)/influxd \
|
2018-07-25 18:27:10 +00:00
|
|
|
bin/$(GOOS)/fluxd
|
2018-05-22 17:28:04 +00:00
|
|
|
|
|
|
|
# List of utilities to build as part of the build process
|
2018-06-25 23:24:52 +00:00
|
|
|
UTILS := \
|
|
|
|
bin/$(GOOS)/pigeon \
|
2018-08-02 21:02:38 +00:00
|
|
|
bin/$(GOOS)/protoc-gen-gogofaster \
|
2018-08-27 15:34:17 +00:00
|
|
|
bin/$(GOOS)/goreleaser \
|
|
|
|
bin/$(GOOS)/go-bindata
|
2018-05-22 17:28:04 +00:00
|
|
|
|
2018-08-27 15:34:17 +00:00
|
|
|
# Default target to build all go commands.
|
2018-05-22 17:28:04 +00:00
|
|
|
#
|
2018-08-27 15:34:17 +00:00
|
|
|
# This target sets up the dependencies to correctly build all go commands.
|
2018-05-22 17:28:04 +00:00
|
|
|
# Other targets must depend on this target to correctly builds CMDS.
|
2018-09-04 22:26:40 +00:00
|
|
|
all: GO_ARGS=-tags 'assets $(GO_TAGS)'
|
|
|
|
all: vendor node_modules $(UTILS) subdirs generate $(CMDS)
|
2018-05-22 17:28:04 +00:00
|
|
|
|
|
|
|
# Target to build subdirs.
|
|
|
|
# Each subdirs must support the `all` target.
|
|
|
|
subdirs: $(SUBDIRS)
|
2018-06-25 23:24:52 +00:00
|
|
|
@for d in $^; do $(MAKE) -C $$d all; done
|
2018-05-22 17:28:04 +00:00
|
|
|
|
|
|
|
#
|
|
|
|
# Define targets for commands
|
|
|
|
#
|
2018-06-25 23:24:52 +00:00
|
|
|
$(CMDS): $(SOURCES)
|
|
|
|
$(GO_BUILD) -i -o $@ ./cmd/$(shell basename "$@")
|
2018-05-22 17:28:04 +00:00
|
|
|
|
|
|
|
#
|
|
|
|
# Define targets for utilities
|
|
|
|
#
|
|
|
|
|
2018-06-25 23:24:52 +00:00
|
|
|
bin/$(GOOS)/pigeon: ./vendor/github.com/mna/pigeon/main.go
|
|
|
|
go build -i -o $@ ./vendor/github.com/mna/pigeon
|
2018-05-22 17:28:04 +00:00
|
|
|
|
2018-08-02 21:02:38 +00:00
|
|
|
bin/$(GOOS)/protoc-gen-gogofaster: vendor $(call go_deps,./vendor/github.com/gogo/protobuf/protoc-gen-gogofaster)
|
|
|
|
$(GO_BUILD) -i -o $@ ./vendor/github.com/gogo/protobuf/protoc-gen-gogofaster
|
|
|
|
|
2018-06-25 23:24:52 +00:00
|
|
|
bin/$(GOOS)/goreleaser: ./vendor/github.com/goreleaser/goreleaser/main.go
|
|
|
|
go build -i -o $@ ./vendor/github.com/goreleaser/goreleaser
|
2018-05-22 20:42:32 +00:00
|
|
|
|
2018-08-27 15:34:17 +00:00
|
|
|
bin/$(GOOS)/go-bindata: ./vendor/github.com/kevinburke/go-bindata/go-bindata/main.go
|
|
|
|
go build -i -o $@ ./vendor/github.com/kevinburke/go-bindata/go-bindata
|
2018-07-23 21:42:03 +00:00
|
|
|
|
2018-08-27 15:34:17 +00:00
|
|
|
vendor: Gopkg.lock
|
|
|
|
dep ensure -v -vendor-only
|
2018-07-23 21:42:03 +00:00
|
|
|
|
2018-08-27 15:34:17 +00:00
|
|
|
node_modules: chronograf/ui/node_modules
|
|
|
|
|
|
|
|
chronograf/ui/node_modules: chronograf/ui/yarn.lock
|
2018-07-23 21:42:03 +00:00
|
|
|
ifndef YARN
|
|
|
|
$(error Please install yarn 0.19.1+)
|
|
|
|
else
|
2018-08-27 15:34:17 +00:00
|
|
|
cd chronograf/ui && yarn --no-progress --no-emoji
|
2018-07-23 21:42:03 +00:00
|
|
|
endif
|
|
|
|
|
2018-05-22 17:28:04 +00:00
|
|
|
#
|
|
|
|
# Define how source dependencies are managed
|
|
|
|
#
|
|
|
|
|
2018-08-27 15:34:17 +00:00
|
|
|
vendor/github.com/mna/pigeon/main.go: vendor
|
|
|
|
vendor/github.com/goreleaser/goreleaser/main.go: vendor
|
|
|
|
vendor/github.com/kevinburke/go-bindata/go-bindata/main.go: vendor
|
2018-05-22 17:28:04 +00:00
|
|
|
|
|
|
|
#
|
|
|
|
# Define action only targets
|
|
|
|
#
|
|
|
|
|
|
|
|
fmt: $(SOURCES_NO_VENDOR)
|
|
|
|
goimports -w $^
|
|
|
|
|
2018-09-04 22:26:40 +00:00
|
|
|
generate:
|
|
|
|
$(GO_GENERATE) ./chronograf/dist/...
|
|
|
|
$(GO_GENERATE) ./chronograf/server/...
|
|
|
|
$(GO_GENERATE) ./chronograf/canned/...
|
2018-07-24 20:18:21 +00:00
|
|
|
|
2018-08-27 15:34:17 +00:00
|
|
|
test-js: node_modules
|
2018-07-24 20:18:21 +00:00
|
|
|
cd chronograf/ui && yarn test --runInBand
|
|
|
|
|
2018-08-27 15:34:17 +00:00
|
|
|
test-go: vendor
|
2018-05-22 17:28:04 +00:00
|
|
|
$(GO_TEST) ./...
|
|
|
|
|
2018-08-27 15:34:17 +00:00
|
|
|
test: test-go test-js
|
|
|
|
|
ci: enable GOCACHE for Circle
With a clean GOCACHE, `make test-go` took about 30 seconds. It's hard to
tell the exact time since `make vendor` was implicitly executed in the
same block.
Now, `make test-go` uses GOCACHE and takes about 5 seconds to restore
the cache, then about 8 seconds to run through a fully cached set of
tests. If any test is actually broken or doesn't compile, this will give
us fast feedback.
But this change also runs `go test -race -count=1`, so that we fully
exercise any possible data races. That currently takes about 19 seconds.
Then finally we save GOCACHE, which has our `go test` results, and a
populated build cache for our test files, including built with the race
detector. Saving that takes about 14 seconds.
That means we took about 30 seconds originally to just run `go test
-count=1`, and now we take (5+8+19+14)=46 seconds to run plain go test
and go test with the race detector. There's probably an argument to be
made for just running with the race detector, but running both gives us
more coverage IMO, and it does allow us to run tests that aren't enabled
on race builds.
See https://circleci.com/gh/influxdata/platform/1840 for a run with full
caching.
2018-08-28 16:39:44 +00:00
|
|
|
test-go-race: vendor
|
|
|
|
$(GO_TEST) -race -count=1 ./...
|
2018-05-22 17:28:04 +00:00
|
|
|
|
2018-08-27 15:34:17 +00:00
|
|
|
vet:
|
2018-05-22 22:19:04 +00:00
|
|
|
$(GO_VET) -v ./...
|
|
|
|
|
ci: enable GOCACHE for Circle
With a clean GOCACHE, `make test-go` took about 30 seconds. It's hard to
tell the exact time since `make vendor` was implicitly executed in the
same block.
Now, `make test-go` uses GOCACHE and takes about 5 seconds to restore
the cache, then about 8 seconds to run through a fully cached set of
tests. If any test is actually broken or doesn't compile, this will give
us fast feedback.
But this change also runs `go test -race -count=1`, so that we fully
exercise any possible data races. That currently takes about 19 seconds.
Then finally we save GOCACHE, which has our `go test` results, and a
populated build cache for our test files, including built with the race
detector. Saving that takes about 14 seconds.
That means we took about 30 seconds originally to just run `go test
-count=1`, and now we take (5+8+19+14)=46 seconds to run plain go test
and go test with the race detector. There's probably an argument to be
made for just running with the race detector, but running both gives us
more coverage IMO, and it does allow us to run tests that aren't enabled
on race builds.
See https://circleci.com/gh/influxdata/platform/1840 for a run with full
caching.
2018-08-28 16:39:44 +00:00
|
|
|
bench: vendor
|
2018-05-22 17:28:04 +00:00
|
|
|
$(GO_TEST) -bench=. -run=^$$ ./...
|
|
|
|
|
2018-07-02 16:36:41 +00:00
|
|
|
nightly: bin/$(GOOS)/goreleaser all
|
|
|
|
PATH=./bin/$(GOOS):${PATH} goreleaser --snapshot --rm-dist
|
2018-07-17 19:03:40 +00:00
|
|
|
docker push quay.io/influxdb/flux:nightly
|
2018-08-31 18:28:03 +00:00
|
|
|
docker push quay.io/influxdb/influx:nightly
|
2018-05-22 20:42:32 +00:00
|
|
|
|
2018-05-22 17:28:04 +00:00
|
|
|
# Recursively clean all subdirs
|
|
|
|
clean: $(SUBDIRS)
|
2018-06-25 23:24:52 +00:00
|
|
|
@for d in $^; do $(MAKE) -C $$d $(MAKECMDGOALS); done
|
2018-05-22 17:28:04 +00:00
|
|
|
rm -rf bin
|
|
|
|
|
|
|
|
# .PHONY targets represent actions that do not create an actual file.
|
ci: enable GOCACHE for Circle
With a clean GOCACHE, `make test-go` took about 30 seconds. It's hard to
tell the exact time since `make vendor` was implicitly executed in the
same block.
Now, `make test-go` uses GOCACHE and takes about 5 seconds to restore
the cache, then about 8 seconds to run through a fully cached set of
tests. If any test is actually broken or doesn't compile, this will give
us fast feedback.
But this change also runs `go test -race -count=1`, so that we fully
exercise any possible data races. That currently takes about 19 seconds.
Then finally we save GOCACHE, which has our `go test` results, and a
populated build cache for our test files, including built with the race
detector. Saving that takes about 14 seconds.
That means we took about 30 seconds originally to just run `go test
-count=1`, and now we take (5+8+19+14)=46 seconds to run plain go test
and go test with the race detector. There's probably an argument to be
made for just running with the race detector, but running both gives us
more coverage IMO, and it does allow us to run tests that aren't enabled
on race builds.
See https://circleci.com/gh/influxdata/platform/1840 for a run with full
caching.
2018-08-28 16:39:44 +00:00
|
|
|
.PHONY: all subdirs $(SUBDIRS) fmt test test-go test-js test-go-race bench clean node_modules vet
|