| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2012 The Swarming Authors. All rights reserved. | 2 # Copyright 2012 The Swarming Authors. All rights reserved. |
| 3 # Use of this source code is governed under the Apache License, Version 2.0 that | 3 # Use of this source code is governed under the Apache License, Version 2.0 that |
| 4 # can be found in the LICENSE file. | 4 # can be found in the LICENSE file. |
| 5 | 5 |
| 6 """Runs hello_world.py, through hello_world.isolate, remotely on a Swarming | 6 """Runs hello_world.py, through hello_world.isolate, remotely on a Swarming |
| 7 slave. | 7 slave. |
| 8 | 8 |
| 9 It compiles and archives via 'isolate.py archive', then discard the local files. | 9 It compiles and archives via 'isolate.py archive', then discard the local files. |
| 10 After, it triggers and finally collects the results. | 10 After, it triggers and finally collects the results. |
| 11 |
| 12 Creates 2 shards and instructs the script to produce a file in the output |
| 13 directory. |
| 11 """ | 14 """ |
| 12 | 15 |
| 13 import hashlib | |
| 14 import os | 16 import os |
| 15 import shutil | 17 import shutil |
| 16 import subprocess | 18 import subprocess |
| 17 import sys | 19 import sys |
| 18 import tempfile | 20 import tempfile |
| 19 | 21 |
| 20 # Pylint can't find common.py that's in the same directory as this file. | 22 # Pylint can't find common.py that's in the same directory as this file. |
| 21 # pylint: disable=F0401 | 23 # pylint: disable=F0401 |
| 22 import common | 24 import common |
| 23 | 25 |
| 24 | 26 |
| 25 def main(): | 27 def main(): |
| 26 options = common.parse_args(use_isolate_server=True, use_swarming=True) | 28 options = common.parse_args(use_isolate_server=True, use_swarming=True) |
| 27 try: | 29 try: |
| 28 tempdir = tempfile.mkdtemp(prefix=u'hello_world') | 30 tempdir = tempfile.mkdtemp(prefix=u'hello_world') |
| 29 try: | 31 try: |
| 30 # All the files are put in a temporary directory. This is optional and | 32 _, hashval = common.isolate( |
| 31 # simply done so the current directory doesn't have the following files | 33 tempdir, options.isolate_server, options.swarming_os, options.verbose) |
| 32 # created: | |
| 33 # - hello_world.isolated | |
| 34 # - hello_world.isolated.state | |
| 35 isolated = os.path.join(tempdir, 'hello_world.isolated') | |
| 36 common.note('Archiving to %s' % options.isolate_server) | |
| 37 common.run( | |
| 38 [ | |
| 39 'isolate.py', | |
| 40 'archive', | |
| 41 '--isolate', os.path.join('payload', 'hello_world.isolate'), | |
| 42 '--isolated', isolated, | |
| 43 '--isolate-server', options.isolate_server, | |
| 44 '--config-variable', 'OS', options.swarming_os, | |
| 45 ], options.verbose) | |
| 46 with open(isolated, 'rb') as f: | |
| 47 hashval = hashlib.sha1(f.read()).hexdigest() | |
| 48 | 34 |
| 49 json_file = os.path.join(tempdir, 'task.json') | 35 json_file = os.path.join(tempdir, 'task.json') |
| 50 common.note('Running on %s' % options.swarming) | 36 common.note('Running on %s' % options.swarming) |
| 51 cmd = [ | 37 cmd = [ |
| 52 'swarming.py', | 38 'swarming.py', |
| 53 'trigger', | 39 'trigger', |
| 54 '--swarming', options.swarming, | 40 '--swarming', options.swarming, |
| 55 '--isolate-server', options.isolate_server, | 41 '--isolate-server', options.isolate_server, |
| 56 '--dimension', 'os', options.swarming_os, | 42 '--dimension', 'os', options.swarming_os, |
| 57 '--task-name', options.task_name, | 43 '--task-name', options.task_name, |
| 58 '--dump-json', json_file, | 44 '--dump-json', json_file, |
| 59 '--isolated', hashval, | 45 '--isolated', hashval, |
| 46 '--shards', '2', |
| 60 ] | 47 ] |
| 61 if options.idempotent: | 48 if options.idempotent: |
| 62 cmd.append('--idempotent') | 49 cmd.append('--idempotent') |
| 63 if options.priority is not None: | 50 if options.priority is not None: |
| 64 cmd.extend(('--priority', str(options.priority))) | 51 cmd.extend(('--priority', str(options.priority))) |
| 52 cmd.extend(('--', '${ISOLATED_OUTDIR}')) |
| 65 common.run(cmd, options.verbose) | 53 common.run(cmd, options.verbose) |
| 66 | 54 |
| 67 common.note('Getting results from %s' % options.swarming) | 55 common.note('Getting results from %s' % options.swarming) |
| 68 common.run( | 56 common.run( |
| 69 [ | 57 [ |
| 70 'swarming.py', | 58 'swarming.py', |
| 71 'collect', | 59 'collect', |
| 72 '--swarming', options.swarming, | 60 '--swarming', options.swarming, |
| 73 '--json', json_file, | 61 '--json', json_file, |
| 62 '--task-output-dir', 'example_result', |
| 74 ], options.verbose) | 63 ], options.verbose) |
| 64 for root, _, files in os.walk('example_result'): |
| 65 for name in files: |
| 66 p = os.path.join(root, name) |
| 67 with open(p, 'rb') as f: |
| 68 print('%s content:' % p) |
| 69 print(f.read()) |
| 75 return 0 | 70 return 0 |
| 76 finally: | 71 finally: |
| 77 shutil.rmtree(tempdir) | 72 shutil.rmtree(tempdir) |
| 78 except subprocess.CalledProcessError as e: | 73 except subprocess.CalledProcessError as e: |
| 79 print e.returncode or 1 | 74 return e.returncode |
| 80 | 75 |
| 81 | 76 |
| 82 if __name__ == '__main__': | 77 if __name__ == '__main__': |
| 83 sys.exit(main()) | 78 sys.exit(main()) |
| OLD | NEW |