Newer
Older
.DEFAULT_GOAL := default
SHELL = /usr/bin/env bash -eo pipefail
MKFILE_DIR = $(abspath $(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
LOCAL_DIR := $(abspath $(MKFILE_DIR)/.local)
DATA_DIR := $(LOCAL_DIR)/data
LOG_DIR := $(LOCAL_DIR)/logs
TEMP_DIR := $(LOCAL_DIR)/temp
APP_NODE_MODULE_DIRS = $(foreach dir, client server, $(subst %,$(dir),$(MKFILE_DIR)/app/%/node_modules))
.PHONY: install
install: $(APP_NODE_MODULE_DIRS)
$(APP_NODE_MODULE_DIRS):
cd $(@D) \
&& npm install
echo "DELETING: $(APP_NODE_MODULE_DIRS) $(TEMP_DIR) $(LOCAL_DIR)/dist" | tr ' ' '\n'
read -p "OK? [N,y] " input; [[ "$${input}" == "y" ]] \
&& rm -rf \
$(APP_NODE_MODULE_DIRS) \
$(TEMP_DIR) \
$(LOCAL_DIR)/dist
build: SERVER_PUBLIC_URL ?= http://127.0.0.1:3001
build: APP_BUILD_PATH ?= $(TEMP_DIR)
echo "DELETING: $(APP_BUILD_PATH)" | tr ' ' '\n'
read -p "OK? [N,y] " input; [[ "$${input}" == "y" ]] \
&& rm -rf $(APP_BUILD_PATH)
cp -r $(MKFILE_DIR)/app/server/src $(APP_BUILD_PATH)
cp $(MKFILE_DIR)/app/server/package* $(APP_BUILD_PATH)/
cd $(APP_BUILD_PATH) \
&& \
npm install --prod --no-audit --no-fund \
&& rm -rf ./package*
cd $(MKFILE_DIR)/app/client \
&& \
PUBLIC_URL=$(SERVER_PUBLIC_URL) \
BUILD_PATH=$(APP_BUILD_PATH)/public \
test: randomString = $(shell LC_ALL=C tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w 32 | head -n 1)
test:
cd $(MKFILE_DIR)/app/client \
&& npm run test
&& \
PORT=3002 \
MONGODB_URL=mongodb://localhost:27017/$(randomString) \
JWT_SECRET=$(randomString) \
npm run test
cd $(MKFILE_DIR)/app/client \
dev-start-db: $(LOG_DIR)/ $(DATA_DIR)/ $(DATA_DIR)/db/
mongod --config $(MKFILE_DIR)/app/server/dev.mongod.conf
dev-start-app:
cd $(MKFILE_DIR)/app/client \
&& \
PUBLIC_URL=$(SERVER_PUBLIC_URL) \
BUILD_PATH=$(MKFILE_DIR)/app/server/src/public \
node ./scripts/build.js
cd $(MKFILE_DIR)/app/server \
&& npm run start:dev
run: BUILD_PATH = $(LOCAL_DIR)/dist
run: SERVER_PORT = 3000
run: DB_HOST = localhost
run: DB_PORT = 27017
run: $(DATA_DIR)/ $(LOG_DIR)/ $(DATA_DIR)/db/
make build \
APP_BUILD_PATH=$(BUILD_PATH) \
SERVER_PUBLIC_URL=$(PUBLIC_URL):$(SERVER_PORT)
--port $(DB_PORT) \
--bind_ip $(DB_HOST) \
--logpath /dev/stdout \
--dbpath $(DATA_DIR)/db \
) & PIDS[1]=$$!; \
\
(PORT=$(SERVER_PORT) \
MONGODB_URL=mongodb://$(DB_HOST):$(DB_PORT)/todo-app \
JWT_SECRET=myjwtsecret \
exec node $(BUILD_PATH)/index.js \
) & PIDS[2]=$$!; \
\
for PID in $${PIDS[*]}; do wait $${PID}; done;