diff options
Diffstat (limited to 'tools/auto_bisect/request_build.py')
-rw-r--r-- | tools/auto_bisect/request_build.py | 143 |
1 files changed, 11 insertions, 132 deletions
diff --git a/tools/auto_bisect/request_build.py b/tools/auto_bisect/request_build.py index 55b3768..77ce63b 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)) |