BUILD_NUMBER?=1
PROJECT?="ds-artist-similarity-matrix"
REPOSITORY="ds-artist-similarity-matrix"
TAG?=latest
VERSION=$(shell cat inference/VERSION)
VERSION_BUILD_NUMBER="${VERSION}-${BUILD_NUMBER}"
AWS_ACCOUNT_ID?=313114233826
AWS_REGION?=us-east-1
ECR?=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
ECR_REPOSITORY?="${ECR}/${REPOSITORY}"

.PHONY: help
help:
	@printf "\n\e[1m%+34s\e[0m\n\n" "Configuration"
	@echo "BUILD_NUMBER: ${BUILD_NUMBER}"
	@echo "PROJECT: ${PROJECT}"
	@echo "REPOSITORY: ${REPOSITORY}"
	@echo "TAG: ${TAG}"
	@echo "VERSION: ${VERSION}"
	@echo "VERSION_BUILD_NUMBER: ${VERSION_BUILD_NUMBER}"
	@echo "AWS_ACCOUNT_ID: ${AWS_ACCOUNT_ID}"
	@echo "AWS_REGION: ${AWS_REGION}"
	@echo "ECR: ${ECR}"
	@echo "ECR_REPOSITORY: ${ECR_REPOSITORY}"
	@printf "\n\e[1m%+30s\e[0m\n\n" "Usage"
	@grep -E '^[a-zA-Z_-\/]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

.PHONY: venv/init
venv/init: ## create virtual environment if it doesn't exist
	@test -d inference/venv || python3 -m venv inference/venv

.PHONY: venv/activate
venv/activate: venv/init ## activate virtual environment and install dependencies
	@source inference/venv/bin/activate; pip install -r inference/requirements.txt

.PHONY: local/init
local/init: ## install bumpversion via pip
	@pip install --user --upgrade bumpversion

.PHONY: bumpversion
bumpversion:
	bumpversion \
		--config-file inference/.bumpversion.cfg \
		--current-version ${VERSION} \
		patch inference/VERSION --allow-dirty

.PHONY: docker/login
docker/login: ## get credentials to login into ECR
	@aws ecr get-login --no-include-email | awk '{print $$6}' | docker login -u AWS --password-stdin https://${ECR}

.PHONY: docker/build
docker/build: ## buid docker image
	@docker build \
				  -t ${REPOSITORY}:${TAG} \
				  -t ${ECR_REPOSITORY}:${TAG} \
				  -t ${ECR_REPOSITORY}:${VERSION} \
                  -t ${ECR_REPOSITORY}:${VERSION_BUILD_NUMBER} \
                  -f inference/Dockerfile \
                  inference/

.PHONY: docker/push
docker/push: docker/login ## push image to ECR
	@docker push ${ECR_REPOSITORY}:${TAG}
	@docker push ${ECR_REPOSITORY}:${VERSION}
	@docker push ${ECR_REPOSITORY}:${VERSION_BUILD_NUMBER}

.PHONY: docker/run
docker/run: docker/build ## run docker container
	@docker run --rm -t -i -p 8000:8000 ${REPOSITORY}:${TAG}