From 03d90c4ae7e4ccfcd3a7a2b2df38d13fb16ed4a1 Mon Sep 17 00:00:00 2001 From: Vishal Bhoj Date: Mon, 14 Apr 2014 15:27:01 +0530 Subject: Add support to submit multinode job based on JOB template Change-Id: Ia0665e9f4a63eedc08e99af0cb6c7f94971ae498 Signed-off-by: Vishal Bhoj --- build-scripts/post-build-lava.py | 83 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 82 insertions(+), 1 deletion(-) diff --git a/build-scripts/post-build-lava.py b/build-scripts/post-build-lava.py index be8fb0b..efd8e93 100755 --- a/build-scripts/post-build-lava.py +++ b/build-scripts/post-build-lava.py @@ -5,6 +5,8 @@ import re import json import copy import xmlrpclib +import fileinput +import urllib def obfuscate_credentials(s): @@ -162,6 +164,16 @@ def get_schema_and_url(): url_no_schema = lava_server return (schema, url_no_schema) +def get_job_list(): + job_list = ['LAVA_JOB_URL'] + sec_job_prefix = 'LAVA_JOB_URL_' + + for var in os.environ.keys(): + if var.startswith(sec_job_prefix): + job_list.append(var) + job_list.sort() + + return job_list def get_plan_list(): plan_list = [ENV_LAVA_TEST_PLAN] @@ -619,11 +631,76 @@ def submit_job(config=None, plan=None): 'job_id': lava_job_id, }, open('out/lava-job-info', 'w')) else: + if isinstance(lava_job_id, int): + append_id = lava_job_id + else: + append_id = lava_job_id[0] json.dump({ 'lava_url': "%s://%s" % (schema, lava_server_root), 'job_id': lava_job_id, - }, open('out/lava-job-info-' + plan, 'w')) + }, open('out/lava-job-info-' + str(append_id), 'w')) + +def replace(fp, pattern, subst): + print pattern + print subst + for line in fileinput.input(fp, inplace=1): + if pattern in line: + line = line.replace(pattern, subst) + sys.stdout.write(line) + fileinput.close() + +def submit_job_from_url(): + """This routine updates a predefined job with the parameters specific + to this particular build""" + job_list = get_job_list() + for job in job_list: + lava_job_url = get_env_var(job) + if lava_job_url is None: + print "Error: No LAVA_JOB_URL provided" + return + urllib.urlretrieve(lava_job_url,"job.json") + # Job name, defined by android-build, e.g. linaro-android_leb-panda + job_name = os.environ.get("JOB_NAME") + frontend_job_name = "~" + job_name.replace("_", "/", 1) + + # Build number, defined by android-build, e.g. 61 + build_number = os.environ.get("BUILD_NUMBER") + + # download base URL, this may differ from job URL if we don't host + # downloads in Jenkins any more + download_url = "%s/%s/%s/" % (DEFAULT_DOWNLOAD_BASE_URL, + frontend_job_name, + build_number) + # Set the file extension based on the type of artifacts + artifact_type = os.environ.get("MAKE_TARGETS", "tarball") + if artifact_type == "droidcore": + file_extension = "img" + else: + file_extension = "tar.bz2" + + boot_subst = "%s%s%s" % (download_url, "/boot.", file_extension) + system_subst = "%s%s%s" % (download_url, "/system.", file_extension) + userdata_subst = "%s%s%s" % (download_url, "/userdata.", file_extension) + + replace("job.json", "%%ANDROID_BOOT%%", boot_subst) + replace("job.json", "%%ANDROID_SYSTEM%%", system_subst) + replace("job.json", "%%ANDROID_DATA%%", userdata_subst) + replace("job.json", "%%ANDROID_META_NAME%%", job_name) + replace("job.json", "%%JOB_NAME%%", job_name) + replace("job.json", "%%ANDROID_META_BUILD%%", build_number) + replace("job.json", "%%ANDROID_META_URL%%", get_env_var(ENV_BUILD_URL)) + replace("job.json", "%%BUNDLE_STREAM%%", get_env_var(ENV_LAVA_STREAM, DEFAULT_LAVA_STREAM)) + replace("job.json", "%%WA2_JOB_NAME%%", build_number) + + devices = get_lava_device_type_or_target() + for device in devices: + replace("job.json", "%%DUT_TYPE%%", device.name) + with open("job.json", 'r') as fin: + print fin.read() + with open("job.json") as fd: + config = fd.read().strip() + submit_job(config=config, plan=lava_job_url) def main(): """Script entry point: return some JSON based on calling args. @@ -632,6 +709,10 @@ def main(): check_target_product() + """Check for request to generate JSON from previous jsons""" + if get_env_var('SUBMIT_JOB_FROM_URL') == 'true': + submit_job_from_url() + common_actions = [gen_deploy_action()] install_binaries_action = gen_install_binaries_action() -- cgit v1.2.3