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

Unified Diff: bin/cbuildbot.py

Issue 6317014: Add buildbot functionality to cbuildbot. (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: Created 9 years, 11 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') | bin/cbuildbot_config.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 168d6212df414aa2557050d13fbdc84b57693855..617f2b771060f900c85b8fc39904b647185655dd 100755
--- a/bin/cbuildbot.py
+++ b/bin/cbuildbot.py
@@ -329,6 +329,49 @@ def _MakeChroot(buildroot):
RunCommand(['./make_chroot', '--fast'], cwd=cwd)
+def _CachePackages(buildroot, board, package_cache, restore):
sosa 2011/01/25 22:54:48 As per discussion, let's remove this.
dgarrett 2011/01/25 23:38:51 Done.
+ """Copy pre-built packages from the pre-flight into our chroot
+
+ buildroot: The root directory where the build occurs. Must be an absolute
+ path.
+
+ package_cache: Directory into which built packages are copied off or
+ restored from. Usually /var/buildbot-package-cache.
+
+ restore: Boolean. True to restore packages, False to save them off.
+ """
+ chroot_host_dir = os.path.join(buildroot,
+ 'chroot/var/lib/portage/pkgs/')
+ chroot_board_dir = os.path.join(buildroot,
+ 'chroot/build/',
+ board,
+ 'packages/')
+
+ cache_host_dir = os.path.join(package_cache, 'host/')
+ cache_board_dir = os.path.join(package_cache, board+'/')
+
+ if restore:
+ copies = { cache_host_dir : chroot_host_dir,
+ cache_board_dir : chroot_board_dir }
+ else:
+ copies = { chroot_host_dir : cache_host_dir,
+ chroot_board_dir : cache_board_dir }
+
+ for src, dest in copies.items():
+
+ print "*** _CachePackages %s %s" % (src, dest)
+
+ if not os.path.exists(src):
+ continue
+
+ # Make sure the src permissions work
+ # Make sure the dest exists
+ # copy the files
+ RunCommand(['sudo', 'chmod', 'a+rwx', src])
+ RunCommand(['sudo', 'mkdir', '-p', dest])
+ RunCommand(['sudo', 'rsync', '-az', src, dest])
+
+
def _GetPortageEnvVar(buildroot, board, envvar):
"""Get a portage environment variable for the specified board, if any.
@@ -485,6 +528,45 @@ def _UprevPush(buildroot, tracking_branch, board, overlays, dryrun):
RunCommand(cmd, cwd=cwd)
+def _ArchiveBuild(bot_id, buildconfig, buildnumber):
sosa 2011/01/25 22:54:48 Can you rename to _OldArchiveBuild or LegacyArchiv
dgarrett 2011/01/25 23:38:51 Done.
+ """Adds a step to the factory to archive a build."""
+
+ # Fixed properties
+ keep_max = 3
+ gsutil_archive = 'gs://chromeos-archive/' + bot_id
+
+ # TODO: Currently, --to is based on a known config for the buildbot
sosa 2011/01/25 22:54:48 Remove this TODO. It is obselete (we use gsutil f
+ # slaves storing their build results locally. When we can store the
+ # results on chrome-web (after open source release), this needs
+ # refactoring.
+
+ cmd = ['./archive_build.sh',
+ '--build_number', str(buildnumber),
+ '--to', '/var/www/archive/' + bot_id,
+ '--keep_max', str(keep_max),
+ '--prebuilt_upload',
+ '--board', buildconfig['board'],
+
+ '--acl', '/home/chrome-bot/slave_archive_acl',
+ '--gsutil_archive', gsutil_archive,
+ '--gsd_gen_index',
+ '/b/scripts/gsd_generate_index/gsd_generate_index.py',
+ '--gsutil', '/b/scripts/slave/gsutil',
+ '--test_mod'
+ ]
+
+ if buildconfig.get('test_mod', True):
sosa 2011/01/25 22:54:48 isn't this equivalent to buildconfig.get('testmod'
dgarrett 2011/01/25 23:38:51 No. This gives it a default value, so that it does
+ cmd += ['--test_mod']
sosa 2011/01/25 22:54:48 append rather than +=
dgarrett 2011/01/25 23:38:51 Done.
+
+ if buildconfig.get('factory_install_mod', True):
+ cmd += ['--factory_install_mod']
sosa 2011/01/25 22:54:48 append rather than +=
dgarrett 2011/01/25 23:38:51 Done.
+
+ if buildconfig.get('factory_test_mod', True):
+ cmd += ['--factory_test_mod']
sosa 2011/01/25 22:54:48 append rather than +=
dgarrett 2011/01/25 23:38:51 Done.
+
+ Warning('***** ***** ArchiveBuild CMD: ' + ' '.join(cmd))
+ #RunCommand(cmd)
sosa 2011/01/25 22:54:48 if not debug rather than comment out
dgarrett 2011/01/25 23:38:51 Makes sense.
+
def _ArchiveTestResults(buildroot, board, test_results_dir,
gsutil, archive_dir, acl):
"""Archives the test results into Google Storage
@@ -608,6 +690,8 @@ def main():
parser = optparse.OptionParser(usage=usage)
parser.add_option('-a', '--acl', default='private',
help='ACL to set on GSD archives')
+ parser.add_option('--archive_build', action='store_true', default=False,
+ help='Run the archive_build script.')
parser.add_option('-r', '--buildroot',
help='root directory where build occurs', default=".")
parser.add_option('-n', '--buildnumber',
@@ -625,6 +709,9 @@ def main():
parser.add_option('--debug', action='store_true', dest='debug',
default=False,
help='Override some options to run as a developer.')
+ parser.add_option('--nobuild', action='store_false', dest='build',
+ default=True,
+ help="Don't actually build (for cbuildbot devel")
sosa 2011/01/25 22:54:48 dev*
dgarrett 2011/01/25 23:38:51 Done.
parser.add_option('--noprebuilts', action='store_false', dest='prebuilts',
default=True,
help="Don't upload prebuilts.")
@@ -634,6 +721,9 @@ def main():
parser.add_option('--notests', action='store_false', dest='tests',
default=True,
help='Override values from buildconfig and run no tests.')
+ parser.add_option('--package-cache', dest='package_cache',
sosa 2011/01/25 22:54:48 As per our discussions with scottz / raja ... let'
dgarrett 2011/01/25 23:38:51 Done.
+ default=None,
+ help='Directory to save/restore packages (for buildbot).')
parser.add_option('-f', '--revisionfile',
help='file where new revisions are stored')
parser.add_option('-t', '--tracking-branch', dest='tracking_branch',
@@ -650,7 +740,8 @@ def main():
chrome_atom_to_build = None
if len(args) >= 1:
- buildconfig = _GetConfig(args[-1])
+ bot_id = args[-1]
+ buildconfig = _GetConfig(bot_id)
else:
Warning('Missing configuration description')
parser.print_usage()
@@ -690,6 +781,11 @@ def main():
if not os.path.isdir(chroot_path):
_MakeChroot(buildroot)
+ if options.package_cache:
+ _CachePackages(buildroot, board,
sosa 2011/01/25 22:54:48 Remove
dgarrett 2011/01/25 23:38:51 Done.
+ options.package_cache,
+ restore=True)
+
if not os.path.isdir(boardpath):
_SetupBoard(buildroot, board=buildconfig['board'])
@@ -706,12 +802,20 @@ def main():
buildconfig['board'], rev_overlays)
_EnableLocalAccount(buildroot)
- _Build(buildroot, emptytree)
+
+ if options.build:
+ _Build(buildroot, emptytree)
+
+ if options.package_cache:
sosa 2011/01/25 22:54:48 Remove
dgarrett 2011/01/25 23:38:51 Done.
+ _CachePackages(buildroot, board,
+ options.package_cache,
+ restore=False)
if buildconfig['unittests'] and options.tests:
_RunUnitTests(buildroot)
- _BuildImage(buildroot)
+ if options.build:
sosa 2011/01/25 22:54:48 Merge into other build cmd
dgarrett 2011/01/25 23:38:51 Done.
+ _BuildImage(buildroot)
if buildconfig['tests'] and options.tests:
_BuildVMImageForTesting(buildroot)
@@ -746,7 +850,9 @@ def main():
# Publish my status to the master if its expecting it.
if buildconfig['important'] and not options.debug:
cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE)
-
+
+ if options.archive_build:
+ _ArchiveBuild(bot_id, buildconfig, options.buildnumber)
except:
# Send failure to master bot.
if not buildconfig['master'] and buildconfig['important']:
« no previous file with comments | « no previous file | bin/cbuildbot_config.py » ('j') | bin/cbuildbot_config.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698