BUILD_NUMBER?=1
PROJECT?=copy_track_playlist_history_last_week
REPOSITORY=apollo/copy_track_playlist_history_last_week
TAG?=latest
AWS_ACCOUNT_ID?=475275892927
AWS_REGION?=us-east-1
ECR?=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
ECR_REPOSITORY?=${REPOSITORY}
REGISTRY?=${ECR}/${REPOSITORY}

REVISION ?= $(shell git rev-parse --short=8 HEAD)
VERSION ?= $(shell git rev-parse --abbrev-ref HEAD)
BUILDTIME = $(shell date -u +"%Y%m%d%H%M%S")
SEMVER ?= $(shell cat VERSION )

## -
## Local commands:

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

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

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

## -
## Version management

##   version/patch - increment version patch
.PHONY: version/patch
version/patch: ## increment version
	@bumpversion \
		--config-file .bumpversion.cfg \
		--current-version ${SEMVER} \
		patch VERSION --allow-dirty

##   version/minor - increment version minor
.PHONY: version/minor
version/minor:
	@bumpversion \
		--config-file .bumpversion.cfg \
		--current-version ${SEMVER} \
		minor VERSION --allow-dirty

##   version/major - increment version major
.PHONY: version/major
version/major:
	@bumpversion \
		--config-file .bumpversion.cfg \
		--current-version ${SEMVER} \
		major VERSION --allow-dirty

## -
## Docker commands:

##   docker/login - login to AWS docker, aws configuration need to be set first
.PHONY: docker/login
docker/login:
	@aws ecr get-login --no-include-email | awk '{print $$6}' | docker login -u AWS --password-stdin https://${ECR}

##   docker/image/build - build docker image
.PHONY: docker/image/build
docker/image/build:
	docker build \
		-t ${REPOSITORY}:${TAG} \
		-t ${REGISTRY}:${TAG} \
		-t ${REGISTRY}:${VERSION} \
		-f Dockerfile \
		.

##   docker/image/push - push an image to a registry
.PHONY: docker/image/push
docker/image/push: docker/login
	@docker push ${REGISTRY}:${TAG}
	@docker push ${REGISTRY}:${VERSION}

## -
## help - this message
.PHONY: help
help: Makefile
	@echo "Application: ${APP}\n"
	@echo "Run command:\n  make <target>\n"
	@grep -E -h '^## .*' $(MAKEFILE_LIST) | sed -n 's/^##//p'  | column -t -s '-' |  sed -e 's/^/ /'
