summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/build/fuchsia/update_images.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /third_party/libwebrtc/build/fuchsia/update_images.py
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/build/fuchsia/update_images.py')
-rwxr-xr-xthird_party/libwebrtc/build/fuchsia/update_images.py142
1 files changed, 142 insertions, 0 deletions
diff --git a/third_party/libwebrtc/build/fuchsia/update_images.py b/third_party/libwebrtc/build/fuchsia/update_images.py
new file mode 100755
index 0000000000..79b8e49d86
--- /dev/null
+++ b/third_party/libwebrtc/build/fuchsia/update_images.py
@@ -0,0 +1,142 @@
+#!/usr/bin/env python
+# Copyright 2020 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Updates the Fuchsia SDK to the given revision. Should be used in a 'hooks_os'
+entry so that it only runs when .gclient's target_os includes 'fuchsia'."""
+
+import argparse
+import itertools
+import logging
+import os
+import re
+import shutil
+import subprocess
+import sys
+import tarfile
+
+from common import GetHostOsFromPlatform, GetHostArchFromPlatform, \
+ DIR_SOURCE_ROOT, IMAGES_ROOT
+from update_sdk import DownloadAndUnpackFromCloudStorage, \
+ GetOverrideCloudStorageBucket, GetSdkHash, \
+ MakeCleanDirectory, SDK_SIGNATURE_FILE
+
+
+def GetSdkSignature(sdk_hash, boot_images):
+ return 'gn:{sdk_hash}:{boot_images}:'.format(sdk_hash=sdk_hash,
+ boot_images=boot_images)
+
+
+def GetAllImages(boot_image_names):
+ if not boot_image_names:
+ return
+
+ all_device_types = ['generic', 'qemu']
+ all_archs = ['x64', 'arm64']
+
+ images_to_download = set()
+
+ for boot_image in boot_image_names.split(','):
+ components = boot_image.split('.')
+ if len(components) != 2:
+ continue
+
+ device_type, arch = components
+ device_images = all_device_types if device_type == '*' else [device_type]
+ arch_images = all_archs if arch == '*' else [arch]
+ images_to_download.update(itertools.product(device_images, arch_images))
+ return images_to_download
+
+
+def DownloadSdkBootImages(bucket, sdk_hash, boot_image_names, image_root_dir):
+ images_to_download = GetAllImages(boot_image_names)
+ for image_to_download in images_to_download:
+ device_type = image_to_download[0]
+ arch = image_to_download[1]
+ image_output_dir = os.path.join(image_root_dir, arch, device_type)
+ if os.path.exists(image_output_dir):
+ continue
+
+ logging.info('Downloading Fuchsia boot images for %s.%s...' %
+ (device_type, arch))
+ if bucket == 'fuchsia-sdk':
+ images_tarball_url = 'gs://{bucket}/development/{sdk_hash}/images/'\
+ '{device_type}.{arch}.tgz'.format(
+ bucket=bucket, sdk_hash=sdk_hash,
+ device_type=device_type, arch=arch)
+ else:
+ images_tarball_url = 'gs://{bucket}/development/{sdk_hash}/images/'\
+ '{device_type}-{arch}.tgz'.format(
+ bucket=bucket, sdk_hash=sdk_hash,
+ device_type=device_type, arch=arch)
+ DownloadAndUnpackFromCloudStorage(images_tarball_url, image_output_dir)
+
+
+def GetNewSignature(sdk_hash, boot_images):
+ return GetSdkSignature(sdk_hash, boot_images)
+
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--verbose',
+ '-v',
+ action='store_true',
+ help='Enable debug-level logging.')
+ parser.add_argument(
+ '--boot-images',
+ type=str,
+ required=True,
+ help='List of boot images to download, represented as a comma separated '
+ 'list. Wildcards are allowed. ')
+ parser.add_argument(
+ '--default-bucket',
+ type=str,
+ default='fuchsia',
+ help='The Google Cloud Storage bucket in which the Fuchsia images are '
+ 'stored. Entry in sdk-bucket.txt will override this flag.')
+ parser.add_argument(
+ '--image-root-dir',
+ default=IMAGES_ROOT,
+ help='Specify the root directory of the downloaded images. Optional')
+ args = parser.parse_args()
+
+ logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
+
+ # If no boot images need to be downloaded, exit.
+ if not args.boot_images:
+ return 0
+
+ # Check whether there's SDK support for this platform.
+ GetHostOsFromPlatform()
+
+ # Use the bucket in sdk-bucket.txt if an entry exists.
+ # Otherwise use the default bucket.
+ bucket = GetOverrideCloudStorageBucket() or args.default_bucket
+
+ sdk_hash = GetSdkHash(bucket)
+ if not sdk_hash:
+ return 1
+
+ signature_filename = os.path.join(args.image_root_dir, SDK_SIGNATURE_FILE)
+ current_signature = (open(signature_filename, 'r').read().strip()
+ if os.path.exists(signature_filename) else '')
+ new_signature = GetNewSignature(sdk_hash, args.boot_images)
+ if current_signature != new_signature:
+ logging.info('Downloading Fuchsia images %s...' % sdk_hash)
+ MakeCleanDirectory(args.image_root_dir)
+
+ try:
+ DownloadSdkBootImages(bucket, sdk_hash, args.boot_images,
+ args.image_root_dir)
+ with open(signature_filename, 'w') as f:
+ f.write(new_signature)
+
+ except subprocess.CalledProcessError as e:
+ logging.error(("command '%s' failed with status %d.%s"), " ".join(e.cmd),
+ e.returncode, " Details: " + e.output if e.output else "")
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main())