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

Side by Side Diff: bin/cbuildbot.py

Issue 4007005: Change preflight cleanup process to always be run before any run. (Closed) Base URL: http://git.chromium.org/git/crosutils.git
Patch Set: Created 10 years, 2 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 | no next file » | 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 2
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """CBuildbot is wrapper around the build process used by the pre-flight queue""" 7 """CBuildbot is wrapper around the build process used by the pre-flight queue"""
8 8
9 import errno 9 import errno
10 import re 10 import re
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 source_cmd = 'source %s/cros_vm_constants.sh' % cwd 211 source_cmd = 'source %s/cros_vm_constants.sh' % cwd
212 vdisk_size = RunCommand([ 212 vdisk_size = RunCommand([
213 '/bin/bash', '-c', '%s && echo $MIN_VDISK_SIZE_FULL' % source_cmd], 213 '/bin/bash', '-c', '%s && echo $MIN_VDISK_SIZE_FULL' % source_cmd],
214 redirect_stdout=True) 214 redirect_stdout=True)
215 statefulfs_size = RunCommand([ 215 statefulfs_size = RunCommand([
216 '/bin/bash', '-c', '%s && echo $MIN_STATEFUL_FS_SIZE_FULL' % source_cmd], 216 '/bin/bash', '-c', '%s && echo $MIN_STATEFUL_FS_SIZE_FULL' % source_cmd],
217 redirect_stdout=True) 217 redirect_stdout=True)
218 return (vdisk_size.strip(), statefulfs_size.strip()) 218 return (vdisk_size.strip(), statefulfs_size.strip())
219 219
220 220
221 def _GitCleanup(buildroot):
222 """Clean up git branch after previous uprev attempt."""
223 cwd = os.path.join(buildroot, 'src', 'scripts')
224 if os.path.exists(cwd):
225 RunCommand(['./cros_mark_as_stable', '--srcroot=..',
226 '--tracking_branch="cros/master"', 'clean'],
227 cwd=cwd, error_ok=True)
228
229
230 def _CleanUpMountPoints(buildroot):
231 """Cleans up any stale mount points from previous runs."""
232 mount_output = RunCommand(['mount'], redirect_stdout=True)
233 mount_pts_in_buildroot = RunCommand(['grep', buildroot], input=mount_output,
234 redirect_stdout=True, error_ok=True)
scottz 2010/10/22 00:07:32 if you are going to do this, you might as well jus
235
236 for mount_pt_str in mount_pts_in_buildroot.splitlines():
237 mount_pt = mount_pt_str.rpartition(' type ')[0].partition(' on ')[2]
238 RunCommand(['sudo', 'umount', '-l', mount_pt], error_ok=True)
239
240
241 def _WipeOldOutput(buildroot):
242 """Wipes out build output directories."""
243 RunCommand(['rm', '-rf', 'src/build/images'], cwd=buildroot)
244
245
221 # =========================== Main Commands =================================== 246 # =========================== Main Commands ===================================
222 247
248
249 def _PreFlightRinse(buildroot):
250 """Cleans up any leftover state from previous runs."""
251 _GitCleanup(buildroot)
252 _CleanUpMountPoints(buildroot)
253 RunCommand(['sudo', 'killall', 'kvm'], error_ok=True)
254
255
223 def _FullCheckout(buildroot, rw_checkout=True, retries=_DEFAULT_RETRIES): 256 def _FullCheckout(buildroot, rw_checkout=True, retries=_DEFAULT_RETRIES):
224 """Performs a full checkout and clobbers any previous checkouts.""" 257 """Performs a full checkout and clobbers any previous checkouts."""
225 RunCommand(['sudo', 'rm', '-rf', buildroot]) 258 RunCommand(['sudo', 'rm', '-rf', buildroot])
226 MakeDir(buildroot, parents=True) 259 MakeDir(buildroot, parents=True)
227 RunCommand(['repo', 'init', '-u', 'http://git.chromium.org/git/manifest'], 260 RunCommand(['repo', 'init', '-u', 'http://git.chromium.org/git/manifest'],
228 cwd=buildroot, input='\n\ny\n') 261 cwd=buildroot, input='\n\ny\n')
229 RepoSync(buildroot, rw_checkout, retries) 262 RepoSync(buildroot, rw_checkout, retries)
230 263
231 264
232 def _PreFlightRinse(buildroot):
233 """Cleans up any leftover state from previous runs."""
234 RunCommand(['sudo', 'killall', 'kvm'], error_ok=True)
235 _UprevCleanup(buildroot, error_ok=True)
236
237
238 def _IncrementalCheckout(buildroot, rw_checkout=True, 265 def _IncrementalCheckout(buildroot, rw_checkout=True,
239 retries=_DEFAULT_RETRIES): 266 retries=_DEFAULT_RETRIES):
240 """Performs a checkout without clobbering previous checkout.""" 267 """Performs a checkout without clobbering previous checkout."""
241 RepoSync(buildroot, rw_checkout, retries) 268 RepoSync(buildroot, rw_checkout, retries)
242 269
243 270
244 def _MakeChroot(buildroot): 271 def _MakeChroot(buildroot):
245 """Wrapper around make_chroot.""" 272 """Wrapper around make_chroot."""
246 cwd = os.path.join(buildroot, 'src', 'scripts') 273 cwd = os.path.join(buildroot, 'src', 'scripts')
247 RunCommand(['./make_chroot', '--fast'], cwd=cwd) 274 RunCommand(['./make_chroot', '--fast'], cwd=cwd)
248 275
249 276
250 def _SetupBoard(buildroot, board='x86-generic'): 277 def _SetupBoard(buildroot, board='x86-generic'):
251 """Wrapper around setup_board.""" 278 """Wrapper around setup_board."""
252 cwd = os.path.join(buildroot, 'src', 'scripts') 279 cwd = os.path.join(buildroot, 'src', 'scripts')
253 RunCommand(['./setup_board', '--fast', '--default', '--board=%s' % board], 280 RunCommand(['./setup_board', '--fast', '--default', '--board=%s' % board],
254 cwd=cwd, enter_chroot=True) 281 cwd=cwd, enter_chroot=True)
255 282
256 283
257 def _Build(buildroot): 284 def _Build(buildroot):
258 """Wrapper around build_packages.""" 285 """Wrapper around build_packages."""
259 cwd = os.path.join(buildroot, 'src', 'scripts') 286 cwd = os.path.join(buildroot, 'src', 'scripts')
260 RunCommand(['./build_packages'], cwd=cwd, enter_chroot=True) 287 RunCommand(['./build_packages'], cwd=cwd, enter_chroot=True)
261 288
262 289
263 def _WipeOldOutput(buildroot):
264 RunCommand(['rm', '-rf', 'src/build/images'], cwd=buildroot)
265
266
267 def _EnableLocalAccount(buildroot): 290 def _EnableLocalAccount(buildroot):
268 cwd = os.path.join(buildroot, 'src', 'scripts') 291 cwd = os.path.join(buildroot, 'src', 'scripts')
269 # Set local account for test images. 292 # Set local account for test images.
270 RunCommand(['./enable_localaccount.sh', 293 RunCommand(['./enable_localaccount.sh',
271 'chronos'], 294 'chronos'],
272 print_cmd=False, cwd=cwd) 295 print_cmd=False, cwd=cwd)
273 296
274 297
275 def _BuildImage(buildroot): 298 def _BuildImage(buildroot):
276 _WipeOldOutput(buildroot) 299 _WipeOldOutput(buildroot)
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 #if revisions != 'None': 354 #if revisions != 'None':
332 # print >> sys.stderr, 'CBUILDBOT Revision list found %s' % revisions 355 # print >> sys.stderr, 'CBUILDBOT Revision list found %s' % revisions
333 # revision_list = _ParseRevisionString(revisions, 356 # revision_list = _ParseRevisionString(revisions,
334 # _CreateRepoDictionary(buildroot, board)) 357 # _CreateRepoDictionary(buildroot, board))
335 # _UprevFromRevisionList(buildroot, revision_list) 358 # _UprevFromRevisionList(buildroot, revision_list)
336 #else: 359 #else:
337 Info('CBUILDBOT Revving all') 360 Info('CBUILDBOT Revving all')
338 _UprevAllPackages(buildroot) 361 _UprevAllPackages(buildroot)
339 362
340 363
341 def _UprevCleanup(buildroot, error_ok=False):
342 """Clean up after a previous uprev attempt."""
343 cwd = os.path.join(buildroot, 'src', 'scripts')
344 RunCommand(['./cros_mark_as_stable', '--srcroot=..',
345 '--tracking_branch="cros/master"', 'clean'],
346 cwd=cwd, error_ok=error_ok)
347
348
349 def _UprevPush(buildroot): 364 def _UprevPush(buildroot):
350 """Pushes uprev changes to the main line.""" 365 """Pushes uprev changes to the main line."""
351 cwd = os.path.join(buildroot, 'src', 'scripts') 366 cwd = os.path.join(buildroot, 'src', 'scripts')
352 RunCommand(['./cros_mark_as_stable', '--srcroot=..', 367 RunCommand(['./cros_mark_as_stable', '--srcroot=..',
353 '--tracking_branch="cros/master"', 368 '--tracking_branch="cros/master"',
354 '--push_options="--bypass-hooks -f"', 'push'], 369 '--push_options="--bypass-hooks -f"', 'push'],
355 cwd=cwd) 370 cwd=cwd)
356 371
357 372
358 def _GetConfig(config_name): 373 def _GetConfig(config_name):
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 default=False, 406 default=False,
392 help='Clobbers an old checkout before syncing') 407 help='Clobbers an old checkout before syncing')
393 parser.add_option('--debug', action='store_true', dest='debug', 408 parser.add_option('--debug', action='store_true', dest='debug',
394 default=False, 409 default=False,
395 help='Override some options to run as a developer.') 410 help='Override some options to run as a developer.')
396 (options, args) = parser.parse_args() 411 (options, args) = parser.parse_args()
397 412
398 buildroot = options.buildroot 413 buildroot = options.buildroot
399 revisionfile = options.revisionfile 414 revisionfile = options.revisionfile
400 415
401 # Passed option to clobber.
402 if options.clobber:
403 RunCommand(['sudo', 'rm', '-rf', buildroot])
404
405 if len(args) >= 1: 416 if len(args) >= 1:
406 buildconfig = _GetConfig(args[-1]) 417 buildconfig = _GetConfig(args[-1])
407 else: 418 else:
408 Warning('Missing configuration description') 419 Warning('Missing configuration description')
409 parser.print_usage() 420 parser.print_usage()
410 sys.exit(1) 421 sys.exit(1)
411 422
412 try: 423 try:
413 if not os.path.isdir(buildroot): 424 _PreFlightRinse(buildroot)
425 if options.clobber or not os.path.isdir(buildroot):
414 _FullCheckout(buildroot) 426 _FullCheckout(buildroot)
415 else: 427 else:
416 _PreFlightRinse(buildroot)
417 _IncrementalCheckout(buildroot) 428 _IncrementalCheckout(buildroot)
418 429
419 chroot_path = os.path.join(buildroot, 'chroot') 430 chroot_path = os.path.join(buildroot, 'chroot')
420 if not os.path.isdir(chroot_path): 431 if not os.path.isdir(chroot_path):
421 _MakeChroot(buildroot) 432 _MakeChroot(buildroot)
422 433
423 boardpath = os.path.join(chroot_path, 'build', buildconfig['board']) 434 boardpath = os.path.join(chroot_path, 'build', buildconfig['board'])
424 if not os.path.isdir(boardpath): 435 if not os.path.isdir(boardpath):
425 _SetupBoard(buildroot, board=buildconfig['board']) 436 _SetupBoard(buildroot, board=buildconfig['board'])
426 437
(...skipping 12 matching lines...) Expand all
439 _RunSmokeSuite(buildroot) 450 _RunSmokeSuite(buildroot)
440 451
441 if buildconfig['uprev']: 452 if buildconfig['uprev']:
442 # Don't push changes for developers. 453 # Don't push changes for developers.
443 if not options.debug: 454 if not options.debug:
444 if buildconfig['master']: 455 if buildconfig['master']:
445 # Master bot needs to check if the other slaves completed. 456 # Master bot needs to check if the other slaves completed.
446 if cbuildbot_comm.HaveSlavesCompleted(config): 457 if cbuildbot_comm.HaveSlavesCompleted(config):
447 _UprevPush(buildroot) 458 _UprevPush(buildroot)
448 else: 459 else:
449 # At least one of the slaves failed or we timed out.
450 _UprevCleanup(buildroot)
451 Die('CBUILDBOT - One of the slaves has failed!!!') 460 Die('CBUILDBOT - One of the slaves has failed!!!')
452 461
453 else: 462 else:
454 # Publish my status to the master if its expecting it. 463 # Publish my status to the master if its expecting it.
455 if buildconfig['important']: 464 if buildconfig['important']:
456 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE) 465 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE)
457 466
458 _UprevCleanup(buildroot)
459 except: 467 except:
460 # Send failure to master bot. 468 # Send failure to master bot.
461 if not buildconfig['master'] and buildconfig['important']: 469 if not buildconfig['master'] and buildconfig['important']:
462 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED) 470 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED)
463 471
464 raise 472 raise
465 473
466 474
467 if __name__ == '__main__': 475 if __name__ == '__main__':
468 main() 476 main()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698