| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 Google Inc. All rights reserved. | 2 # Copyright (c) 2012 Google Inc. 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 | 6 |
| 7 """Argument-less script to select what to run on the buildbots.""" | 7 """Argument-less script to select what to run on the buildbots.""" |
| 8 | 8 |
| 9 | 9 |
| 10 import os | 10 import os |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 cwd=CMAKE_DIR) | 66 cwd=CMAKE_DIR) |
| 67 | 67 |
| 68 print '@@@BUILD_STEP Build CMake@@@' | 68 print '@@@BUILD_STEP Build CMake@@@' |
| 69 CallSubProcess( | 69 CallSubProcess( |
| 70 ['/bin/bash', 'bootstrap', '--prefix=%s' % CMAKE_DIR], | 70 ['/bin/bash', 'bootstrap', '--prefix=%s' % CMAKE_DIR], |
| 71 cwd=CMAKE_DIR) | 71 cwd=CMAKE_DIR) |
| 72 | 72 |
| 73 CallSubProcess( ['make', 'cmake'], cwd=CMAKE_DIR) | 73 CallSubProcess( ['make', 'cmake'], cwd=CMAKE_DIR) |
| 74 | 74 |
| 75 | 75 |
| 76 _ANDROID_SETUP = 'source build/envsetup.sh && lunch full-eng' |
| 77 |
| 78 |
| 76 def PrepareAndroidTree(): | 79 def PrepareAndroidTree(): |
| 77 """Prepare an Android tree to run 'android' format tests.""" | 80 """Prepare an Android tree to run 'android' format tests.""" |
| 78 if os.environ['BUILDBOT_CLOBBER'] == '1': | 81 if os.environ['BUILDBOT_CLOBBER'] == '1': |
| 79 print '@@@BUILD_STEP Clobber Android checkout@@@' | 82 print '@@@BUILD_STEP Clobber Android checkout@@@' |
| 80 shutil.rmtree(ANDROID_DIR) | 83 shutil.rmtree(ANDROID_DIR) |
| 81 | 84 |
| 82 # The release of Android we use is static, so there's no need to do anything | 85 # The release of Android we use is static, so there's no need to do anything |
| 83 # if the directory already exists. | 86 # if the directory already exists. |
| 84 if os.path.isdir(ANDROID_DIR): | 87 if os.path.isdir(ANDROID_DIR): |
| 85 return | 88 return |
| (...skipping 10 matching lines...) Expand all Loading... |
| 96 '-b', 'android-4.2.1_r1', | 99 '-b', 'android-4.2.1_r1', |
| 97 '-g', 'all,-notdefault,-device,-darwin,-mips,-x86'], | 100 '-g', 'all,-notdefault,-device,-darwin,-mips,-x86'], |
| 98 cwd=ANDROID_DIR) | 101 cwd=ANDROID_DIR) |
| 99 | 102 |
| 100 print '@@@BUILD_STEP Sync Android@@@' | 103 print '@@@BUILD_STEP Sync Android@@@' |
| 101 CallSubProcess(['repo', 'sync', '-j4'], cwd=ANDROID_DIR) | 104 CallSubProcess(['repo', 'sync', '-j4'], cwd=ANDROID_DIR) |
| 102 | 105 |
| 103 print '@@@BUILD_STEP Build Android@@@' | 106 print '@@@BUILD_STEP Build Android@@@' |
| 104 CallSubProcess( | 107 CallSubProcess( |
| 105 ['/bin/bash', | 108 ['/bin/bash', |
| 106 '-c', 'source build/envsetup.sh && lunch full-eng && make -j4'], | 109 '-c', '%s && make -j4' % _ANDROID_SETUP], |
| 107 cwd=ANDROID_DIR) | 110 cwd=ANDROID_DIR) |
| 108 | 111 |
| 109 | 112 |
| 113 def StartAndroidEmulator(): |
| 114 """Start an android emulator from the built android tree.""" |
| 115 print '@@@BUILD_STEP Start Android emulator@@@' |
| 116 android_host_bin = '$ANDROID_HOST_OUT/bin' |
| 117 subprocess.Popen( |
| 118 ['/bin/bash', '-c', |
| 119 '%s && %s/emulator -no-window' % (_ANDROID_SETUP, android_host_bin)], |
| 120 cwd=ANDROID_DIR) |
| 121 CallSubProcess( |
| 122 ['/bin/bash', '-c', |
| 123 '%s && %s/adb wait-for-device' % (_ANDROID_SETUP, android_host_bin)], |
| 124 cwd=ANDROID_DIR) |
| 125 |
| 126 |
| 127 def StopAndroidEmulator(): |
| 128 """Stop all android emulators.""" |
| 129 print '@@@BUILD_STEP Stop Android emulator@@@' |
| 130 # If this fails, it's because there is no emulator running. |
| 131 subprocess.call(['pkill', 'emulator.*']) |
| 132 |
| 133 |
| 110 def GypTestFormat(title, format=None, msvs_version=None, tests=[]): | 134 def GypTestFormat(title, format=None, msvs_version=None, tests=[]): |
| 111 """Run the gyp tests for a given format, emitting annotator tags. | 135 """Run the gyp tests for a given format, emitting annotator tags. |
| 112 | 136 |
| 113 See annotator docs at: | 137 See annotator docs at: |
| 114 https://sites.google.com/a/chromium.org/dev/developers/testing/chromium-buil
d-infrastructure/buildbot-annotations | 138 https://sites.google.com/a/chromium.org/dev/developers/testing/chromium-buil
d-infrastructure/buildbot-annotations |
| 115 Args: | 139 Args: |
| 116 format: gyp format to test. | 140 format: gyp format to test. |
| 117 Returns: | 141 Returns: |
| 118 0 for sucesss, 1 for failure. | 142 0 for sucesss, 1 for failure. |
| 119 """ | 143 """ |
| (...skipping 10 matching lines...) Expand all Loading... |
| 130 '--all', | 154 '--all', |
| 131 '--passed', | 155 '--passed', |
| 132 '--format', format, | 156 '--format', format, |
| 133 '--path', CMAKE_BIN_DIR, | 157 '--path', CMAKE_BIN_DIR, |
| 134 '--chdir', 'trunk'] + tests) | 158 '--chdir', 'trunk'] + tests) |
| 135 if format == 'android': | 159 if format == 'android': |
| 136 # gyptest needs the environment setup from envsetup/lunch in order to build | 160 # gyptest needs the environment setup from envsetup/lunch in order to build |
| 137 # using the 'android' backend, so this is done in a single shell. | 161 # using the 'android' backend, so this is done in a single shell. |
| 138 retcode = subprocess.call( | 162 retcode = subprocess.call( |
| 139 ['/bin/bash', | 163 ['/bin/bash', |
| 140 '-c', 'source build/envsetup.sh && lunch full-eng && cd %s && %s' | 164 '-c', '%s && cd %s && %s' % (_ANDROID_SETUP, ROOT_DIR, command)], |
| 141 % (ROOT_DIR, command)], | |
| 142 cwd=ANDROID_DIR, env=env) | 165 cwd=ANDROID_DIR, env=env) |
| 143 else: | 166 else: |
| 144 retcode = subprocess.call(command, cwd=ROOT_DIR, env=env, shell=True) | 167 retcode = subprocess.call(command, cwd=ROOT_DIR, env=env, shell=True) |
| 145 if retcode: | 168 if retcode: |
| 146 # Emit failure tag, and keep going. | 169 # Emit failure tag, and keep going. |
| 147 print '@@@STEP_FAILURE@@@' | 170 print '@@@STEP_FAILURE@@@' |
| 148 return 1 | 171 return 1 |
| 149 return 0 | 172 return 0 |
| 150 | 173 |
| 151 | 174 |
| 152 def GypBuild(): | 175 def GypBuild(): |
| 153 # Dump out/ directory. | 176 # Dump out/ directory. |
| 154 print '@@@BUILD_STEP cleanup@@@' | 177 print '@@@BUILD_STEP cleanup@@@' |
| 155 print 'Removing %s...' % OUT_DIR | 178 print 'Removing %s...' % OUT_DIR |
| 156 shutil.rmtree(OUT_DIR, ignore_errors=True) | 179 shutil.rmtree(OUT_DIR, ignore_errors=True) |
| 157 print 'Done.' | 180 print 'Done.' |
| 158 | 181 |
| 159 retcode = 0 | 182 retcode = 0 |
| 160 # The Android gyp bot runs on linux so this must be tested first. | 183 # The Android gyp bot runs on linux so this must be tested first. |
| 161 if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-android': | 184 if os.environ['BUILDBOT_BUILDERNAME'] == 'gyp-android': |
| 162 PrepareAndroidTree() | 185 PrepareAndroidTree() |
| 163 retcode += GypTestFormat('android') | 186 StartAndroidEmulator() |
| 187 try: |
| 188 retcode += GypTestFormat('android') |
| 189 finally: |
| 190 StopAndroidEmulator() |
| 164 elif sys.platform.startswith('linux'): | 191 elif sys.platform.startswith('linux'): |
| 165 retcode += GypTestFormat('ninja') | 192 retcode += GypTestFormat('ninja') |
| 166 retcode += GypTestFormat('make') | 193 retcode += GypTestFormat('make') |
| 167 PrepareCmake() | 194 PrepareCmake() |
| 168 retcode += GypTestFormat('cmake') | 195 retcode += GypTestFormat('cmake') |
| 169 elif sys.platform == 'darwin': | 196 elif sys.platform == 'darwin': |
| 170 retcode += GypTestFormat('ninja') | 197 retcode += GypTestFormat('ninja') |
| 171 retcode += GypTestFormat('xcode') | 198 retcode += GypTestFormat('xcode') |
| 172 retcode += GypTestFormat('make') | 199 retcode += GypTestFormat('make') |
| 173 elif sys.platform == 'win32': | 200 elif sys.platform == 'win32': |
| (...skipping 13 matching lines...) Expand all Loading... |
| 187 # TODO(bradnelson): once the annotator supports a postscript (section for | 214 # TODO(bradnelson): once the annotator supports a postscript (section for |
| 188 # after the build proper that could be used for cumulative failures), | 215 # after the build proper that could be used for cumulative failures), |
| 189 # use that instead of this. This isolates the final return value so | 216 # use that instead of this. This isolates the final return value so |
| 190 # that it isn't misattributed to the last stage. | 217 # that it isn't misattributed to the last stage. |
| 191 print '@@@BUILD_STEP failures@@@' | 218 print '@@@BUILD_STEP failures@@@' |
| 192 sys.exit(retcode) | 219 sys.exit(retcode) |
| 193 | 220 |
| 194 | 221 |
| 195 if __name__ == '__main__': | 222 if __name__ == '__main__': |
| 196 GypBuild() | 223 GypBuild() |
| OLD | NEW |