Joey Perrott 346e1c14d9 build: update setup-rbe.sh script and documentation to remove http-remote-cache config (#33907)
We have determined that the upload time cost of remote caching via http is too costly
to be effective for our distributed usage scenario.  However this cost is still worth
it for us for Windows CI runs on a full cache hit move from a ~60 minute task to ~10
minutes.

It is worth noting that this remote http-caching is entirely separate from RBE caching
mechanisms.

PR Close #33907
2019-11-21 10:45:57 -08:00

101 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# A script for automatically configuring a user's local dev
# environment to use Remote Build Execution.
# Short cuts to set output as bold and normal
bold=$(tput bold)
normal=$(tput sgr0)
###########################################################
# Setup/Confirm Environment #
###########################################################
# The full path location of the script
full_script_path="$(pwd)/$(dirname ${BASH_SOURCE[0]})"
# Determine the root directory of the Angular github repo.
project_directory=$(git rev-parse --show-toplevel 2> /dev/null)
if [[ $? -ne 0 ]]; then
echo "This command must be run from within the cloned \"angular/angular\" repository"
exit 1
fi
# Confirm gcloud installed and available as a command.
if [ ! -x "$(command -v gcloud)" ]; then
echo "gcloud command is not available. Please install gcloud before continuing"
echo "Please visit: https://cloud.google.com/sdk/install"
exit 1
fi
# The full path to the .bazelrc.user file
bazelrc_user_filepath="$project_directory/.bazelrc.user"
###########################################################
# Action Functions #
###########################################################
# Log into gcloud
function gcloud_login() {
gcloud auth application-default login
if [[ $? -ne 0 ]]; then
echo "gcloud login failed. Aborting"
exit 2
fi
}
# 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";
}
# 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
}
###########################################################
# 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
# Add extra line space before config setup.
echo
# 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"