| # Copyright 2022 The Go Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style | |
| # license that can be found in the LICENSE file. | |
| # Library of useful bash functions and variables. | |
| RED=; GREEN=; YELLOW=; NORMAL=; | |
| MAXWIDTH=0 | |
| if tput setaf 1 >& /dev/null; then | |
| RED=$(tput setaf 1) | |
| GREEN=$(tput setaf 2) | |
| YELLOW=$(tput setaf 3) | |
| NORMAL=$(tput sgr0) | |
| MAXWIDTH=$(( $(tput cols) - 2 )) | |
| fi | |
| EXIT_CODE=0 | |
| info() { echo -e "${GREEN}$*${NORMAL}" 1>&2; } | |
| warn() { echo -e "${YELLOW}$*${NORMAL}" 1>&2; } | |
| err() { echo -e "${RED}$*${NORMAL}" 1>&2; EXIT_CODE=1; } | |
| die() { | |
| err "$@" | |
| exit 1 | |
| } | |
| dryrun=false | |
| # runcmd prints an info log describing the command that is about to be run, and | |
| # then runs it. It sets EXIT_CODE to non-zero if the command fails, but does not exit | |
| # the script. | |
| runcmd() { | |
| msg="$*" | |
| if $dryrun; then | |
| echo -e "${YELLOW}dryrun${GREEN}\$ $msg${NORMAL}" | |
| return 0 | |
| fi | |
| # Truncate command logging for narrow terminals. | |
| # Account for the 2 characters of '$ '. | |
| if [[ $MAXWIDTH -gt 0 && ${#msg} -gt $MAXWIDTH ]]; then | |
| msg="${msg::$(( MAXWIDTH - 3 ))}..." | |
| fi | |
| echo -e "$*\n" 1>&2; | |
| "$@" || err "command failed" | |
| } | |
| # tfvar NAME returns the value of the terraform variable NAME. | |
| tfvar() { | |
| local v=TF_VAR_$1 | |
| echo "${!v}" | |
| } | |
| worker_url() { | |
| local -r env=$1 | |
| echo https://${env}-${GO_ECOSYSTEM_WORKER_URL_SUFFIX} | |
| } | |
| impersonation_service_account() { | |
| local -r env=$1 | |
| local -r project=$(tfvar ${env}_project) | |
| case $env in | |
| prod|dev) echo impersonate@${project}.iam.gserviceaccount.com;; | |
| *) die "usage: $0 (dev | prod) ...";; | |
| esac | |
| } | |
| impersonation_token() { | |
| local -r env=$1 | |
| gcloud --impersonate-service-account "$(impersonation_service_account "$env")" \ | |
| auth print-identity-token \ | |
| --include-email | |
| } |