diff --git a/infra/build/functions/base_images.py b/infra/build/functions/base_images.py index 12f815402..50f72a3dc 100644 --- a/infra/build/functions/base_images.py +++ b/infra/build/functions/base_images.py @@ -110,6 +110,51 @@ def run_build(steps, images, tags=None, build_version=MAJOR_TAG): use_build_pool=False) +def get_images_architecture_manifest_steps(): + """Returns steps to create manifests for ARM and x86_64 versions of + base-runner and base-builder.""" + images = [f'{TAG_PREFIX}/base-builder', f'{TAG_PREFIX}/base-runner'] + steps = [] + for image in images: + steps.extend(get_image_push_architecture_manifest_steps(image)) + return steps + + +def get_image_push_architecture_manifest_steps(image): + """Returns the steps to push a manifest pointing to ARM64 and AMD64 versions + of |image|.""" + arm_testing_image = f'{image}-testing-arm' + amd64_manifest_image = f'{image}:manifest-amd64' + arm64_manifest_image = f'{image}:manifest-arm64v8' + steps = [ + { + 'name': 'gcr.io/cloud-builders/docker', + 'args': ['tag', image, amd64_manifest_image], + }, + { + 'name': 'gcr.io/cloud-builders/docker', + 'args': ['pull', arm_testing_image], + }, + { + 'name': 'gcr.io/cloud-builders/docker', + 'args': ['tag', arm_testing_image, arm64_manifest_image], + }, + { + 'name': + 'gcr.io/cloud-builders/docker', + 'args': [ + 'tag', 'manifest', 'create', image, '--amend', + arm64_manifest_image, '--amend', amd64_manifest_image + ], + }, + { + 'name': 'gcr.io/cloud-builders/docker', + 'args': ['manifest', 'push', image] + }, + ] + return steps + + def base_builder(event, context): """Cloud function to build base images.""" del event, context @@ -119,6 +164,10 @@ def base_builder(event, context): images = [TAG_PREFIX + base_image for base_image in BASE_IMAGES] run_build(steps, images) + steps = get_images_architecture_manifest_steps() + images = ['base-builder', 'base-runner'] + run_build(steps, images) + introspector_steps = _get_introspector_base_images_steps() introspector_images = [ TAG_PREFIX + base_image for base_image in INTROSPECTOR_BASE_IMAGES