diff options
Diffstat (limited to 'infra/bots/assets/skp')
-rwxr-xr-x | infra/bots/assets/skp/common.py | 26 | ||||
-rwxr-xr-x | infra/bots/assets/skp/create.py | 83 | ||||
-rwxr-xr-x | infra/bots/assets/skp/create_and_upload.py | 46 | ||||
-rwxr-xr-x | infra/bots/assets/skp/download.py | 16 | ||||
-rwxr-xr-x | infra/bots/assets/skp/upload.py | 16 |
5 files changed, 187 insertions, 0 deletions
diff --git a/infra/bots/assets/skp/common.py b/infra/bots/assets/skp/common.py new file mode 100755 index 0000000000..4920c9b4fb --- /dev/null +++ b/infra/bots/assets/skp/common.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# +# Copyright 2016 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Common vars used by scripts in this directory.""" + + +import os +import sys + +FILE_DIR = os.path.dirname(os.path.abspath(__file__)) +INFRA_BOTS_DIR = os.path.realpath(os.path.join(FILE_DIR, os.pardir, os.pardir)) + +sys.path.insert(0, INFRA_BOTS_DIR) +from assets import assets + +ASSET_NAME = os.path.basename(FILE_DIR) + + +def run(cmd): + """Run a command, eg. "upload" or "download". """ + assets.main([cmd, ASSET_NAME] + sys.argv[1:]) diff --git a/infra/bots/assets/skp/create.py b/infra/bots/assets/skp/create.py new file mode 100755 index 0000000000..68df7f07c2 --- /dev/null +++ b/infra/bots/assets/skp/create.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python +# +# Copyright 2016 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Create the SKP asset.""" + + +import argparse +import common +import os +import shutil +import subprocess +import utils + + +SKIA_TOOLS = os.path.join(common.INFRA_BOTS_DIR, os.pardir, os.pardir, 'tools') + + +def create_asset(chrome_src_path, browser_executable, target_dir): + """Create the asset.""" + browser_executable = os.path.realpath(browser_executable) + chrome_src_path = os.path.realpath(chrome_src_path) + target_dir = os.path.realpath(target_dir) + + if not os.path.exists(target_dir): + os.makedirs(target_dir) + + with utils.tmp_dir(): + if os.environ.get('CHROME_HEADLESS'): + # Start Xvfb if running on a bot. + try: + subprocess.Popen(['sudo', 'Xvfb', ':0', '-screen', '0', '1280x1024x24']) + except Exception: + # It is ok if the above command fails, it just means that DISPLAY=:0 + # is already up. + pass + + webpages_playback_cmd = [ + 'python', os.path.join(SKIA_TOOLS, 'skp', 'webpages_playback.py'), + '--page_sets', 'all', + '--browser_executable', browser_executable, + '--non-interactive', + '--output_dir', os.getcwd(), + '--chrome_src_path', chrome_src_path, + ] + try: + subprocess.check_call(webpages_playback_cmd) + finally: + # Clean up any leftover browser instances. This can happen if there are + # telemetry crashes, processes are not always cleaned up appropriately by + # the webpagereplay and telemetry frameworks. + procs = subprocess.check_output(['ps', 'ax']) + for line in procs.splitlines(): + if browser_executable in line: + pid = line.strip().split(' ')[0] + if pid != str(os.getpid()) and not 'python' in line: + try: + subprocess.check_call(['kill', '-9', pid]) + except subprocess.CalledProcessError as e: + print e + else: + print 'Refusing to kill self.' + src = os.path.join(os.getcwd(), 'playback', 'skps') + for f in os.listdir(src): + if f.endswith('.skp'): + shutil.copyfile(os.path.join(src, f), os.path.join(target_dir, f)) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--target_dir', '-t', required=True) + parser.add_argument('--chrome_src_path', '-c', required=True) + parser.add_argument('--browser_executable', '-e', required=True) + args = parser.parse_args() + create_asset(args.chrome_src_path, args.browser_executable, args.target_dir) + + +if __name__ == '__main__': + main() diff --git a/infra/bots/assets/skp/create_and_upload.py b/infra/bots/assets/skp/create_and_upload.py new file mode 100755 index 0000000000..6567f80ffc --- /dev/null +++ b/infra/bots/assets/skp/create_and_upload.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# +# Copyright 2016 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Create the asset and upload it.""" + + +import argparse +import common +import os +import subprocess +import sys +import utils + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--chrome_src_path', '-c', required=True) + parser.add_argument('--browser_executable', '-e', required=True) + parser.add_argument('--gsutil') + args = parser.parse_args() + + with utils.tmp_dir(): + cwd = os.getcwd() + create_script = os.path.join(common.FILE_DIR, 'create.py') + upload_script = os.path.join(common.FILE_DIR, 'upload.py') + + try: + subprocess.check_call(['python', create_script, '--target_dir', cwd, + '--chrome_src_path', args.chrome_src_path, + '--browser_executable', args.browser_executable]) + cmd = ['python', upload_script, '-t', cwd] + if args.gsutil: + cmd.extend(['--gsutil', args.gsutil]) + subprocess.check_call(cmd) + except subprocess.CalledProcessError: + # Trap exceptions to avoid printing two stacktraces. + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/infra/bots/assets/skp/download.py b/infra/bots/assets/skp/download.py new file mode 100755 index 0000000000..96cc87d43f --- /dev/null +++ b/infra/bots/assets/skp/download.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +# +# Copyright 2016 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Download the current version of the asset.""" + + +import common + + +if __name__ == '__main__': + common.run('download') diff --git a/infra/bots/assets/skp/upload.py b/infra/bots/assets/skp/upload.py new file mode 100755 index 0000000000..ba7fc8b6a1 --- /dev/null +++ b/infra/bots/assets/skp/upload.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +# +# Copyright 2016 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Upload a new version of the asset.""" + + +import common + + +if __name__ == '__main__': + common.run('upload') |