.PHONY: create_contexts deploy upload pull start stop restart

include config.mk

self-update:
	@- git submodule update --remote
	
create-contexts:
	@- $(foreach host,$(DEPLOY_HOSTS), \
	    docker context create $(host) --description "$(host)" --docker "host=ssh://$(SSH_USER)@$(host)"; \
	)
	
deploy: upload pre-deploy pull start post-deploy

pre-deploy: pre-deploy-$(DEPLOY_TYPE)

post-deploy: post-deploy-$(DEPLOY_TYPE)

pre-deploy-compose: pre-deploy-docker

post-deploy-compose: post-deploy-docker

pre-deploy-swarm: pre-deploy-docker

post-deploy-swarm: post-deploy-docker

pre-deploy-docker:
	@- echo "\n### running pre-deploy script"
	@- $(foreach host,$(DEPLOY_HOSTS), \
		ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh pre-deploy"; \
	)
	
post-deploy-docker:
	@- echo "\n### running post-deploy script"
	@- $(foreach host,$(DEPLOY_HOSTS), \
		ssh $(SSH_USER)@$(host) "cd $(DEPLOY_PATH)/$(DEPLOY_NAME); sh post-deploy"; \
	)
	
upload:
	@- echo "\n### uploading files"
	@- $(foreach host,$(DEPLOY_HOSTS), \
		rsync -rav --exclude '*~' --exclude '.git*' . $(SSH_USER)@$(host):$(DEPLOY_PATH)/$(DEPLOY_NAME); \
	)

pull:
	@- echo "\n### pulling image(s)"
	@- $(foreach ctx,$(DEPLOY_HOSTS), \
		docker context use $(ctx); \
		docker pull $(DOCKER_IMAGE); \
	)
	
start: start-$(DEPLOY_TYPE)

start-compose:
	@- echo "\n### starting service(s)"
	@- $(foreach ctx,$(DEPLOY_HOSTS), \
		docker context use $(ctx); \
		docker-compose up -d; \
	)

start-swarm:

stop: stop-$(DEPLOY_TYPE)

stop-compose:
	@- echo "\n### stopping service(s)"
	@- $(foreach ctx,$(DEPLOY_HOSTS), \
		docker context use $(ctx); \
		docker-compose down; \
)

stop-swarm:

logs: logs-$(DEPLOY_TYPE)

logs-compose:
	@- echo "\n### logs"
	@- docker context use $(host)
	@- docker-compose logs -f $(service)


logs-swarm:

restart: restart-$(DEPLOY_TYPE)

restart-compose:
	@- $(foreach ctx,$(DEPLOY_HOSTS), \
		docker context use $(ctx); \
		docker-compose restart; \
	)

reload: reload-$(DEPLOY_TYPE)

reload-compose:
	@- $(foreach host,$(DEPLOY_HOSTS), \
		docker context use $(ctx); \
		docker-compose restart; \
	)