build: address comments, restructure setup-rbe.sh script (#33109)

PR Close #33109
This commit is contained in:
Joey Perrott
2019-10-17 12:04:06 -07:00
committed by Matias Niemelä
parent fa0ab38546
commit 418e9cf3c4
4 changed files with 86 additions and 30 deletions
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/env node
/**
* Retrieves the email value from a json object. This assumes
* the email attributes is at the base of the object, as returned
* by Google Cloud's tokeninfo api.
*/
// Read information being piped in.
var stdin = process.openStdin();
// Stored data stream.
var data = "";
// Store each chunk of the stream in data.
stdin.on('data', chunk => data += chunk);
// After stream ends, parse data and get value requested.
stdin.on('end', () => {
// The JSON object, to be accessed.
let output = JSON.parse(data);
// Print the output to STDOUT.
console.log(output['email']);
});
+56 -26
View File
@@ -1,11 +1,15 @@
#!/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
@@ -20,32 +24,49 @@ if [ ! -x "$(command -v gcloud)" ]; then
exit 1
fi
# Confirm the user is already logged into gcloud, if they aren't
# attempt to 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"
# 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
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 | jq -r '.email')
if [[ ! $current_account =~ (angular\.io$)|(google\.com$) ]]; then
echo "Currently an angular.io or google.com account must be used for remote Bazel usage"
echo "Please login instead using the correct account with the following command, then rerun"
echo " gcloud auth application-default login"
exit 3
fi
echo "Logged in as $current_account";
}
# The full path to the .bazelrc.user file
bazelrc_user_filepath="$project_directory/.bazelrc.user"
# Create the bazelrc.user file, echo the config flags into the file.
touch $bazelrc_user_filepath
# 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() {
@@ -62,14 +83,23 @@ function add_flag() {
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"
# Remote HTTP Caching
echo "The ${bold}remote-http-caching${normal} flag enables uploading build results to the http cache,"
echo "but not does enable remote builds"
add_flag "build --config=remote-http-caching"
# Remote builds
echo "The ${bold}remote${normal} flag enables RBE, builds occurs remotely when possible and caching"
echo "occurs in the RBE context"
add_flag "build --config=remote"