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

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

Issue 9369010: repurpose dart_client bots for browser testing (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fixed comment Created 8 years, 10 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 | frog/scripts/buildbot_annotated_steps.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 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 # for details. All rights reserved. Use of this source code is governed by a 2 # for details. All rights reserved. Use of this source code is governed by a
3 # BSD-style license that can be found in the LICENSE file. 3 # BSD-style license that can be found in the LICENSE file.
4 4
5 #!/usr/bin/python 5 #!/usr/bin/python
6 6
7 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 7 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
8 # Use of this source code is governed by a BSD-style license that can be 8 # Use of this source code is governed by a BSD-style license that can be
9 # found in the LICENSE file. 9 # found in the LICENSE file.
10 10
(...skipping 12 matching lines...) Expand all
23 import glob 23 import glob
24 24
25 BUILDER_NAME = 'BUILDBOT_BUILDERNAME' 25 BUILDER_NAME = 'BUILDBOT_BUILDERNAME'
26 REVISION = 'BUILDBOT_REVISION' 26 REVISION = 'BUILDBOT_REVISION'
27 27
28 # latest dartium location 28 # latest dartium location
29 DARTIUM_VERSION_FILE = 'client/tests/drt/LAST_VERSION' 29 DARTIUM_VERSION_FILE = 'client/tests/drt/LAST_VERSION'
30 DARTIUM_V_MATCHER = ( 30 DARTIUM_V_MATCHER = (
31 'gs://dartium-archive/[^/]*/dartium-\w*-inc-([0-9]*).([0-9]*).zip') 31 'gs://dartium-archive/[^/]*/dartium-\w*-inc-([0-9]*).([0-9]*).zip')
32 32
33 # Patterns are of the form "dart_client-linux-ia32-debug"
34 BUILDER_PATTERN = r'dart_client-(\w+)-(\w+)-(\w+)'
35
36
37 def GetBuildInfo(): 33 def GetBuildInfo():
38 """Returns a tuple (name, version, arch, mode, platform) where: 34 """Returns a tuple (name, version, mode) where:
39 - name: A name for the build - the buildbot host if a buildbot. 35 - name: A name for the build - the buildbot host if a buildbot.
40 - version: A version string corresponding to this build. 36 - version: A version string corresponding to this build.
41 - component: 'dartium' (default) or 'chromium'
42 - mode: 'debug' or 'release' (default)
43 - platform: 'linux' or 'mac'
44 """ 37 """
45 name = None 38 name = None
46 version = None 39 version = None
47 mode = 'release'
48 component = 'dartium'
49 platform = 'linux'
50 40
51 # Populate via builder environment variables. 41 # Populate via builder environment variables.
52 name = os.environ.get(BUILDER_NAME) 42 name = os.environ.get(BUILDER_NAME)
53 version = os.environ.get(REVISION) 43 version = os.environ.get(REVISION)
54 44
55 if name:
56 pattern = re.match(BUILDER_PATTERN, name)
57 if pattern:
58 platform = pattern.group(1)
59 component = pattern.group(2)
60 mode = pattern.group(3)
61
62 # Fall back if not on builder. 45 # Fall back if not on builder.
63 if not name: 46 if not name:
64 name = socket.gethostname().split('.')[0] 47 name = socket.gethostname().split('.')[0]
65 if not version: 48 if not version:
66 # In Windows we need to run in the shell, so that we have all the 49 # In Windows we need to run in the shell, so that we have all the
67 # environment variables available. 50 # environment variables available.
68 pipe = subprocess.Popen( 51 pipe = subprocess.Popen(
69 ['svnversion', '-n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, 52 ['svnversion', '-n'], stdout=subprocess.PIPE, stderr=subprocess.PIPE,
70 shell=True) 53 shell=True)
71 output = pipe.communicate() 54 output = pipe.communicate()
72 if pipe.returncode == 0: 55 if pipe.returncode == 0:
73 version = output[0] 56 version = output[0]
74 else: 57 else:
75 version = 'unknown' 58 version = 'unknown'
76 return (name, version, component, mode, platform) 59 return (name, version)
77 60
78 61
79 def RunDartcCompiler(mode, outdir):
80 """Compiles the client code to javascript for dartc tests."""
81 return subprocess.call(
82 [sys.executable, './tools/build.py', '--mode=' + mode, 'compiler'])
83
84 def RunBrowserTests(component, mode, platform):
85 """Runs the Dart client tests."""
86 if platform == 'linux':
87 cmd = ['xvfb-run']
88 else:
89 cmd = []
90 cmd += [sys.executable, './tools/test_wrapper.py',
91 '--component=' + component, '--mode=' + mode,
92 '--time', '--report', '--progress=buildbot', '-v']
93 return subprocess.call(cmd)
94
95 def GetUtils(): 62 def GetUtils():
96 ''' 63 '''
97 dynamically get the utils module 64 dynamically get the utils module
98 We use a dynamic import for tools/util.py because we derive its location 65 We use a dynamic import for tools/util.py because we derive its location
99 dynamically using sys.argv[0]. This allows us to run this script from 66 dynamically using sys.argv[0]. This allows us to run this script from
100 different directories. 67 different directories.
101 68
102 args: 69 args:
103 ''' 70 '''
104 sys.path.append(os.path.abspath(os.path.join('.', 'tools'))) 71 sys.path.append(os.path.abspath(os.path.join('.', 'tools')))
105 utils = __import__('utils') 72 utils = __import__('utils')
106 return utils 73 return utils
107 74
108 def GetOutDir(utils, mode): 75 def GetOutDir(utils, mode):
109 ''' 76 '''
110 get the location to place the output 77 get the location to place the output
111 78
112 args: 79 args:
113 utils - the tools/utils.py module 80 utils - the tools/utils.py module
114 mode - the mode release or debug 81 mode - the mode release or debug
115 ''' 82 '''
116 return utils.GetBuildRoot(utils.GuessOS(), mode, utils.ARCH_GUESS) 83 return utils.GetBuildRoot(utils.GuessOS(), mode, utils.ARCH_GUESS)
117 84
118 def ProcessDartClientTests(component, mode, platform, name):
119 '''
120 build and test the dart client applications
121
122 args:
123 component - the component we are testing against
124 mode - the mode release or debug
125 platform - the platform we are building for
126 '''
127 print 'ProcessDartClientTests'
128 if component == 'chromium':
129 print ('@@@BUILD_STEP dartc dart clients: %s@@@' % name)
130
131 utils = GetUtils()
132 outdir = GetOutDir(utils, mode)
133 status = RunDartcCompiler(mode, outdir)
134 if status != 0:
135 return status
136
137 if component == 'dartium':
138 if os.path.exists(DARTIUM_VERSION_FILE):
139 latest = open(DARTIUM_VERSION_FILE, 'r').read()
140 match = re.match(DARTIUM_V_MATCHER, latest)
141 if match:
142 print '@@@BUILD_STEP vm r%s (dartium r%s)@@@' % (
143 match.group(2), match.group(1))
144 print '@@@BUILD_STEP browser unit tests@@@'
145 return RunBrowserTests(component, mode, platform)
146
147 def ProcessTools(mode, name, version): 85 def ProcessTools(mode, name, version):
148 ''' 86 '''
149 build and test the tools 87 build and test the tools
150 88
151 args: 89 args:
152 srcpath - the location of the source code to build 90 srcpath - the location of the source code to build
153 mode - the mode release or debug 91 mode - the mode release or debug
154 version - the svn version of the currently checked out code 92 version - the svn version of the currently checked out code
155 ''' 93 '''
156 print 'ProcessTools' 94 print 'ProcessTools'
(...skipping 20 matching lines...) Expand all
177 115
178 return subprocess.call(cmds, env=local_env) 116 return subprocess.call(cmds, env=local_env)
179 117
180 def ProcessFrog(name): 118 def ProcessFrog(name):
181 ''' 119 '''
182 build and test experimental frog build 120 build and test experimental frog build
183 ''' 121 '''
184 print 'ProcessFrog' 122 print 'ProcessFrog'
185 has_shell=False 123 has_shell=False
186 if 'windows' in name: 124 if 'windows' in name:
187 os.environ['PATH'] = (os.path.join('C:', 'Program Files (x86)', 'nodejs') + 125 os.environ['PATH'] = (os.path.join('C:', 'Program Files (x86)', 'nodejs') +
188 os.pathsep + os.environ['PATH']) 126 os.pathsep + os.environ['PATH'])
189 # In Windows we need to run in the shell, so that we have all the 127 # In Windows we need to run in the shell, so that we have all the
190 # environment variables available. 128 # environment variables available.
191 has_shell=True 129 has_shell=True
192 return subprocess.call([sys.executable, 130 return subprocess.call([sys.executable,
193 os.path.join('frog', 'scripts', 'buildbot_annotated_steps.py')], 131 os.path.join('frog', 'scripts', 'buildbot_annotated_steps.py')],
194 env=os.environ, shell=has_shell) 132 env=os.environ, shell=has_shell)
195 133
196 def main(): 134 def main():
197 print 'main' 135 print 'main'
198 if len(sys.argv) == 0: 136 if len(sys.argv) == 0:
199 print 'Script pathname not known, giving up.' 137 print 'Script pathname not known, giving up.'
200 return 1 138 return 1
201 139
202 scriptdir = os.path.dirname(sys.argv[0]) 140 scriptdir = os.path.dirname(sys.argv[0])
203 # Get at the top-level directory. This script is in client/tools 141 # Get at the top-level directory. This script is in client/tools
204 os.chdir(os.path.abspath(os.path.join(scriptdir, os.pardir, os.pardir))) 142 os.chdir(os.path.abspath(os.path.join(scriptdir, os.pardir, os.pardir)))
205 143
206 (name, version, component, mode, platform) = GetBuildInfo() 144 #TODO(sigmund): remove this indirection once we update our bots
145 (name, version) = GetBuildInfo()
207 if name.startswith('dart-editor'): 146 if name.startswith('dart-editor'):
208 status = ProcessTools(mode, name, version) 147 status = ProcessTools('release', name, version)
209 #TODO(sigmund): remove this indirection once we update our bots 148 else:
210 elif name.startswith('frog'):
211 status = ProcessFrog(name) 149 status = ProcessFrog(name)
212 else:
213 status = ProcessDartClientTests(component, mode, platform, name)
214 150
215 if status: 151 if status:
216 print '@@@STEP_FAILURE@@@' 152 print '@@@STEP_FAILURE@@@'
217 153
218 return status 154 return status
219 155
220 156
221 if __name__ == '__main__': 157 if __name__ == '__main__':
222 sys.exit(main()) 158 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | frog/scripts/buildbot_annotated_steps.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698