import argparse import os import requests import sys from string import Template try: from urllib.parse import urlsplit except ImportError: from urlparse import urlsplit # Templates base path template_base_path = 'configs/armnn-ci-build/lava-job-definitions' # Snapshots base URL snapshots_url = 'https://snapshots.linaro.org/components/armnn/latest/' def main(): parser = argparse.ArgumentParser() parser.add_argument("--device-type", help="Device type in LAVA", dest="device_type", required=True) parser.add_argument("--build-number", help="Build number", dest="build_number", required=True) parser.add_argument("--qa-server-team", help="Team in QA Reports service", dest="qa_server_team", required=True) parser.add_argument("--qa-server-project", help="Project in QA Reports service", dest="qa_server_project", required=True) parser.add_argument("--qa-server", help="QA Reports server", dest="qa_server", default="https://qa-reports.linaro.org") parser.add_argument("--qa-token", help="QA Reports token", dest="qa_token", default=os.environ.get('QA_REPORTS_TOKEN')) parser.add_argument("--lava-server", help="LAVA server URL", dest="lava_server", required=True) parser.add_argument("--git-commit", help="git commit ID", dest="git_commit", required=True) parser.add_argument("--template-names", help="list of the templates to submit for testing", dest="template_names", nargs="+", default=["template.yaml"]) args, _ = parser.parse_known_args() qa_server_base = args.qa_server if not (qa_server_base.startswith("http://") or qa_server_base.startswith("https://")): qa_server_base = "https://" + qa_server_base qa_server_team = args.qa_server_team qa_server_project = args.qa_server_project qa_server_build = args.git_commit qa_server_env = args.device_type qa_server_api = "%s/api/submitjob/%s/%s/%s/%s" % ( qa_server_base, qa_server_team, qa_server_project, qa_server_build, qa_server_env) lava_server = args.lava_server if not (lava_server.startswith("http://") or lava_server.startswith("https://")): lava_server = "https://" + lava_server lava_url_base = "%s://%s/" % (urlsplit(lava_server).scheme, urlsplit(lava_server).netloc) headers = { "Auth-Token": args.qa_token } for test in args.template_names: template_file_name = "%s/%s/%s" % (template_base_path, args.device_type, test) test_template = None if os.path.exists(template_file_name): test_template_file = open(template_file_name, "r") test_template = test_template_file.read() test_template_file.close() else: sys.exit(1) template = Template(test_template) lava_job = template.safe_substitute(os.environ) print(lava_job) try: data = { "definition": lava_job, "backend": urlsplit(lava_url_base).netloc # qa-reports backends are named as lava instances } results = requests.post(qa_server_api, data=data, headers=headers) if results.status_code < 300: print("%s/testjob/%s" % (qa_server_base, results.text)) else: print(results.status_code) print(results.text) except xmlrpclib.ProtocolError as err: print("QA Reports submission failed") print("offending job definition:") print(lava_job) print("Error code: %d" % err.errcode) print("Error message: %s" % err.errmsg) if __name__ == "__main__": main()