tools/cloudbuild/create_builder.yaml (228 lines of code) (raw):

# Copyright 2023 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. # # Build stack images and create gcr.io/buildpacks/builder. # # NOTE: This only works inside a Bazel workspace. # # GCB config for building all the base images defined in the /stacks directory. It should be # submitted from the project root directory and provided with a `_CANDIDATE_NAME` substitution # that serves as a unique identifier of the images: # # $ gcloud builds submit --config=tools/cloudbuild/create_stacks.yaml \ # --substitutions _CANDIDATE_NAME=my-local-build _ACCOUNT_NAME=keyless steps: - id: build-bazel-pack-image name: gcr.io/cloud-builders/docker args: ['build', '-t=bazel-pack', '-f=tools/cloudbuild/Dockerfile', '.'] - id: google-18-build-stack-images name: bazel-pack env: - 'DOCKER_BUILDKIT=0' args: ['run', '//builders/gcp/base/stack:build'] - id: google-18-create-builder name: bazel-pack args: ['build', '//builders/gcp/base:builder.image'] - id: google-18-run-acceptance-tests name: bazel-pack args: - 'test' - '--test_output=errors' - '--flaky_test_attempts=3' - '--test_arg=-cloudbuild' - '--test_arg=-pull-images=false' - '--test_arg=-builder-image=gcp/base' - '--jobs=2' - '//builders/gcp/base/acceptance/...' - id: google-22-build-image name: gcr.io/cloud-builders/docker dir: stacks/google_22 args: - 'build' - '--build-arg="packages=build-packages.txt"' - '--build-arg="CANDIDATE_NAME=${_CANDIDATE_NAME}"' - '-t=gcr.io/buildpacks/google-22/build:latest' - '-f=build.Dockerfile' - '.' - id: google-22-run-image name: gcr.io/cloud-builders/docker dir: stacks/google_22 args: - 'build' - '--build-arg="packages=run-packages.txt"' - '--build-arg="CANDIDATE_NAME=${_CANDIDATE_NAME}"' - '-t=gcr.io/buildpacks/google-22/run:latest' - '-f=run.Dockerfile' - '.' - id: google-22-builder-image name: bazel-pack args: ['build', '//builders/gcp/base:google_22_builder.image'] - id: google-22-run-acceptance-tests name: bazel-pack args: - 'test' - '--test_output=errors' - '--flaky_test_attempts=3' - '--test_arg=-cloudbuild' - '--test_arg=-pull-images=false' - '--test_arg=-builder-image=google-22/builder' - '--jobs=2' - '//builders/gcp/base/acceptance/...' - id: firebase-tools-build name: bazel-pack entrypoint: /bin/bash args: - -c - | bazel build //cmd/firebase/publisher:main cp bazel-bin/cmd/firebase/publisher/main_/main stacks/firebase_app_hosting_22/publisher bazel build //cmd/firebase/preparer:main cp bazel-bin/cmd/firebase/preparer/main_/main stacks/firebase_app_hosting_22/preparer - id: firebase-app-hosting-22-build-image name: gcr.io/cloud-builders/docker dir: stacks/firebase_app_hosting_22 args: - 'build' - '--build-arg="packages=build-packages.txt"' - '--build-arg="CANDIDATE_NAME=${_CANDIDATE_NAME}"' - '-t=gcr.io/buildpacks/firebase-app-hosting-22/build:latest' - '-f=build.Dockerfile' - '.' - id: firebase-app-hosting-22-run-image name: gcr.io/cloud-builders/docker dir: stacks/firebase_app_hosting_22 args: - 'build' - '--build-arg="packages=run-packages.txt"' - '--build-arg="CANDIDATE_NAME=${_CANDIDATE_NAME}"' - '-t=gcr.io/buildpacks/firebase-app-hosting-22/run:latest' - '-f=run.Dockerfile' - '.' - id: firebase-app-hosting-22-builder-image name: bazel-pack args: ['build', '//builders/firebase/apphosting:builder.image'] - id: firebase-app-hosting-22-run-acceptance-tests name: bazel-pack args: - 'test' - '--test_output=errors' - '--flaky_test_attempts=3' - '--test_arg=-cloudbuild' - '--test_arg=-pull-images=false' - '--test_arg=-builder-image=firebase/apphosting' - '--jobs=2' - '//builders/firebase/apphosting/acceptance/...' - id: add-licenses name: bazel-pack entrypoint: /bin/bash args: ['-c', 'tools/licenses/add.sh gcp/base'] - id: validate-licenses name: gcr.io/gae-runtimes/license_validator:current args: ['-pull_images=false', 'gcp/base'] - id: add-firebase-licenses name: bazel-pack entrypoint: /bin/bash args: ['-c', 'tools/licenses/add.sh firebase/apphosting'] - id: validate-firebase-licenses name: gcr.io/gae-runtimes/license_validator:current args: ['-pull_images=false', 'firebase/apphosting'] - id: tag-images name: bazel-pack entrypoint: /bin/bash args: - -c - > docker tag gcr.io/buildpacks/gcp/run:v1 gcr.io/$PROJECT_ID/gcp/run:latest && docker tag gcr.io/buildpacks/gcp/run:v1 gcr.io/$PROJECT_ID/gcp/run:v1 && docker tag gcr.io/buildpacks/gcp/run:v1 gcr.io/$PROJECT_ID/gcp/run:$COMMIT_SHA && docker tag gcr.io/buildpacks/gcp/run:v1 gcr.io/$PROJECT_ID/gcp/run:deprecated-public-image-$COMMIT_SHA && docker tag gcr.io/buildpacks/gcp/build:v1 gcr.io/$PROJECT_ID/gcp/build:latest && docker tag gcr.io/buildpacks/gcp/build:v1 gcr.io/$PROJECT_ID/gcp/build:v1 && docker tag gcr.io/buildpacks/gcp/build:v1 gcr.io/$PROJECT_ID/gcp/build:$COMMIT_SHA && docker tag gcr.io/buildpacks/gcp/build:v1 gcr.io/$PROJECT_ID/gcp/build:deprecated-public-image-$COMMIT_SHA && docker tag gcp/base gcr.io/$PROJECT_ID/builder:v1 && docker tag gcp/base gcr.io/$PROJECT_ID/builder:$COMMIT_SHA && docker tag gcp/base gcr.io/$PROJECT_ID/builder:deprecated-public-image-$COMMIT_SHA && docker tag gcr.io/buildpacks/google-22/run:latest gcr.io/$PROJECT_ID/google-22/run:latest && docker tag gcr.io/buildpacks/google-22/run:latest gcr.io/$PROJECT_ID/google-22/run:$COMMIT_SHA && docker tag gcr.io/buildpacks/google-22/build:latest gcr.io/$PROJECT_ID/google-22/build:latest && docker tag gcr.io/buildpacks/google-22/build:latest gcr.io/$PROJECT_ID/google-22/build:$COMMIT_SHA && docker tag google-22/builder gcr.io/$PROJECT_ID/google-22/builder:latest && docker tag google-22/builder gcr.io/$PROJECT_ID/google-22/builder:$COMMIT_SHA && docker tag google-22/builder gcr.io/$PROJECT_ID/builder:google-22 && docker tag google-22/builder gcr.io/$PROJECT_ID/builder:latest && docker tag gcr.io/buildpacks/firebase-app-hosting-22/build:latest gcr.io/$PROJECT_ID/firebase-app-hosting-22/build:$COMMIT_SHA && docker tag gcr.io/buildpacks/firebase-app-hosting-22/build:latest gcr.io/$PROJECT_ID/firebase-app-hosting-22/build:latest && docker tag gcr.io/buildpacks/firebase-app-hosting-22/run:latest gcr.io/$PROJECT_ID/firebase-app-hosting-22/run:$COMMIT_SHA && docker tag gcr.io/buildpacks/firebase-app-hosting-22/run:latest gcr.io/$PROJECT_ID/firebase-app-hosting-22/run:latest && docker tag firebase/apphosting gcr.io/$PROJECT_ID/firebase-app-hosting-22/builder:$COMMIT_SHA && docker tag firebase/apphosting gcr.io/$PROJECT_ID/firebase-app-hosting-22/builder:latest - id: push_google22_builder name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/$PROJECT_ID/google-22/builder:latest'] - id: google22_builder_sbom name: docker.io/anchore/syft args: - packages - gcr.io/$PROJECT_ID/google-22/builder - '-o=spdx-json' - '--file=/workspace/google22_builder_sbom.json' waitFor: - push_google22_builder - id: sign_google22_builder name: gcr.io/projectsigstore/cosign:v2.2.0 env: - REGISTRY=gcr.io - TUF_ROOT=/tmp - COSIGN_EXPERIMENTAL=1 - GOOGLE_SERVICE_ACCOUNT_NAME=${_ACCOUNT_NAME}@$PROJECT_ID.iam.gserviceaccount.com entrypoint: sh args: - '-c' - | cosign sign -y gcr.io/$PROJECT_ID/google-22/builder waitFor: - push_google22_builder - name: gcr.io/projectsigstore/cosign:v2.2.0 entrypoint: sh args: - '-c' - | cosign attach sbom --sbom=/workspace/google22_builder_sbom.json gcr.io/$PROJECT_ID/google-22/builder waitFor: - google22_builder_sbom - name: gcr.io/projectsigstore/cosign:v2.2.0 env: - REGISTRY=gcr.io - TUF_ROOT=/tmp - COSIGN_EXPERIMENTAL=1 - GOOGLE_SERVICE_ACCOUNT_NAME=${_ACCOUNT_NAME}@$PROJECT_ID.iam.gserviceaccount.com entrypoint: sh args: - '-c' - | cosign attest --predicate=/workspace/google22_builder_sbom.json -y --type=spdxjson gcr.io/$PROJECT_ID/google-22/builder waitFor: - google22_builder_sbom # Even though a :latest tag is published, it may be unstable and may be phased out eventually. # We recommend using the :v1 tag. images: - 'gcr.io/$PROJECT_ID/builder:latest' - 'gcr.io/$PROJECT_ID/builder:v1' - 'gcr.io/$PROJECT_ID/builder:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/builder:deprecated-public-image-$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/gcp/run:latest' - 'gcr.io/$PROJECT_ID/gcp/run:v1' - 'gcr.io/$PROJECT_ID/gcp/run:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/gcp/run:deprecated-public-image-$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/gcp/build:latest' - 'gcr.io/$PROJECT_ID/gcp/build:v1' - 'gcr.io/$PROJECT_ID/gcp/build:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/gcp/build:deprecated-public-image-$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/google-22/build:latest' - 'gcr.io/$PROJECT_ID/google-22/build:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/google-22/run:latest' - 'gcr.io/$PROJECT_ID/google-22/run:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/google-22/builder:latest' - 'gcr.io/$PROJECT_ID/google-22/builder:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/builder:google-22' - 'gcr.io/$PROJECT_ID/firebase-app-hosting-22/build:latest' - 'gcr.io/$PROJECT_ID/firebase-app-hosting-22/build:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/firebase-app-hosting-22/run:latest' - 'gcr.io/$PROJECT_ID/firebase-app-hosting-22/run:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/firebase-app-hosting-22/builder:latest' - 'gcr.io/$PROJECT_ID/firebase-app-hosting-22/builder:$COMMIT_SHA' substitutions: _CANDIDATE_NAME: localbuild _ACCOUNT_NAME: keyless timeout: '10800s' options: machineType: 'N1_HIGHCPU_32' logging: CLOUD_LOGGING_ONLY serviceAccount: projects/$PROJECT_ID/serviceAccounts/${_ACCOUNT_NAME}@$PROJECT_ID.iam.gserviceaccount.com