aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVishal Bhoj <vishal.bhoj@linaro.org>2014-04-14 15:27:01 +0530
committerVishal Bhoj <vishal.bhoj@linaro.org>2014-06-05 19:45:27 +0530
commit03d90c4ae7e4ccfcd3a7a2b2df38d13fb16ed4a1 (patch)
tree43fa7f48b485353cd96f0722e031b68091b997d3
parenta3008afb228564d6ae2e7adb70a6f337487076b9 (diff)
Add support to submit multinode job based on JOB template
Change-Id: Ia0665e9f4a63eedc08e99af0cb6c7f94971ae498 Signed-off-by: Vishal Bhoj <vishal.bhoj@linaro.org>
-rwxr-xr-xbuild-scripts/post-build-lava.py83
1 files changed, 82 insertions, 1 deletions
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()