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

Side by Side Diff: bin/cbuildbot.py

Issue 5154008: Add ability to rev and build a chrome from cbuildbot (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: Nit Created 10 years 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 | bin/cros_mark_chrome_as_stable.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 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 heapq 10 import heapq
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 '--board=%s' % board, 202 '--board=%s' % board,
203 '--tracking_branch=%s' % tracking_branch, 203 '--tracking_branch=%s' % tracking_branch,
204 '--overlays=%s' % ':'.join(chroot_overlays), 204 '--overlays=%s' % ':'.join(chroot_overlays),
205 '--packages=%s' % ':'.join(packages), 205 '--packages=%s' % ':'.join(packages),
206 '--drop_file=%s' % ReinterpretPathForChroot(_PACKAGE_FILE % 206 '--drop_file=%s' % ReinterpretPathForChroot(_PACKAGE_FILE %
207 {'buildroot': buildroot}), 207 {'buildroot': buildroot}),
208 'commit'], 208 'commit'],
209 cwd=cwd, enter_chroot=True) 209 cwd=cwd, enter_chroot=True)
210 210
211 211
212 def _MarkChromeAsStable(buildroot, tracking_branch, chrome_rev):
213 """Returns the portage atom for the revved chrome ebuild - see man emerge."""
214 cwd = os.path.join(buildroot, 'src', 'scripts')
215 portage_atom_string = RunCommand(['bin/cros_mark_chrome_as_stable',
216 '--tracking_branch=%s' % tracking_branch,
217 chrome_rev], cwd=cwd, redirect_stdout=True,
218 enter_chroot=True).rstrip()
219 if not portage_atom_string:
220 Info('Found nothing to rev.')
221 return None
222 else:
223 return portage_atom_string.split('=')[1]
224
225
212 def _UprevAllPackages(buildroot, tracking_branch, board, overlays): 226 def _UprevAllPackages(buildroot, tracking_branch, board, overlays):
213 """Uprevs all packages that have been updated since last uprev.""" 227 """Uprevs all packages that have been updated since last uprev."""
214 cwd = os.path.join(buildroot, 'src', 'scripts') 228 cwd = os.path.join(buildroot, 'src', 'scripts')
215 chroot_overlays = [ReinterpretPathForChroot(path) for path in overlays] 229 chroot_overlays = [ReinterpretPathForChroot(path) for path in overlays]
216 RunCommand(['./cros_mark_as_stable', '--all', 230 RunCommand(['./cros_mark_as_stable', '--all',
217 '--board=%s' % board, 231 '--board=%s' % board,
218 '--overlays=%s' % ':'.join(chroot_overlays), 232 '--overlays=%s' % ':'.join(chroot_overlays),
219 '--tracking_branch=%s' % tracking_branch, 233 '--tracking_branch=%s' % tracking_branch,
220 '--drop_file=%s' % ReinterpretPathForChroot(_PACKAGE_FILE % 234 '--drop_file=%s' % ReinterpretPathForChroot(_PACKAGE_FILE %
221 {'buildroot': buildroot}), 235 {'buildroot': buildroot}),
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 RunCommand(['./setup_board', '--fast', '--default', '--board=%s' % board], 318 RunCommand(['./setup_board', '--fast', '--default', '--board=%s' % board],
305 cwd=cwd, enter_chroot=True) 319 cwd=cwd, enter_chroot=True)
306 320
307 321
308 def _Build(buildroot): 322 def _Build(buildroot):
309 """Wrapper around build_packages.""" 323 """Wrapper around build_packages."""
310 cwd = os.path.join(buildroot, 'src', 'scripts') 324 cwd = os.path.join(buildroot, 'src', 'scripts')
311 RunCommand(['./build_packages'], cwd=cwd, enter_chroot=True) 325 RunCommand(['./build_packages'], cwd=cwd, enter_chroot=True)
312 326
313 327
328 def _BuildChrome(buildroot, board, chrome_atom_to_build):
329 """Wrapper for emerge call to build Chrome."""
330 cwd = os.path.join(buildroot, 'src', 'scripts')
331 RunCommand(['emerge-%s' % board, '=%s' % chrome_atom_to_build],
332 cwd=cwd, enter_chroot=True)
333
334
314 def _EnableLocalAccount(buildroot): 335 def _EnableLocalAccount(buildroot):
315 cwd = os.path.join(buildroot, 'src', 'scripts') 336 cwd = os.path.join(buildroot, 'src', 'scripts')
316 # Set local account for test images. 337 # Set local account for test images.
317 RunCommand(['./enable_localaccount.sh', 338 RunCommand(['./enable_localaccount.sh',
318 'chronos'], 339 'chronos'],
319 print_cmd=False, cwd=cwd) 340 print_cmd=False, cwd=cwd)
320 341
321 342
322 def _BuildImage(buildroot): 343 def _BuildImage(buildroot):
323 _WipeOldOutput(buildroot) 344 _WipeOldOutput(buildroot)
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 # print >> sys.stderr, 'CBUILDBOT Revision list found %s' % revisions 409 # print >> sys.stderr, 'CBUILDBOT Revision list found %s' % revisions
389 # revision_list = _ParseRevisionString(revisions, 410 # revision_list = _ParseRevisionString(revisions,
390 # _CreateRepoDictionary(buildroot, board)) 411 # _CreateRepoDictionary(buildroot, board))
391 # _UprevFromRevisionList(buildroot, tracking_branch, revision_list, board, 412 # _UprevFromRevisionList(buildroot, tracking_branch, revision_list, board,
392 # overlays) 413 # overlays)
393 #else: 414 #else:
394 Info('CBUILDBOT Revving all') 415 Info('CBUILDBOT Revving all')
395 _UprevAllPackages(buildroot, tracking_branch, board, overlays) 416 _UprevAllPackages(buildroot, tracking_branch, board, overlays)
396 417
397 418
398 def _UprevPush(buildroot, tracking_branch, board, overlays): 419 def _UprevPush(buildroot, tracking_branch, board, overlays, dryrun):
399 """Pushes uprev changes to the main line.""" 420 """Pushes uprev changes to the main line."""
400 cwd = os.path.join(buildroot, 'src', 'scripts') 421 cwd = os.path.join(buildroot, 'src', 'scripts')
401 RunCommand(['./cros_mark_as_stable', '--srcroot=..', 422 cmd = ['./cros_mark_as_stable',
402 '--board=%s' % board, 423 '--srcroot=%s' % os.path.join(buildroot, 'src'),
403 '--overlays=%s' % ':'.join(overlays), 424 '--board=%s' % board,
404 '--tracking_branch=%s' % tracking_branch, 425 '--overlays=%s' % ':'.join(overlays),
405 '--push_options=--bypass-hooks -f', 'push'], 426 '--tracking_branch=%s' % tracking_branch
406 cwd=cwd) 427 ]
428 if dryrun:
429 cmd.append('--dryrun')
430
431 cmd.append('push')
432 RunCommand(cmd, cwd=cwd)
407 433
408 434
409 def _ArchiveTestResults(buildroot, board, test_results_dir, 435 def _ArchiveTestResults(buildroot, board, test_results_dir,
410 gsutil, archive_dir, acl): 436 gsutil, archive_dir, acl):
411 """Archives the test results into Google Storage 437 """Archives the test results into Google Storage
412 438
413 Takes the results from the test_results_dir and the last qemu image and 439 Takes the results from the test_results_dir and the last qemu image and
414 uploads them to Google Storage. 440 uploads them to Google Storage.
415 441
416 Arguments: 442 Arguments:
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 515
490 516
491 def main(): 517 def main():
492 # Parse options 518 # Parse options
493 usage = "usage: %prog [options] cbuildbot_config" 519 usage = "usage: %prog [options] cbuildbot_config"
494 parser = optparse.OptionParser(usage=usage) 520 parser = optparse.OptionParser(usage=usage)
495 parser.add_option('-r', '--buildroot', 521 parser.add_option('-r', '--buildroot',
496 help='root directory where build occurs', default=".") 522 help='root directory where build occurs', default=".")
497 parser.add_option('-n', '--buildnumber', 523 parser.add_option('-n', '--buildnumber',
498 help='build number', type='int', default=0) 524 help='build number', type='int', default=0)
525 parser.add_option('--chrome_rev', default=None, type='string',
526 dest='chrome_rev',
527 help=('Chrome_rev of type [tot|latest_release|'
528 'sticky_release]'))
499 parser.add_option('-f', '--revisionfile', 529 parser.add_option('-f', '--revisionfile',
500 help='file where new revisions are stored') 530 help='file where new revisions are stored')
501 parser.add_option('--clobber', action='store_true', dest='clobber', 531 parser.add_option('--clobber', action='store_true', dest='clobber',
502 default=False, 532 default=False,
503 help='Clobbers an old checkout before syncing') 533 help='Clobbers an old checkout before syncing')
504 parser.add_option('--debug', action='store_true', dest='debug', 534 parser.add_option('--debug', action='store_true', dest='debug',
505 default=False, 535 default=False,
506 help='Override some options to run as a developer.') 536 help='Override some options to run as a developer.')
537 parser.add_option('--nosync', action='store_false', dest='sync',
538 default=True,
539 help="Don't sync before building.")
540 parser.add_option('--notests', action='store_false', dest='tests',
541 default=True,
542 help='Override values from buildconfig and run no tests.')
507 parser.add_option('-t', '--tracking-branch', dest='tracking_branch', 543 parser.add_option('-t', '--tracking-branch', dest='tracking_branch',
508 default='cros/master', help='Run the buildbot on a branch') 544 default='cros/master', help='Run the buildbot on a branch')
509 parser.add_option('-u', '--url', dest='url', 545 parser.add_option('-u', '--url', dest='url',
510 default='http://git.chromium.org/git/manifest', 546 default='http://git.chromium.org/git/manifest',
511 help='Run the buildbot on internal manifest') 547 help='Run the buildbot on internal manifest')
512 parser.add_option('-g', '--gsutil', default='', help='Location of gsutil') 548 parser.add_option('-g', '--gsutil', default='', help='Location of gsutil')
513 parser.add_option('-c', '--gsutil_archive', default='', 549 parser.add_option('-c', '--gsutil_archive', default='',
514 help='Datastore archive location') 550 help='Datastore archive location')
515 parser.add_option('-a', '--acl', default='private', 551 parser.add_option('-a', '--acl', default='private',
516 help='ACL to set on GSD archives') 552 help='ACL to set on GSD archives')
517 553
518 (options, args) = parser.parse_args() 554 (options, args) = parser.parse_args()
519 555
520 buildroot = os.path.abspath(options.buildroot) 556 buildroot = os.path.abspath(options.buildroot)
521 revisionfile = options.revisionfile 557 revisionfile = options.revisionfile
522 tracking_branch = options.tracking_branch 558 tracking_branch = options.tracking_branch
559 chrome_atom_to_build = None
523 560
524 if len(args) >= 1: 561 if len(args) >= 1:
525 buildconfig = _GetConfig(args[-1]) 562 buildconfig = _GetConfig(args[-1])
526 else: 563 else:
527 Warning('Missing configuration description') 564 Warning('Missing configuration description')
528 parser.print_usage() 565 parser.print_usage()
529 sys.exit(1) 566 sys.exit(1)
530 567
531 # Calculate list of overlay directories. 568 # Calculate list of overlay directories.
532 overlays = _ResolveOverlays(buildroot, buildconfig['overlays']) 569 overlays = _ResolveOverlays(buildroot, buildconfig['overlays'])
533 570
534 try: 571 try:
535 _PreFlightRinse(buildroot, buildconfig['board'], tracking_branch, overlays) 572 _PreFlightRinse(buildroot, buildconfig['board'], tracking_branch, overlays)
536 if options.clobber or not os.path.isdir(buildroot): 573 if options.sync:
537 _FullCheckout(buildroot, tracking_branch, url=options.url) 574 if options.clobber or not os.path.isdir(buildroot):
538 else: 575 _FullCheckout(buildroot, tracking_branch, url=options.url)
539 _IncrementalCheckout(buildroot) 576 else:
577 _IncrementalCheckout(buildroot)
540 578
541 # Check that all overlays can be found. 579 # Check that all overlays can be found.
542 for path in overlays: 580 for path in overlays:
543 assert ':' not in path, 'Overlay must not contain colons: %s' % path 581 assert ':' not in path, 'Overlay must not contain colons: %s' % path
544 if not os.path.isdir(path): 582 if not os.path.isdir(path):
545 Die('Missing overlay: %s' % path) 583 Die('Missing overlay: %s' % path)
546 584
547 chroot_path = os.path.join(buildroot, 'chroot') 585 chroot_path = os.path.join(buildroot, 'chroot')
548 if not os.path.isdir(chroot_path): 586 if not os.path.isdir(chroot_path):
549 _MakeChroot(buildroot) 587 _MakeChroot(buildroot)
550 588
551 boardpath = os.path.join(chroot_path, 'build', buildconfig['board']) 589 boardpath = os.path.join(chroot_path, 'build', buildconfig['board'])
552 if not os.path.isdir(boardpath): 590 if not os.path.isdir(boardpath):
553 _SetupBoard(buildroot, board=buildconfig['board']) 591 _SetupBoard(buildroot, board=buildconfig['board'])
554 592
555 if buildconfig['uprev']: 593 # Perform uprev. If chrome_uprev is set, rev Chrome ebuilds.
594 if options.chrome_rev:
595 chrome_atom_to_build = _MarkChromeAsStable(buildroot, tracking_branch,
596 options.chrome_rev)
597 elif buildconfig['uprev']:
556 _UprevPackages(buildroot, tracking_branch, revisionfile, 598 _UprevPackages(buildroot, tracking_branch, revisionfile,
557 buildconfig['board'], overlays) 599 buildconfig['board'], overlays)
558 600
559 _EnableLocalAccount(buildroot) 601 _EnableLocalAccount(buildroot)
560 _Build(buildroot) 602 # Doesn't rebuild without acquiring more source.
561 if buildconfig['unittests']: 603 if options.sync:
604 _Build(buildroot)
605
606 if chrome_atom_to_build:
607 _BuildChrome(buildroot, buildconfig['board'], chrome_atom_to_build)
608
609 if buildconfig['unittests'] and options.tests:
562 _RunUnitTests(buildroot) 610 _RunUnitTests(buildroot)
563 611
564 _BuildImage(buildroot) 612 _BuildImage(buildroot)
565 613
566 if buildconfig['smoke_bvt']: 614 if buildconfig['smoke_bvt'] and options.tests:
567 _BuildVMImageForTesting(buildroot) 615 _BuildVMImageForTesting(buildroot)
568 test_results_dir = '/tmp/run_remote_tests.%s' % options.buildnumber 616 test_results_dir = '/tmp/run_remote_tests.%s' % options.buildnumber
569 try: 617 try:
570 _RunSmokeSuite(buildroot, test_results_dir) 618 _RunSmokeSuite(buildroot, test_results_dir)
571 finally: 619 finally:
572 if not options.debug: 620 if not options.debug:
573 archive_full_path=os.path.join(options.gsutil_archive, 621 archive_full_path=os.path.join(options.gsutil_archive,
574 str(options.buildnumber)) 622 str(options.buildnumber))
575 _ArchiveTestResults(buildroot, buildconfig['board'], 623 _ArchiveTestResults(buildroot, buildconfig['board'],
576 test_results_dir=test_results_dir, 624 test_results_dir=test_results_dir,
577 gsutil=options.gsutil, 625 gsutil=options.gsutil,
578 archive_dir=archive_full_path, 626 archive_dir=archive_full_path,
579 acl=options.acl) 627 acl=options.acl)
580 628
581 if buildconfig['uprev']: 629 if buildconfig['uprev']:
582 # Don't push changes for developers. 630 # Don't push changes for developers.
583 if not options.debug: 631 if buildconfig['master']:
584 if buildconfig['master']: 632 # Master bot needs to check if the other slaves completed.
585 # Master bot needs to check if the other slaves completed. 633 if cbuildbot_comm.HaveSlavesCompleted(config):
586 if cbuildbot_comm.HaveSlavesCompleted(config): 634 _UprevPush(buildroot, tracking_branch, buildconfig['board'],
587 _UprevPush(buildroot, tracking_branch, buildconfig['board'], 635 overlays, options.debug)
588 overlays) 636 else:
589 else: 637 Die('CBUILDBOT - One of the slaves has failed!!!')
590 Die('CBUILDBOT - One of the slaves has failed!!!')
591 638
592 else: 639 else:
593 # Publish my status to the master if its expecting it. 640 # Publish my status to the master if its expecting it.
594 if buildconfig['important']: 641 if buildconfig['important'] and not options.debug:
595 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE) 642 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE)
596 643
597 except: 644 except:
598 # Send failure to master bot. 645 # Send failure to master bot.
599 if not buildconfig['master'] and buildconfig['important']: 646 if not buildconfig['master'] and buildconfig['important']:
600 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED) 647 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED)
601 648
602 raise 649 raise
603 650
604 651
605 if __name__ == '__main__': 652 if __name__ == '__main__':
606 main() 653 main()
OLDNEW
« no previous file with comments | « no previous file | bin/cros_mark_chrome_as_stable.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698