more Makefile improvements
* warn upfront if go/dep/npm not available * try to find dep in $GOPATH/bin if not installed globally * only override variables if not externally defined, allowing manual override from command line * split up Makefile into a buid/setup.mk for simplicity I didn't actually find anything that made this Makefile not-linux specific -- tested on Debian with the standard make installed.
This commit is contained in:
parent
72c619f8bc
commit
2de3471aa2
2 changed files with 54 additions and 22 deletions
34
Makefile
34
Makefile
|
@ -1,20 +1,10 @@
|
||||||
GO=go
|
GO ?= $(shell command -v go 2> /dev/null)
|
||||||
MANIFEST_FILE=plugin.json
|
DEP ?= $(shell command -v dep 2> /dev/null)
|
||||||
|
NPM ?= $(shell command -v npm 2> /dev/null)
|
||||||
|
MANIFEST_FILE ?= plugin.json
|
||||||
|
|
||||||
# Ensure that the build tools are compiled. Go's caching makes this quick.
|
# Verify environment, and define PLUGIN_ID, HAS_SERVER and HAS_WEBAPP as needed.
|
||||||
$(shell cd build/manifest && $(GO) build -o ../bin/manifest)
|
include build/setup.mk
|
||||||
|
|
||||||
# Extract the plugin id from the manifest.
|
|
||||||
PLUGIN_ID=$(shell build/bin/manifest plugin_id)
|
|
||||||
ifeq ($(PLUGIN_ID),)
|
|
||||||
$(error Cannot parse id from $(MANIFEST_FILE))
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Determine if a server is defined in the manifest
|
|
||||||
HAS_SERVER=$(shell build/bin/manifest has_server)
|
|
||||||
|
|
||||||
# Determine if a webapp is defined in the manifest
|
|
||||||
HAS_WEBAPP=$(shell build/bin/manifest has_webapp)
|
|
||||||
|
|
||||||
# all, the default target, tests, builds and bundles the plugin.
|
# all, the default target, tests, builds and bundles the plugin.
|
||||||
all: test dist
|
all: test dist
|
||||||
|
@ -24,10 +14,10 @@ all: test dist
|
||||||
apply:
|
apply:
|
||||||
./build/bin/manifest apply
|
./build/bin/manifest apply
|
||||||
|
|
||||||
# vendor ensures the server dependencies are installed
|
# server/.depensure ensures the server dependencies are installed
|
||||||
server/.depensure:
|
server/.depensure:
|
||||||
ifneq ($(HAS_SERVER),)
|
ifneq ($(HAS_SERVER),)
|
||||||
cd server && dep ensure
|
cd server && $(DEP) ensure
|
||||||
touch $@
|
touch $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -44,7 +34,7 @@ endif
|
||||||
# webapp/.npminstall ensures NPM dependencies are installed without having to run this all the time
|
# webapp/.npminstall ensures NPM dependencies are installed without having to run this all the time
|
||||||
webapp/.npminstall:
|
webapp/.npminstall:
|
||||||
ifneq ($(HAS_WEBAPP),)
|
ifneq ($(HAS_WEBAPP),)
|
||||||
cd webapp && npm install
|
cd webapp && $(NPM) install
|
||||||
touch $@
|
touch $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -52,7 +42,7 @@ endif
|
||||||
.PHONY: webapp
|
.PHONY: webapp
|
||||||
webapp: webapp/.npminstall
|
webapp: webapp/.npminstall
|
||||||
ifneq ($(HAS_WEBAPP),)
|
ifneq ($(HAS_WEBAPP),)
|
||||||
cd webapp && npm run build;
|
cd webapp && $(NPM) run build;
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# bundle generates a tar bundle of the plugin for install
|
# bundle generates a tar bundle of the plugin for install
|
||||||
|
@ -103,12 +93,12 @@ endif
|
||||||
|
|
||||||
# test runs any lints and unit tests defined for the server and webapp, if they exist
|
# test runs any lints and unit tests defined for the server and webapp, if they exist
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: webapp/.npminstall
|
test: server/.depensure webapp/.npminstall
|
||||||
ifneq ($(HAS_SERVER),)
|
ifneq ($(HAS_SERVER),)
|
||||||
cd server && $(GO) test -v -coverprofile=coverage.txt ./...
|
cd server && $(GO) test -v -coverprofile=coverage.txt ./...
|
||||||
endif
|
endif
|
||||||
ifneq ($(HAS_WEBAPP),)
|
ifneq ($(HAS_WEBAPP),)
|
||||||
cd webapp && npm run fix;
|
cd webapp && $(NPM) run fix;
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# clean removes all build artifacts
|
# clean removes all build artifacts
|
||||||
|
|
42
build/setup.mk
Normal file
42
build/setup.mk
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# Ensure that go is installed. Note that this is independent of whether or not a server is being
|
||||||
|
# built, since the build script itself uses go.
|
||||||
|
ifeq ($(GO),)
|
||||||
|
$(error "go is not available: see https://golang.org/doc/install")
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Ensure that the build tools are compiled. Go's caching makes this quick.
|
||||||
|
$(shell cd build/manifest && $(GO) build -o ../bin/manifest)
|
||||||
|
|
||||||
|
# Extract the plugin id from the manifest.
|
||||||
|
PLUGIN_ID ?= $(shell build/bin/manifest plugin_id)
|
||||||
|
ifeq ($(PLUGIN_ID),)
|
||||||
|
$(error "Cannot parse id from $(MANIFEST_FILE)")
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Determine if a server is defined in the manifest.
|
||||||
|
HAS_SERVER ?= $(shell build/bin/manifest has_server)
|
||||||
|
|
||||||
|
# Determine if a webapp is defined in the manifest.
|
||||||
|
HAS_WEBAPP ?= $(shell build/bin/manifest has_webapp)
|
||||||
|
|
||||||
|
# Try looking for dep in $(GOPATH) in case $(GOPATH)/bin isn't in $(PATH).
|
||||||
|
GOPATH ?= $(shell $(GO) env GOPATH)
|
||||||
|
ifeq ($(DEP),)
|
||||||
|
ifneq ($(wildcard $(GOPATH)/bin/dep),)
|
||||||
|
DEP = $(GOPATH)/bin/dep
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Ensure that dep is installed.
|
||||||
|
ifneq ($(HAS_SERVER),)
|
||||||
|
ifeq ($(DEP),)
|
||||||
|
$(error "dep is not available: see https://golang.github.io/dep/docs/installation.html")
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Ensure that npm (and thus node) is installed.
|
||||||
|
ifneq ($(HAS_WEBAPP),)
|
||||||
|
ifeq ($(NPM),)
|
||||||
|
$(error "npm is not available: see https://www.npmjs.com/get-npm")
|
||||||
|
endif
|
||||||
|
endif
|
Reference in a new issue