| 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 |
| 11 import re | 11 import re |
| 12 import optparse | 12 import optparse |
| 13 import os | 13 import os |
| 14 import shutil | 14 import shutil |
| 15 import sys | 15 import sys |
| 16 | 16 |
| 17 import cbuildbot_comm | 17 import cbuildbot_comm |
| 18 from cbuildbot_config import config | 18 from cbuildbot_config import config |
| 19 | 19 |
| 20 sys.path.append(os.path.join(os.path.dirname(__file__), '../lib')) | 20 sys.path.append(os.path.join(os.path.dirname(__file__), '../lib')) |
| 21 from cros_build_lib import (Die, Info, ReinterpretPathForChroot, RunCommand, | 21 from cros_build_lib import (Die, Info, ReinterpretPathForChroot, RunCommand, |
| 22 Warning) | 22 Warning) |
| 23 | 23 |
| 24 _DEFAULT_RETRIES = 3 | 24 _DEFAULT_RETRIES = 3 |
| 25 _PACKAGE_FILE = '%(buildroot)s/src/scripts/cbuildbot_package.list' | 25 _PACKAGE_FILE = '%(buildroot)s/src/scripts/cbuildbot_package.list' |
| 26 ARCHIVE_BASE = '/var/www/archive' | 26 ARCHIVE_BASE = '/var/www/archive' |
| 27 ARCHIVE_COUNT = 10 | 27 ARCHIVE_COUNT = 10 |
| 28 PUBLIC_OVERLAY = '%(buildroot)s/src/third_party/chromiumos-overlay' | 28 PUBLIC_OVERLAY = '%(buildroot)s/src/third_party/chromiumos-overlay' |
| 29 PRIVATE_OVERLAY = '%(buildroot)s/src/private-overlays/chromeos-overlay' | 29 PRIVATE_OVERLAY = '%(buildroot)s/src/private-overlays/chromeos-overlay' |
| 30 CHROME_KEYWORDS_FILE = ('/build/%(board)s/etc/portage/package.keywords/chrome') |
| 30 | 31 |
| 31 # Currently, both the full buildbot and the preflight buildbot store their | 32 # Currently, both the full buildbot and the preflight buildbot store their |
| 32 # data in a variable named PORTAGE_BINHOST, but they're in different files. | 33 # data in a variable named PORTAGE_BINHOST, but they're in different files. |
| 33 # We're planning on joining the two files soon and renaming the full binhost | 34 # We're planning on joining the two files soon and renaming the full binhost |
| 34 # to FULL_BINHOST. | 35 # to FULL_BINHOST. |
| 35 _FULL_BINHOST = 'PORTAGE_BINHOST' | 36 _FULL_BINHOST = 'PORTAGE_BINHOST' |
| 36 _PREFLIGHT_BINHOST = 'PORTAGE_BINHOST' | 37 _PREFLIGHT_BINHOST = 'PORTAGE_BINHOST' |
| 37 | 38 |
| 38 # ======================== Utility functions ================================ | 39 # ======================== Utility functions ================================ |
| 39 | 40 |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 '--board=%s' % board, | 211 '--board=%s' % board, |
| 211 '--tracking_branch=%s' % tracking_branch, | 212 '--tracking_branch=%s' % tracking_branch, |
| 212 '--overlays=%s' % ':'.join(chroot_overlays), | 213 '--overlays=%s' % ':'.join(chroot_overlays), |
| 213 '--packages=%s' % ':'.join(packages), | 214 '--packages=%s' % ':'.join(packages), |
| 214 '--drop_file=%s' % ReinterpretPathForChroot(_PACKAGE_FILE % | 215 '--drop_file=%s' % ReinterpretPathForChroot(_PACKAGE_FILE % |
| 215 {'buildroot': buildroot}), | 216 {'buildroot': buildroot}), |
| 216 'commit'], | 217 'commit'], |
| 217 cwd=cwd, enter_chroot=True) | 218 cwd=cwd, enter_chroot=True) |
| 218 | 219 |
| 219 | 220 |
| 220 def _MarkChromeAsStable(buildroot, tracking_branch, chrome_rev): | 221 def _MarkChromeAsStable(buildroot, tracking_branch, chrome_rev, board): |
| 221 """Returns the portage atom for the revved chrome ebuild - see man emerge.""" | 222 """Returns the portage atom for the revved chrome ebuild - see man emerge.""" |
| 222 cwd = os.path.join(buildroot, 'src', 'scripts') | 223 cwd = os.path.join(buildroot, 'src', 'scripts') |
| 223 portage_atom_string = RunCommand(['bin/cros_mark_chrome_as_stable', | 224 portage_atom_string = RunCommand(['bin/cros_mark_chrome_as_stable', |
| 224 '--tracking_branch=%s' % tracking_branch, | 225 '--tracking_branch=%s' % tracking_branch, |
| 225 chrome_rev], cwd=cwd, redirect_stdout=True, | 226 chrome_rev], cwd=cwd, redirect_stdout=True, |
| 226 enter_chroot=True).rstrip() | 227 enter_chroot=True).rstrip() |
| 227 if not portage_atom_string: | 228 if not portage_atom_string: |
| 228 Info('Found nothing to rev.') | 229 Info('Found nothing to rev.') |
| 229 return None | 230 return None |
| 230 else: | 231 else: |
| 231 return portage_atom_string.split('=')[1] | 232 chrome_atom = portage_atom_string.split('=')[1] |
| 233 # TODO(sosa): Workaround to build unstable chrome ebuild we uprevved. |
| 234 RunCommand(['sudo', 'tee', CHROME_KEYWORDS_FILE % {'board': board}], |
| 235 input='=%s\n' % chrome_atom, enter_chroot=True, |
| 236 cwd=cwd) |
| 237 return chrome_atom |
| 232 | 238 |
| 233 | 239 |
| 234 def _UprevAllPackages(buildroot, tracking_branch, board, overlays): | 240 def _UprevAllPackages(buildroot, tracking_branch, board, overlays): |
| 235 """Uprevs all packages that have been updated since last uprev.""" | 241 """Uprevs all packages that have been updated since last uprev.""" |
| 236 cwd = os.path.join(buildroot, 'src', 'scripts') | 242 cwd = os.path.join(buildroot, 'src', 'scripts') |
| 237 chroot_overlays = [ReinterpretPathForChroot(path) for path in overlays] | 243 chroot_overlays = [ReinterpretPathForChroot(path) for path in overlays] |
| 238 RunCommand(['./cros_mark_as_stable', '--all', | 244 RunCommand(['./cros_mark_as_stable', '--all', |
| 239 '--board=%s' % board, | 245 '--board=%s' % board, |
| 240 '--overlays=%s' % ':'.join(chroot_overlays), | 246 '--overlays=%s' % ':'.join(chroot_overlays), |
| 241 '--tracking_branch=%s' % tracking_branch, | 247 '--tracking_branch=%s' % tracking_branch, |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 409 cmd = ['./build_packages'] | 415 cmd = ['./build_packages'] |
| 410 if emptytree: | 416 if emptytree: |
| 411 cmd.insert(0, 'EXTRA_BOARD_FLAGS=--emptytree') | 417 cmd.insert(0, 'EXTRA_BOARD_FLAGS=--emptytree') |
| 412 | 418 |
| 413 RunCommand(cmd, cwd=cwd, enter_chroot=True) | 419 RunCommand(cmd, cwd=cwd, enter_chroot=True) |
| 414 | 420 |
| 415 | 421 |
| 416 def _BuildChrome(buildroot, board, chrome_atom_to_build): | 422 def _BuildChrome(buildroot, board, chrome_atom_to_build): |
| 417 """Wrapper for emerge call to build Chrome.""" | 423 """Wrapper for emerge call to build Chrome.""" |
| 418 cwd = os.path.join(buildroot, 'src', 'scripts') | 424 cwd = os.path.join(buildroot, 'src', 'scripts') |
| 419 RunCommand(['ACCEPT_KEYWORDS="* ~*"', 'emerge-%s' % board, | 425 RunCommand(['emerge-%s' % board, |
| 420 '=%s' % chrome_atom_to_build], | 426 '=%s' % chrome_atom_to_build], |
| 421 cwd=cwd, enter_chroot=True) | 427 cwd=cwd, enter_chroot=True) |
| 422 | 428 |
| 423 | 429 |
| 424 def _EnableLocalAccount(buildroot): | 430 def _EnableLocalAccount(buildroot): |
| 425 cwd = os.path.join(buildroot, 'src', 'scripts') | 431 cwd = os.path.join(buildroot, 'src', 'scripts') |
| 426 # Set local account for test images. | 432 # Set local account for test images. |
| 427 RunCommand(['./enable_localaccount.sh', | 433 RunCommand(['./enable_localaccount.sh', |
| 428 'chronos'], | 434 'chronos'], |
| 429 print_cmd=False, cwd=cwd) | 435 print_cmd=False, cwd=cwd) |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 | 733 |
| 728 if not os.path.isdir(chroot_path): | 734 if not os.path.isdir(chroot_path): |
| 729 _MakeChroot(buildroot) | 735 _MakeChroot(buildroot) |
| 730 | 736 |
| 731 if not os.path.isdir(boardpath): | 737 if not os.path.isdir(boardpath): |
| 732 _SetupBoard(buildroot, board=buildconfig['board']) | 738 _SetupBoard(buildroot, board=buildconfig['board']) |
| 733 | 739 |
| 734 # Perform uprev. If chrome_uprev is set, rev Chrome ebuilds. | 740 # Perform uprev. If chrome_uprev is set, rev Chrome ebuilds. |
| 735 if options.chrome_rev: | 741 if options.chrome_rev: |
| 736 chrome_atom_to_build = _MarkChromeAsStable(buildroot, tracking_branch, | 742 chrome_atom_to_build = _MarkChromeAsStable(buildroot, tracking_branch, |
| 737 options.chrome_rev) | 743 options.chrome_rev, board) |
| 738 # If we found nothing to rev, we're done here. | 744 # If we found nothing to rev, we're done here. |
| 739 if not chrome_atom_to_build: | 745 if not chrome_atom_to_build: |
| 740 return | 746 return |
| 741 | 747 |
| 742 elif buildconfig['uprev']: | 748 elif buildconfig['uprev']: |
| 743 _UprevPackages(buildroot, tracking_branch, revisionfile, | 749 _UprevPackages(buildroot, tracking_branch, revisionfile, |
| 744 buildconfig['board'], rev_overlays) | 750 buildconfig['board'], rev_overlays) |
| 745 | 751 |
| 746 _EnableLocalAccount(buildroot) | 752 _EnableLocalAccount(buildroot) |
| 747 # Doesn't rebuild without acquiring more source. | 753 # Doesn't rebuild without acquiring more source. |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 792 except: | 798 except: |
| 793 # Send failure to master bot. | 799 # Send failure to master bot. |
| 794 if not buildconfig['master'] and buildconfig['important']: | 800 if not buildconfig['master'] and buildconfig['important']: |
| 795 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED) | 801 cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED) |
| 796 | 802 |
| 797 raise | 803 raise |
| 798 | 804 |
| 799 | 805 |
| 800 if __name__ == '__main__': | 806 if __name__ == '__main__': |
| 801 main() | 807 main() |
| OLD | NEW |