build: migrate to using google_default_credentials and update setup-rbe script (#33109)
PR Close #33109
This commit is contained in:
		
							parent
							
								
									2ea52b0cb9
								
							
						
					
					
						commit
						37a87418b6
					
				
							
								
								
									
										2
									
								
								.bazelrc
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								.bazelrc
									
									
									
									
									
								
							| @ -71,6 +71,8 @@ test --test_output=errors | |||||||
| # any bazel target. This is a temporary flag until codebase is permanently switched to Ivy. | # any bazel target. This is a temporary flag until codebase is permanently switched to Ivy. | ||||||
| build --define=compile=legacy | build --define=compile=legacy | ||||||
| 
 | 
 | ||||||
|  | build --google_default_credentials | ||||||
|  | 
 | ||||||
| ####################### | ####################### | ||||||
| # Remote HTTP Caching # | # Remote HTTP Caching # | ||||||
| ####################### | ####################### | ||||||
|  | |||||||
| @ -2,69 +2,74 @@ | |||||||
| # A script for automatically configuring a user's local dev | # A script for automatically configuring a user's local dev | ||||||
| # environment to use Remote Build Execution. | # environment to use Remote Build Execution. | ||||||
| 
 | 
 | ||||||
|  | # Short cuts to set output as bold and normal | ||||||
|  | bold=$(tput bold) | ||||||
|  | normal=$(tput sgr0) | ||||||
|  | 
 | ||||||
| # Determine the root directory of the Angular github repo. | # Determine the root directory of the Angular github repo. | ||||||
| project_directory=$(git rev-parse --show-toplevel 2> /dev/null); | project_directory=$(git rev-parse --show-toplevel 2> /dev/null) | ||||||
| if [[ $? -ne 0 ]]; then | if [[ $? -ne 0 ]]; then | ||||||
|   echo "This command must be run from within the cloned \"angular/angular\" repository."; |   echo "This command must be run from within the cloned \"angular/angular\" repository" | ||||||
|   exit 1; |   exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| # Confirm gcloud installed and available as a command. | # Confirm gcloud installed and available as a command. | ||||||
| if [ ! -x "$(command -v gcloud)" ]; then | if [ ! -x "$(command -v gcloud)" ]; then | ||||||
|   echo "gcloud command is not available. Please install gcloud before continuing."; |   echo "gcloud command is not available. Please install gcloud before continuing" | ||||||
|   exit 1; |   echo "Please visit: https://cloud.google.com/sdk/install" | ||||||
|  |   exit 1 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| # Confirm the parameter provided to the script is a directory | # Confirm the user is already logged into gcloud, if they aren't | ||||||
| if [[ ! -d $1 ]]; then | # attempt to login | ||||||
|   echo -e "Invalid command syntax. | echo "Checking gcloud login state" | ||||||
| 
 | gcloud auth application-default print-access-token &> /dev/null | ||||||
|   \e[1mUsage:\e[0m $0 <ServiceAccountKeyLocation> | if [[ $? -ne 0 ]]; then | ||||||
| 
 |   echo "Not currently logged into gcloud. Starting gcloud login now" | ||||||
|   \e[1mExample:\e[0m ./setup-rbe ~/my_key_storage_directory/ |   gcloud auth application-default login | ||||||
| 
 |  | ||||||
|   The directory provided will be used to store the GCP service account key |  | ||||||
|   for the angular-local-dev service account. This key will then be used to |  | ||||||
|   authenticate for usage of the Remote Build Execution system and Remote Caching. |  | ||||||
| "; |  | ||||||
|   exit 1; |  | ||||||
| fi |  | ||||||
| credentials_directory=$(readlink -f $1) |  | ||||||
| if [[ ! -d $credentials_directory ]]; then |  | ||||||
|   echo "The specified directory does not exist. Please create the directory and rerun."; |  | ||||||
|   exit 1; |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Create the service account key in the provided directory. |  | ||||||
| echo "Checking provided directory for a service account key."; |  | ||||||
| json_key_filepath="$credentials_directory/angular-local-dev-key.json"; |  | ||||||
| if [[ -f $json_key_filepath ]]; then |  | ||||||
|   echo "Angular Local Dev key already exists, reusing this key."; |  | ||||||
| else |  | ||||||
|   # Confirm the user is already logged into gcloud, if they aren't |  | ||||||
|   # attempt to login |  | ||||||
|   echo "Checking gcloud login state."; |  | ||||||
|   gcloud auth print-identity-token &> /dev/null; |  | ||||||
|   if [[ $? -ne 0 ]]; then |   if [[ $? -ne 0 ]]; then | ||||||
|     echo "Not currently logged into gcloud. Starting gcloud login now."; |     echo "gcloud login failed. Aborting" | ||||||
|     gcloud auth login; |     exit 2 | ||||||
|     if [[ $? -ne 0 ]]; then |  | ||||||
|       echo "gcloud login failed. Aborting."; |  | ||||||
|       exit 2; |  | ||||||
|     fi |  | ||||||
|   fi |  | ||||||
|   gcloud iam service-accounts keys create $json_key_filepath \ |  | ||||||
|     --iam-account angular-local-dev@internal-200822.iam.gserviceaccount.com \ |  | ||||||
|     --quiet --project internal-200822; |  | ||||||
|   if [[ $? -ne 0 ]]; then |  | ||||||
|     echo "Downloading service account key failed. Aborting."; |  | ||||||
|     exit 2; |  | ||||||
|   fi |   fi | ||||||
| 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 | # The full path to the .bazelrc.user file | ||||||
| bazelrc_user_filepath="$project_directory/.bazelrc.user"; | bazelrc_user_filepath="$project_directory/.bazelrc.user" | ||||||
| # Create the bazelrc.user file, echo the config flags into the file. | # Create the bazelrc.user file, echo the config flags into the file. | ||||||
| touch $bazelrc_user_filepath; | touch $bazelrc_user_filepath | ||||||
| echo "build --config=remote-http-caching" >> $bazelrc_user_filepath; | 
 | ||||||
| echo "build --google_credentials=$json_key_filepath" >> $bazelrc_user_filepath; | # 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 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Add extra line space before config setup. | ||||||
|  | echo | ||||||
|  | # 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" | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user