MKFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST)))
PROJECT_PATH := $(patsubst %/,%,$(dir $(MKFILE_PATH)))
COMPONENT = apicast-operator
GIT_BRANCH = $(shell git symbolic-ref --short HEAD)
TAG = $(shell cat container.yaml | grep ref | awk '{print $$2}')
SOURCE = $(TAG).tar.gz
SOURCES_TARBALL_URL = https://github.com/3scale/$(COMPONENT)/archive/$(SOURCE)
TARGET = $(GIT_BRANCH)-candidate
OPERATOR_LICENSES_TARBALL = licenses-$(COMPONENT).tar.gz
OPERATOR_BINARY_TARBALL = binary-$(COMPONENT).tar.gz
OPERATOR_VENDOR_TARBALL = vendor-$(COMPONENT).tar.gz
OPERATOR_SOURCES_TARBALL = $(COMPONENT)-$(TAG).tar.gz
BUILDER_CONTAINER = $(COMPONENT)-builder-container
BUILDER_IMAGE = $(COMPONENT)-builder
LOCAL_IMAGE_TAG = $(COMPONENT):$(TAG)

.DEFAULT_GOAL := help
.PHONY : help
help: Makefile
	@sed -n 's/^##//p' $<

## info: Build configuration info
.PHONY: info
info:
	@echo "************************************************************"
	@echo This Makefile builds $(COMPONENT)
	@echo BRANCH=$(GIT_BRANCH) TARGET=$(TARGET)
	@echo "************************************************************"
	@echo
	@echo Please check this matches your expectations and override variables if needed.
	@echo

.PHONY: apicast-operator-builder-image
apicast-operator-builder-image:
	docker history -q $(BUILDER_IMAGE) 2> /dev/null >&2 || \
		$(MAKE) -C builder build-image

$(OPERATOR_BINARY_TARBALL): | apicast-operator-builder-image
	docker run --user $$(id -u):$$(id -g) --rm --name $(BUILDER_CONTAINER) \
	  -e "TARBALL_URL=$(SOURCES_TARBALL_URL)" \
		-e "OUTPUT_DIR=/tmp/_output/bin" \
		-e "BUILD_MODE=binary" \
		-v $(PROJECT_PATH):/tmp/_output/bin \
		$(BUILDER_IMAGE)

$(OPERATOR_SOURCES_TARBALL):
	curl -L ${SOURCES_TARBALL_URL} -o $@

$(OPERATOR_VENDOR_TARBALL): | apicast-operator-builder-image
	docker run --user $$(id -u):$$(id -g) --name $(BUILDER_CONTAINER) \
	  -e "TARBALL_URL=$(SOURCES_TARBALL_URL)" \
		-e "OUTPUT_DIR=/tmp/_output/vendor_output" \
		-e "BUILD_MODE=vendor" \
		-v $(PROJECT_PATH):/tmp/_output/vendor_output \
		$(BUILDER_IMAGE)
	docker cp $(BUILDER_CONTAINER):/tmp/_output/vendor_output/$@ $@
	# delete container
	docker rm `docker ps -a -q --filter="name=${BUILDER_CONTAINER}"`

$(OPERATOR_LICENSES_TARBALL):
	SOURCE_TARBALL_URL=$(SOURCES_TARBALL_URL) \
	OUTPUT_TARBALL=$(OPERATOR_LICENSES_TARBALL) \
	$(PROJECT_PATH)/archive_licenses.sh 

## sources : Update sources file
sources: $(OPERATOR_VENDOR_TARBALL) $(OPERATOR_LICENSES_TARBALL)
	md5sum $(OPERATOR_VENDOR_TARBALL) > $@
	md5sum $(OPERATOR_LICENSES_TARBALL) >> $@

## cache: Commit new sources via rhpkg new-sources
.PHONY: cache
cache: sources
	rhpkg new-sources $(OPERATOR_VENDOR_TARBALL) $(OPERATOR_LICENSES_TARBALL)

## build: Run local build
.PHONY: build
build: $(OPERATOR_SOURCES_TARBALL) $(OPERATOR_VENDOR_TARBALL) $(OPERATOR_LICENSES_TARBALL) info
	@echo -e "\nBuilding local Docker image\n"
	docker build \
		--build-arg OPERATOR_VENDOR_TARBALL=$(OPERATOR_VENDOR_TARBALL) \
		--build-arg OPERATOR_LICENSES_TARBALL=$(OPERATOR_LICENSES_TARBALL) \
		-t $(LOCAL_IMAGE_TAG) -f "$(PROJECT_PATH)/Dockerfile" "$(PROJECT_PATH)"

## clean: Clean environment
.PHONY: clean
clean:
	rm -rf $(OPERATOR_BINARY_TARBALL)
	rm -rf $(OPERATOR_VENDOR_TARBALL)
	rm -rf $(OPERATOR_LICENSES_TARBALL)
	rm -rf $(OPERATOR_SOURCES_TARBALL)

## test: brew scratch-build
.PHONY: test
test:
	rhpkg container-build --scratch --target=$(TARGET)

## brew: brew build
.PHONY: brew
brew:
ifneq (,$(findstring private-,$(GIT_BRANCH)))
	$(error can't build from private branch $(GIT_BRANCH))
else
	rhpkg container-build --target=$(TARGET)
endif
