You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
3.1 KiB
Makefile

.DEFAULT_GOAL := help
RED=\033[31m
CYAN=\033[36m
YELLOW=\033[33m
GREEN=\033[32m
DEFAULT=\033[0m
ENV := development
DOCKER := true
DOCKER_NETWORK := bridge
VERSION := $(shell cat VERSION)
OS := $(shell uname)
PROJECT_ROOT := $(shell pwd)
PROJECT_CONTAINER_ROOT := /usr/local/bin/google-sync
DOCKER_IMAGE := richardregeer/google-drive-sync
NODE_MODULES := ./node_modules/.bin
ifeq ($(DOCKER),true)
START_COMMAND := docker run --rm -it --init --net=${DOCKER_NETWORK} \
-v ${PROJECT_ROOT}:${PROJECT_CONTAINER_ROOT} \
-v ${PROJECT_ROOT}/etc/config.dev.json:${PROJECT_CONTAINER_ROOT}/etc/config.json \
-v ${PROJECT_ROOT}/etc/rclone.dev.conf:/root/.config/rclone/rclone.conf \
-v ${PROJECT_ROOT}/sync-root:/var/target \
-w ${PROJECT_CONTAINER_ROOT} \
${DOCKER_IMAGE}:${ENV}
else
START_COMMAND :=
endif
.PHONY: help
help:
@echo -e 'To run a task: ${GREEN}make [task_name]${DEFAULT}'
@echo "\tExample: make build ENV='production'"
@echo ''
@echo 'By default the task will run in development environment mode using docker on a bridge network.'
@echo -e 'The environment can be changed by passing ${YELLOW}ENV=[development|production|ci]${DEFAULT}.'
@echo -e 'To run a command on the host without docker use argument ${YELLOW}DOCKER=false${DEFAULT}.'
@echo -e 'By default docker runs in bridge network mode to change use argument ${YELLOW}DOCKER_NETWORK=[host|bridge]${DEFAULT}.'
@echo "\tExample: make start ENV=production DOCKER=false DOCKER_NETWORK=host"
@echo ''
@echo -e 'Please add a valid token in ${GREEN}/etc/rclone.dev.conf${DEFAULT} before running ${YELLOW}make start${DEFAULT}. The files will be synced to the ${GREEN}sync-root${DEFAULT} folder in the project.\nSync configuration can be changed in ${GREEN}etc/config.dev.json${DEFAULT}'
@echo ''
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "%s%-30s%s %s\n", "${CYAN}", $$1, "${DEFAULT}",$$2}'
.PHONY: start
start: ## Start docker google drive sync on development.Possible environments ENV=development
ifneq ($(ENV),development)
$(error Required ENV='development')
endif
${START_COMMAND} npm start
.PHONY: install
install: ## Install the docker google drive sync development environment. Possible environments ENV=development|ci
ifeq ($(ENV),development)
@echo -e '${CYAN}Install the docker google drive sync development environment${DEFAULT}'
make build
${START_COMMAND} npm install
endif
ifeq ($(ENV),ci)
@echo -e '${CYAN}Install the docker google drive sync ci environment${DEFAULT}'
npm install
endif
.PHONY: build
build: ## Build the google drive sync image.
docker build \
-t ${DOCKER_IMAGE}:development \
-t ${DOCKER_IMAGE}:ci \
-t ${DOCKER_IMAGE}:production \
-t ${DOCKER_IMAGE}:${VERSION} \
-t ${DOCKER_IMAGE}:latest .
.PHONY: publish
publish: ## Pubish docker image to docker hub only available on ci environment.
ifneq ($(ENV),ci)
$(error Required ENV='ci')
endif
docker login -u ${DOCKER_USERNAME} -p ${DOCKER_PASSWORD}
docker push ${DOCKER_IMAGE}:${VERSION}
docker push ${DOCKER_IMAGE}:latest
.PHONY: lint
lint: ## Check the codestyle of the complete project.
${START_COMMAND} ${NODE_MODULES}/eslint .