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

Unified Diff: tools/auto_bisect/configs/try.py

Issue 652543005: Add bisect-config-trying script and a few example configs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Respond to Annie's comments and modify sample configs. Created 6 years, 2 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 | « tools/auto_bisect/configs/mac.bisect.blink_perf.cfg ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/auto_bisect/configs/try.py
diff --git a/tools/auto_bisect/configs/try.py b/tools/auto_bisect/configs/try.py
new file mode 100755
index 0000000000000000000000000000000000000000..dd3a3b91108f787c6377f5e8da2bf3b8e58e776e
--- /dev/null
+++ b/tools/auto_bisect/configs/try.py
@@ -0,0 +1,142 @@
+#!/usr/bin/env python
+
+"""Starts bisect try jobs on multiple platforms using known-good configs.
+
+The purpose of this script is to serve as an integration test for the
+auto-bisect project by starting try jobs for various config types and
+various platforms.
+
+The known-good configs are in this same directory as this script. They
+are expected to all end in ".cfg" and start with the name of the platform
+followed by a dot.
+
+You can specify --full to try running each config on all applicable bots;
+the default behavior is to try each config on only one bot.
+"""
+
+import argparse
+import logging
+import os
+import subprocess
+import sys
+
+SCRIPT_DIR = os.path.dirname(__file__)
+BISECT_CONFIG = os.path.join(SCRIPT_DIR, os.path.pardir, 'bisect.cfg')
+PERF_TEST_CONFIG = os.path.join(
+ SCRIPT_DIR, os.path.pardir, os.path.pardir, 'run-perf-test.cfg')
+PLATFORM_BOT_MAP = {
+ 'linux': ['linux_perf_bot'],
+ 'mac': ['mac_perf_bisect', 'mac_10_9_perf_bisect'],
+ 'win': ['win_perf_bisect', 'win_8_perf_bisect', 'win_xp_perf_bisect'],
+ 'android': [
+ 'android_nexus4_perf_bisect',
+ 'android_nexus5_perf_bisect',
+ 'android_nexus7_perf_bisect',
+ 'android_nexus10_perf_bisect',
+ ],
+}
+SVN_URL = 'svn://svn.chromium.org/chrome-try/try-perf'
+AUTO_COMMIT_MESSAGE = 'Automatic commit for bisect try job.'
+
+
+def main(argv):
+ parser = argparse.ArgumentParser(description=__doc__)
+ parser.add_argument('--full', action='store_true',
+ help='Run each config on all applicable bots.')
+ parser.add_argument('--filter', help='Filter config filenames to use.')
Sergiy Byelozyorov 2014/10/21 19:15:30 Please explain better that only configs whose file
qyearsley 2014/10/21 19:21:24 Expanded this help a little bit.
+ parser.add_argument('--verbose', '-v', action='store_true')
+ args = parser.parse_args(argv[1:])
+ _SetupLogging(args.verbose)
+ source_configs = _SourceConfigs(args.filter)
+ logging.debug('Source configs: %s', source_configs)
+ try:
+ _StartTryJobs(source_configs, args.full)
+ except subprocess.CalledProcessError as error:
+ print str(error)
+ print error.output
+
+
+def _SetupLogging(verbose):
+ level = logging.INFO
+ if verbose:
+ level = logging.DEBUG
+ logging.basicConfig(level=level)
+
+
+def _SourceConfigs(name_filter):
+ """Gets a list of paths to sample configs to try."""
+ files = os.listdir(SCRIPT_DIR)
+ files = [os.path.join(SCRIPT_DIR, name) for name in files]
+ files = [name for name in files if name.endswith('.cfg')]
+ if name_filter:
+ files = [name for name in files if name_filter in name]
+ return files
+
+
+def _StartTryJobs(source_configs, full_mode=False):
+ """Tries each of the given sample configs on one or more try bots."""
+ for source_config in source_configs:
+ dest_config = _DestConfig(source_config)
+ bot_names = _BotNames(source_config, full_mode=full_mode)
+ _StartTry(source_config, dest_config, bot_names)
+
+
+def _DestConfig(source_config):
+ """Returns the path that a sample config should be copied to."""
+ if 'bisect' in source_config:
+ return BISECT_CONFIG
+ assert 'perf_test' in source_config, source_config
+ return PERF_TEST_CONFIG
+
+
+def _BotNames(source_config, full_mode=False):
+ """Returns try bot names to use for the given config file name."""
+ platform = os.path.basename(source_config).split('.')[0]
+ assert platform in PLATFORM_BOT_MAP
+ bot_names = PLATFORM_BOT_MAP[platform]
+ if full_mode:
+ return bot_names
+ return [bot_names[0]]
+
+
+def _StartTry(source_config, dest_config, bot_names):
+ """Sends a try job with the given config to the given try bots.
+
+ Args:
+ source_config: Path of the sample config to copy over.
+ dest_config: Destination path to copy sample to, e.g. "./bisect.cfg".
+ bot_names: List of try bot builder names.
+ """
+ assert os.path.exists(source_config)
+ assert os.path.exists(dest_config)
+ assert _LastCommitMessage() != AUTO_COMMIT_MESSAGE
+
+ # Copy the sample config over and commit it.
+ _Run(['cp', source_config, dest_config])
+ _Run(['git', 'commit', '--all', '-m', AUTO_COMMIT_MESSAGE])
+
Sergiy Byelozyorov 2014/10/21 19:15:30 try:
qyearsley 2014/10/21 19:21:24 Good idea, added.
+ # Start the try job.
+ job_name = 'Automatically-started job with sample config %s' % source_config
+ try_command = ['git', 'try', '--svn_repo', SVN_URL, '-n', job_name]
+ for bot_name in bot_names:
+ try_command.extend(['-b', bot_name])
+ print _Run(try_command)
+
Sergiy Byelozyorov 2014/10/21 19:15:30 finally:
+ # Revert the immediately-previous commit which was made just above.
+ assert _LastCommitMessage() == AUTO_COMMIT_MESSAGE
Sergiy Byelozyorov 2014/10/21 19:15:30 Great safeguard!
+ _Run(['git', 'reset', '--hard', 'HEAD~1'])
+
+
+def _LastCommitMessage():
+ return _Run(['git', 'log', '--format=%s', '-1']).strip()
+
+
+def _Run(command):
+ logging.debug('Running %s', command)
+ # Note: check_output will raise a subprocess.CalledProcessError when
+ # the return-code is non-zero.
+ return subprocess.check_output(command)
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
« no previous file with comments | « tools/auto_bisect/configs/mac.bisect.blink_perf.cfg ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698