| # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| """Script for uploading results to the premerge advisor.""" |
| |
| import argparse |
| import os |
| import platform |
| import sys |
| |
| import requests |
| |
| import generate_test_report_lib |
| |
| # These are IP addresses of the two premerge advisor instances. They should |
| # eventually be updated to domain names. |
| PREMERGE_ADVISOR_URLS = [ |
| "http://34.82.126.63:5000/upload", |
| "http://136.114.125.23:5000/upload", |
| ] |
| |
| |
| def main(commit_sha, workflow_run_number, build_log_files): |
| junit_objects, ninja_logs = generate_test_report_lib.load_info_from_files( |
| build_log_files |
| ) |
| test_failures = generate_test_report_lib.get_failures(junit_objects) |
| source = "pull_request" if "GITHUB_ACTIONS" in os.environ else "postcommit" |
| current_platform = f"{platform.system()}-{platform.machine()}".lower() |
| failure_info = { |
| "source_type": source, |
| "base_commit_sha": commit_sha, |
| "source_id": workflow_run_number, |
| "failures": [], |
| "platform": current_platform, |
| } |
| if test_failures: |
| for _, failures in test_failures.items(): |
| for name, failure_message in failures: |
| failure_info["failures"].append( |
| {"name": name, "message": failure_message} |
| ) |
| else: |
| ninja_failures = generate_test_report_lib.find_failure_in_ninja_logs(ninja_logs) |
| for name, failure_message in ninja_failures: |
| failure_info["failures"].append({"name": name, "message": failure_message}) |
| for premerge_advisor_url in PREMERGE_ADVISOR_URLS: |
| requests.post(premerge_advisor_url, json=failure_info, timeout=5) |
| |
| |
| if __name__ == "__main__": |
| parser = argparse.ArgumentParser() |
| parser.add_argument("commit_sha", help="The base commit SHA for the test.") |
| parser.add_argument("workflow_run_number", help="The run number from GHA.") |
| parser.add_argument( |
| "build_log_files", help="Paths to JUnit report files and ninja logs.", nargs="*" |
| ) |
| args = parser.parse_args() |
| |
| # Skip uploading results on AArch64 for now because the premerge advisor |
| # service is not available on AWS currently. |
| if platform.machine() == "arm64" or platform.machine() == "aarch64": |
| sys.exit(0) |
| |
| main(args.commit_sha, args.workflow_run_number, args.build_log_files) |