include ./Makefile.variable

default: help
help:  ## display this help
	@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n  make \033[36m<target>\033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
.PHONY: help

env: ## create a development environment using pipenv
	sudo easy_install pip && \
	pip install pipenv -i https://repo.huaweicloud.com/repository/pypi/simple && \
	npm install yarn && \
	make deps
.PHONY: env

docker-mysql: ## deploy MySQL use docker
	@docker run --name mysql -p ${MYSQL_PORT}:3306 -e MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} -d mysql:latest
.PHONY: docker-mysql

docker-redis: ## deploy Redis use docker
	@docker run --name redis -p ${REDIS_PORT}:6379 -d redis:latest
.PHONY: docker-redis

deps: ## install dependencies using pip
	cd cmdb-api && \
	pipenv install --dev && \
	pipenv run flask db-setup && \
	pipenv run flask cmdb-init-cache && \
	cd .. && \
    cd cmdb-ui && yarn install && cd ..
.PHONY: deps

api: ## start api server
	cd cmdb-api && pipenv run flask run -h 0.0.0.0
.PHONY: api

worker: ## start async tasks worker
	cd cmdb-api && pipenv run celery -A celery_worker.celery worker -E -Q one_cmdb_async --autoscale=5,2 --logfile=one_cmdb_async.log -D && pipenv run celery -A celery_worker.celery worker -E -Q acl_async --autoscale=2,1 --logfile=one_acl_async.log -D
.PHONY: worker

ui: ## start ui server
	cd cmdb-ui && yarn run serve
.PHONY: ui

clean: ## remove unwanted files like .pyc's
	pipenv run flask clean
.PHONY: clean

lint: ## check style with flake8
	flake8 --exclude=env .
.PHONY: lint

api-docker-build:
	export DOCKER_CLI_EXPERIMENTAL=enabled ;\
	! ( docker buildx ls | grep multi-platform-builder ) && docker buildx create --use --platform=$(BUILD_ARCH) --name multi-platform-builder ;\
	docker buildx build \
    			--builder multi-platform-builder \
    			--platform=$(BUILD_ARCH) \
    			--tag $(REGISTRY)/cmdb-api:$(CMDB_DOCKER_VERSION)  \
    			--tag $(REGISTRY)/cmdb-api:latest  \
    			-f docker/Dockerfile-API \
    			.

ui-docker-build:
	export DOCKER_CLI_EXPERIMENTAL=enabled ;\
	! ( docker buildx ls | grep multi-platform-builder ) && docker buildx create --use --platform=$(BUILD_ARCH) --name multi-platform-builder ;\
	docker buildx build \
    			--builder multi-platform-builder \
    			--platform=$(BUILD_ARCH) \
    			--tag $(REGISTRY)/cmdb-ui:$(CMDB_DOCKER_VERSION)  \
    			--tag $(REGISTRY)/cmdb-ui:latest  \
    			-f docker/Dockerfile-UI \
    			.