Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(145)

Side by Side Diff: client/tools/buildbot_annotated_steps.py

Issue 22393002: First CL for removing our dependency on the checked-in binary for building (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | editor/build/build.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a 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. 4 # BSD-style license that can be found in the LICENSE file.
5 5
6 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 6 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
7 # Use of this source code is governed by a BSD-style license that can be 7 # Use of this source code is governed by a BSD-style license that can be
8 # found in the LICENSE file. 8 # found in the LICENSE file.
9 9
10 """Dart client buildbot steps 10 """Dart client buildbot steps
11 11
12 Compiles dart client apps with dartc, and run the client tests both in headless 12 Compiles dart client apps with dartc, and run the client tests both in headless
13 chromium and headless dartium. 13 chromium and headless dartium.
14 """ 14 """
15 15
16 import imp
16 import os 17 import os
17 import re 18 import re
18 import socket 19 import socket
19 import subprocess 20 import subprocess
20 import sys 21 import sys
21 import shutil
22 import glob
23 22
24 BUILDER_NAME = 'BUILDBOT_BUILDERNAME' 23 BUILDER_NAME = 'BUILDBOT_BUILDERNAME'
25 BUILDER_CLOBBER = 'BUILDBOT_CLOBBER' 24 BUILDER_CLOBBER = 'BUILDBOT_CLOBBER'
26 REVISION = 'BUILDBOT_REVISION' 25 REVISION = 'BUILDBOT_REVISION'
27 26
28 # latest dartium location 27 # latest dartium location
29 DARTIUM_VERSION_FILE = 'client/tests/drt/LAST_VERSION' 28 DARTIUM_VERSION_FILE = 'client/tests/drt/LAST_VERSION'
30 DARTIUM_V_MATCHER = ( 29 DARTIUM_V_MATCHER = (
31 'gs://dartium-archive/[^/]*/dartium-\w*-inc-([0-9]*).([0-9]*).zip') 30 'gs://dartium-archive/[^/]*/dartium-\w*-inc-([0-9]*).([0-9]*).zip')
32 31
32 def GetUtils():
33 '''Dynamically load the tools/utils.py python module.'''
34 dart_dir = os.path.abspath(os.path.join(__file__, '..', '..', '..'))
35 return imp.load_source('utils', os.path.join(dart_dir, 'tools', 'utils.py'))
36
37 utils = GetUtils()
38
33 def GetBuildInfo(): 39 def GetBuildInfo():
34 """Returns a tuple (name, version, mode) where: 40 """Returns a tuple (name, version, mode) where:
35 - name: A name for the build - the buildbot host if a buildbot. 41 - name: A name for the build - the buildbot host if a buildbot.
36 - version: A version string corresponding to this build. 42 - version: A version string corresponding to this build.
37 """ 43 """
38 name = None 44 name = None
39 version = None 45 version = None
40 46
41 # Populate via builder environment variables. 47 # Populate via builder environment variables.
42 name = os.environ.get(BUILDER_NAME) 48 name = os.environ.get(BUILDER_NAME)
43 version = os.environ.get(REVISION) 49 version = os.environ.get(REVISION)
44 50
45 # Fall back if not on builder. 51 # Fall back if not on builder.
46 if not name: 52 if not name:
47 name = socket.gethostname().split('.')[0] 53 name = socket.gethostname().split('.')[0]
48 if not version: 54 if not version:
49 # In Windows we need to run in the shell, so that we have all the 55 # In Windows we need to run in the shell, so that we have all the
50 # environment variables available. 56 # environment variables available.
51 pipe = subprocess.Popen( 57 pipe = subprocess.Popen(
52 ['svnversion', '-n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, 58 ['svnversion', '-n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE,
53 shell=True) 59 shell=True)
54 output = pipe.communicate() 60 output = pipe.communicate()
55 if pipe.returncode == 0: 61 if pipe.returncode == 0:
56 version = output[0] 62 version = output[0]
57 else: 63 else:
58 version = 'unknown' 64 version = 'unknown'
59 return (name, version) 65 return (name, version)
60 66
61 67 def GetOutDir(mode):
62 def GetUtils():
63 '''
64 dynamically get the utils module
65 We use a dynamic import for tools/util.py because we derive its location
66 dynamically using sys.argv[0]. This allows us to run this script from
67 different directories.
68
69 args:
70 '''
71 sys.path.append(os.path.abspath(os.path.join('.', 'tools')))
72 utils = __import__('utils')
73 return utils
74
75 def GetOutDir(utils, mode):
76 ''' 68 '''
77 get the location to place the output 69 get the location to place the output
78 70
79 args: 71 args:
80 utils - the tools/utils.py module 72 utils - the tools/utils.py module
81 mode - the mode release or debug 73 mode - the mode release or debug
82 ''' 74 '''
83 return utils.GetBuildRoot(utils.GuessOS(), mode, utils.ARCH_GUESS) 75 return utils.GetBuildRoot(utils.GuessOS(), mode, utils.ARCH_GUESS)
84 76
85 def ProcessTools(mode, name, version): 77 def ProcessTools(mode, name, version):
86 ''' 78 '''
87 build and test the tools 79 build and test the tools
88 80
89 args: 81 args:
90 srcpath - the location of the source code to build 82 srcpath - the location of the source code to build
91 mode - the mode release or debug 83 mode - the mode release or debug
92 version - the svn version of the currently checked out code 84 version - the svn version of the currently checked out code
93 ''' 85 '''
94 print 'ProcessTools' 86 print 'ProcessTools'
95 87
96 toolsBuildScript = os.path.join('.', 'editor', 'build', 'build.py') 88 toolsBuildScript = os.path.join('.', 'editor', 'build', 'build.py')
97 89
98 # TODO(devoncarew): should we move this into GetBuildInfo()? 90 # TODO(devoncarew): should we move this into GetBuildInfo()?
99 # get the latest changed revision from the current repository sub-tree 91 # get the latest changed revision from the current repository sub-tree
100 version = GetLatestChangedRevision() 92 version = GetLatestChangedRevision()
101 93
102 utils = GetUtils() 94 outdir = GetOutDir(mode)
103 outdir = GetOutDir(utils, mode)
104 cmds = [sys.executable, toolsBuildScript, 95 cmds = [sys.executable, toolsBuildScript,
105 '--mode=' + mode, '--revision=' + version, 96 '--mode=' + mode, '--revision=' + version,
106 '--name=' + name, '--out=' + outdir] 97 '--name=' + name, '--out=' + outdir]
107 local_env = EnvironmentWithoutBotoConfig() 98 local_env = EnvironmentWithoutBotoConfig()
108 #if 'linux' in name: 99 #if 'linux' in name:
109 # javahome = os.path.join(os.path.expanduser('~'), 'jdk1.6.0_25') 100 # javahome = os.path.join(os.path.expanduser('~'), 'jdk1.6.0_25')
110 # local_env['JAVA_HOME'] = javahome 101 # local_env['JAVA_HOME'] = javahome
111 # local_env['PATH'] = (os.path.join(javahome, 'bin') + 102 # local_env['PATH'] = (os.path.join(javahome, 'bin') +
112 # os.pathsep + local_env['PATH']) 103 # os.pathsep + local_env['PATH'])
113 104
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 """ Clobber the builder before we do the build. 146 """ Clobber the builder before we do the build.
156 """ 147 """
157 cmd = [sys.executable, 148 cmd = [sys.executable,
158 './tools/clean_output_directory.py'] 149 './tools/clean_output_directory.py']
159 print 'Clobbering %s' % (' '.join(cmd)) 150 print 'Clobbering %s' % (' '.join(cmd))
160 return subprocess.call(cmd) 151 return subprocess.call(cmd)
161 152
162 def GetShouldClobber(): 153 def GetShouldClobber():
163 return os.environ.get(BUILDER_CLOBBER) == "1" 154 return os.environ.get(BUILDER_CLOBBER) == "1"
164 155
165 def RunDart(scriptPath):
166 if sys.platform == 'darwin':
167 pipe = subprocess.Popen(
168 ['./tools/testing/bin/macos/dart', scriptPath],
169 stdout=subprocess.PIPE, stderr=subprocess.PIPE)
170 elif os.name == 'posix':
171 pipe = subprocess.Popen(
172 ['./tools/testing/bin/linux/dart', scriptPath],
173 stdout=subprocess.PIPE, stderr=subprocess.PIPE)
174 else:
175 pipe = subprocess.Popen(
176 ['tools\\testing\\bin\\windows\\dart.exe', scriptPath],
177 stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
178
179 output = pipe.communicate()
180 return output[0]
181
182 def GetLatestChangedRevision(): 156 def GetLatestChangedRevision():
183 # 0.1.2.0_r13661 157 revision = utils.GetSVNRevision()
184 # 0.1.2.0_r13661_username 158 if not revision:
185 fullVersion = RunDart("tools/version.dart") 159 raise Exception("Couldn't determine last changed revision.")
186 160 return revision
187 m = re.search('._r(\d+)', fullVersion)
188 svnRev = m.group(1)
189
190 return svnRev
191 161
192 def main(): 162 def main():
193 if len(sys.argv) == 0: 163 if len(sys.argv) == 0:
194 print 'Script pathname not known, giving up.' 164 print 'Script pathname not known, giving up.'
195 return 1 165 return 1
196 166
197 scriptdir = os.path.dirname(sys.argv[0]) 167 scriptdir = os.path.dirname(sys.argv[0])
198 # Get at the top-level directory. This script is in client/tools 168 # Get at the top-level directory. This script is in client/tools
199 os.chdir(os.path.abspath(os.path.join(scriptdir, os.pardir, os.pardir))) 169 os.chdir(os.path.abspath(os.path.join(scriptdir, os.pardir, os.pardir)))
200 170
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 status = ProcessBot(name, 'compiler') 204 status = ProcessBot(name, 'compiler')
235 205
236 if status: 206 if status:
237 print '@@@STEP_FAILURE@@@' 207 print '@@@STEP_FAILURE@@@'
238 208
239 return status 209 return status
240 210
241 211
242 if __name__ == '__main__': 212 if __name__ == '__main__':
243 sys.exit(main()) 213 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | editor/build/build.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698