SHELL=/bin/bash

ifndef VERBOSE
.SILENT:
endif

CLEAR="\033[0m"
BOLD="\033[1m"
GREEN="\033[32m"
RED="\033[31m"
BLUE="\033[34m"
WHITE="\033[37m"

.PHONY: clean list_targets build build-arch build-debian arch archlinux debian run ansible release

all: list_targets

list_targets:
	echo "List of targets:"
	@grep '^[^#[:space:]].*:' Makefile

debian: clean build-debian run
arch archlinux: clean build-arch run

build: build-arch

build-debian: Dockerfile.debian
	docker build -t brethil/dotfiles:dev -f Dockerfile.debian .

build-arch: Dockerfile.archlinux
	docker build -t brethil/dotfiles:dev -f Dockerfile.archlinux .

run: _run
	echo -e ${GREEN} "***" ${CLEAR} Watching logs from the container. Hit Ctrl+C to stop watching.
	docker logs -f dotfiles-dev

_run: Dockerfile.archlinux Dockerfile.debian build clean
	docker run -d --name=dotfiles-dev -v ${PWD}/..:/root/.dotfiles brethil/dotfiles:dev
	echo -en ${GREEN} "***" ${CLEAR} Started container, listening on
	echo -e ${BOLD}${WHITE} `docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' dotfiles-dev`:22 ${CLEAR}
	echo -e ${BLUE} "***" ${CLEAR} Run \`make clean\` to stop and remove the container

ansible: ../ansible/playbooks/setup.yml _run
	ANSIBLE_HOST_KEY_CHECKING=False ansible-playbook -i ansible-hosts -e local_development=true  ../ansible/playbooks/setup.yml

release: build-arch ansible
	docker commit -m "install and initialize dotfiles (ansible)"  dotfiles-dev brethil/dotfiles:latest
	docker tag brethil/dotfiles:latest brethil/dotfiles:`git rev-parse --short HEAD &2>/dev/null`
	echo -e ${GREEN} "***" ${CLEAR} committed and tagged the \"dockerfiles-dev\" to brethil/dotfiles:latest and :`git rev-parse HEAD --short`
	if ! git diff --quiet --exit-code; then \
		docker tag brethil/dotfiles:latest brethil/dotfiles:dev && \
		echo -e ${GREEN} "***" ${CLEAR} committed and tagged the \"dockerfiles-dev\" to brethil/dotfiles:dev; \
	fi

clean:
	echo -e ${GREEN} "***" ${CLEAR} Stopping and removing \"dockerfiles-dev\" container...
	docker kill dotfiles-dev &>/dev/null &>/dev/null && echo -e ${GREEN} "***" ${CLEAR} Killed container: dotfiles-dev || echo -e ${BLUE} "***" ${CLEAR} no containers to stop
	docker rm dotfiles-dev &>/dev/null && echo -e ${GREEN} "***" ${CLEAR} Removed container: dotfiles-dev || echo -e ${BLUE} "***" ${CLEAR} no containers to remove