.DEFAULT_GOAL := build

GIT_COMMIT ?= $(shell git rev-parse HEAD)
GIT_TAG ?= $(shell git describe --tags --always)
VERSION = $(or $(GIT_TAG),$(GIT_TAG),latest-dev)
IMAGE = eu.gcr.io/ac-registry/cron-reporter-cli
IMAGE_FQDN = $(IMAGE):$(VERSION)
CONTAINER_NAME :=
ifdef $(CI_JOB_ID)
	CONTAINER_NAME = cron-reporter-cli-builder-$(CI_JOB_ID)
else
	CONTAINER_NAME = cron-reporter-cli-builder
endif
UNAME_S := $(shell uname -s)

.PHONY: docker-build
ifdef DEBUG
docker-build: DOCKER_BUILD_OPTS =
else
docker-build: DOCKER_BUILD_OPTS = --quiet
endif
docker-build: DOCKER_FILE = Dockerfile
docker-build:
	@echo "Building $(IMAGE_FQDN) (GIT_COMMIT: $(GIT_COMMIT))"
	@docker rm -f $(CONTAINER_NAME) 2>/dev/null || :
	docker build --pull $(DOCKER_BUILD_OPTS) \
		--build-arg GIT_COMMIT=$(GIT_COMMIT)\
		--build-arg VERSION=$(VERSION) \
		--build-arg OS=$(UNAME_S) \
		--build-arg http_proxy=$$http_proxy \
		--build-arg https_proxy=$$https_proxy \
		-f $(DOCKER_FILE) \
		-t $(IMAGE_FQDN) .
	@docker rm -f $(CONTAINER_NAME) 2>/dev/null || :

.PHONY: docker-clean
docker-clean:
	@docker image rm -f $(IMAGE_FQDN) || :

.PHONY: build-dev
build-dev: docker-build ## Build the binary for current OS
	@mkdir -p bin
	@docker rm -f $(CONTAINER_NAME) 2>/dev/null || :
	docker create --name $(CONTAINER_NAME) $(IMAGE_FQDN)
	docker cp $(CONTAINER_NAME):/app/. bin/
	@docker rm -f $(CONTAINER_NAME) 2>/dev/null || :

.PHONY: build
build: UNAME_S =
build: build-dev ## Build the binary for all OSes and clean
	$(MAKE) docker-clean

.PHONY: dev
dev: DEV_IMAGE=dev-$(CONTAINER_NAME)
dev: DEV_CONTAINER=dev-$(CONTAINER_NAME)
dev: # Build and get in the container
	docker build -t $(DEV_IMAGE) .
	docker run --name $(DEV_CONTAINER) --rm -ti $(DEV_IMAGE)

.PHONY: release
release: docker-build ## Release a Docker image
	docker push $(IMAGE_FQDN)
	$(MAKE) docker-clean

login: ## Login to Google Cloud Platform
	@gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://eu.gcr.io

help:
	@grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

.PHONY: extract-from-image
extract-from-image:
	mkdir bin
	docker container rm -vf $(CONTAINER_NAME) || :
	docker container create --name $(CONTAINER_NAME) $(PREBUILT_IMAGE)
	docker container cp $(CONTAINER_NAME):/app/cron bin/
	docker container rm -vf $(CONTAINER_NAME)
	docker image rm -f $(IMAGE_FQDN)

.PHONY: gcp-clean-images
gcp-clean-images:
	IMAGE_FQDN=$(IMAGE) .makefiles/clean-old-images.sh
