PROJECT=postgresql-streamer
GCP_REGISTRY=eu.gcr.io/ac-registry

export COMPOSE_PROJECT_NAME ?= 'postgresql-streamer'

TB_OPTS=$(shell [ -t 0 ] || echo '-T')
TB=docker-compose run $(TB_OPTS) --rm app bash -c

DOCKER_COMPOSE_OVERRIDE ?= dev
export VOLUME_USER_ID?=$(shell id -u)

.PHONY: login
login: ## Login to Google Cloud Platform
	@gcloud auth list --filter="status:ACTIVE AND NOT account~serviceaccount" --format="value(account)" | grep -vq serviceaccount && \
	 	gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://eu.gcr.io || :

docker-stack: login docker-compose.override.yml
	docker-compose up -d --force-recreate dbz-test

down:
	docker-compose down

install: docker-compose.override.yml
	$(TB) 'composer install --no-progress --no-suggest'

test: install
	$(TB) 'bin/phpunit'

cs-fixer:
	$(TB) 'bin/php-cs-fixer fix src'

mq-init: ## Initialise queues and exchanges
	$(TB) bash -c "bin/console mq:init"

mq-producer-start: ## Launch wal parser producer
	$(TB) "bin/postgresql-streamer pgs:wal:parser -v"

mq-drop-slot: ## Drop the replication slot
	$(TB) "bin/postgresql-streamer pgs:wal:slot-dropper -v"

sh:
	$(TB) bash

docker-compose.override.yml: docker-compose.$(DOCKER_COMPOSE_OVERRIDE).yml
	cp -f docker-compose.$(DOCKER_COMPOSE_OVERRIDE).yml docker-compose.override.yml

build:
	docker build $(DOCKER_BUILD_OPTS) -t $(GCP_REGISTRY)/$(PROJECT) .

.PHONY: security
security: ## Run security check
	$(TB) 'local-php-security-checker  --path=./composer.lock'

release: CONTAINER_NAME=$(PROJECT)-container
release: build
	@-rm -f bin/postgresql-streamer.phar
	@-docker container rm -vf $(CONTAINER_NAME)
	@docker container create --name $(CONTAINER_NAME) $(GCP_REGISTRY)/$(PROJECT)
	@docker container cp $(CONTAINER_NAME):/app/postgresql-streamer.phar bin/postgresql-streamer.phar
	@docker container rm -vf $(CONTAINER_NAME)
	@docker image rm -f $(GCP_REGISTRY)/$(PROJECT)
	@chmod +x bin/postgresql-streamer.phar

release-no-cache: DOCKER_BUILD_OPTS=--no-cache
release-no-cache: release
