# This makefile is used to compile Autoroller code, build Docker images
# containing the same, and generate, apply, and push Kubernetes configs
# for the autorollers.

VULCANIZE1=true

# The list of files we want to go into core.js, which is concat'd and
# minified. These files should be either present in the project, brought
# into third_party/bower_compoents via bower, or in node_modules.
CORE_SOURCE_FILES = node_modules/native-promise-only/npo.js \
          third_party/bower_components/webcomponentsjs/webcomponents.min.js \
          ../res/js/common.js

BOWER_DIR=third_party/bower_components

include ../go/skiaversion/skiaversion.mk
include ../kube/kube.mk
include ../make/clusters.mk
include ../webtools/webtools.mk

.PHONY: autoroll-fe
autoroll-fe: core_js elements_html skiaversion
	ln -sf ../../res res/imp/res
	GOOS=linux go install -a ./go/autoroll-fe

.PHONY: autoroll-be
autoroll-be: skiaversion
	GOOS=linux go install -a ./go/autoroll-be

.PHONY: autoroll-google3
autoroll-google3: skiaversion
	GOOS=linux go install -a ./go/autoroll-google3

.PHONY: all
all: autoroll-fe autoroll-be autoroll-google3

# Build debug versions of core.js and elements.html.
.PHONY: debug
debug: clean_webtools debug_core_js debug_elements_html

ROLLER_INTERNAL_CONFIG_DIR = "/tmp/skia-autoroll-internal-config"
USE_INTERNAL_CONFIG_DIR_PROMPT ?= $$(bash -c 'read -s -p "The checkout in $(ROLLER_INTERNAL_CONFIG_DIR) is dirty. Would you still like to use it? (y/n): " ans; echo $$ans')

setup-internal-config-repo:
	if [[ ! -d $(ROLLER_INTERNAL_CONFIG_DIR) ]]; then \
		git clone https://skia.googlesource.com/skia-autoroll-internal-config.git $(ROLLER_INTERNAL_CONFIG_DIR); \
	else \
		git -C $(ROLLER_INTERNAL_CONFIG_DIR) fetch && \
		git -C $(ROLLER_INTERNAL_CONFIG_DIR) diff --quiet origin/master || \
		if [ $$? -ne 0 ]; then \
			if [[ "$(USE_INTERNAL_CONFIG_DIR_PROMPT)" != "y" ]]; then \
				echo "Exiting"; exit 1; \
			fi; \
		fi; \
	fi

# These targets build kubernetes releases.
.PHONY: release-be
release-be: autoroll-be
	./build_backend_release

.PHONY: release-fe
release-fe: autoroll-fe
	./build_frontend_release

.PHONY: release-google3
release-google3: autoroll-google3 setup-internal-config-repo
	CONFIG_DIR="$(ROLLER_INTERNAL_CONFIG_DIR)" ./build_google3_release "$(MESSAGE)"

.PHONY: release-all
release-all: release-fe release-be release-google3

# push-helper is used by the below targets to apply k8s configurations.
.PHONY: push-helper
push-helper: kube-conf-gen deployment-dirs
	go install -v ./go/push-helper

# apply-roller generates a new backend release build and applies it, along with
# the current roller config file(s), to the roller(s) matching the ROLLER
# environment variable. Also updates the frontend with the current roller
# config(s) but does not change the frontend build.
.PHONY: apply-roller
apply-roller: release-be push-helper setup-internal-config-repo
	push-helper --roller="$(ROLLER)" --update-config --update-be-image

# push-roller is the same as apply-roller, but it also commits and pushes the
# modified kubernetes config files into the git repo, using the commit message
# from the MESSAGE environment variable.
.PHONY: push-roller
push-roller: release-be push-helper setup-internal-config-repo
	push-helper --roller="$(ROLLER)" --update-config --update-be-image --commit-with-msg="$(MESSAGE)" --use-tmp-checkout

# push-be generates a new backend release build and applies it to ALL rollers,
# then commits and pushes the modified kubernetes config files into the git
# repo, using the commit message from the MESSAGE environment variable. Does NOT
# update the roller config files used by the backends.
.PHONY: push-be
push-be: release-be push-helper setup-internal-config-repo
	push-helper --external --internal --update-be-image --commit-with-msg="$(MESSAGE)" --use-tmp-checkout

# push-fe generates a new frontend release build, applies it, and commits and
# pushes the modified kubernetes config files into the git repo, using the
# commit message from the MESSAGE environment variable. Does NOT update the
# roller config files used by the frontends.
.PHONY: push-fe
push-fe: release-fe push-helper setup-internal-config-repo
	push-helper --external --internal --update-fe-image --commit-with-msg="$(MESSAGE)" --use-tmp-checkout

# push-all generates new frontend and backend release builds, applies them along
# with the current roller config files(s), and commits and pushes the modified
# kubernetes config files into the git repo, using the commit message from the
# MESSAGE environment variable.
.PHONY: push-all
push-all: release-be release-fe push-helper setup-internal-config-repo
	push-helper --external --internal --update-config --update-be-image --update-fe-image --commit-with-msg="$(MESSAGE)" --use-tmp-checkout
