| OLD | NEW |
| 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 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 """ | 525 """ |
| 526 public_overlay = '%s/src/third_party/chromiumos-overlay' % buildroot | 526 public_overlay = '%s/src/third_party/chromiumos-overlay' % buildroot |
| 527 private_overlay = '%s/src/private-overlays/chromeos-overlay' % buildroot | 527 private_overlay = '%s/src/private-overlays/chromeos-overlay' % buildroot |
| 528 if overlays == 'private': | 528 if overlays == 'private': |
| 529 paths = [private_overlay] | 529 paths = [private_overlay] |
| 530 elif overlays == 'public': | 530 elif overlays == 'public': |
| 531 paths = [public_overlay] | 531 paths = [public_overlay] |
| 532 elif overlays == 'both': | 532 elif overlays == 'both': |
| 533 paths = [public_overlay, private_overlay] | 533 paths = [public_overlay, private_overlay] |
| 534 else: | 534 else: |
| 535 Die('Incorrect overlay configuration: %s' % overlays) | 535 Info('No overlays found.') |
| 536 paths = [] |
| 536 return paths | 537 return paths |
| 537 | 538 |
| 538 | 539 |
| 539 def _UploadPrebuilts(buildroot, board, overlay_config, binhosts): | 540 def _UploadPrebuilts(buildroot, board, overlay_config, binhosts): |
| 540 """Upload prebuilts. | 541 """Upload prebuilts. |
| 541 | 542 |
| 542 Args: | 543 Args: |
| 543 buildroot: The root directory where the build occurs. | 544 buildroot: The root directory where the build occurs. |
| 544 board: Board type that was built on this machine | 545 board: Board type that was built on this machine |
| 545 overlay_config: A string describing which overlays you want. | 546 overlay_config: A string describing which overlays you want. |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 | 617 |
| 617 if len(args) >= 1: | 618 if len(args) >= 1: |
| 618 buildconfig = _GetConfig(args[-1]) | 619 buildconfig = _GetConfig(args[-1]) |
| 619 else: | 620 else: |
| 620 Warning('Missing configuration description') | 621 Warning('Missing configuration description') |
| 621 parser.print_usage() | 622 parser.print_usage() |
| 622 sys.exit(1) | 623 sys.exit(1) |
| 623 | 624 |
| 624 try: | 625 try: |
| 625 # Calculate list of overlay directories. | 626 # Calculate list of overlay directories. |
| 626 overlays = _ResolveOverlays(buildroot, buildconfig['overlays']) | 627 rev_overlays = _ResolveOverlays(buildroot, buildconfig['rev_overlays']) |
| 628 push_overlays = _ResolveOverlays(buildroot, buildconfig['push_overlays']) |
| 629 # We cannot push to overlays that we don't rev. |
| 630 assert set(push_overlays).issubset(set(rev_overlays)) |
| 631 # Either has to be a master or not have any push overlays. |
| 632 assert buildconfig['master'] or not push_overlays |
| 633 |
| 627 board = buildconfig['board'] | 634 board = buildconfig['board'] |
| 628 old_binhost = None | 635 old_binhost = None |
| 629 | 636 |
| 630 _PreFlightRinse(buildroot, buildconfig['board'], tracking_branch, overlays) | 637 _PreFlightRinse(buildroot, buildconfig['board'], tracking_branch, |
| 638 rev_overlays) |
| 631 chroot_path = os.path.join(buildroot, 'chroot') | 639 chroot_path = os.path.join(buildroot, 'chroot') |
| 632 boardpath = os.path.join(chroot_path, 'build', board) | 640 boardpath = os.path.join(chroot_path, 'build', board) |
| 633 if options.sync: | 641 if options.sync: |
| 634 if options.clobber or not os.path.isdir(buildroot): | 642 if options.clobber or not os.path.isdir(buildroot): |
| 635 _FullCheckout(buildroot, tracking_branch, url=options.url) | 643 _FullCheckout(buildroot, tracking_branch, url=options.url) |
| 636 else: | 644 else: |
| 637 old_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST) | 645 old_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST) |
| 638 _IncrementalCheckout(buildroot) | 646 _IncrementalCheckout(buildroot) |
| 639 | 647 |
| 640 new_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST) | 648 new_binhost = _GetPortageEnvVar(buildroot, board, _FULL_BINHOST) |
| 641 if old_binhost and old_binhost != new_binhost: | 649 if old_binhost and old_binhost != new_binhost: |
| 642 RunCommand(['sudo', 'rm', '-rf', boardpath]) | 650 RunCommand(['sudo', 'rm', '-rf', boardpath]) |
| 643 | 651 |
| 644 # Check that all overlays can be found. | 652 # Check that all overlays can be found. |
| 645 for path in overlays: | 653 for path in rev_overlays: |
| 646 assert ':' not in path, 'Overlay must not contain colons: %s' % path | |
| 647 if not os.path.isdir(path): | 654 if not os.path.isdir(path): |
| 648 Die('Missing overlay: %s' % path) | 655 Die('Missing overlay: %s' % path) |
| 649 | 656 |
| 650 if not os.path.isdir(chroot_path): | 657 if not os.path.isdir(chroot_path): |
| 651 _MakeChroot(buildroot) | 658 _MakeChroot(buildroot) |
| 652 | 659 |
| 653 if not os.path.isdir(boardpath): | 660 if not os.path.isdir(boardpath): |
| 654 _SetupBoard(buildroot, board=buildconfig['board']) | 661 _SetupBoard(buildroot, board=buildconfig['board']) |
| 655 | 662 |
| 656 # Perform uprev. If chrome_uprev is set, rev Chrome ebuilds. | 663 # Perform uprev. If chrome_uprev is set, rev Chrome ebuilds. |
| 657 if options.chrome_rev: | 664 if options.chrome_rev: |
| 658 chrome_atom_to_build = _MarkChromeAsStable(buildroot, tracking_branch, | 665 chrome_atom_to_build = _MarkChromeAsStable(buildroot, tracking_branch, |
| 659 options.chrome_rev) | 666 options.chrome_rev) |
| 660 elif buildconfig['uprev']: | 667 elif buildconfig['uprev']: |
| 661 _UprevPackages(buildroot, tracking_branch, revisionfile, | 668 _UprevPackages(buildroot, tracking_branch, revisionfile, |
| 662 buildconfig['board'], overlays) | 669 buildconfig['board'], rev_overlays) |
| 663 | 670 |
| 664 _EnableLocalAccount(buildroot) | 671 _EnableLocalAccount(buildroot) |
| 665 # Doesn't rebuild without acquiring more source. | 672 # Doesn't rebuild without acquiring more source. |
| 666 if options.sync: | 673 if options.sync: |
| 667 _Build(buildroot) | 674 _Build(buildroot) |
| 668 | 675 |
| 669 if chrome_atom_to_build: | 676 if chrome_atom_to_build: |
| 670 _BuildChrome(buildroot, buildconfig['board'], chrome_atom_to_build) | 677 _BuildChrome(buildroot, buildconfig['board'], chrome_atom_to_build) |
| 671 | 678 |
| 672 if buildconfig['unittests'] and options.tests: | 679 if buildconfig['unittests'] and options.tests: |
| 673 _RunUnitTests(buildroot) | 680 _RunUnitTests(buildroot) |
| 674 | 681 |
| 675 _BuildImage(buildroot) | 682 _BuildImage(buildroot) |
| 676 | 683 |
| 677 if buildconfig['smoke_bvt'] and options.tests: | 684 if buildconfig['smoke_bvt'] and options.tests: |
| 678 _BuildVMImageForTesting(buildroot) | 685 _BuildVMImageForTesting(buildroot) |
| 679 test_results_dir = '/tmp/run_remote_tests.%s' % options.buildnumber | 686 test_results_dir = '/tmp/run_remote_tests.%s' % options.buildnumber |
| 680 try: | 687 try: |
| 681 _RunSmokeSuite(buildroot, test_results_dir) | 688 _RunSmokeSuite(buildroot, test_results_dir) |
| 682 finally: | 689 finally: |
| 683 if not options.debug: | 690 if not options.debug: |
| 684 archive_full_path=os.path.join(options.gsutil_archive, | 691 archive_full_path = os.path.join(options.gsutil_archive, |
| 685 str(options.buildnumber)) | 692 str(options.buildnumber)) |
| 686 _ArchiveTestResults(buildroot, buildconfig['board'], | 693 _ArchiveTestResults(buildroot, buildconfig['board'], |
| 687 test_results_dir=test_results_dir, | 694 test_results_dir=test_results_dir, |
| 688 gsutil=options.gsutil, | 695 gsutil=options.gsutil, |
| 689 archive_dir=archive_full_path, | 696 archive_dir=archive_full_path, |
| 690 acl=options.acl) | 697 acl=options.acl) |
| 691 | 698 |
| 692 if buildconfig['uprev']: | 699 if buildconfig['uprev']: |
| 693 # Don't push changes for developers. | 700 # Don't push changes for developers. |
| 694 if buildconfig['master']: | 701 if buildconfig['master']: |
| 695 # Master bot needs to check if the other slaves completed. | 702 # Master bot needs to check if the other slaves completed. |
| 696 if cbuildbot_comm.HaveSlavesCompleted(config): | 703 if cbuildbot_comm.HaveSlavesCompleted(config): |
| 697 _UploadPrebuilts(buildroot, board, buildconfig['overlays'], | 704 _UploadPrebuilts(buildroot, board, buildconfig['rev_overlays'], |
| 698 [new_binhost]) | 705 [new_binhost]) |
| 699 _UprevPush(buildroot, tracking_branch, buildconfig['board'], | 706 _UprevPush(buildroot, tracking_branch, buildconfig['board'], |
| 700 overlays, options.debug) | 707 push_overlays, options.debug) |
| 701 else: | 708 else: |
| 702 Die('CBUILDBOT - One of the slaves has failed!!!') | 709 Die('CBUILDBOT - One of the slaves has failed!!!') |
| 703 | 710 |
| 704 else: | 711 else: |
| 705 # Publish my status to the master if its expecting it. | 712 # Publish my status to the master if its expecting it. |
| 706 if buildconfig['important'] and not options.debug: | 713 if buildconfig['important'] and not options.debug: |
| 707 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE) | 714 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE) |
| 708 | 715 |
| 709 except: | 716 except: |
| 710 # Send failure to master bot. | 717 # Send failure to master bot. |
| 711 if not buildconfig['master'] and buildconfig['important']: | 718 if not buildconfig['master'] and buildconfig['important']: |
| 712 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED) | 719 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED) |
| 713 | 720 |
| 714 raise | 721 raise |
| 715 | 722 |
| 716 | 723 |
| 717 if __name__ == '__main__': | 724 if __name__ == '__main__': |
| 718 main() | 725 main() |
| OLD | NEW |