This is an automated email from the ASF dual-hosted git repository. andschwa pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
commit e80fa6f4d5d1c2feb62e6a83ee1d09befc2e251a Author: Dragos Schebesch <[email protected]> AuthorDate: Tue Aug 21 10:42:50 2018 -0700 Added support script to post build results. Review: https://reviews.apache.org/r/67504/ --- support/python3/post-build-result.py | 113 +++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/support/python3/post-build-result.py b/support/python3/post-build-result.py new file mode 100755 index 0000000..ebf2e0f --- /dev/null +++ b/support/python3/post-build-result.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python3 +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +This file is used to post review results to the ReviewBoard. +""" + +import argparse +import sys +import urllib.request as urllib2 + +from common import ReviewBoardHandler, REVIEWBOARD_URL # noqa + +LOG_TAIL_LIMIT = 30 + + +def parse_parameters(): + """Method for parsing arguments for argparse.""" + parser = argparse.ArgumentParser( + description="Post review results to Review Board") + parser.add_argument("-u", "--user", type=str, required=True, + help="Review board user name") + parser.add_argument("-p", "--password", type=str, required=True, + help="Review board user password") + parser.add_argument("-r", "--review-id", type=str, required=True, + help="Review ID") + parser.add_argument("-m", "--message", type=str, required=True, + help="The post message") + parser.add_argument("-o", "--outputs-url", type=str, required=True, + help="The output build artifacts URL") + parser.add_argument("-l", "--logs-urls", type=str, required=False, + help="The URLs for the logs to be included in the" + " posted build message") + parser.add_argument("--applied-reviews", type=str, required=False, + help="The Review IDs that have been applied for the" + " current patch") + parser.add_argument("--failed-command", type=str, required=False, + help="The command that failed during the build" + " process") + return parser.parse_args() + + +def get_build_message(message, outputs_url, logs_urls=None, + applied_reviews=None, + failed_command=None): + """Retrieves build message.""" + if logs_urls is None: + logs_urls = [] + if applied_reviews is None: + applied_reviews = [] + build_msg = "%s\n\n" % message + if applied_reviews: + build_msg += "Reviews applied: `%s`\n\n" % applied_reviews + if failed_command: + build_msg += "Failed command: `%s`\n\n" % failed_command + build_msg += ("All the build artifacts available" + " at: %s\n\n" % (outputs_url)) + logs_msg = '' + for url in logs_urls: + response = urllib2.urlopen(url) + log_content = response.read().decode(sys.getdefaultencoding()) + if log_content == '': + continue + file_name = url.split('/')[-1] + logs_msg += "- [%s](%s):\n\n" % (file_name, url) + logs_msg += "```\n" + log_tail = log_content.split("\n")[-LOG_TAIL_LIMIT:] + logs_msg += "\n".join(log_tail) + logs_msg += "```\n\n" + if logs_msg == '': + return build_msg + build_msg += "Relevant logs:\n\n%s" % (logs_msg) + return build_msg.encode(sys.getdefaultencoding()) + + +def main(): + """Posts build result to the ReviewBoard""" + parameters = parse_parameters() + review_request_url = "%s/api/review-requests/%s/" % (REVIEWBOARD_URL, + parameters.review_id) + handler = ReviewBoardHandler(parameters.user, parameters.password) + review_request = handler.api(review_request_url)["review_request"] + logs_urls = [] + if parameters.logs_urls: + logs_urls = parameters.logs_urls.split('|') + applied_reviews = [] + if parameters.applied_reviews: + applied_reviews = parameters.applied_reviews.split('|') + message = get_build_message(message=parameters.message, + logs_urls=logs_urls, + applied_reviews=applied_reviews, + outputs_url=parameters.outputs_url, + failed_command=parameters.failed_command) + handler.post_review(review_request, message) + + +if __name__ == '__main__': + main()
