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

Unified Diff: bin/cbuildbot.py

Issue 3200006: Add all pfq configurations and add build_image / run_unit_tests. (Closed) Base URL: http://src.chromium.org/git/crosutils.git
Patch Set: Fix typo in arm-generic Created 10 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | bin/cbuildbot_config.py » ('j') | no next file with comments »
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 561f01bc308b8224cfe17a5ae07445674bc4da13..5cc140ca65d2e003fb37f3bdbe7cf74179ba9b5e 100755
--- a/bin/cbuildbot.py
+++ b/bin/cbuildbot.py
@@ -57,9 +57,11 @@ def RunCommand(cmd, print_cmd=True, error_ok=False, error_message=None,
(output, error) = proc.communicate(input)
if exit_code:
return proc.returncode
+
if not error_ok and proc.returncode != 0:
raise Exception('Command "%s" failed.\n' % (' '.join(cmd)) +
(error_message or error or output or ''))
+
return output
@@ -97,6 +99,7 @@ def RepoSync(buildroot, rw_checkout=False, retries=_DEFAULT_RETRIES):
RunCommand(['repo', 'forall', '-c', 'git', 'config',
'url.ssh://git@gitrw.chromium.org:9222.pushinsteadof',
'http://git.chromium.org/git'], cwd=buildroot)
+
retries = 0
except:
retries -= 1
@@ -130,6 +133,7 @@ def _GetAllGitRepos(buildroot, debug=False):
else:
# Remove pre-pended src directory from manifest.
manifest_tuples.append([result[0], result[1].replace('src/', '')])
+
return manifest_tuples
@@ -149,6 +153,7 @@ def _GetCrosWorkOnSrcPath(buildroot, board, package, debug=False):
temp = re.findall('CROS_WORKON_SRCDIR="(\S+)"', cros_workon_output)
if temp:
return temp[0]
+
return None
@@ -156,7 +161,8 @@ def _CreateRepoDictionary(buildroot, board, debug=False):
"""Returns the repo->list_of_ebuilds dictionary."""
repo_dictionary = {}
manifest_tuples = _GetAllGitRepos(buildroot)
- print >> sys.stderr, 'Creating dictionary of git repos to portage packages ...'
+ print >> sys.stderr, (
+ 'Creating dictionary of git repos to portage packages ...')
cwd = os.path.join(buildroot, 'src', 'scripts')
get_all_workon_pkgs_cmd = './cros_workon list --all'.split()
@@ -175,6 +181,7 @@ def _CreateRepoDictionary(buildroot, board, debug=False):
repo_dictionary[tuple[0]] += [package]
else:
repo_dictionary[tuple[0]] = [package]
+
return repo_dictionary
@@ -198,12 +205,14 @@ def _ParseRevisionString(revision_string, repo_dictionary):
revision_tuple = revision.split('@')
if len(revision_tuple) != 2:
print >> sys.stderr, 'Incorrectly formatted revision %s' % revision
+
repo_name = revision_tuple[0].replace('.git', '')
# Might not have entry if no matching ebuild.
if repo_dictionary.has_key(repo_name):
# May be many corresponding packages to a given git repo e.g. kernel).
for package in repo_dictionary[repo_name]:
revisions[package] = revision_tuple[1]
+
return revisions.items()
@@ -212,11 +221,13 @@ def _UprevFromRevisionList(buildroot, revision_list):
if not revision_list:
print >> sys.stderr, 'No packages found to uprev'
return
+
package_str = ''
commit_str = ''
for package, revision in revision_list:
package_str += package + ' '
commit_str += revision + ' '
+
package_str = package_str.strip()
commit_str = commit_str.strip()
@@ -269,7 +280,15 @@ def _SetupBoard(buildroot, board='x86-generic'):
def _Build(buildroot):
"""Wrapper around build_packages."""
cwd = os.path.join(buildroot, 'src', 'scripts')
- RunCommand(['./build_packages'], cwd=cwd)
+ RunCommand(['./build_packages'], cwd=cwd, enter_chroot=True)
+
+def _BuildImage(buildroot):
+ cwd = os.path.join(buildroot, 'src', 'scripts')
+ RunCommand(['./build_image'], cwd=cwd)
+
+def _RunUnitTests(buildroot):
+ cwd = os.path.join(buildroot, 'src', 'scripts')
+ RunCommand(['./cros_run_unit_tests'], cwd=cwd)
def _UprevPackages(buildroot, revisionfile, board):
@@ -328,11 +347,21 @@ def _GetConfig(config_name):
"""Gets the configuration for the build"""
default = config['default']
buildconfig = {}
- if config.has_key(config_name):
- buildconfig = config[config_name]
+ if not config.has_key(config_name):
+ print >> sys.stderr, 'Non-existent configuration specified.'
+ print >> sys.stderr, 'Please specify one of:'
+ config_names = config.keys()
+ config_names.sort()
+ for name in config_names:
+ print >> sys.stderr, ' %s' % name
+ sys.exit(1)
+
+ buildconfig = config[config_name]
+
for key in default.iterkeys():
if not buildconfig.has_key(key):
buildconfig[key] = default[key]
+
return buildconfig
@@ -361,20 +390,29 @@ def main():
print >> sys.stderr, "Missing configuration description"
parser.print_usage()
sys.exit(1)
+
try:
if not os.path.isdir(buildroot):
_FullCheckout(buildroot)
else:
_IncrementalCheckout(buildroot)
+
chroot_path = os.path.join(buildroot, 'chroot')
if not os.path.isdir(chroot_path):
_MakeChroot(buildroot)
+
boardpath = os.path.join(chroot_path, 'build', buildconfig['board'])
if not os.path.isdir(boardpath):
_SetupBoard(buildroot, board=buildconfig['board'])
+
if buildconfig['uprev']:
_UprevPackages(buildroot, revisionfile, board=buildconfig['board'])
+
_Build(buildroot)
+ if buildconfig['unittests']:
+ _RunUnitTests(buildroot)
+
+ _BuildImage(buildroot)
if buildconfig['uprev']:
if buildconfig['master']:
# Master bot needs to check if the other slaves completed.
@@ -387,16 +425,20 @@ def main():
sys.stderr('CBUILDBOT - One of the slaves has failed!!!')
sys.exit(1)
else:
- # Publish my status to the master.
- cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE)
+ # Publish my status to the master if its expecting it.
+ if buildconfig['important']:
+ cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE)
+
_UprevCleanup(buildroot)
except:
# Something went wrong, cleanup (being paranoid) for next build.
if clobber:
RunCommand(['sudo', 'rm', '-rf', buildroot], print_cmd=False)
+
# Send failure to master bot.
- if not buildconfig['master']:
+ if not buildconfig['master'] and buildconfig['important']:
cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_FAILED)
+
raise
« no previous file with comments | « no previous file | bin/cbuildbot_config.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698