.PHONY: help requirements req clean env pip_dev dev demo_start lint fmt up down shell ps logs docker-login docker-build docker-push docker-fargate-deploy docker-pipeline
.DEFAULT_GOAL := help

# define root project dir
ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))

export APP_RUN_FROM_CLI = 1

help:
	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

clean: ## Clean environment
	rm -rf .venv .cache .pytest_cache .mypy_cache .coverage coverage.xml
	find . | grep -E '__pycache__|\.pyc|\.pyo$\' | xargs rm -rf

env pip_dev: ## Install dev requirements
	poetry env use python3.8
	poetry install

dev: ## Run developed Streamlit app
	poetry run streamlit run audience/app.py

demo_start: ## Run Streamlit default demo app
	poetry run streamlit hello

lint: ## Run code linters
	poetry run black audience/. --check
	poetry run isort audience/. --check
	poetry run flake8 audience/.
	poetry run mypy audience/.

fmt: ## Run code formatters
	poetry run black audience/.
	poetry run isort audience/.

up-local: ## Compose docker app using local OS
	@docker-compose -f docker-compose-local-os.yml up -d --build --remove-orphans

down-local: ## Shutdown docker app based on local OS
	@docker-compose -f docker-compose-local-os.yml down

up: ## Compose docker app
	@docker-compose up -d --build --remove-orphans

down: ## Shutdown docker app
	@docker-compose down

shell sh: ## Spawn shell inside docker
	@docker-compose exec streamlit-audience /bin/sh

ps: ## List all processes
	@docker-compose ps

logs: ## View logs
	@docker-compose logs -f

# Inspired by: https://github.com/theorchard/ows-podcast/blob/master/Makefile
docker-login:
	aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 103233932089.dkr.ecr.us-east-1.amazonaws.com

docker-build:
	docker build --tag streamlit-audience .

docker-push:
# push the latest version of the image to AWS ECR on DEV account
	docker tag streamlit-audience 103233932089.dkr.ecr.us-east-1.amazonaws.com/streamlit-audience
# NOTE: do not forget to run make docker-login before first run
	docker push 103233932089.dkr.ecr.us-east-1.amazonaws.com/streamlit-audience

docker-fargate-deploy:
	aws ecs update-service --cluster dev-streamlit-audience --service dev-streamlit-audience --task-definition streamlit-audience --force-new-deployment | tail -n +1 | jq -r '.service.events[0].message'

docker-pipeline: docker-build docker-push docker-fargate-deploy