OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """Main entry point for the NaCl SDK buildbot. | 6 """Main entry point for the NaCl SDK buildbot. |
7 | 7 |
8 The entry point used to be build_sdk.py itself, but we want | 8 The entry point used to be build_sdk.py itself, but we want |
9 to be able to simplify build_sdk (for example separating out | 9 to be able to simplify build_sdk (for example separating out |
10 the test code into test_sdk) and change its default behaviour | 10 the test code into test_sdk) and change its default behaviour |
11 while being able to separately control excactly what the bots | 11 while being able to separately control excactly what the bots |
12 run. | 12 run. |
13 """ | 13 """ |
14 | 14 |
15 import buildbot_common | 15 import buildbot_common |
16 import os | 16 import os |
| 17 import subprocess |
17 import sys | 18 import sys |
| 19 |
18 from buildbot_common import Run | 20 from buildbot_common import Run |
19 from build_paths import SDK_SRC_DIR, SCRIPT_DIR | 21 from build_paths import SRC_DIR, SDK_SRC_DIR, SCRIPT_DIR |
| 22 import getos |
20 | 23 |
21 | 24 |
22 def StepRunUnittests(): | 25 def StepRunUnittests(): |
23 buildbot_common.BuildStep('Run unittests') | 26 buildbot_common.BuildStep('Run unittests') |
24 | 27 |
25 # Our tests shouldn't be using the proxy; they should all be connecting to | 28 # Our tests shouldn't be using the proxy; they should all be connecting to |
26 # localhost. Some slaves can't route HTTP traffic through the proxy to | 29 # localhost. Some slaves can't route HTTP traffic through the proxy to |
27 # localhost (we get 504 gateway errors), so we clear it here. | 30 # localhost (we get 504 gateway errors), so we clear it here. |
28 env = dict(os.environ) | 31 env = dict(os.environ) |
29 if 'http_proxy' in env: | 32 if 'http_proxy' in env: |
30 del env['http_proxy'] | 33 del env['http_proxy'] |
31 | 34 |
32 Run([sys.executable, 'test_all.py'], env=env, cwd=SDK_SRC_DIR) | 35 Run([sys.executable, 'test_all.py'], env=env, cwd=SDK_SRC_DIR) |
33 | 36 |
34 | 37 |
35 def StepBuildSDK(args): | 38 def StepBuildSDK(args): |
36 Run([sys.executable, 'build_sdk.py'] + args, cwd=SCRIPT_DIR) | 39 is_win = getos.GetPlatform() == 'win' |
| 40 |
| 41 # Windows has a path length limit of 255 characters, after joining cwd with a |
| 42 # relative path. Use subst before building to keep the path lengths short. |
| 43 if is_win: |
| 44 subst_drive = 'S:' |
| 45 root_dir = os.path.dirname(SRC_DIR) |
| 46 new_root_dir = subst_drive + '\\' |
| 47 subprocess.check_call(['subst', subst_drive, root_dir]) |
| 48 new_script_dir = os.path.join(new_root_dir, |
| 49 os.path.relpath(SCRIPT_DIR, root_dir)) |
| 50 else: |
| 51 new_script_dir = SCRIPT_DIR |
| 52 |
| 53 try: |
| 54 Run([sys.executable, 'build_sdk.py'] + args, cwd=new_script_dir) |
| 55 finally: |
| 56 if is_win: |
| 57 subprocess.check_call(['subst', '/D', subst_drive]) |
37 | 58 |
38 | 59 |
39 def StepTestSDK(): | 60 def StepTestSDK(): |
40 Run([sys.executable, 'test_sdk.py'], cwd=SCRIPT_DIR) | 61 Run([sys.executable, 'test_sdk.py'], cwd=SCRIPT_DIR) |
41 | 62 |
42 | 63 |
43 def main(args): | 64 def main(args): |
44 StepRunUnittests() | 65 StepRunUnittests() |
45 StepBuildSDK(args) | 66 StepBuildSDK(args) |
46 StepTestSDK() | 67 StepTestSDK() |
47 return 0 | 68 return 0 |
48 | 69 |
49 | 70 |
50 if __name__ == '__main__': | 71 if __name__ == '__main__': |
51 try: | 72 try: |
52 sys.exit(main(sys.argv[1:])) | 73 sys.exit(main(sys.argv[1:])) |
53 except KeyboardInterrupt: | 74 except KeyboardInterrupt: |
54 buildbot_common.ErrorExit('buildbot_run: interrupted') | 75 buildbot_common.ErrorExit('buildbot_run: interrupted') |
OLD | NEW |