| #!/usr/bin/env python3 |
| # Copyright 2023 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| # |
| # This is a script helping developers upload web-engine artifacts. |
| # |
| # `python3 tools/fuchsia/upload_webengine_build.py -c <commit> -d <build dir> |
| # -g <GCS path>` |
| # The script will sync, compile, and upload relevant artifacts to the GCS dir. |
| |
| import argparse |
| import os |
| import posixpath |
| import subprocess |
| import sys |
| |
| WEB_ENGINE_TARGETS = [ |
| 'cast_runner_pkg', 'web_engine_shell_pkg', |
| 'performance_web_engine_test_suite' |
| ] |
| |
| FAR_ARTIFACTS = ['cast_runner.far', 'web_engine_shell.far', 'web_engine.far'] |
| |
| |
| def Run(command): |
| print(command) |
| subprocess.run(command, |
| shell=True, |
| check=True, |
| encoding='utf-8', |
| stderr=subprocess.STDOUT) |
| |
| |
| def FindFile(file, root_dir): |
| for root, _, files in os.walk(root_dir): |
| for f in files: |
| if file == f: |
| return os.path.join(root, f) |
| |
| raise AssertionError( |
| f'File {file} not found. Be sure it is created by one of the ' |
| f'targets {WEB_ENGINE_TARGETS}') |
| |
| |
| def StartBuildAndUpload(out_dir, gcs_path, commit=None): |
| if commit: |
| Run(f'git checkout {commit}') |
| Run('gclient sync') |
| |
| all_targets = ' '.join(WEB_ENGINE_TARGETS) |
| Run(f'autoninja -C {out_dir} {all_targets}') |
| |
| # Now to find the relevant far files. |
| full_paths = [FindFile(artifact, out_dir) for artifact in FAR_ARTIFACTS] |
| for path in full_paths: |
| # Specifying the exact name is helpful when the GCS path does not end in a |
| # '/', which can cause `gsutil` to interpret it as the destination file and |
| # not as a directory. |
| file = os.path.basename(path) |
| remote_path = posixpath.join(gcs_path, file) |
| Run(f'gsutil -m cp {path} {remote_path}') |
| |
| return 0 |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument('-c', |
| '--commit', |
| type=str, |
| help='Revision to checkout, compile, and upload.', |
| required=False) |
| parser.add_argument('-g', |
| '--gcs_path', |
| type=str, |
| help='A full GCS path that will contain the artifacts.', |
| required=True) |
| parser.add_argument('-d', |
| '--out_dir', |
| type=str, |
| help=('Output directory to build from. ' |
| 'Must have GN args set already.'), |
| required=True) |
| args = parser.parse_args() |
| return StartBuildAndUpload(args.out_dir, args.gcs_path, args.commit) |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |