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()

Reply via email to