diff --git a/bin/cbuildbot.py b/bin/cbuildbot.py index b760e5cefc..4d727e93fb 100755 --- a/bin/cbuildbot.py +++ b/bin/cbuildbot.py @@ -323,10 +323,16 @@ def _IncrementalCheckout(buildroot, retries=_DEFAULT_RETRIES): RepoSync(buildroot, retries) -def _MakeChroot(buildroot): +def _MakeChroot(buildroot, replace=False): """Wrapper around make_chroot.""" cwd = os.path.join(buildroot, 'src', 'scripts') - RunCommand(['./make_chroot', '--fast'], cwd=cwd) + + cmd = ['./make_chroot', '--fast'] + + if replace: + cmd.append('--replace') + + RunCommand(cmd, cwd=cwd) def _GetPortageEnvVar(buildroot, board, envvar): @@ -358,7 +364,7 @@ def _SetupBoard(buildroot, board='x86-generic'): cwd=cwd, enter_chroot=True) -def _Build(buildroot, emptytree): +def _Build(buildroot, emptytree, build_autotest=True, usepkg=True): """Wrapper around build_packages.""" cwd = os.path.join(buildroot, 'src', 'scripts') if emptytree: @@ -366,6 +372,12 @@ def _Build(buildroot, emptytree): else: cmd = ['./build_packages'] + if not build_autotest: + cmd.append('--nowithautotest') + + if not usepkg: + cmd.append('--nousepkg') + RunCommand(cmd, cwd=cwd, enter_chroot=True) @@ -559,7 +571,6 @@ def _ArchiveTestResults(buildroot, board, test_results_dir, def _GetConfig(config_name): """Gets the configuration for the build""" - default = config['default'] buildconfig = {} if not config.has_key(config_name): Warning('Non-existent configuration specified.') @@ -570,13 +581,7 @@ def _GetConfig(config_name): Warning(' %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 + return config[config_name] def _ResolveOverlays(buildroot, overlays): @@ -644,8 +649,6 @@ 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', @@ -730,7 +733,7 @@ def main(): Die('Missing overlay: %s' % path) if not os.path.isdir(chroot_path): - _MakeChroot(buildroot) + _MakeChroot(buildroot, buildconfig['chroot_replace']) if not os.path.isdir(boardpath): _SetupBoard(buildroot, board=buildconfig['board']) @@ -750,14 +753,17 @@ def main(): _EnableLocalAccount(buildroot) if options.build: - _Build(buildroot, emptytree) + _Build(buildroot, + emptytree, + build_autotest=(buildconfig['vm_tests'] and options.tests), + usepkg=buildconfig['usepkg']) if buildconfig['unittests'] and options.tests: _RunUnitTests(buildroot) _BuildImage(buildroot) - if buildconfig['tests'] and options.tests: + if buildconfig['vm_tests'] and options.tests: _BuildVMImageForTesting(buildroot) test_results_dir = '/tmp/run_remote_tests.%s' % options.buildnumber try: @@ -791,7 +797,7 @@ def main(): if buildconfig['important'] and not options.debug: cbuildbot_comm.PublishStatus(cbuildbot_comm.STATUS_BUILD_COMPLETE) - if options.archive_build: + if buildconfig['archive_build']: _LegacyArchiveBuild(bot_id, buildconfig, options.buildnumber, diff --git a/bin/cbuildbot_config.py b/bin/cbuildbot_config.py index 0c6b5acd15..ccd514b47b 100644 --- a/bin/cbuildbot_config.py +++ b/bin/cbuildbot_config.py @@ -8,121 +8,144 @@ Each dictionary entry is in turn a dictionary of config_param->value. config_param's: board -- The board of the image to build. -uprev -- Uprevs the local ebuilds to build new changes since last stable. - build. If master then also pushes these changes on success. + master -- This bot pushes changes to the overlays. important -- Master bot uses important bots to determine overall status. i.e. if master bot succeeds and other important slaves succeed then the master will uprev packages. This should align - with info vs. closer except for the master. + with info vs. closer except for the master.and options.tests hostname -- Needed for 'important' slaves. The hostname of the bot. Should match hostname in slaves.cfg in buildbot checkout. -unittests -- Runs unittests for packages. -tests -- Runs the smoke suite and au test harness in a qemu-based VM using KVM. + +uprev -- Uprevs the local ebuilds to build new changes since last stable. + build. If master then also pushes these changes on success. rev_overlays -- Select what overlays to look at for revving. This can be 'public', 'private' or 'both'. push_overlays -- Select what overlays to push at. This should be a subset of rev_overlays for the particular builder. Must be None if not a master. There should only be one master bot pushing changes to each overlay per branch. -test_mod -- Create a test mod image. (default True) -factory_install_mod -- Create a factory install image. (default True) -factory_test_mod -- Create a factory test image. (default True) + +unittests -- Runs unittests for packages. +vm_tests -- Runs the smoke suite and au test harness in a qemu-based VM + using KVM. + +usepkg -- Use binary packages to bootstrap, when possible. (emerge --usepkg) +chroot_replace -- wipe and replace chroot, but not source. + +archive_build -- Do we run archive_build.sh +test_mod -- Create a test mod image for archival. +factory_install_mod -- Create a factory install image for archival. +factory_test_mod -- Create a factory test image for archival. """ +# TODO(dgarrett) Make test_mod, factory_install_mod, factory_test_mod options +# go away when these options work for arm. + +default = { + # 'board' No default value + + 'master' : False, + 'important' : False, + # 'hostname' No default value + + 'uprev' : False, + 'rev_overlays': 'public', + 'push_overlays': None, + + 'unittests' : True, + 'vm_tests' : True, + + 'usepkg' : True, + 'chroot_replace' : False, + + 'archive_build' : False, + 'test_mod' : True, + 'factory_install_mod' : True, + 'factory_test_mod' : True, +} config = {} -config['default'] = { - 'board' : 'x86-generic', - 'uprev' : False, - 'master' : False, - 'important' : False, - 'unittests' : False, - 'tests' : False, - 'rev_overlays': 'public', - 'push_overlays': None, -} -config['x86-generic-pre-flight-queue'] = { + +config['x86-generic-pre-flight-queue'] = default.copy() +config['x86-generic-pre-flight-queue'].update({ 'board' : 'x86-generic', 'uprev' : True, 'master' : True, - 'important' : False, 'hostname' : 'chromeosbuild2', - 'unittests' : True, - 'tests' : True, 'rev_overlays': 'public', 'push_overlays': 'public', -} +}) + config['x86-generic-chrome-pre-flight-queue'] = \ config['x86-generic-pre-flight-queue'] -config['x86-mario-pre-flight-queue'] = { + +config['x86-mario-pre-flight-queue'] = default.copy() +config['x86-mario-pre-flight-queue'].update({ 'board' : 'x86-mario', 'uprev' : True, 'master' : True, - 'important' : False, - 'unittests' : True, - 'tests' : True, 'rev_overlays': 'both', 'push_overlays': 'private', -} -config['x86-mario-pre-flight-branch'] = { +}) + +config['x86-mario-pre-flight-branch'] = default.copy() +config['x86-mario-pre-flight-branch'].update({ 'board' : 'x86-mario', 'uprev' : True, 'master' : True, - 'important' : False, - 'unittests' : True, - 'tests' : True, 'rev_overlays': 'both', 'push_overlays': 'both', -} -config['x86_agz_bin'] = { +}) + +config['x86-agz-bin'] = default.copy() +config['x86-agz-bin'].update({ 'board' : 'x86-agz', 'uprev' : True, - 'master' : False, - 'important' : False, - 'unittests' : True, - 'tests' : True, 'rev_overlays': 'both', 'push_overlays': None, -} -config['x86_dogfood_bin'] = { +}) + +config['x86-dogfood-bin'] = default.copy() +config['x86-dogfood-bin'].update({ 'board' : 'x86-dogfood', 'uprev' : True, - 'master' : False, - 'important' : False, - 'unittests' : True, - 'tests' : True, 'rev_overlays': 'both', 'push_overlays': None, -} -config['x86_pineview_bin'] = { +}) + +config['x86-pineview-bin'] = default.copy() +config['x86-pineview-bin'].update({ 'board' : 'x86-pineview', 'uprev' : True, - 'master' : False, - 'important' : False, - 'unittests': True, 'rev_overlays': 'public', 'push_overlays': None, -} -config['arm_tegra2_bin'] = { +}) + +config['arm-tegra2-bin'] = default.copy() +config['arm-tegra2-bin'].update({ 'board' : 'tegra2_dev-board', 'uprev' : True, - 'master' : False, - 'important' : False, 'unittests' : False, + 'vm_tests' : False, 'rev_overlays': 'public', - 'push_overlays': None, 'factory_install_mod' : False, 'factory_test_mod' : False, -} -config['arm_generic_bin'] = { +}) + +config['arm-generic-bin'] = default.copy() +config['arm-generic-bin'].update({ 'board' : 'arm-generic', 'uprev' : True, - 'master' : False, - 'important' : False, 'unittests' : False, - 'rev_overlays': 'public', - 'push_overlays': None, + 'vm_tests' : False, 'factory_install_mod' : False, 'factory_test_mod' : False, -} +}) + +# TODO(dgarrett) delete when buildbot updated to use new names +config['x86_agz_bin'] = config['x86-agz-bin'] +config['x86_dogfood_bin'] = config['x86-dogfood-bin'] +config['x86_pineview_bin'] = config['x86-pineview-bin'] +config['arm_tegra2_bin'] = config['arm-tegra2-bin'] +config['arm_generic_bin'] = config['arm-generic-bin']