CLEAN_PACKAGES=\
	docker \
	docker-engine \
	docker.io \
	containerd \
	runc

REQUIRED_PACKAGES=\
	apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

DOCKER_PACKAGES=\
	docker-ce \
	docker-ce-cli \
	containerd.io

HOME_BIN_DIR=$(HOME)/bin

DOCKER_BIN=/usr/bin/docker
DOCKER_COMPOSE_BIN=$(HOME_BIN_DIR)/docker-compose
DOCKER_REPO_FILE=/etc/apt/sources.list.d/docker.list
DOCKER_COMPOSE_VERSION=1.25.0
DOCKER_COMPOSE_URL=https://github.com/docker/compose/releases/download/$(DOCKER_COMPOSE_VERSION)/docker-compose-$(shell uname -s)-$(shell uname -m)

ROOT_TEE=sudo tee
ROOT_APT=sudo aptitude
ROOT_ADD_KEY=sudo apt-key
ROOT_ADD_USER_TO_GROUP=sudo adduser
RELEASE:=$(shell lsb_release -cs)

clean: clean_docker clean_compose

clean_docker:
	-docker system prune
	-$(ROOT_APT) remove $(DOCKER_PACKAGES)
	sudo rm -f $(DOCKER_REPO_FILE)
	-$(ROOT_ADD_KEY) del Docker

clean_compose:
	rm -f $(DOCKER_COMPOSE_BIN)

install: install_docker install_compose
install_docker: $(DOCKER_BIN) 

install_compose: 
ifeq ("$(wildcard $(DOCKER_COMPOSE_BIN))","")
	$(MAKE) download_install_compose
else ifneq ($(shell docker-compose -v | awk -F'[, ]' '{print $$3}'), $(DOCKER_COMPOSE_VERSION))
	$(MAKE) download_install_compose
endif

force_update_compose: clean_compose install_compose

$(DOCKER_BIN):
	-$(ROOT_APT) remove $(CLEAN_PACKAGES)
	$(ROOT_APT) update
	$(ROOT_APT) install -y $(REQUIRED_PACKAGES)
	curl -fsSL https://download.docker.com/linux/ubuntu/gpg | $(ROOT_ADD_KEY) add -
	echo "deb https://download.docker.com/linux/ubuntu $(RELEASE) stable" \
		| $(ROOT_TEE) $(DOCKER_REPO_FILE)
	$(ROOT_APT) update
	$(ROOT_APT) install -y $(DOCKER_PACKAGES)
	$(ROOT_ADD_USER_TO_GROUP) $(shell id -nu) docker


download_install_compose: $(HOME_BIN_DIR)
	curl -L $(DOCKER_COMPOSE_URL) -o $(DOCKER_COMPOSE_BIN)
	chmod +x $(DOCKER_COMPOSE_BIN)

$(HOME_BIN_DIR):
	mkdir -p $(HOME_BIN_DIR)