| Index: tools/auto_bisect/request_build.py
|
| diff --git a/tools/auto_bisect/request_build.py b/tools/auto_bisect/request_build.py
|
| index 55b3768590eb56a512ad6d3fdb26d6251b7bd0a9..77ce63b4b04ab482b01b6c679b43a81546a1e99d 100644
|
| --- a/tools/auto_bisect/request_build.py
|
| +++ b/tools/auto_bisect/request_build.py
|
| @@ -26,23 +26,16 @@ BUILDER_JSON_URL = ('%(server_url)s/json/builders/%(bot_name)s/builds/'
|
| '%(build_num)s?as_text=1&filter=0')
|
|
|
| # URL template for displaying build steps.
|
| -BUILDER_HTML_URL = ('%(server_url)s/builders/%(bot_name)s/builds/%(build_num)s')
|
| +BUILDER_HTML_URL = '%(server_url)s/builders/%(bot_name)s/builds/%(build_num)s'
|
|
|
| -# Try server status page for the perf try server.
|
| +# Try server status page URLs, used to get build status.
|
| PERF_TRY_SERVER_URL = 'http://build.chromium.org/p/tryserver.chromium.perf'
|
| +LINUX_TRY_SERVER_URL = 'http://build.chromium.org/p/tryserver.chromium.linux'
|
|
|
| -# Hostname of the tryserver where perf bisect builders are hosted.
|
| -# This is used for posting build requests to the tryserver.
|
| -PERF_BISECT_BUILDER_HOST = 'master4.golo.chromium.org'
|
| -
|
| -# The default 'try_job_port' on tryserver to post build request.
|
| -PERF_BISECT_BUILDER_PORT = 8341
|
| -
|
| -# Status codes that can be returned by the GetBuildStatus method.
|
| +# Status codes that can be returned by the GetBuildStatus method
|
| # From buildbot.status.builder.
|
| # See: http://docs.buildbot.net/current/developer/results.html
|
| SUCCESS, WARNINGS, FAILURE, SKIPPED, EXCEPTION, RETRY, TRYPENDING = range(7)
|
| -
|
| OK = (SUCCESS, WARNINGS) # These indicate build is complete.
|
| FAILED = (FAILURE, EXCEPTION, SKIPPED) # These indicate build failure.
|
| PENDING = (RETRY, TRYPENDING) # These indicate in progress or in pending queue.
|
| @@ -54,51 +47,6 @@ class ServerAccessError(Exception):
|
| return '%s\nSorry, cannot connect to server.' % self.args[0]
|
|
|
|
|
| -def PostTryJob(host, port, params):
|
| - """Sends a build request to the server using the HTTP protocol.
|
| -
|
| - The required parameters are:
|
| - 'revision': "src@rev", where rev is a git hash or SVN revision.
|
| - 'bot': Name of builder bot to use, e.g. "win_perf_bisect_builder".
|
| -
|
| - Args:
|
| - host: Hostname of the try server.
|
| - port: Port of the try server.
|
| - params: A dictionary of parameters to be sent in the POST request.
|
| -
|
| - Returns:
|
| - True if the request is posted successfully.
|
| -
|
| - Raises:
|
| - ServerAccessError: Failed to make a request to the try server.
|
| - ValueError: Not all of the expected inputs were given.
|
| - """
|
| - if not params.get('revision'):
|
| - raise ValueError('Missing revision number.')
|
| - if not params.get('bot'):
|
| - raise ValueError('Missing bot name.')
|
| -
|
| - base_url = 'http://%s:%s/send_try_patch' % (host, port)
|
| - print 'Posting build request by HTTP.'
|
| - print 'URL: %s, params: %s' % (base_url, params)
|
| -
|
| - connection = None
|
| - try:
|
| - print 'Opening connection...'
|
| - connection = urllib2.urlopen(base_url, urllib.urlencode(params))
|
| - print 'Done, request sent to server to produce build.'
|
| - except IOError as e:
|
| - raise ServerAccessError('%s is unaccessible. Reason: %s' % (base_url, e))
|
| - if not connection:
|
| - raise ServerAccessError('%s is unaccessible.' % base_url)
|
| -
|
| - response = connection.read()
|
| - print 'Received response from server: %s' % response
|
| - if response != 'OK':
|
| - raise ServerAccessError('Response was not "OK".')
|
| - return True
|
| -
|
| -
|
| def _IsBuildRunning(build_data):
|
| """Checks whether the build is in progress on buildbot.
|
|
|
| @@ -218,8 +166,9 @@ def _GetBuildBotUrl(builder_type):
|
| """
|
| if builder_type == fetch_build.PERF_BUILDER:
|
| return PERF_TRY_SERVER_URL
|
| - else:
|
| - raise NotImplementedError('Cannot yet get non-perf builds.')
|
| + if builder_type == fetch_build.FULL_BUILDER:
|
| + return LINUX_TRY_SERVER_URL
|
| + raise NotImplementedError('Unsupported builder type "%s".' % builder_type)
|
|
|
|
|
| def GetBuildStatus(build_num, bot_name, builder_type):
|
| @@ -234,6 +183,8 @@ def GetBuildStatus(build_num, bot_name, builder_type):
|
| A pair which consists of build status (SUCCESS, FAILED or PENDING) and a
|
| link to build status page on the waterfall.
|
| """
|
| + # TODO(prasadv, qyearsley): Make this a method of BuildArchive
|
| + # (which may be renamed to BuilderTryBot or Builder).
|
| results_url = None
|
| if build_num:
|
| # Get the URL for requesting JSON data with status information.
|
| @@ -277,6 +228,8 @@ def GetBuildNumFromBuilder(build_reason, bot_name, builder_type):
|
| Returns:
|
| A build number as a string if found, otherwise None.
|
| """
|
| + # TODO(prasadv, qyearsley): Make this a method of BuildArchive
|
| + # (which may be renamed to BuilderTryBot or Builder).
|
| # Gets the buildbot url for the given host and port.
|
| server_url = _GetBuildBotUrl(builder_type)
|
| buildbot_url = BUILDER_JSON_URL % {
|
| @@ -291,77 +244,3 @@ def GetBuildNumFromBuilder(build_reason, bot_name, builder_type):
|
| if builds_data[current_build].get('reason') == build_reason:
|
| return builds_data[current_build].get('number')
|
| return None
|
| -
|
| -
|
| -def _GetRequestParams(options):
|
| - """Extracts request parameters which will be passed to PostTryJob.
|
| -
|
| - Args:
|
| - options: The options object parsed from the command line.
|
| -
|
| - Returns:
|
| - A dictionary with parameters to pass to PostTryJob.
|
| - """
|
| - params = {
|
| - 'user': options.user,
|
| - 'name': options.name,
|
| - }
|
| - # Add other parameters if they're available in the options object.
|
| - for key in ['email', 'revision', 'root', 'bot', 'patch']:
|
| - option = getattr(options, key)
|
| - if option:
|
| - params[key] = option
|
| - return params
|
| -
|
| -
|
| -def _GenParser():
|
| - """Returns a parser for getting command line arguments."""
|
| - usage = ('%prog [options]\n'
|
| - 'Post a build request to the try server for the given revision.')
|
| - parser = optparse.OptionParser(usage=usage)
|
| - parser.add_option('-H', '--host',
|
| - help='Host address of the try server (required).')
|
| - parser.add_option('-P', '--port', type='int',
|
| - help='HTTP port of the try server (required).')
|
| - parser.add_option('-u', '--user', default=getpass.getuser(),
|
| - dest='user',
|
| - help='Owner user name [default: %default]')
|
| - parser.add_option('-e', '--email',
|
| - default=os.environ.get('TRYBOT_RESULTS_EMAIL_ADDRESS',
|
| - os.environ.get('EMAIL_ADDRESS')),
|
| - help=('Email address where to send the results. Use either '
|
| - 'the TRYBOT_RESULTS_EMAIL_ADDRESS environment '
|
| - 'variable or EMAIL_ADDRESS to set the email address '
|
| - 'the try bots report results to [default: %default]'))
|
| - parser.add_option('-n', '--name',
|
| - default='try_job_http',
|
| - help='Descriptive name of the try job')
|
| - parser.add_option('-b', '--bot',
|
| - help=('Only one builder per run may be specified; to post '
|
| - 'jobs on on multiple builders, run script for each '
|
| - 'builder separately.'))
|
| - parser.add_option('-r', '--revision',
|
| - help=('Revision to use for the try job. The revision may '
|
| - 'be determined by the try server; see its waterfall '
|
| - 'for more info.'))
|
| - parser.add_option('--root',
|
| - help=('Root to use for the patch; base subdirectory for '
|
| - 'patch created in a subdirectory.'))
|
| - parser.add_option('--patch',
|
| - help='Patch information.')
|
| - return parser
|
| -
|
| -
|
| -def Main(_):
|
| - """Posts a try job based on command line parameters."""
|
| - parser = _GenParser()
|
| - options, _ = parser.parse_args()
|
| - if not options.host or not options.port:
|
| - parser.print_help()
|
| - return 1
|
| - params = _GetRequestParams(options)
|
| - PostTryJob(options.host, options.port, params)
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(Main(sys.argv))
|
|
|