| 
									
										
										
										
											2019-06-21 12:53:17 -07:00
										 |  |  | #!/bin/bash
 | 
					
						
							|  |  |  | # A script for automatically configuring a user's local dev | 
					
						
							|  |  |  | # environment to use Remote Build Execution. | 
					
						
							| 
									
										
										
										
											2019-10-11 10:56:06 -07:00
										 |  |  | # Short cuts to set output as bold and normal | 
					
						
							|  |  |  | bold=$(tput bold) | 
					
						
							|  |  |  | normal=$(tput sgr0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-17 12:04:06 -07:00
										 |  |  | ########################################################### | 
					
						
							|  |  |  | #                Setup/Confirm Environment                # | 
					
						
							|  |  |  | ########################################################### | 
					
						
							|  |  |  | # The full path location of the script | 
					
						
							|  |  |  | full_script_path="$(pwd)/$(dirname ${BASH_SOURCE[0]})" | 
					
						
							| 
									
										
										
										
											2019-06-21 12:53:17 -07:00
										 |  |  | # Determine the root directory of the Angular github repo. | 
					
						
							| 
									
										
										
										
											2019-10-11 10:56:06 -07:00
										 |  |  | project_directory=$(git rev-parse --show-toplevel 2> /dev/null) | 
					
						
							| 
									
										
										
										
											2019-06-21 12:53:17 -07:00
										 |  |  | if [[ $? -ne 0 ]]; then | 
					
						
							| 
									
										
										
										
											2019-10-11 10:56:06 -07:00
										 |  |  |   echo "This command must be run from within the cloned \"angular/angular\" repository" | 
					
						
							|  |  |  |   exit 1 | 
					
						
							| 
									
										
										
										
											2019-06-21 12:53:17 -07:00
										 |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Confirm gcloud installed and available as a command. | 
					
						
							|  |  |  | if [ ! -x "$(command -v gcloud)" ]; then | 
					
						
							| 
									
										
										
										
											2019-10-11 10:56:06 -07:00
										 |  |  |   echo "gcloud command is not available. Please install gcloud before continuing" | 
					
						
							|  |  |  |   echo "Please visit: https://cloud.google.com/sdk/install" | 
					
						
							|  |  |  |   exit 1 | 
					
						
							| 
									
										
										
										
											2019-06-21 12:53:17 -07:00
										 |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-17 12:04:06 -07:00
										 |  |  | # The full path to the .bazelrc.user file | 
					
						
							|  |  |  | bazelrc_user_filepath="$project_directory/.bazelrc.user" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ########################################################### | 
					
						
							|  |  |  | #                    Action Functions                     # | 
					
						
							|  |  |  | ########################################################### | 
					
						
							|  |  |  | # Log into gcloud | 
					
						
							|  |  |  | function gcloud_login() { | 
					
						
							| 
									
										
										
										
											2019-10-11 10:56:06 -07:00
										 |  |  |   gcloud auth application-default login | 
					
						
							| 
									
										
										
										
											2019-06-21 12:53:17 -07:00
										 |  |  |   if [[ $? -ne 0 ]]; then | 
					
						
							| 
									
										
										
										
											2019-10-11 10:56:06 -07:00
										 |  |  |     echo "gcloud login failed. Aborting" | 
					
						
							|  |  |  |     exit 2 | 
					
						
							| 
									
										
										
										
											2019-06-21 12:53:17 -07:00
										 |  |  |   fi | 
					
						
							| 
									
										
										
										
											2019-10-17 12:04:06 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2019-06-21 12:53:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-17 12:04:06 -07:00
										 |  |  | # Confirm the user is already logged into gcloud, if they aren't | 
					
						
							|  |  |  | # attempt to login.  After login, confirm the logged in account | 
					
						
							|  |  |  | # is from the correct domain. | 
					
						
							|  |  |  | function confirm_gcloud_login() { | 
					
						
							|  |  |  |   echo "Checking gcloud login state" | 
					
						
							|  |  |  |   gcloud auth application-default print-access-token &> /dev/null | 
					
						
							|  |  |  |   if [[ $? -ne 0 ]]; then | 
					
						
							|  |  |  |     echo "Not currently logged into gcloud. Starting gcloud login now" | 
					
						
							|  |  |  |     gcloud_login | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  |   access_token=$(gcloud auth application-default print-access-token) | 
					
						
							|  |  |  |   current_account=$(curl -s https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=$access_token | node $full_script_path/get-email) | 
					
						
							|  |  |  |   if [[ ! $current_account =~ (angular\.io$)|(google\.com$) ]]; then | 
					
						
							|  |  |  |     echo "Logged in as $current_account"; | 
					
						
							|  |  |  |     echo "An angular.io or google.com account must be used for remote Bazel usage." | 
					
						
							|  |  |  |     echo "Please login instead using an account from one of these domains." | 
					
						
							|  |  |  |     read -p "Rerun login command now? [Y/y]" | 
					
						
							|  |  |  |     if [[ $REPLY =~ ^[Yy]$ ]]; then | 
					
						
							|  |  |  |       gcloud_login | 
					
						
							|  |  |  |       confirm_gcloud_login | 
					
						
							|  |  |  |       return | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       echo "Exiting..." | 
					
						
							|  |  |  |       exit 3 | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  |   echo "Logged in as $current_account"; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2019-10-11 10:56:06 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Prompts to add a flag to the .bazelrc.user file if its not already in place | 
					
						
							|  |  |  | function add_flag() { | 
					
						
							|  |  |  |   flag=$1 | 
					
						
							|  |  |  |   read -p "  Add $flag flag? [Y/y]" | 
					
						
							|  |  |  |   if [[ $REPLY =~ ^[Yy]$ ]]; then | 
					
						
							|  |  |  |     if [[ ! $(grep "^$flag$" $bazelrc_user_filepath) ]]; then | 
					
						
							|  |  |  |       echo "$flag" >> $bazelrc_user_filepath | 
					
						
							|  |  |  |       echo "Added $flag to .bazelrc.user" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       echo "$flag already in .bazelrc.user" | 
					
						
							|  |  |  |     fi | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  |   echo | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-17 12:04:06 -07:00
										 |  |  | ########################################################### | 
					
						
							|  |  |  | #                  RBE Setup Script                       # | 
					
						
							|  |  |  | ########################################################### | 
					
						
							|  |  |  | # Create the bazelrc.user file, echo the config flags into the file. | 
					
						
							|  |  |  | touch $bazelrc_user_filepath | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Ensure default credentials are valid. | 
					
						
							|  |  |  | confirm_gcloud_login | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-11 10:56:06 -07:00
										 |  |  | # Add extra line space before config setup. | 
					
						
							|  |  |  | echo | 
					
						
							| 
									
										
										
										
											2019-10-17 12:04:06 -07:00
										 |  |  | # Remote builds | 
					
						
							|  |  |  | echo "The ${bold}remote${normal} flag enables RBE, builds run remotely when possible and caching" | 
					
						
							|  |  |  | echo "occurs in the RBE context" | 
					
						
							|  |  |  | add_flag "build --config=remote" |