advance.cloudbuild.yaml (85 lines of code) (raw):

# Copyright 2021 Google LLC # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. steps: - id: 'Download dependencies' name: golang args: ['go', 'mod', 'download'] - id: 'Install linting tools' name: golang args: ['go', 'install', 'golang.org/x/tools/cmd/goimports@latest'] - id: 'Lint' name: golang entrypoint: /bin/bash args: - '-c' - | goimports -l . 2>&1 | tee /dev/stderr | (! read) - id: 'Run Unit Tests' name: golang args: ['go', 'test', '-v', './...'] # Setup resources for system tests - id: 'Build Container Image' name: 'gcr.io/k8s-skaffold/pack' entrypoint: pack args: - build - '--builder=gcr.io/buildpacks/builder:latest' - '$_GCR_HOSTNAME/$PROJECT_ID/$_REPOSITORY/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA' - id: 'Push Container Image' name: 'gcr.io/cloud-builders/docker:latest' entrypoint: /bin/bash timeout: 60s args: - "-c" - | while ! docker push '$_GCR_HOSTNAME/$PROJECT_ID/$_REPOSITORY/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'; do sleep 2 done - id: 'Deploy to Cloud Run' name: 'gcr.io/cloud-builders/gcloud:latest' entrypoint: /bin/bash args: - '-c' - | gcloud run deploy ${_SERVICE_NAME}-$BUILD_ID \ --image $_GCR_HOSTNAME/$PROJECT_ID/$_REPOSITORY/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA \ --region ${_DEPLOY_REGION} \ --no-allow-unauthenticated - id: 'Retrieve Service URL' name: 'gcr.io/cloud-builders/gcloud:latest' entrypoint: /bin/bash args: - '-c' - | set -e source /workspace/common.sh echo $(get_url ${BUILD_ID}) > _service_url echo $(get_idtoken) > _id_token env: - '_SERVICE_NAME=${_SERVICE_NAME}' - '_DEPLOY_REGION=${_DEPLOY_REGION}' - 'BUILD_ID=${BUILD_ID}' - 'PROJECT_ID=${PROJECT_ID}' - id: 'Run System Tests' name: golang entrypoint: /bin/bash args: - '-c' - | export BASE_URL=$(cat _service_url) export ID_TOKEN=$(cat _id_token) go test -tags=system -v ./... # Clean up system test resources - id: 'Delete image and service' name: 'gcr.io/cloud-builders/gcloud' entrypoint: '/bin/bash' args: - '-c' - | gcloud artifacts docker images delete $_GCR_HOSTNAME/$PROJECT_ID/$_REPOSITORY/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA --quiet gcloud run services delete ${_SERVICE_NAME}-$BUILD_ID --region ${_DEPLOY_REGION} --quiet substitutions: _GCR_HOSTNAME: us-central1-docker.pkg.dev _SERVICE_NAME: microservice-template _DEPLOY_REGION: us-central1 _REPOSITORY: samples options: volumes: - name: go-modules path: /go