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

Unified Diff: bin/cbuildbot.py

Issue 4442001: Add more error checking to preflight queue. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crosutils.git
Patch Set: Quotes Created 10 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | bin/cbuildbot_config.py » ('j') | bin/cbuildbot_unittest.py » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bin/cbuildbot.py
diff --git a/bin/cbuildbot.py b/bin/cbuildbot.py
index 372ddcaf5ff646d2a966b897cffe00c95d9beea7..e8e5ef6fbfc70bb27e9c456c2de758ff0e6d0f7a 100755
--- a/bin/cbuildbot.py
+++ b/bin/cbuildbot.py
@@ -181,37 +181,35 @@ def _ParseRevisionString(revision_string, repo_dictionary):
return revisions.items()
-def _UprevFromRevisionList(buildroot, tracking_branch, revision_list, board):
+def _UprevFromRevisionList(buildroot, tracking_branch, revision_list, board,
+ overlays):
"""Uprevs based on revision list."""
if not revision_list:
Info('No packages found to uprev')
return
- package_str = ''
+ packages = []
for package, revision in revision_list:
- package_str += package + ' '
-
- package_str = package_str.strip()
+ assert ':' not in package, 'Invalid package name: %s' % package
scottz-goog 2010/11/10 23:48:14 Why is this being added? Have their been cases whe
davidjames 2010/11/11 02:23:24 Nope. Dianders just suggested I add the check.
+ packages.append(package)
cwd = os.path.join(buildroot, 'src', 'scripts')
- # TODO(davidjames): --foo="bar baz" only works here because we're using
- # enter_chroot.
RunCommand(['./cros_mark_as_stable',
'--board=%s' % board,
- '--tracking_branch="%s"' % tracking_branch,
- '--packages="%s"' % package_str,
+ '--tracking_branch=%s' % tracking_branch,
+ '--overlays=%s' % ':'.join(overlays),
+ '--packages=%s' % ':'.join(packages),
'commit'],
cwd=cwd, enter_chroot=True)
-def _UprevAllPackages(buildroot, tracking_branch, board):
+def _UprevAllPackages(buildroot, tracking_branch, board, overlays):
"""Uprevs all packages that have been updated since last uprev."""
cwd = os.path.join(buildroot, 'src', 'scripts')
- # TODO(davidjames): --foo="bar baz" only works here because we're using
- # enter_chroot.
RunCommand(['./cros_mark_as_stable', '--all',
'--board=%s' % board,
- '--tracking_branch="%s"' % tracking_branch, 'commit'],
+ '--overlays=%s' % ':'.join(overlays),
+ '--tracking_branch=%s' % tracking_branch, 'commit'],
cwd=cwd, enter_chroot=True)
@@ -228,12 +226,13 @@ def _GetVMConstants(buildroot):
return (vdisk_size.strip(), statefulfs_size.strip())
-def _GitCleanup(buildroot, board, tracking_branch):
+def _GitCleanup(buildroot, board, tracking_branch, overlays):
"""Clean up git branch after previous uprev attempt."""
cwd = os.path.join(buildroot, 'src', 'scripts')
if os.path.exists(cwd):
RunCommand(['./cros_mark_as_stable', '--srcroot=..',
'--board=%s' % board,
+ '--overlays=%s' % ':'.join(overlays),
'--tracking_branch=%s' % tracking_branch, 'clean'],
cwd=cwd, error_ok=True)
@@ -257,9 +256,9 @@ def _WipeOldOutput(buildroot):
# =========================== Main Commands ===================================
-def _PreFlightRinse(buildroot, board, tracking_branch):
+def _PreFlightRinse(buildroot, board, tracking_branch, overlays):
"""Cleans up any leftover state from previous runs."""
- _GitCleanup(buildroot, board, tracking_branch)
+ _GitCleanup(buildroot, board, tracking_branch, overlays)
_CleanUpMountPoints(buildroot)
RunCommand(['sudo', 'killall', 'kvm'], error_ok=True)
@@ -347,7 +346,7 @@ def _RunSmokeSuite(buildroot, results_dir):
], cwd=cwd, error_ok=False)
-def _UprevPackages(buildroot, tracking_branch, revisionfile, board):
+def _UprevPackages(buildroot, tracking_branch, revisionfile, board, overlays):
"""Uprevs a package based on given revisionfile.
If revisionfile is set to None or does not resolve to an actual file, this
@@ -376,26 +375,19 @@ def _UprevPackages(buildroot, tracking_branch, revisionfile, board):
# print >> sys.stderr, 'CBUILDBOT Revision list found %s' % revisions
# revision_list = _ParseRevisionString(revisions,
# _CreateRepoDictionary(buildroot, board))
- # _UprevFromRevisionList(buildroot, tracking_branch, revision_list, board)
+ # _UprevFromRevisionList(buildroot, tracking_branch, revision_list, board,
+ # overlays)
#else:
Info('CBUILDBOT Revving all')
- _UprevAllPackages(buildroot, tracking_branch, board)
+ _UprevAllPackages(buildroot, tracking_branch, board, overlays)
def _UprevPush(buildroot, tracking_branch, board, overlays):
"""Pushes uprev changes to the main line."""
cwd = os.path.join(buildroot, 'src', 'scripts')
- public_overlay = '%s/src/third_party/chromiumos-overlay' % buildroot
- private_overlay = '%s/src/private-overlays/chromeos-overlay' % buildroot
- if overlays == 'private':
- overlays = [private_overlay]
- elif overlays == 'public':
- overlays = [public_overlay]
- else:
- overlays = [public_overlay, private_overlay]
RunCommand(['./cros_mark_as_stable', '--srcroot=..',
'--board=%s' % board,
- '--overlays=%s' % " ".join(overlays),
+ '--overlays=%s' % ':'.join(overlays),
'--tracking_branch=%s' % tracking_branch,
'--push_options=--bypass-hooks -f', 'push'],
cwd=cwd)
@@ -467,6 +459,31 @@ def _GetConfig(config_name):
return buildconfig
+def ResolveOverlays(overlays):
+ """Return the list of overlays to use for a given buildbot.
+
scottz-goog 2010/11/10 23:48:14 I know this file doesn't have proper docstrings an
davidjames 2010/11/11 02:23:24 Done.
+ overlays: A string describing which overlays you want.
+ 'private': Just the private overlay.
+ 'public': Just the public overlay.
+ 'both': Both the public and private overlays.
+"""
scottz-goog 2010/11/10 23:48:14 Align indent.
davidjames 2010/11/11 02:23:24 Done.
+ public_overlay = '%s/src/third_party/chromiumos-overlay' % buildroot
+ private_overlay = '%s/src/private-overlays/chromeos-overlay' % buildroot
+ if overlays == 'private':
+ dirs = [private_overlay]
+ elif overlays == 'public':
+ dirs = [public_overlay]
+ elif overlays == 'both':
+ dirs = [public_overlay, private_overlay]
+ else:
+ Die('Incorrect overlay configuration: %s' % overlays)
+ for dir in dirs:
+ assert ':' not in dir, 'Overlay must not contain colons: %s' % dir
scottz-goog 2010/11/10 23:48:14 Why again are we doing this asssertion? Can you pl
davidjames 2010/11/11 02:23:24 It's very unlikely that it'll contain colons. Just
+ if not os.path.exists(dir):
+ Die('Missing overlay: %s' % dir)
+ return dirs
+
+
def main():
# Parse options
usage = "usage: %prog [options] cbuildbot_config"
@@ -502,8 +519,11 @@ def main():
parser.print_usage()
sys.exit(1)
+ # Calculate list of overlay directories.
+ overlays = ResolveOverlays(buildconfig['overlays'])
+
try:
- _PreFlightRinse(buildroot, buildconfig['board'], tracking_branch)
+ _PreFlightRinse(buildroot, buildconfig['board'], tracking_branch, overlays)
if options.clobber or not os.path.isdir(buildroot):
_FullCheckout(buildroot, tracking_branch, url=options.url)
else:
@@ -519,7 +539,7 @@ def main():
if buildconfig['uprev']:
_UprevPackages(buildroot, tracking_branch, revisionfile,
- board=buildconfig['board'])
+ buildconfig['board'], overlays)
_EnableLocalAccount(buildroot)
_Build(buildroot)
@@ -545,7 +565,7 @@ def main():
# Master bot needs to check if the other slaves completed.
if cbuildbot_comm.HaveSlavesCompleted(config):
_UprevPush(buildroot, tracking_branch, buildconfig['board'],
- buildconfig['overlays'])
+ overlays)
else:
Die('CBUILDBOT - One of the slaves has failed!!!')
« no previous file with comments | « no previous file | bin/cbuildbot_config.py » ('j') | bin/cbuildbot_unittest.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698