• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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