#!/bin/bash -ex
# Copyright 2020 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
################################################################################

BASE_IMAGE_JOB_TOPIC=schedule-base-image-build
BASE_IMAGE_SCHEDULER_JOB=base-image-scheduler
BASE_IMAGE_SCHEDULE="0 3 * * *"
BASE_IMAGE_MESSAGE="Start base image build"

BUILD_JOB_TOPIC=request-build

COVERAGE_BUILD_JOB_TOPIC=request-coverage-build

SYNC_JOB_TOPIC=schedule-project-sync
SYNC_SCHEDULER_JOB=sync-scheduler
SYNC_JOB_SCHEDULE="*/30 * * * *"
SYNC_MESSAGE="Start Sync"

UPDATE_BUILD_JOB_TOPIC=builds-status
UPDATE_BUILD_SCHEDULER_JOB=builds-status-scheduler
UPDATE_BUILD_JOB_SCHEDULE="*/30 * * * *"


function deploy_pubsub_topic {
	topic=$1
	project=$2

	if ! gcloud pubsub topics describe $topic --project $project ;
		then
			gcloud pubsub topics create $topic \
			--project $project
	fi
}

function deploy_scheduler {
	scheduler_name=$1
	schedule="$2"
	topic=$3
	message="$4"
	project=$5

	if gcloud scheduler jobs describe $scheduler_name --project $project ;
		then
			gcloud scheduler jobs update pubsub $scheduler_name \
			--project $project \
			--schedule "$schedule" \
			--topic $topic \
			--message-body "$message"
		else
			gcloud scheduler jobs create pubsub $scheduler_name \
			--project $project \
			--schedule "$schedule" \
			--topic $topic \
			--message-body "$message"
	fi
}

function deploy_cloud_function {
	name=$1
	entry_point=$2
	topic=$3
	project=$4

	gcloud functions deploy $name \
	--entry-point $entry_point \
	--trigger-topic $topic \
	--runtime python38 \
	--project $project \
	--timeout 540 \
  --region us-central1 \
  --set-env-vars GCP_PROJECT=$project,FUNCTION_REGION=us-central1 \
  --max-instances 1
}

if [ $# == 1 ]; then
	PROJECT_ID=$1
else
	echo -e "\n Usage ./deploy.sh <project-name>"; exit;
fi

deploy_pubsub_topic $BUILD_JOB_TOPIC $PROJECT_ID
deploy_pubsub_topic $SYNC_JOB_TOPIC $PROJECT_ID
deploy_pubsub_topic $BASE_IMAGE_JOB_TOPIC $PROJECT_ID
deploy_pubsub_topic $COVERAGE_BUILD_JOB_TOPIC $PROJECT_ID
deploy_pubsub_topic $UPDATE_BUILD_JOB_TOPIC $PROJECT_ID

deploy_scheduler $SYNC_SCHEDULER_JOB \
				 "$SYNC_JOB_SCHEDULE" \
				 $SYNC_JOB_TOPIC \
				 "$SYNC_MESSAGE" \
				  $PROJECT_ID

deploy_scheduler $BASE_IMAGE_SCHEDULER_JOB \
				 "$BASE_IMAGE_SCHEDULE" \
				  $BASE_IMAGE_JOB_TOPIC \
				  "$BASE_IMAGE_MESSAGE" \
				  $PROJECT_ID

deploy_scheduler $UPDATE_BUILD_SCHEDULER_JOB-fuzzing \
				 "$UPDATE_BUILD_JOB_SCHEDULE" \
				 $UPDATE_BUILD_JOB_TOPIC \
				 "fuzzing" \
				 $PROJECT_ID
deploy_scheduler $UPDATE_BUILD_SCHEDULER_JOB-coverage \
				 "$UPDATE_BUILD_JOB_SCHEDULE" \
				 $UPDATE_BUILD_JOB_TOPIC \
				 "coverage" \
				 $PROJECT_ID
deploy_scheduler $UPDATE_BUILD_SCHEDULER_JOB-badges \
				 "$UPDATE_BUILD_JOB_SCHEDULE" \
				 $UPDATE_BUILD_JOB_TOPIC \
				 "badges" \
				 $PROJECT_ID

deploy_cloud_function sync \
					  sync \
					  $SYNC_JOB_TOPIC \
					  $PROJECT_ID

deploy_cloud_function base-image-build \
					  build_base_images \
					  $BASE_IMAGE_JOB_TOPIC \
					  $PROJECT_ID

deploy_cloud_function base-msan-build \
					  build_msan \
					  $BASE_IMAGE_JOB_TOPIC \
					  $PROJECT_ID

deploy_cloud_function request-build \
					  build_project \
					  $BUILD_JOB_TOPIC \
					  $PROJECT_ID

deploy_cloud_function request-coverage-build \
					  coverage_build \
					  $COVERAGE_BUILD_JOB_TOPIC \
					  $PROJECT_ID

deploy_cloud_function update-builds \
					  builds_status \
					  $UPDATE_BUILD_JOB_TOPIC \
					  $PROJECT_ID

gcloud datastore indexes create index.yaml --project $PROJECT_ID
