APP=delphi_api_java
PACKAGE=$(subst _,-,$(APP))
STAGE?=dev

REGISTRY ?= $(APP)
REVISION ?= $(shell git rev-parse --short=8 HEAD)
VERSION ?= $(shell git rev-parse --abbrev-ref HEAD)
SEMVER ?= $(shell cat VERSION )
DD_VERSION ?= $(SEMVER)
SERVICE_NAME ?= $(PACKAGE)

# Sentry config
SENTRY_RELEASE = "$(SERVICE_NAME)@$(SEMVER)"

CLASSPATH = src/main/java
# protobuf configuration
PROTO_SOURCE_DIR = $(CLASSPATH)/io/delphiplatform/api/proto
PROTO_OUTPUT_DIR = $(CLASSPATH)
PROTO_SOURCE_FILES = amazon_v3.proto apple_v3.proto spotify_v3.proto youtube_v3.proto

# Base image AWS profile
AWS_PROFILE_BASE_IMAGE = gdb-infra-dev

.PHONY:codegen
codegen:
	protoc -I=$(PROTO_SOURCE_DIR) --java_out=$(PROTO_OUTPUT_DIR) $(PROTO_SOURCE_FILES)


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

.PHONY: docker/login-base
docker/login-base:
	$$(aws ecr get-login --no-include-email --profile ${AWS_PROFILE_BASE_IMAGE} --region us-east-1)

.PHONY: docker/build
docker/build: docker/login-base
	docker build \
		--build-arg APP=$(APP) \
		--build-arg PACKAGE=$(PACKAGE) \
		--build-arg SERVICE_PORT=8000 \
		--build-arg DD_VERSION=$(DD_VERSION) \
		--build-arg SENTRY_RELEASE=$(SENTRY_RELEASE) \
		--build-arg REVISION=$(REVISION) \
		--target main \
		-t $(REGISTRY):$(VERSION) \
		-t $(REGISTRY):$(REVISION) .
	docker build \
		--build-arg APP=$(APP) \
		--build-arg PACKAGE=$(PACKAGE) \
		--build-arg SERVICE_PORT=8000 \
		--build-arg DD_VERSION=$(DD_VERSION) \
		--build-arg SENTRY_RELEASE=$(SENTRY_RELEASE) \
		--build-arg REVISION=$(REVISION) \
		--target test \
		-t $(REGISTRY):test .

.PHONY: docker/run
docker/run: docker/build
	docker run -v ~/.aws:/app/.aws:ro $(REGISTRY):$(REVISION)

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