OLD | NEW |
| (Empty) |
1 #!/usr/bin/python | |
2 # Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
3 # for details. All rights reserved. Use of this source code is governed by a | |
4 # BSD-style license that can be found in the LICENSE file. | |
5 | |
6 import os | |
7 import re | |
8 import sys | |
9 | |
10 import bot | |
11 | |
12 GCS_BUCKET = 'gs://dart-cross-compiled-binaries' | |
13 SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) | |
14 sys.path.append(os.path.join(SCRIPT_DIR, '..')) | |
15 | |
16 import utils | |
17 | |
18 CROSS_VM = r'cross-(arm)-vm-linux-(release)' | |
19 TARGET_VM = r'target-(arm)-vm-linux-(([0-9]+)-([0-9]+))?(release)' | |
20 GSUTIL = utils.GetBuildbotGSUtilPath() | |
21 | |
22 def run(args): | |
23 print 'Running: %s' % (' '.join(args)) | |
24 sys.stdout.flush() | |
25 bot.RunProcess(args) | |
26 | |
27 def tarball_name(arch, mode, revision): | |
28 return 'cross_build_%s_%s_%s.tar.bz2' % (arch, mode, revision) | |
29 | |
30 def record_names(name, arch, mode): | |
31 return ('record_%s_%s_%s.json' % (name, arch, mode), | |
32 'record_output_%s_%s_%s.json' % (name, arch, mode)) | |
33 | |
34 def cross_compiling_builder(arch, mode): | |
35 build_py = os.path.join('tools', 'build.py') | |
36 revision = os.environ['BUILDBOT_GOT_REVISION'] | |
37 tarball = tarball_name(arch, mode, revision) | |
38 temporary_files = [tarball] | |
39 bot.Clobber() | |
40 try: | |
41 num_run = int(os.environ['BUILDBOT_ANNOTATED_STEPS_RUN']) | |
42 if num_run == 1: | |
43 with bot.BuildStep('Build %s %s' % (arch, mode)): | |
44 run([sys.executable, build_py, | |
45 '-m%s' % mode, '--arch=%s' % arch, 'runtime']) | |
46 | |
47 with bot.BuildStep('Create build tarball'): | |
48 run(['tar', '-cjf', tarball, '--exclude=**/obj', | |
49 '--exclude=**/obj.host', '--exclude=**/obj.target', | |
50 '--exclude=**/*analyzer*', 'out/']) | |
51 | |
52 with bot.BuildStep('Upload build tarball'): | |
53 uri = "%s/%s" % (GCS_BUCKET, tarball) | |
54 run([GSUTIL, 'cp', '-a', 'public-read', tarball, uri]) | |
55 | |
56 elif num_run == 2: | |
57 with bot.BuildStep('tests'): | |
58 print "Please see the target device for results." | |
59 print "We no longer record/replay tests." | |
60 else: | |
61 raise Exception("Invalid annotated steps run") | |
62 finally: | |
63 for path in temporary_files: | |
64 if os.path.exists(path): | |
65 os.remove(path) | |
66 | |
67 def target_builder(arch, mode, total_shards, shard_index): | |
68 test_py = os.path.join('tools', 'test.py') | |
69 test_args = [sys.executable, test_py, '--progress=line', '--report', | |
70 '--time', '--compiler=none', '--runtime=vm', '--write-debug-log', | |
71 '--write-test-outcome-log', '--mode=' + mode, '--arch=' + arch] | |
72 if total_shards and shard_index: | |
73 test_args.append('--shards=%s' % total_shards) | |
74 test_args.append('--shard=%s' % shard_index) | |
75 | |
76 revision = os.environ['BUILDBOT_GOT_REVISION'] | |
77 tarball = tarball_name(arch, mode, revision) | |
78 temporary_files = [tarball] | |
79 bot.Clobber() | |
80 try: | |
81 with bot.BuildStep('Fetch build tarball'): | |
82 run([GSUTIL, 'cp', "%s/%s" % (GCS_BUCKET, tarball), tarball]) | |
83 | |
84 with bot.BuildStep('Unpack build tarball'): | |
85 run(['tar', '-xjf', tarball]) | |
86 | |
87 with bot.BuildStep('execute tests'): | |
88 run(test_args) | |
89 | |
90 with bot.BuildStep('execute checked_tests'): | |
91 run(test_args + ['--checked', '--append_logs']) | |
92 finally: | |
93 for path in temporary_files: | |
94 if os.path.exists(path): | |
95 os.remove(path) | |
96 # We always clobber this to save disk on the arm board. | |
97 bot.Clobber(force=True) | |
98 | |
99 def main(): | |
100 name, is_buildbot = bot.GetBotName() | |
101 | |
102 cross_vm_pattern_match = re.match(CROSS_VM, name) | |
103 target_vm_pattern_match = re.match(TARGET_VM, name) | |
104 if cross_vm_pattern_match: | |
105 arch = cross_vm_pattern_match.group(1) | |
106 mode = cross_vm_pattern_match.group(2) | |
107 cross_compiling_builder(arch, mode) | |
108 elif target_vm_pattern_match: | |
109 arch = target_vm_pattern_match.group(1) | |
110 mode = target_vm_pattern_match.group(5) | |
111 shard_index = target_vm_pattern_match.group(3) | |
112 total_shards = target_vm_pattern_match.group(4) | |
113 target_builder(arch, mode, total_shards, shard_index) | |
114 else: | |
115 raise Exception("Unknown builder name %s" % name) | |
116 | |
117 if __name__ == '__main__': | |
118 try: | |
119 sys.exit(main()) | |
120 except OSError as e: | |
121 sys.exit(e.errno) | |
OLD | NEW |