include .env

default: up

COMPOSER_ROOT ?= /var/www/html

## help	:	Print commands help.
.PHONY: help
help : Makefile
	@sed -n 's/^##//p' $<

## up	:	Start up containers.
.PHONY: up
up:
	@echo "Starting up container"
	docker volume create $(PROJECT_NAME)_volume
ifeq (0, $(shell docker ps -a --filter="name=$(PROJECT_NAME)" | grep -wc $(PROJECT_NAME)))
	docker run -d --name $(PROJECT_NAME) $(PORTS) $(VOLUMES) -v $(PROJECT_NAME)_volume:$(COMPOSER_ROOT) --env-file=$(PWD)/.env $(ENV) wodby/php:$(PHP_TAG)
else
	docker start $(PROJECT_NAME)
endif

## down	:	Stop containers.
.PHONY: down
down: stop
	@echo "Stopping container"
	@docker stop $(PROJECT_NAME)

## prune	:	Remove container and volume.
.PHONY: prune
prune:
	@echo "Removing container"
	@docker rm -v -f $(PROJECT_NAME)

## ps	:	List running containers.
.PHONY: ps
ps:
	@docker ps --filter name='$(PROJECT_NAME)*'

## shell	:	Access `php` container via shell.
.PHONY: shell
shell:
	docker exec -ti -e COLUMNS=$(shell tput cols) -e LINES=$(shell tput lines) $(shell docker ps --filter name='$(PROJECT_NAME)' --format "{{ .ID }}") sh

## composer	:	Executes `composer` command in a specified `COMPOSER_ROOT` directory (default is `/var/www/html`).
##		To use "--flag" arguments include them in quotation marks.
##		For example: make composer "update drupal/core --with-dependencies"
.PHONY: composer
composer:
	docker exec $(shell docker ps --filter name='^/$(PROJECT_NAME)' --format "{{ .ID }}") composer --working-dir=$(COMPOSER_ROOT) $(filter-out $@,$(MAKECMDGOALS))

## exec	:	Executes a command in a specified `COMPOSER_ROOT` directory (default is `/var/www/html`).
##		To use "--flag" arguments include them in quotation marks.
.PHONY: exec
exec:
	docker exec $(shell docker ps --filter name='^/$(PROJECT_NAME)' --format "{{ .ID }}") $(COMPOSER_ROOT)/$(filter-out $@,$(MAKECMDGOALS))

## logs	:	View container logs.
.PHONY: logs
logs:
	@docker logs -f $(filter-out $@,$(MAKECMDGOALS)) $(PROJECT_NAME)

## mutagen-config	:	Generate mutagen config file.
.PHONY: mutagen-config
mutagen-config : mutagen.yml.dist .env
	@echo "Generating mutagen.yml"
	$(SHELL_EXPORT) envsubst <mutagen.yml.dist >mutagen.yml

## mutagen	:	Issue mutagen project commands.
.PHONY: mutagen
mutagen : mutagen.yml
	mutagen project $(filter-out $@,$(MAKECMDGOALS)) -f mutagen.yml

## tests	:	Run tests
.PHONY: tests
tests : phpunit.xml phpunit
	docker run --rm $(PORTS) $(VOLUMES) -v $(PROJECT_NAME)_volume:$(COMPOSER_ROOT) --env-file=$(PWD)/.env $(ENV) wodby/php:$(PHP_TAG) /var/www/html/vendor/bin/phpunit --configuration /var/www/html/phpunit.xml

# https://stackoverflow.com/a/6273809/1826109
%:
	@:
