Remove the use of the cache for single-arch container images This is a partially revert of https://cos-review.git.corp.google.com/c/cos/tools/+/45593. List of container images are single-arch and don't benefit much from the caching stretagy. Using `docker build` without caching also helps to generate provenance and SBOMs natively. The list is: cos_gpu_installer_v1 cos_ova_converter cos_gpu_config_builder cos_gpu_driver_builder cos_kernel_devenv BUG=b/397501766 TEST=presubmit Change-Id: I72775a58cc6b11488957ae560262c8ad03629f05 Reviewed-on: https://cos-review.googlesource.com/c/cos/tools/+/97849 Tested-by: Chenglong Tang <chenglongtang@google.com> Reviewed-by: Robert Kolchmeyer <rkolchmeyer@google.com> Cloud-Build: GCB Service account <228075978874@cloudbuild.gserviceaccount.com>
diff --git a/src/cmd/cos_gpu_config_builder/cloudbuild.yaml b/src/cmd/cos_gpu_config_builder/cloudbuild.yaml index 5446833..3c83024 100644 --- a/src/cmd/cos_gpu_config_builder/cloudbuild.yaml +++ b/src/cmd/cos_gpu_config_builder/cloudbuild.yaml
@@ -1,26 +1,43 @@ options: - env: - - 'DOCKER_CLI_EXPERIMENTAL=enabled' + requestedVerifyOption: VERIFIED +substitutions: + _IMAGE_NAME: cos-gpu-config-builder + _IMAGE_FOLDER_NAME: cos_gpu_config_builder + _RUN_PATH: . + steps: - name: 'gcr.io/cloud-builders/docker' - args: ['buildx', 'create', '--name', 'builder'] -- name: 'gcr.io/cloud-builders/docker' - args: ['buildx', 'use', 'builder'] -- name: 'gcr.io/cloud-builders/docker' + id: build-and-tag entrypoint: 'bash' args: - '-c' - | + TAGS="" if [ "$_BUILD_TYPE" == "presubmit" ]; then - # If it's presubmit, push to us-docker.pkg.dev/cos-infra-prod/gcr-io-dev with TAG_NAME and presubmit-TAG_NAME tags - docker buildx build --build-arg 'BUILDKIT_INLINE_CACHE=1' -f 'src/cmd/cos_gpu_config_builder/Dockerfile' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-config-builder:${_TAG_NAME}' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-config-builder:${_BUILD_TYPE}-${_TAG_NAME}' --cache-from 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-config-builder:latest' --push '.' + # For presubmit build, we push presubmit-{BUILD_ID} tag. + TAGS="${_BUILD_TYPE}-${_TAG_NAME}" elif [ "$_BUILD_TYPE" == "official" ]; then - # If it's official, push to us-docker.pkg.dev/cos-infra-prod/gcr-io-dev with TAG_NAME, official-TAG_NAME and latest tags - docker buildx build --build-arg 'BUILDKIT_INLINE_CACHE=1' -f 'src/cmd/cos_gpu_config_builder/Dockerfile' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-config-builder:${_TAG_NAME}' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-config-builder:${_BUILD_TYPE}-${_TAG_NAME}' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-config-builder:latest' --cache-from 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-config-builder:latest' --push '.' - # If it's official, also push to gcr.io - docker buildx build --build-arg 'BUILDKIT_INLINE_CACHE=1' -f 'src/cmd/cos_gpu_config_builder/Dockerfile' -t 'gcr.io/${_OUTPUT_PROJECT}/cos-gpu-config-builder:latest' -t 'gcr.io/${_OUTPUT_PROJECT}/cos-gpu-config-builder:${_TAG_NAME}' --cache-from 'gcr.io/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-config-builder:latest' --push '.' + # For official build, we push presubmit-{BUILD_ID} and latest tag. + TAGS="${_BUILD_TYPE}-${_TAG_NAME} latest" else echo "Invalid BUILD_TYPE: $_BUILD_TYPE" exit 1 fi + + # Build and tag for gcr-io-dev. BUILD_ID tag is pushed by default. + docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}" + for TAG in $$TAGS; do + docker tag "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG" + docker push "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG" + done + + # Build and tag for gcr.io. BUILD_ID tag is pushed by default. + docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}" + for TAG in $$TAGS; do + docker tag "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}" "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:$$TAG" + docker push "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:$$TAG" + done +images: +- 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}' +- 'gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}' timeout: 3600s
diff --git a/src/cmd/cos_gpu_driver_builder/cloudbuild.yaml b/src/cmd/cos_gpu_driver_builder/cloudbuild.yaml index 4af11cc..1b00e18 100644 --- a/src/cmd/cos_gpu_driver_builder/cloudbuild.yaml +++ b/src/cmd/cos_gpu_driver_builder/cloudbuild.yaml
@@ -1,26 +1,43 @@ options: - env: - - 'DOCKER_CLI_EXPERIMENTAL=enabled' + requestedVerifyOption: VERIFIED +substitutions: + _IMAGE_NAME: cos-gpu-driver-builder + _IMAGE_FOLDER_NAME: cos_gpu_driver_builder + _RUN_PATH: . + steps: - name: 'gcr.io/cloud-builders/docker' - args: ['buildx', 'create', '--name', 'builder'] -- name: 'gcr.io/cloud-builders/docker' - args: ['buildx', 'use', 'builder'] -- name: 'gcr.io/cloud-builders/docker' + id: build-and-tag entrypoint: 'bash' args: - '-c' - | + TAGS="" if [ "$_BUILD_TYPE" == "presubmit" ]; then - # If it's presubmit, push to us-docker.pkg.dev/cos-infra-prod/gcr-io-dev with TAG_NAME and presubmit-TAG_NAME tags - docker buildx build --build-arg 'BUILDKIT_INLINE_CACHE=1' -f 'src/cmd/cos_gpu_driver_builder/Dockerfile' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-driver-builder:${_TAG_NAME}' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-driver-builder:${_BUILD_TYPE}-${_TAG_NAME}' --cache-from 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-driver-builder:latest' --push '.' + # For presubmit build, we push presubmit-{BUILD_ID} tag. + TAGS="${_BUILD_TYPE}-${_TAG_NAME}" elif [ "$_BUILD_TYPE" == "official" ]; then - # If it's official, push to us-docker.pkg.dev/cos-infra-prod/gcr-io-dev with TAG_NAME, official-TAG_NAME and latest tags - docker buildx build --build-arg 'BUILDKIT_INLINE_CACHE=1' -f 'src/cmd/cos_gpu_driver_builder/Dockerfile' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-driver-builder:${_TAG_NAME}' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-driver-builder:${_BUILD_TYPE}-${_TAG_NAME}' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-driver-builder:latest' --cache-from 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-driver-builder:latest' --push '.' - # If it's official, also push to gcr.io - docker buildx build --build-arg 'BUILDKIT_INLINE_CACHE=1' -f 'src/cmd/cos_gpu_driver_builder/Dockerfile' -t 'gcr.io/${_OUTPUT_PROJECT}/cos-gpu-driver-builder:latest' -t 'gcr.io/${_OUTPUT_PROJECT}/cos-gpu-driver-builder:${_TAG_NAME}' --cache-from 'gcr.io/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-driver-builder:latest' --push '.' + # For official build, we push presubmit-{BUILD_ID} and latest tag. + TAGS="${_BUILD_TYPE}-${_TAG_NAME} latest" else echo "Invalid BUILD_TYPE: $_BUILD_TYPE" exit 1 fi -timeout: 3600s \ No newline at end of file + + # Build and tag for gcr-io-dev. BUILD_ID tag is pushed by default. + docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}" + for TAG in $$TAGS; do + docker tag "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG" + docker push "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG" + done + + # Build and tag for gcr.io. BUILD_ID tag is pushed by default. + docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}" + for TAG in $$TAGS; do + docker tag "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}" "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:$$TAG" + docker push "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:$$TAG" + done +images: +- 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}' +- 'gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}' +timeout: 3600s
diff --git a/src/cmd/cos_gpu_installer_v1/cloudbuild.yaml b/src/cmd/cos_gpu_installer_v1/cloudbuild.yaml index 783af7b..f0eddc7 100644 --- a/src/cmd/cos_gpu_installer_v1/cloudbuild.yaml +++ b/src/cmd/cos_gpu_installer_v1/cloudbuild.yaml
@@ -1,46 +1,42 @@ -# Copyright 2017 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 -# -# https://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. - -# GCP Container Builder build request in YAML format. -# See https://cloud.google.com/container-builder/docs/ for details. - options: - env: - - 'DOCKER_CLI_EXPERIMENTAL=enabled' + requestedVerifyOption: VERIFIED +substitutions: + _IMAGE_NAME: cos-gpu-installer-v1 + _IMAGE_FOLDER_NAME: cos_gpu_installer_v1/cos-gpu-installer-docker + _RUN_PATH: src/cmd/cos_gpu_installer_v1/cos-gpu-installer-docker/ steps: - name: 'gcr.io/cloud-builders/docker' - args: ['buildx', 'create', '--name', 'builder'] -- name: 'gcr.io/cloud-builders/docker' - args: ['buildx', 'use', 'builder'] -- name: 'gcr.io/cloud-builders/docker' + id: build-and-tag entrypoint: 'bash' args: - '-c' - | + TAGS="" if [ "$_BUILD_TYPE" == "presubmit" ]; then - # If it's presubmit, push to us-docker.pkg.dev/cos-infra-prod/gcr-io-dev with TAG_NAME and presubmit-TAG_NAME tags - docker buildx build --build-arg 'BUILDKIT_INLINE_CACHE=1' -f 'src/cmd/cos_gpu_installer_v1/cos-gpu-installer-docker/Dockerfile' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-installer-v1:${_TAG_NAME}' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-installer-v1:${_BUILD_TYPE}-${_TAG_NAME}' --cache-from 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-installer-v1:latest' --push 'src/cmd/cos_gpu_installer_v1/cos-gpu-installer-docker/' - docker pull us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-installer-v1:${_TAG_NAME} + # For presubmit build, we push presubmit-{BUILD_ID} tag. + TAGS="${_BUILD_TYPE}-${_TAG_NAME}" elif [ "$_BUILD_TYPE" == "official" ]; then - # If it's official, push to us-docker.pkg.dev/cos-infra-prod/gcr-io-dev with TAG_NAME, official-TAG_NAME and latest tags - docker buildx build --build-arg 'BUILDKIT_INLINE_CACHE=1' -f 'src/cmd/cos_gpu_installer_v1/cos-gpu-installer-docker/Dockerfile' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-installer-v1:${_TAG_NAME}' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-installer-v1:${_BUILD_TYPE}-${_TAG_NAME}' -t 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-installer-v1:latest' --cache-from 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-installer-v1:latest' --push 'src/cmd/cos_gpu_installer_v1/cos-gpu-installer-docker/' - docker pull us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-gpu-installer-v1:${_TAG_NAME} - # If it's official, also push to gcr.io - docker buildx build --build-arg 'BUILDKIT_INLINE_CACHE=1' -f 'src/cmd/cos_gpu_installer_v1/cos-gpu-installer-docker/Dockerfile' -t 'gcr.io/${_OUTPUT_PROJECT}/cos-gpu-installer-v1:latest' -t 'gcr.io/${_OUTPUT_PROJECT}/cos-gpu-installer-v1:${_TAG_NAME}' --cache-from 'gcr.io/${_OUTPUT_PROJECT}/cos-gpu-installer-v1:latest' --push 'src/cmd/cos_gpu_installer_v1/cos-gpu-installer-docker/' - docker pull gcr.io/${_OUTPUT_PROJECT}/cos-gpu-installer-v1:${_TAG_NAME} + # For official build, we push presubmit-{BUILD_ID} and latest tag. + TAGS="${_BUILD_TYPE}-${_TAG_NAME} latest" else echo "Invalid BUILD_TYPE: $_BUILD_TYPE" exit 1 fi + + # Build and tag for gcr-io-dev. BUILD_ID tag is pushed by default. + docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}" + for TAG in $$TAGS; do + docker tag "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG" + docker push "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG" + done + + # Build and tag for gcr.io. BUILD_ID tag is pushed by default. + docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}" + for TAG in $$TAGS; do + docker tag "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}" "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:$$TAG" + docker push "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:$$TAG" + done +images: +- 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}' +- 'gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}' timeout: 3600s
diff --git a/src/cmd/cos_kernel_devenv/cloudbuild.yaml b/src/cmd/cos_kernel_devenv/cloudbuild.yaml index 03d09e4..21c0a0a 100644 --- a/src/cmd/cos_kernel_devenv/cloudbuild.yaml +++ b/src/cmd/cos_kernel_devenv/cloudbuild.yaml
@@ -1,40 +1,43 @@ -# 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 -# -# https://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. options: - env: - - 'DOCKER_CLI_EXPERIMENTAL=enabled' + requestedVerifyOption: VERIFIED +substitutions: + _IMAGE_NAME: cos-kernel-devenv + _IMAGE_FOLDER_NAME: cos_kernel_devenv + _RUN_PATH: src/cmd/cos_kernel_devenv/ + steps: -- id: 'build-and-push' - name: 'gcr.io/cloud-builders/docker' +- name: 'gcr.io/cloud-builders/docker' + id: build-and-tag entrypoint: 'bash' args: - '-c' - | - docker buildx create --name builder - docker buildx use builder + TAGS="" if [ "$_BUILD_TYPE" == "presubmit" ]; then - # If it's presubmit, push to us-docker.pkg.dev/cos-infra-prod/gcr-io-dev with BUILD_ID, presubmit-BUILD_ID tags - docker buildx build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-kernel-devenv:latest -f src/cmd/cos_kernel_devenv/Dockerfile -t us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-kernel-devenv:${_TAG_NAME} -t us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-kernel-devenv:${_BUILD_TYPE}-${_TAG_NAME} --push src/cmd/cos_kernel_devenv/ - docker pull us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-kernel-devenv:${_TAG_NAME} + # For presubmit build, we push presubmit-{BUILD_ID} tag. + TAGS="${_BUILD_TYPE}-${_TAG_NAME}" elif [ "$_BUILD_TYPE" == "official" ]; then - # If it's official, push to us-docker.pkg.dev/cos-infra-prod/gcr-io-dev with latest tag, BUILD_ID and official-BUILD_ID tags - docker buildx build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-kernel-devenv:latest -f src/cmd/cos_kernel_devenv/Dockerfile -t us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-kernel-devenv:${_TAG_NAME} -t us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-kernel-devenv:${_BUILD_TYPE}-${_TAG_NAME} -t us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-kernel-devenv:latest --push src/cmd/cos_kernel_devenv/ - docker pull us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-kernel-devenv:${_TAG_NAME} - # If it's official, push to cos-infra-prod/gcr.io. This will be depreciated after exit gates are done. - docker buildx build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from gcr.io/${_OUTPUT_PROJECT}/cos-kernel-devenv:latest -f src/cmd/cos_kernel_devenv/Dockerfile -t gcr.io/${_OUTPUT_PROJECT}/cos-kernel-devenv:latest -t gcr.io/${_OUTPUT_PROJECT}/cos-kernel-devenv:${_TAG_NAME} --push src/cmd/cos_kernel_devenv/ - docker pull gcr.io/${_OUTPUT_PROJECT}/cos-kernel-devenv:${_TAG_NAME} + # For official build, we push presubmit-{BUILD_ID} and latest tag. + TAGS="${_BUILD_TYPE}-${_TAG_NAME} latest" else echo "Invalid BUILD_TYPE: $_BUILD_TYPE" exit 1 - fi \ No newline at end of file + fi + + # Build and tag for gcr-io-dev. BUILD_ID tag is pushed by default. + docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}" + for TAG in $$TAGS; do + docker tag "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG" + docker push "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG" + done + + # Build and tag for gcr.io. BUILD_ID tag is pushed by default. + docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}" + for TAG in $$TAGS; do + docker tag "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}" "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:$$TAG" + docker push "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:$$TAG" + done +images: +- 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}' +- 'gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}' +timeout: 3600s
diff --git a/src/cmd/cos_ova_converter/cloudbuild.yaml b/src/cmd/cos_ova_converter/cloudbuild.yaml index e7e5f84..8832dd1 100644 --- a/src/cmd/cos_ova_converter/cloudbuild.yaml +++ b/src/cmd/cos_ova_converter/cloudbuild.yaml
@@ -1,43 +1,43 @@ -# 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. - options: - env: - - 'DOCKER_CLI_EXPERIMENTAL=enabled' + requestedVerifyOption: VERIFIED +substitutions: + _IMAGE_NAME: cos-ova-converter + _IMAGE_FOLDER_NAME: cos_ova_converter + _RUN_PATH: . steps: - - id: 'build-and-push' - name: 'gcr.io/cloud-builders/docker' - entrypoint: 'bash' - args: - - '-c' - - | - docker buildx create --name builder - docker buildx use builder - if [ "$_BUILD_TYPE" == "presubmit" ]; then - # If it's presubmit, push to us-docker.pkg.dev/cos-infra-prod/gcr-io-dev with BUILD_ID, presubmit-BUILD_ID tags - docker buildx build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-ova-converter:latest -f src/cmd/cos_ova_converter/Dockerfile -t us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-ova-converter:${_TAG_NAME} -t us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-ova-converter:${_BUILD_TYPE}-${_TAG_NAME} --push . - docker pull us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-ova-converter:${_TAG_NAME} - elif [ "$_BUILD_TYPE" == "official" ]; then - # If it's official, push to us-docker.pkg.dev/cos-infra-prod/gcr-io-dev with latest tag, BUILD_ID and official-BUILD_ID tags - docker buildx build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-ova-converter:latest -f src/cmd/cos_ova_converter/Dockerfile -t us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-ova-converter:${_TAG_NAME} -t us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-ova-converter:${_BUILD_TYPE}-${_TAG_NAME} -t us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-ova-converter:latest --push . - docker pull us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/cos-ova-converter:${_TAG_NAME} - # If it's official, push to cos-infra-prod/gcr.io. This will be depreciated after exit gates are done. - docker buildx build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from gcr.io/${_OUTPUT_PROJECT}/cos-ova-converter:latest -f src/cmd/cos_ova_converter/Dockerfile -t gcr.io/${_OUTPUT_PROJECT}/cos-ova-converter:latest -t gcr.io/${_OUTPUT_PROJECT}/cos-ova-converter:${_TAG_NAME} --push . - docker pull gcr.io/${_OUTPUT_PROJECT}/cos-ova-converter:${_TAG_NAME} - else - echo "Invalid BUILD_TYPE: $_BUILD_TYPE" - exit 1 - fi - timeout: 7200s \ No newline at end of file +- name: 'gcr.io/cloud-builders/docker' + id: build-and-tag + entrypoint: 'bash' + args: + - '-c' + - | + TAGS="" + if [ "$_BUILD_TYPE" == "presubmit" ]; then + # For presubmit build, we push presubmit-{BUILD_ID} tag. + TAGS="${_BUILD_TYPE}-${_TAG_NAME}" + elif [ "$_BUILD_TYPE" == "official" ]; then + # For official build, we push presubmit-{BUILD_ID} and latest tag. + TAGS="${_BUILD_TYPE}-${_TAG_NAME} latest" + else + echo "Invalid BUILD_TYPE: $_BUILD_TYPE" + exit 1 + fi + + # Build and tag for gcr-io-dev. BUILD_ID tag is pushed by default. + docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}" + for TAG in $$TAGS; do + docker tag "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}" "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG" + docker push "us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:$$TAG" + done + + # Build and tag for gcr.io. BUILD_ID tag is pushed by default. + docker build -f 'src/cmd/${_IMAGE_FOLDER_NAME}/Dockerfile' -t "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}" "${_RUN_PATH}" + for TAG in $$TAGS; do + docker tag "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}" "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:$$TAG" + docker push "gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:$$TAG" + done +images: +- 'us-docker.pkg.dev/${_OUTPUT_PROJECT}/gcr-io-dev/${_IMAGE_NAME}:${_TAG_NAME}' +- 'gcr.io/${_OUTPUT_PROJECT}/${_IMAGE_NAME}:${_TAG_NAME}' +timeout: 3600s