1#!/bin/bash -ex 2# Copyright 2020 Google Inc. 3# 4# Licensed under the Apache License, Version 2.0 (the "License"); 5# you may not use this file except in compliance with the License. 6# You may obtain a copy of the License at 7# 8# http://www.apache.org/licenses/LICENSE-2.0 9# 10# Unless required by applicable law or agreed to in writing, software 11# distributed under the License is distributed on an "AS IS" BASIS, 12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13# See the License for the specific language governing permissions and 14# limitations under the License. 15# 16################################################################################ 17 18BASE_IMAGE_JOB_TOPIC=schedule-base-image-build 19BASE_IMAGE_SCHEDULER_JOB=base-image-scheduler 20BASE_IMAGE_SCHEDULE="0 3 * * *" 21BASE_IMAGE_MESSAGE="Start base image build" 22 23BUILD_JOB_TOPIC=request-build 24 25COVERAGE_BUILD_JOB_TOPIC=request-coverage-build 26 27SYNC_JOB_TOPIC=schedule-project-sync 28SYNC_SCHEDULER_JOB=sync-scheduler 29SYNC_JOB_SCHEDULE="*/30 * * * *" 30SYNC_MESSAGE="Start Sync" 31 32UPDATE_BUILD_JOB_TOPIC=builds-status 33UPDATE_BUILD_SCHEDULER_JOB=builds-status-scheduler 34UPDATE_BUILD_JOB_SCHEDULE="*/30 * * * *" 35 36 37function deploy_pubsub_topic { 38 topic=$1 39 project=$2 40 41 if ! gcloud pubsub topics describe $topic --project $project ; 42 then 43 gcloud pubsub topics create $topic \ 44 --project $project 45 fi 46} 47 48function deploy_scheduler { 49 scheduler_name=$1 50 schedule="$2" 51 topic=$3 52 message="$4" 53 project=$5 54 55 if gcloud scheduler jobs describe $scheduler_name --project $project ; 56 then 57 gcloud scheduler jobs update pubsub $scheduler_name \ 58 --project $project \ 59 --schedule "$schedule" \ 60 --topic $topic \ 61 --message-body "$message" 62 else 63 gcloud scheduler jobs create pubsub $scheduler_name \ 64 --project $project \ 65 --schedule "$schedule" \ 66 --topic $topic \ 67 --message-body "$message" 68 fi 69} 70 71function deploy_cloud_function { 72 name=$1 73 entry_point=$2 74 topic=$3 75 project=$4 76 77 gcloud functions deploy $name \ 78 --entry-point $entry_point \ 79 --trigger-topic $topic \ 80 --runtime python38 \ 81 --project $project \ 82 --timeout 540 \ 83 --region us-central1 \ 84 --set-env-vars GCP_PROJECT=$project,FUNCTION_REGION=us-central1 \ 85 --max-instances 1 \ 86 --memory 2048MB 87} 88 89if [ $# == 1 ]; then 90 PROJECT_ID=$1 91else 92 echo -e "\n Usage ./deploy.sh <project-name>"; exit; 93fi 94 95deploy_pubsub_topic $BUILD_JOB_TOPIC $PROJECT_ID 96deploy_pubsub_topic $SYNC_JOB_TOPIC $PROJECT_ID 97deploy_pubsub_topic $BASE_IMAGE_JOB_TOPIC $PROJECT_ID 98deploy_pubsub_topic $COVERAGE_BUILD_JOB_TOPIC $PROJECT_ID 99deploy_pubsub_topic $UPDATE_BUILD_JOB_TOPIC $PROJECT_ID 100 101deploy_scheduler $SYNC_SCHEDULER_JOB \ 102 "$SYNC_JOB_SCHEDULE" \ 103 $SYNC_JOB_TOPIC \ 104 "$SYNC_MESSAGE" \ 105 $PROJECT_ID 106 107deploy_scheduler $BASE_IMAGE_SCHEDULER_JOB \ 108 "$BASE_IMAGE_SCHEDULE" \ 109 $BASE_IMAGE_JOB_TOPIC \ 110 "$BASE_IMAGE_MESSAGE" \ 111 $PROJECT_ID 112 113deploy_scheduler $UPDATE_BUILD_SCHEDULER_JOB-fuzzing \ 114 "$UPDATE_BUILD_JOB_SCHEDULE" \ 115 $UPDATE_BUILD_JOB_TOPIC \ 116 "fuzzing" \ 117 $PROJECT_ID 118deploy_scheduler $UPDATE_BUILD_SCHEDULER_JOB-coverage \ 119 "$UPDATE_BUILD_JOB_SCHEDULE" \ 120 $UPDATE_BUILD_JOB_TOPIC \ 121 "coverage" \ 122 $PROJECT_ID 123deploy_scheduler $UPDATE_BUILD_SCHEDULER_JOB-badges \ 124 "$UPDATE_BUILD_JOB_SCHEDULE" \ 125 $UPDATE_BUILD_JOB_TOPIC \ 126 "badges" \ 127 $PROJECT_ID 128 129deploy_cloud_function sync \ 130 sync \ 131 $SYNC_JOB_TOPIC \ 132 $PROJECT_ID 133 134deploy_cloud_function base-image-build \ 135 build_base_images \ 136 $BASE_IMAGE_JOB_TOPIC \ 137 $PROJECT_ID 138 139deploy_cloud_function request-build \ 140 build_project \ 141 $BUILD_JOB_TOPIC \ 142 $PROJECT_ID 143 144deploy_cloud_function request-coverage-build \ 145 coverage_build \ 146 $COVERAGE_BUILD_JOB_TOPIC \ 147 $PROJECT_ID 148 149deploy_cloud_function update-builds \ 150 builds_status \ 151 $UPDATE_BUILD_JOB_TOPIC \ 152 $PROJECT_ID 153 154gcloud datastore indexes create index.yaml --project $PROJECT_ID 155