| # 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. | |
| # This is a Cloud Build config file for the vuln worker. | |
| # Invoke locally from the command line using devtools/deploy_worker.sh. | |
| # It can also be configured to run from a trigger, by supplying the _ENV | |
| # substitution. | |
| substitutions: | |
| _ENV: '' | |
| steps: | |
| - id: Lock | |
| name: golang:1.26.2 | |
| entrypoint: bash | |
| args: | |
| - -ec | |
| - | | |
| if [[ "$COMMIT_SHA" = '' ]]; then | |
| echo "no COMMIT_SHA, not locking" | |
| exit 0 | |
| fi | |
| go run golang.org/x/website/cmd/locktrigger@latest \ | |
| -project $PROJECT_ID -build $BUILD_ID -repo https://go.googlesource.com/vulndb | |
| - id: Test | |
| name: golang:1.26.2 | |
| entrypoint: bash | |
| args: | |
| - -ec | |
| - go test -timeout 10m ./... | |
| - id: Prepare | |
| name: bash | |
| args: | |
| - -ec | |
| - | | |
| if [[ "$SHORT_SHA" = '' ]]; then | |
| echo >&2 "missing SHORT_SHA; use --substitutions on command line" | |
| exit 1 | |
| fi | |
| if [[ "$_ENV" = '' ]]; then | |
| echo >&2 "missing _ENV; use --substitutions on command line" | |
| exit 1 | |
| fi | |
| tag=$(date +%Y%m%dt%H%M%S)-$SHORT_SHA | |
| image=gcr.io/$PROJECT_ID/vuln-worker:$tag | |
| echo "image is $image" | |
| # Save image tag for later steps. | |
| echo $image > /workspace/image.txt | |
| - id: Build | |
| name: gcr.io/cloud-builders/docker | |
| entrypoint: bash | |
| args: | |
| - -ec | |
| - | | |
| image=$(cat /workspace/image.txt) | |
| docker build -t $image --build-arg DOCKER_IMAGE=$image -f cmd/worker/Dockerfile . | |
| docker push $image | |
| - id: Deploy | |
| name: gcr.io/cloud-builders/gcloud | |
| entrypoint: bash | |
| args: | |
| - -ec | |
| - | | |
| image=$(cat /workspace/image.txt) | |
| service=${_ENV}-vuln-worker | |
| args="--project $PROJECT_ID --region us-central1" | |
| gcloud run deploy $args $service --image $image | |
| # If there was a rollback, `gcloud run deploy` will create a revision but | |
| # not point traffic to it. The following command ensures that the new revision | |
| # will get traffic. | |
| latestTraffic=$(gcloud run services $args describe $service \ | |
| --format='value(status.traffic.latestRevision)') | |
| if [[ $latestTraffic != True ]]; then | |
| gcloud run services $args update-traffic $service --to-latest | |
| fi |