APP=$(shell basename $(CURDIR))
PACKAGE=$(subst _,-,$(APP))
STAGE?=dev
AWS_PROFILE?=gdb-infra-dev

REGISTRY ?= 483193324480.dkr.ecr.us-east-1.amazonaws.com/infra/lambda/$(PACKAGE)
REVISION ?= $(shell git rev-parse --short=8 HEAD)
VERSION ?= $(shell git rev-parse --abbrev-ref HEAD)

VENV_NAME?=venv
VENV_ACTIVATE=. $(VENV_NAME)/bin/activate
PYTHON=$(VENV_NAME)/bin/python3

venv: $(VENV_NAME)/bin/activate
$(VENV_NAME)/bin/activate: setup.py
	test -d $(VENV_NAME) || python3 -m venv $(VENV_NAME)
	cp pip.conf venv/
	$(PYTHON) -m pip install -U pip
	$(PYTHON) -m pip install -e .
	touch $(VENV_NAME)/bin/activate

.PHONY:devenv
devenv: venv
	$(PYTHON) -m pip install -r requirements/dev.pip

.PHONY:test
test: devenv
	$(VENV_ACTIVATE) && pytest -m "not integration" tests

.PHONY:lint
lint: devenv
	$(VENV_ACTIVATE) && pylint $(APP)

.PHONY:clean
clean:
	@rm -f $(PACKAGE)-*.zip
	@rm -rf build/
	@rm -rf dist/
	@rm -rf *.egg-info
	@rm -rf *.pyc
	@rm -rf .*_cache

.PHONY:package
package:venv
	$(VENV_ACTIVATE) && zappa package $(STAGE)

.PHONY:upload
upload:venv
	$(VENV_ACTIVATE) && zappa update $(STAGE)

.PHONY:deploy
deploy:venv
	$(VENV_ACTIVATE) && zappa deploy $(STAGE)

.PHONY:schedule
schedule:venv
	$(VENV_ACTIVATE) && zappa schedule $(STAGE)

.PHONY:unschedule
unschedule:venv
	$(VENV_ACTIVATE) && zappa unschedule $(STAGE)

.PHONY: docker/login
docker/login:
	$$(aws ecr get-login --profile gdb-delphi-dev --no-include-email --region us-east-1)
	$$(aws ecr get-login --profile $(AWS_PROFILE) --no-include-email --region us-east-1)

.PHONY: docker/build
docker/build: docker/login
	docker build \
		--no-cache \
		--build-arg PACKAGE=$(PACKAGE) \
		-t $(REGISTRY):$(VERSION) \
		-t $(REGISTRY):$(REVISION) .

.PHONY: docker/push
docker/push: docker/login
	docker push $(REGISTRY):$(VERSION)
	docker push $(REGISTRY):$(REVISION)
