ACCOUNT_ID  ?= 475275892927
AWS_REGION  ?= us-east-1
AWS_PROFILE ?= gdb-delphi-dev
ECR ?= ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
REGISTRY ?= ${ECR}/apollo/ui-test-selinoid-runner
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")
BRANCH_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
PKG_VERSION ?= $(shell cat VERSION)


.PHONY:checkstyle
checkstyle:
	set -e
	isort -rc -w 120 --check-only --quiet ui-automation-framework/
	flake8 ui-automation-framework/ --max-line-length=120

.PHONY:dependencies-check
dependencies-check:
	safety check

.PHONY:owasp
owasp:
	bandit -r ui-automation-framework --skip B101,B311

.PHONY:security
security: dependencies-check owasp

.PHONY:prettify
prettify:
	black ui_automation_framework --exclude='/(\.eggs|\.git|\.hg|\.mypy_cache|\.nox|\.tox|\.venv|venv|_build|buck-out|build|dist|migrations|.pytest_cache)/' --line-length=120 --target-version=py38
	isort -rc -w 120 ui-automation-framework

.PHONY:pre-commit
pre-commit: prettify checkstyle security

.PHONY:docker/login
docker/login:
	@aws ecr get-login \
		--profile ${AWS_PROFILE} \
		--no-include-email \
		--region ${AWS_REGION} | awk '{print $$6}' | \
		docker login -u AWS --password-stdin https://${ECR}

.PHONY:docker/login_v2
docker/login_v2:
	@aws ecr get-login-password \
		--profile ${AWS_PROFILE} \
		--region ${AWS_REGION} | \
		docker login --username AWS --password-stdin ${ECR}


.PHONY:docker/push
docker/image/push:
	@docker push $(REGISTRY):$(VERSION)
	@docker push $(REGISTRY):$(REVISION)
	@docker push $(REGISTRY):$(BRANCH_NAME)
	@docker push $(REGISTRY):$(PKG_VERSION)

.PHONY:docker/build
docker/image/build:
	@docker build \
		--no-cache \
		--build-arg PKG_VERSION=$(PKG_VERSION) \
		--build-arg REVISION=$(REVISION) \
		--build-arg BUILDTIME=$(BUILDTIME) \
		-t $(REGISTRY):$(VERSION) \
		-t $(REGISTRY):$(REVISION) \
		-t $(REGISTRY):$(BRANCH_NAME) \
		-t $(REGISTRY):$(PKG_VERSION) .

.PHONY:docker/package/build
docker/package/build:
	@docker build \
		--build-arg TWINE_USERNAME \
		--build-arg TWINE_PASSWORD \
		-f Dockerfile.build \
		-t ui-automation-framework-pkg:latest .

.PHONY:docker/package/upload
docker/package/upload:
	@docker run --rm ui-automation-framework-pkg:latest

## -
## Version management

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

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

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

