| #!/bin/bash | |
| # 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. | |
| # Deploy the go-ecosystem worker to Cloud Run, using Cloud Build. | |
| set -e | |
| source devtools/lib.sh || { echo "Are you at repo root?"; exit 1; } | |
| usage() { | |
| die "usage: $0 [-n] (dev | prod) BIGQUERY_DATASET" | |
| } | |
| # Report whether the current repo's workspace has no uncommitted files. | |
| clean_workspace() { | |
| [[ $(git status --porcelain) == '' ]] | |
| } | |
| main() { | |
| local prefix= | |
| if [[ $1 = '-n' ]]; then | |
| prefix='echo dryrun: ' | |
| shift | |
| fi | |
| local env=$1 | |
| case $env in | |
| dev|prod);; | |
| *) usage;; | |
| esac | |
| local dataset=$2 | |
| if [[ $dataset = '' ]]; then | |
| usage | |
| fi | |
| if which grants > /dev/null; then | |
| local allowed=false | |
| while read _ _ ok _; do | |
| if [[ $ok = OK ]]; then | |
| allowed=true | |
| fi | |
| done < <(grants check $GO_ECOSYSTEM_DEPLOY_GROUPS) | |
| if ! $allowed; then | |
| die "You need a grant for one of: $GO_ECOSYSTEM_DEPLOY_GROUPS" | |
| fi | |
| fi | |
| local -r project=$(tfvar ${env}_project) | |
| if [[ $project = '' ]]; then | |
| die "no ${env}_project in terraform.tfvars" | |
| fi | |
| local -r commit=$(git rev-parse --short HEAD) | |
| local unclean | |
| if ! clean_workspace; then | |
| unclean="-unclean" | |
| fi | |
| $prefix gcloud builds submit \ | |
| --project $project \ | |
| --config deploy/worker.yaml \ | |
| --substitutions SHORT_SHA=${commit}${unclean},_ENV=$env,_BQ_DATASET=$dataset | |
| } | |
| main "$@" |