influxdb/Makefile

148 lines
4.3 KiB
Makefile
Raw Normal View History

2018-05-22 17:28:04 +00:00
# Top level Makefile for the entire project
#
# 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.
#
SUBDIRS := query task chronograf/ui
2018-05-22 17:28:04 +00:00
GO_ARGS=-tags '$(GO_TAGS)'
# Test vars can be used by all recursive Makefiles
export GOOS=$(shell go env GOOS)
2018-05-22 17:28:04 +00:00
export GO_BUILD=go build $(GO_ARGS)
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)
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)
# All assets for chronograf
UISOURCES := $(shell find chronograf/ui -type f -not \( -path chronograf/ui/build/\* -o -path chronograf/ui/node_modules/\* -o -path chronograf/ui/.cache/\* -o -name Makefile -prune \) )
# All precanned dashboards
PRECANNED := $(shell find chronograf/canned -name '*.json')
2018-05-22 17:28:04 +00:00
# List of binary cmds to build
CMDS := \
bin/$(GOOS)/influx \
bin/$(GOOS)/influxd \
bin/$(GOOS)/fluxd
2018-05-22 17:28:04 +00:00
# List of utilities to build as part of the build process
UTILS := \
bin/$(GOOS)/pigeon \
bin/$(GOOS)/protoc-gen-gogofaster \
bin/$(GOOS)/goreleaser \
bin/$(GOOS)/go-bindata
2018-05-22 17:28:04 +00:00
# Default target to build all go commands.
2018-05-22 17:28:04 +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.
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)
@for d in $^; do $(MAKE) -C $$d all; done
2018-05-22 17:28:04 +00:00
#
# Define targets for commands
#
$(CMDS): $(SOURCES)
$(GO_BUILD) -i -o $@ ./cmd/$(shell basename "$@")
2018-05-22 17:28:04 +00:00
#
# Define targets for utilities
#
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
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
bin/$(GOOS)/goreleaser: ./vendor/github.com/goreleaser/goreleaser/main.go
go build -i -o $@ ./vendor/github.com/goreleaser/goreleaser
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
vendor: Gopkg.lock
dep ensure -v -vendor-only
node_modules: chronograf/ui/node_modules
chronograf/ui/node_modules:
make -C chronograf/ui node_modules
2018-05-22 17:28:04 +00:00
#
# Define how source dependencies are managed
#
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 $^
chronograf/dist/dist_gen.go: chronograf/ui/build $(UISOURCES)
$(GO_GENERATE) ./chronograf/dist/...
chronograf/server/swagger_gen.go: chronograf/server/swagger.json
$(GO_GENERATE) ./chronograf/server/...
chronograf/canned/bin_gen.go: $(PRECANNED)
$(GO_GENERATE) ./chronograf/canned/...
2018-07-24 20:18:21 +00:00
generate: chronograf/dist/dist_gen.go chronograf/server/swagger_gen.go chronograf/canned/bin_gen.go
test-js: node_modules
make -C chronograf/ui test
2018-07-24 20:18:21 +00:00
test-go: vendor
2018-05-22 17:28:04 +00:00
$(GO_TEST) ./...
test: test-go test-js
test-go-race: vendor
$(GO_TEST) -race -count=1 ./...
2018-05-22 17:28:04 +00:00
vet:
2018-05-22 22:19:04 +00:00
$(GO_VET) -v ./...
bench: vendor
2018-05-22 17:28:04 +00:00
$(GO_TEST) -bench=. -run=^$$ ./...
nightly: bin/$(GOOS)/goreleaser all
PATH=./bin/$(GOOS):${PATH} goreleaser --snapshot --rm-dist --publish-snapshots
2018-05-22 17:28:04 +00:00
# Recursively clean all subdirs
clean: $(SUBDIRS)
@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.
.PHONY: all subdirs $(SUBDIRS) fmt test test-go test-js test-go-race bench clean node_modules vet nightly