diff options
Diffstat (limited to 'jenkins')
-rw-r--r-- | jenkins/bisect.jpl | 145 | ||||
-rw-r--r-- | jenkins/build-trigger.jpl | 152 | ||||
-rw-r--r-- | jenkins/build.jpl | 20 | ||||
-rw-r--r-- | jenkins/buster-v4l2.jpl (renamed from jenkins/stretch-v4l2.jpl) | 6 | ||||
-rwxr-xr-x | jenkins/debian/debos/scripts/buster-v4l2.sh (renamed from jenkins/debian/debos/scripts/stretch-v4l2.sh) | 2 | ||||
-rw-r--r-- | jenkins/dockerfiles/debos/Dockerfile | 2 | ||||
-rwxr-xr-x | jenkins/kernel-arch-complete.sh | 34 | ||||
-rwxr-xr-x | jenkins/lava-boot-v2.sh | 22 | ||||
-rw-r--r-- | jenkins/monitor.jpl | 2 | ||||
-rw-r--r-- | jenkins/test-runner.jpl | 178 |
10 files changed, 465 insertions, 98 deletions
diff --git a/jenkins/bisect.jpl b/jenkins/bisect.jpl index f8eb68d..b0eae35 100644 --- a/jenkins/bisect.jpl +++ b/jenkins/bisect.jpl @@ -53,8 +53,10 @@ BUILD_ENVIRONMENT Name of the build environment LAB Name of the lab in which to run the bisection tests -PLAN (boot) - Name of the test plan +TEST_PLAN + Name of the KernelCI test plan (e.g. baseline) +TEST_PLAN_VARIANT: + Name of the KernelCI test plan variant (e.g. baseline_qemu) TEST_RUNS (1) Number of LAVA jobs to run before considering pass or fail. KCI_API_URL (https://api.kernelci.org) @@ -84,7 +86,6 @@ TREES_WHITELIST @Library('kernelci') _ -import org.kernelci.build.Kernel import org.kernelci.util.Job /* Working around some seemingly broken Python set-up... */ @@ -210,7 +211,8 @@ git symbolic-ref HEAD refs/heads/${params.KERNEL_BRANCH} def buildKernel(kdir, kci_core) { def output = "${kdir}/build-${params.ARCH}-${params.BUILD_ENVIRONMENT}" dir(kci_core) { - sh(script: "rm -f ${env._BUILD_JSON}") + sh(script: "rm -f ${env._BMETA_JSON}") + sh(script: "rm -f ${env._DTBS_JSON}") sh(script: """\ for d in \$(find ${kdir} -name "build-*" -type d); do @@ -262,14 +264,10 @@ push_kernel \ """) } - sh(script: """\ -./kci_build \ -publish_kernel \ ---kdir=${kdir} \ ---json-path=${env._BUILD_JSON} \ -""") - - stash(name: env._BUILD_JSON, includes: env._BUILD_JSON) + dir("${kdir}/_install_") { + stash(name: env._BMETA_JSON, includes: env._BMETA_JSON) + stash(name: env._DTBS_JSON, includes: env.DTBS_JSON) + } } } @@ -284,41 +282,68 @@ def buildRevision(kdir, kci_core, git_rev, name) { * kernel test with LAVA v2 */ -def submitJob(kci_core, describe, hook) { +def fetchLabInfo(kci_core) { dir(kci_core) { - sh(script: "rm -rf ${env._BUILD_JSON}; rm -rf data; mkdir data") - unstash(env._BUILD_JSON) - sh(script: """ -./lava-v2-jobs-from-api.py \ + def token = "${params.LAB}-lava-api" + + withCredentials([string(credentialsId: token, variable: 'SECRET')]) { + sh(script: """\ +./kci_test \ +get_lab_info \ --lab=${params.LAB} \ ---builds=${env._BUILD_JSON} \ ---storage=${params.KCI_STORAGE_URL} \ ---plans=${params.PLAN} \ ---jobs=data \ ---arch=${params.ARCH} \ ---tree=${params.KERNEL_TREE} \ ---describe=${describe} \ ---branch=${params.KERNEL_BRANCH} \ ---defconfig_full=${params.DEFCONFIG} \ ---priority=${params.LAVA_PRIORITY} \ ---callback=${params.LAVA_CALLBACK} \ ---callback-url=${hook.getURL()} \ ---callback-dataset=results \ ---callback-type=custom \ ---targets=${params.TARGET} +--lab-json=${env._LAB_JSON} \ +--user=kernel-ci \ +--token=${SECRET} \ """) + } + stash(name: env._LAB_JSON, includes: env._LAB_JSON) + } +} + +def submitJob(kci_core, describe, hook) { + dir(kci_core) { + sh(script: """\ +rm -f ${env._BMETA_JSON} \ +rm -f ${env._DTBS_JSON} \ +rm -f ${env._LAB_JSON} \ +rm -rf data; mkdir data \ +""") + unstash(env._BMETA_JSON) + unstash(env._DTBS_JSON) + unstash(env._LAB_JSON) def egg_cache = eggCache() def token = "${params.LAB}-lava-api" + /* ToDo: deal with params.LAVA_PRIORITY or drop it */ + withCredentials([string(credentialsId: token, variable: 'SECRET')]) { - sh(script: """ -PYTHON_EGG_CACHE=${egg_cache} \ -./lava-v2-submit-jobs.py \ ---username=kernel-ci \ + sh(script: """ \ +./kci_test \ +generate \ +--bmeta-json=${env._BMETA_JSON} \ +--dtbs-json=${env._DTBS_JSON} \ +--lab-json=${env._LAB_JSON} \ +--storage=${params.KCI_STORAGE_URL} \ +--lab=${params.LAB} \ +--user=kernel-ci \ --token=${SECRET} \ +--output=data \ +--callback-id=${params.LAVA_CALLBACK} \ +--callback-url=${hook.getURL()} \ +--callback-dataset=results \ +--callback-type=custom \ +--target=${params.TARGET} \ +--plan=${params.TEST_PLAN_VARIANT} \ +""") + + sh(script: """ \ +./kci_test \ +submit \ --lab=${params.LAB} \ ---jobs=data +--user=kernel-ci \ +--token=${SECRET} \ +--jobs=data/* \ """) } } @@ -381,7 +406,7 @@ def runTest(kci_core, describe, expected=0, runs=0) { * bisection */ -def findMergeBase(kdir, good, bad) { +def findMergeBase(kdir, kci_core, good, bad) { def base = good dir(kdir) { @@ -390,16 +415,32 @@ def findMergeBase(kdir, good, bad) { script: "git merge-base --is-ancestor ${base} HEAD") if (good_base != 0) { - def ref = "${params.REF_KERNEL_TREE}/${params.REF_KERNEL_BRANCH}" + def ref_url = params.REF_KERNEL_URL + def ref_tree = params.REF_KERNEL_TREE + def ref_branch = params.REF_KERNEL_BRANCH + + if (!(ref_url && ref_tree && ref_branch)) { + dir(kci_core) { + ref_config = sh(script: """\ + ./kci_build get_reference --tree-name ${params.KERNEL_TREE} \ + --branch ${params.KERNEL_BRANCH}""", returnStdout: true).trim().tokenize("\n") + if (ref_config.size() > 0) { + ref_url = ref_config[0] + ref_tree = ref_config[1] + ref_branch = ref_config[2] + } + } + } + def ref = "${ref_tree}/${ref_branch}" print("Good commit not in current branch, finding base in ${ref}") print("""\ Reference: - Tree: ${params.REF_KERNEL_TREE} - URL: ${params.REF_KERNEL_URL} - Branch: ${params.REF_KERNEL_BRANCH}""") + Tree: ${ref_tree} + URL: ${ref_url} + Branch: ${ref_branch}""") - setRemote(kdir, params.REF_KERNEL_TREE, params.REF_KERNEL_URL) + setRemote(kdir, ref_tree, ref_url) base = sh(script: "git merge-base ${bad} ${ref}", returnStdout: true).trim() print("Merge base: ${base}") @@ -451,7 +492,9 @@ def bisectNext(kdir, status) { */ def pushResults(kci_core, kdir, checks, params_summary) { - def subject = "${params.KERNEL_TREE}/${params.KERNEL_BRANCH} ${params.PLAN} bisection: ${params.KERNEL_NAME} on ${params.TARGET}" + def subject = "\ +${params.KERNEL_TREE}/${params.KERNEL_BRANCH} bisection: \ +${params.TEST_PLAN} on ${params.TARGET}" dir(kci_core) { withCredentials([string(credentialsId: params.KCI_TOKEN_ID, @@ -536,10 +579,11 @@ def bisection(kci_core, kdir, checks) { kci_core: { cloneKciCore(kci_core) }, kdir: { cloneLinux(kdir) }, ) + fetchLabInfo(kci_core) } bad = params.BAD_COMMIT - good = findMergeBase(kdir, params.GOOD_COMMIT, bad) + good = findMergeBase(kdir, kci_core, params.GOOD_COMMIT, bad) } stage("Check pass") { @@ -631,7 +675,9 @@ def bisection(kci_core, kdir, checks) { node("docker && bisection") { /* Global pipeline constants */ - env._BUILD_JSON = "build-data.json" + env._BMETA_JSON = "bmeta.json" + env._DTBS_JSON = "dtbs.json" + env._LAB_JSON = "lab-info.json" def j = new Job() def kci_core = "${env.WORKSPACE}/kernelci-core" @@ -648,14 +694,15 @@ node("docker && bisection") { Lab: ${params.LAB} Defconfig: ${params.DEFCONFIG} Compiler: ${params.BUILD_ENVIRONMENT} - Plan: ${params.PLAN}""" + Plan: ${params.TEST_PLAN} + Variant: ${params.TEST_PLAN_VARIANT}""" print("""\ Good: ${params.GOOD_COMMIT} Bad: ${params.BAD_COMMIT} ${params_summary}""") - if ((params.PLAN != 'boot') && (params.PLAN != 'simple')) { - echo "Only doing boot and simple plans for now, aborting." + if (params.TEST_PLAN != 'boot') { + echo "Only doing boot bisections for now, aborting." currentBuild.result = 'ABORTED' return } diff --git a/jenkins/build-trigger.jpl b/jenkins/build-trigger.jpl index 9e23b6f..20e159d 100644 --- a/jenkins/build-trigger.jpl +++ b/jenkins/build-trigger.jpl @@ -28,6 +28,8 @@ PUBLISH (boolean) Publish build results via the KernelCI backend API EMAIL (boolean) Send build results via email +LABS_WHITELIST + List of labs to include in the tests, all labs will be tested by default. KCI_API_URL (https://api.kernelci.org) URL of the KernelCI backend API KCI_TOKEN_ID @@ -45,7 +47,6 @@ ALLOW_REBUILD (false) */ @Library('kernelci') _ -import org.kernelci.build.Kernel import org.kernelci.util.Job def configAlreadyBuilt(config, kci_core) { @@ -53,7 +54,7 @@ def configAlreadyBuilt(config, kci_core) { dir(kci_core) { new_commit = sh( - script: """ + script: """\ ./kci_build \ check_new_commit \ --config=${config} \ @@ -73,13 +74,23 @@ update_mirror \ --mirror=${mirror} \ """) - sh(script: """\ + while (true) { + try { + sh(script: """\ ./kci_build \ update_repo \ --config=${config} \ --kdir=${kdir} \ --mirror=${mirror} \ """) + break + } catch (error) { + print("Failed to update repo: ${error}") + print("Removing clone and retrying") + sh(script: "rm -rf ${kdir}") + sleep 1 + } + } def describe_raw = sh(script: """\ ./kci_build \ @@ -143,21 +154,10 @@ list_kernel_configs \ } } -def addBuildOpts(config, kci_core, opts) { - dir(kci_core) { - opts['config'] = config - - def opts_raw = sh( - script: """\ -./kci_build \ -tree_branch \ ---config=${config} \ -""", returnStdout: true).trim() - def opt_list = opts_raw.tokenize('\n') - opts['tree'] = opt_list[0] - opts['git_url'] = opt_list[1] - opts['branch'] = opt_list[2] +def listArchitectures(kci_core, config) { + def arch_list = [] + dir(kci_core) { def raw_variants = sh( script: """\ ./kci_build \ @@ -166,7 +166,6 @@ list_variants \ """, returnStdout: true).trim() def variants = raw_variants.tokenize('\n') - def arch_list = [] for (String variant: variants) { def raw_variant_arch_list = sh( script: """\ @@ -181,11 +180,61 @@ arch_list \ if (!arch_list.contains(arch)) arch_list.add(arch) } - opts['arch_list'] = arch_list } + + return arch_list } -def buildKernelStep(job, arch, defconfig, build_env, opts) { +def addBuildOpts(config, kci_core, opts) { + dir(kci_core) { + opts['config'] = config + + def opts_raw = sh( + script: """\ +./kci_build \ +tree_branch \ +--config=${config} \ +""", returnStdout: true).trim() + def opt_list = opts_raw.tokenize('\n') + opts['tree'] = opt_list[0] + opts['git_url'] = opt_list[1] + opts['branch'] = opt_list[2] + } +} + +def scheduleTests(build_job_name, build_job_number, labs, kci_core) { + dir(kci_core) { + def labs_str = "" + for (lab in labs) + labs_str += "${lab} " + + def str_params = [ + 'LABS': labs_str.trim(), + 'TRIGGER_JOB_NAME': env.JOB_NAME, + 'TRIGGER_JOB_NUMBER': env.BUILD_NUMBER, + 'BUILD_JOB_NAME': build_job_name, + 'BUILD_JOB_NUMBER': "${build_job_number}", + ] + def params = [] + + def j = new Job() + j.addStrParams(params, str_params) + build(job: 'test-runner', parameters: params, propagate: false) + } +} + +def buildKernelStep(job, arch, defconfig, build_env, opts, labs, kci_core) { + def node_label = "builder" + def parallel_builds = "4" + + if (defconfig.matches(".*allmodconfig.*")) { + node_label = "big-config-builder" + parallel_builds = "" + } else if (defconfig.matches("^defconfig.*") && arch == "arm64") { + node_label = "medium-config-builder" + parallel_builds = "" + } + def str_params = [ 'ARCH': arch, 'DEFCONFIG': defconfig, @@ -195,13 +244,20 @@ def buildKernelStep(job, arch, defconfig, build_env, opts) { 'SRC_TARBALL': opts['tarball_url'], 'BUILD_CONFIG': opts['config'], 'BUILD_ENVIRONMENT': build_env, + 'NODE_LABEL': node_label, + 'PARALLEL_BUILDS': parallel_builds, ] def job_params = [] def j = new Job() j.addStrParams(job_params, str_params) - return { build(job: job, parameters: job_params, propagate: false) } + return { + def res = build(job: job, parameters: job_params, propagate: false) + print("${res.number}: ${arch} ${defconfig} ${build_env} ${res.result}") + if (res.result == "SUCCESS") + scheduleTests(job, res.number, labs, kci_core) + } } def buildsComplete(job, opts, arch) { @@ -225,10 +281,10 @@ def buildsComplete(job, opts, arch) { node("docker && build-trigger") { def j = new Job() - def k = new Kernel() def kci_core = "${env.WORKSPACE}/kernelci-core" def kdir = "${env.WORKSPACE}/configs/${params.BUILD_CONFIG}" def mirror = "${env.WORKSPACE}/linux.git" + def labs_info = "${env.WORKSPACE}/labs" def docker_image = "${params.DOCKER_BASE}base" def opts = [:] def configs = [] @@ -238,11 +294,57 @@ node("docker && build-trigger") { Container: ${docker_image}""") j.dockerPullWithRetry(docker_image).inside() { + def labs = [] + stage("Init") { timeout(time: 15, unit: 'MINUTES') { j.cloneKciCore( kci_core, params.KCI_CORE_URL, params.KCI_CORE_BRANCH) } + + sh(script: "rm -rf ${labs_info}; mkdir -p ${labs_info}") + + dir(kci_core) { + def raw_lab_names = sh( + script: "./kci_test list_labs", returnStdout: true).trim() + def all_lab_names = raw_lab_names.tokenize('\n') + def labs_list = [] + + if (params.LABS_WHITELIST) { + def whitelist = params.LABS_WHITELIST.tokenize(' ') + + for (lab in all_lab_names) + if (whitelist.contains(lab)) + labs_list.add(lab) + } else { + labs_list = all_lab_names + } + + for (lab in labs_list) { + def lab_json = "${labs_info}/${lab}.json" + def token = "${lab}-lava-api" + try { + withCredentials([string(credentialsId: token, + variable: 'SECRET')]) { + sh(script: """\ +./kci_test \ +get_lab_info \ +--lab=${lab} \ +--lab-json=${lab_json} \ +--user=kernel-ci \ +--token=${SECRET} \ +""") + } + labs.add(lab) + } catch (error) { + print("Error with ${lab}: ${error}") + } + } + } + + dir(labs_info) { + archiveArtifacts("*.json") + } } if (params.ALLOW_REBUILD != true) { @@ -276,7 +378,8 @@ node("docker && build-trigger") { print(step_name) builds[step_name] = buildKernelStep( - "kernel-build", arch, defconfig, build_env, opts) + "kernel-build", arch, defconfig, build_env, opts, labs, + kci_core) i += 1 } @@ -286,7 +389,8 @@ node("docker && build-trigger") { stage("Complete") { /* ToDo: convert kernel-arch-complete as a stage in this job */ - for (String arch: opts['arch_list']) { + def arch_list = listArchitectures(kci_core, params.BUILD_CONFIG) + for (String arch: arch_list) { buildsComplete("kernel-arch-complete", opts, arch) } } diff --git a/jenkins/build.jpl b/jenkins/build.jpl index ed1b106..05bdeeb 100644 --- a/jenkins/build.jpl +++ b/jenkins/build.jpl @@ -38,6 +38,8 @@ COMMIT_ID Git commit SHA1 at the revision of the snapshot BUILD_ENVIRONMENT Name of the build environment +NODE_LABEL + Label to use to choose a node on which to run this job PUBLISH (boolean) Publish build results via the KernelCI backend API EMAIL (boolean) @@ -59,10 +61,11 @@ PARALLEL_BUILDS @Library('kernelci') _ -import org.kernelci.build.Kernel import org.kernelci.util.Job def buildConfig(kdir, kci_core) { + def jopt = "" + if (params.PARALLEL_BUILDS) jopt = "-j${params.PARALLEL_BUILDS}" @@ -108,11 +111,14 @@ publish_kernel \ """) } } + + dir("linux/_install_") { + archiveArtifacts("*.json") + } } -node("docker && builder") { +node("docker" && params.NODE_LABEL) { def j = new Job() - def k = new Kernel() def kci_core = "${env.WORKSPACE}/kernelci-core" def kdir = "${env.WORKSPACE}/linux" def docker_image = null @@ -135,7 +141,13 @@ node("docker && builder") { j.dockerPullWithRetry(docker_image).inside() { stage("Init") { timeout(time: 30, unit: 'MINUTES') { - k.downloadTarball(kdir, params.SRC_TARBALL) + dir(kci_core) { + sh(script: """./kci_build pull_tarball \ + --kdir ${kdir} \ + --url ${params.SRC_TARBALL} \ + --retries=12 \ + """) + } } } diff --git a/jenkins/stretch-v4l2.jpl b/jenkins/buster-v4l2.jpl index 9ef7b48..c88163b 100644 --- a/jenkins/stretch-v4l2.jpl +++ b/jenkins/buster-v4l2.jpl @@ -11,12 +11,12 @@ DOCKER_BASE def r = new RootFS() -def config = ['name':"stretch-v4l2", +def config = ['name':"buster-v4l2", 'arch_list':["armhf", "arm64", "amd64"], - 'debian_release':"stretch", + 'debian_release':"buster", 'extra_packages':"", 'extra_packages_remove':"bash e2fsprogs e2fslibs", - 'script':"scripts/stretch-v4l2.sh", + 'script':"scripts/buster-v4l2.sh", 'test_overlay': "overlays/v4l2", 'docker_image': "${params.DOCKER_BASE}debos", ] diff --git a/jenkins/debian/debos/scripts/stretch-v4l2.sh b/jenkins/debian/debos/scripts/buster-v4l2.sh index 81015d4..b971274 100755 --- a/jenkins/debian/debos/scripts/stretch-v4l2.sh +++ b/jenkins/debian/debos/scripts/buster-v4l2.sh @@ -66,7 +66,7 @@ cd /tmp rm -rf /tmp/tests apt-get remove --purge -y ${BUILD_DEPS} -apt-get remove --purge -y perl-modules-5.24 +apt-get remove --purge -y perl-modules-5.28 apt-get autoremove --purge -y apt-get clean diff --git a/jenkins/dockerfiles/debos/Dockerfile b/jenkins/dockerfiles/debos/Dockerfile index 69f7010..492ffde 100644 --- a/jenkins/dockerfiles/debos/Dockerfile +++ b/jenkins/dockerfiles/debos/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:stretch-slim +FROM debian:buster-slim ARG DEBIAN_FRONTEND=noninteractive diff --git a/jenkins/kernel-arch-complete.sh b/jenkins/kernel-arch-complete.sh index bb0b40b..cdad9ff 100755 --- a/jenkins/kernel-arch-complete.sh +++ b/jenkins/kernel-arch-complete.sh @@ -121,8 +121,8 @@ if [[ BUILDS_FINISHED -eq 1 ]]; then curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "send_to": ["krzk@kernel.org", "kgene.kim@samsung.com", "fellows@kernelci.org"], "format": ["txt", "html"], "delay": 12600}' ${API}/send elif [ "$TREE_NAME" == "agross" ]; then echo "Sending results to Andy Gross" - curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "send_to": ["agross@codeaurora.org", "fellows@kernelci.org"], "format": ["txt", "html"], "delay": 10}' ${API}/send - curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "send_to": ["agross@codeaurora.org", "fellows@kernelci.org"], "format": ["txt", "html"], "delay": 12600}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "send_to": ["agross@kernel.org", "fellows@kernelci.org"], "format": ["txt", "html"], "delay": 10}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "send_to": ["agross@kernel.org", "fellows@kernelci.org"], "format": ["txt", "html"], "delay": 12600}' ${API}/send elif [ "$TREE_NAME" == "broonie-regmap" ]; then echo "Sending results to Mark Brown" curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "send_to": ["broonie@kernel.org", "fellows@kernelci.org"], "format": ["txt", "html"], "delay": 10}' ${API}/send @@ -151,6 +151,7 @@ if [[ BUILDS_FINISHED -eq 1 ]]; then echo "Sending results to Ard Biesheuvel" curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "send_to": ["ard.biesheuvel@linaro.org", "fellows@kernelci.org"], "format": ["txt", "html"], "delay": 10}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "send_to": ["ard.biesheuvel@linaro.org", "fellows@kernelci.org"], "format": ["txt", "html"], "delay": 12600}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan: "baseline-uefi", "send_to": ["ard.biesheuvel@linaro.org", "anders.roxell@linaro.org", "fellows@kernelci.org"], "format": ["txt""], "delay": 10}' ${API}/send elif [ "$TREE_NAME" == "evalenti" ]; then echo "Sending results to Eduardo Valentin" curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "send_to": ["edubezval@gmail.com", "fellows@kernelci.org"], "format": ["txt", "html"], "delay": 10}' ${API}/send @@ -179,6 +180,9 @@ if [[ BUILDS_FINISHED -eq 1 ]]; then curl -XPOST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "format": ["txt"], "send_to": ["kernel-team+kernelci@android.com", "gregkh@google.com", "fellows@kernelci.org"], "delay": 12600}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "send_to": ["tom.gall@linaro.org", "sumit.semwal@linaro.org", "amit.pundir@linaro.org", "arnd.bergmann@linaro.org", "anmar.oueja@linaro.org"], "format": ["txt"], "delay": 10}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "send_to": ["tom.gall@linaro.org", "sumit.semwal@linaro.org", "amit.pundir@linaro.org", "arnd.bergmann@linaro.org", "anmar.oueja@linaro.org"], "format": ["txt"], "delay": 12600}' ${API}/send + if [ "$BRANCH" == "android-3.18" ]; then + curl -XPOST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "format": ["txt"], "send_to": ["lee.jones@linaro.org"], "delay": 60}' ${API}/send + fi elif [ "$TREE_NAME" == "mattface" ]; then echo "Sending results to Matt" curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "format": ["txt"], "send_to": ["matt@mattface.org"], "delay": 60}' ${API}/send @@ -190,7 +194,7 @@ if [[ BUILDS_FINISHED -eq 1 ]]; then curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "baseline", "send_to": ["guillaume.tucker@collabora.com"], "format": ["txt"], "delay": 1800}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "v4l2-compliance-vivid", "send_to": ["guillaume.tucker@collabora.com"], "format": ["txt"], "delay": 2700}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "v4l2-compliance-uvc", "send_to": ["guillaume.tucker@collabora.com"], "format": ["txt"], "delay": 3600}' ${API}/send - curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "igt_drm_kms", "send_to": ["guillaume.tucker@collabora.com"], "format": ["txt"], "delay": 3600}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "igt-drm-kms", "send_to": ["guillaume.tucker@collabora.com"], "format": ["txt"], "delay": 3600}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "cros-ec", "send_to": ["guillaume.tucker@collabora.com"], "format": ["txt"], "delay": 3600}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "sleep", "send_to": ["guillaume.tucker@collabora.com"], "format": ["txt"], "delay": 3600}' ${API}/send elif [ "$TREE_NAME" == "tomeu" ]; then @@ -218,14 +222,36 @@ if [[ BUILDS_FINISHED -eq 1 ]]; then echo "Sending results for vireshk's tree" curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "format": ["txt"], "send_to": ["vireshk@kernel.org"], "delay": 60}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "format": ["txt"], "send_to": ["vireshk@kernel.org"], "delay": 2700}' ${API}/send + elif [ "$TREE_NAME" == "sashal" ]; then + echo "Sending results for sashal's tree" + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "format": ["txt"], "send_to": ["sashal@kernel.org", "kernel-build-reports@lists.linaro.org"], "delay": 60}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "format": ["txt"], "send_to": ["sashal@kernel.org", "kernel-build-reports@lists.linaro.org"], "delay": 2700}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "baseline", "send_to": ["sashal@kernel.org", "kernel-build-reports@lists.linaro.org"], "format": ["txt"], "delay": 2700}' ${API}/send + elif [ "$TREE_NAME" == "thermal" ]; then + echo "Sending results for the thermal tree" + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "format": ["txt"], "send_to": ["daniel.lezcano@linaro.org", "kernel-build-reports@lists.linaro.org"], "delay": 60}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "format": ["txt"], "send_to": ["daniel.lezcano@linaro.org", "kernel-build-reports@lists.linaro.org"], "delay": 2700}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "baseline", "send_to": ["daniel.lezcano@linaro.org", "kernel-build-reports@lists.linaro.org"], "format": ["txt"], "delay": 2700}' ${API}/send + elif [ "$TREE_NAME" == "arm64" ]; then + echo "Sending results for the arm64 tree" + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "format": ["txt"], "send_to": ["will@kernel.org", "catalin.marinas@arm.com", "linux-arm-kernel@lists.infradead.org", "kernel-build-reports@lists.linaro.org"], "delay": 60}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "format": ["txt"], "send_to": ["will@kernel.org", "catalin.marinas@arm.com", "linux-arm-kernel@lists.infradead.org", "kernel-build-reports@lists.linaro.org"], "delay": 2700}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "baseline", "send_to": ["will@kernel.org", "catalin.marinas@arm.com", "linux-arm-kernel@lists.infradead.org", "kernel-build-reports@lists.linaro.org"], "format": ["txt"], "delay": 2700}' ${API}/send + elif [ "$TREE_NAME" == "lee" ]; then + echo "Sending results for lee's tree" + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "format": ["txt"], "send_to": ["lee.jones@linaro org", "kernel-build-reports@lists.linaro.org"], "delay": 60}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "format": ["txt"], "send_to": ["lee.jones@linaro org", "kernel-build-reports@lists.linaro.org"], "delay": 2700}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "baseline", "send_to": ["lee.jones@linaro org", "kernel-build-reports@lists.linaro.org"], "format": ["txt"], "delay": 2700}' ${API}/send elif [ "$TREE_NAME" == "kernelci" ]; then echo "Sending results to kernelci folks" curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "build_report": 1, "format": ["txt"], "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "delay": 0}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "boot_report": 1, "format": ["txt"], "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "delay": 1800}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "baseline", "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "format": ["txt"], "delay": 1800}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "baseline-uefi", "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "format": ["txt"], "delay": 1800}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "baseline-fastboot", "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "format": ["txt"], "delay": 1800}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "v4l2-compliance-vivid", "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "format": ["txt"], "delay": 2700}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "v4l2-compliance-uvc", "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "format": ["txt"], "delay": 2700}' ${API}/send - curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "igt_drm_kms", "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "format": ["txt"], "delay": 2700}' ${API}/send + curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "igt-drm-kms", "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "format": ["txt"], "delay": 2700}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "cros-ec", "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "format": ["txt"], "delay": 2700}' ${API}/send curl -X POST -H "Authorization: $EMAIL_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"job": "'$TREE_NAME'", "kernel": "'$GIT_DESCRIBE'", "git_branch": "'$BRANCH'", "report_type": "test", "plan": "sleep", "send_to": ["gtucker@collabora.com", "mgalka@collabora.com", "alexandra.pereira@collabora.com", "dan.rue@linaro.org", "matthew.hart@linaro.org", "broonie@kernel.org", "kernelci@baylibre.com", "anders.roxell@linaro.org"], "format": ["txt"], "delay": 2700}' ${API}/send else diff --git a/jenkins/lava-boot-v2.sh b/jenkins/lava-boot-v2.sh index f8ab5be..7434d07 100755 --- a/jenkins/lava-boot-v2.sh +++ b/jenkins/lava-boot-v2.sh @@ -18,22 +18,22 @@ if [ ${LAB} = "lab-tbaker" ] || [ ${LAB} = "lab-tbaker-dev" ]; then python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp kselftest --token ${API_TOKEN} python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_TBAKER_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-mhart" ] || [ ${LAB} = "lab-mhart-dev" ]; then - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp simple --token ${API_TOKEN} --priority medium + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp simple --token ${API_TOKEN} --priority medium python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_MHART_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-collabora" ] || [ ${LAB} = "lab-collabora-dev" ]; then - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp cros-ec igt_drm_kms kselftest simple sleep usb v4l2-compliance-vivid v4l2-compliance-uvc --token ${API_TOKEN} --priority medium + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp cros-ec igt-drm-kms kselftest simple sleep usb v4l2-compliance-vivid v4l2-compliance-uvc --token ${API_TOKEN} --priority medium python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_COLLABORA_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-baylibre" ]; then - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot boot-kvm boot-kvm-uefi kselftest --token ${API_TOKEN} --priority medium + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline baseline-fastboot boot boot-kvm boot-kvm-uefi kselftest --token ${API_TOKEN} --priority medium python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_BAYLIBRE_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-baylibre-dev" ]; then - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot boot-kvm boot-kvm-uefi kselftest --token ${API_TOKEN} --priority medium + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline baseline-fastboot boot boot-kvm boot-kvm-uefi kselftest --token ${API_TOKEN} --priority medium python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_BAYLIBRE_TOKEN} --lab ${LAB} # for dev lab, also send results to BayLibre kernelCI development backend - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback kernelci-dev-baylibre-callback --callback-url http://kernelci.dev.baylibre.com:8081 --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans simple usb --token ${API_TOKEN} --priority low + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback kernelci-dev-baylibre-callback --callback-url http://kernelci.dev.baylibre.com:8081 --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline simple usb --token ${API_TOKEN} --priority low python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_BAYLIBRE_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-free-electrons" ] || [ ${LAB} = "lab-free-electrons-dev" ]; then - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp --token ${API_TOKEN} --priority medium + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp --token ${API_TOKEN} --priority medium python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_FREE_ELECTRONS_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-broonie" ]; then python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp --token ${API_TOKEN} @@ -42,18 +42,18 @@ elif [ ${LAB} = "lab-embeddedbits" ]; then python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp --token ${API_TOKEN} python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_EMBEDDEDBITS_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-pengutronix" ] || [ ${LAB} = "lab-pengutronix-dev" ]; then - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot boot-kvm boot-kvm-uefi --token ${API_TOKEN} + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline boot boot-kvm boot-kvm-uefi --token ${API_TOKEN} python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_PENGUTRONIX_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-linaro-lkft" ] || [ ${LAB} = "lab-linaro-lkft-dev" ]; then - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot uefi_arm uefi_arm64 uefi_i386 uefi_x86_64 uefi_x86-mixed --token ${API_TOKEN} --priority low + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline baseline-uefi boot --token ${API_TOKEN} --priority low python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_LINARO_LKFT_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-theobroma-systems" ] || [ ${LAB} = "lab-theobroma-systems-dev" ]; then - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot kselftest --token ${API_TOKEN} + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline boot kselftest --token ${API_TOKEN} python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_THEOBROMA_SYSTEMS_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-drue" ] || [ ${LAB} = "lab-drue-dev" ]; then - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp simple sleep --token ${API_TOKEN} --priority medium + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp simple sleep --token ${API_TOKEN} --priority medium python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_DRUE_TOKEN} --lab ${LAB} elif [ ${LAB} = "lab-clabbe" ] || [ ${LAB} = "lab-clabbe-dev" ]; then - python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp simple sleep --token ${API_TOKEN} --priority medium + python lava-v2-jobs-from-api.py --defconfigs ${DEFCONFIG_COUNT} --callback ${CALLBACK} --api ${API} --storage ${STORAGE} --lab ${LAB} --describe ${GIT_DESCRIBE} --tree ${TREE} --branch ${BRANCH} --arch ${ARCH} --plans baseline boot boot-kvm boot-kvm-uefi boot-nfs boot-nfs-mp simple sleep --token ${API_TOKEN} --priority medium python lava-v2-submit-jobs.py --username kernel-ci --jobs ${LAB} --token ${LAVA_CLABBE_TOKEN} --lab ${LAB} fi diff --git a/jenkins/monitor.jpl b/jenkins/monitor.jpl index f82a199..953420e 100644 --- a/jenkins/monitor.jpl +++ b/jenkins/monitor.jpl @@ -49,7 +49,7 @@ def checkConfig(config, kci_core, trees_dir) { def commit = sh( script: """ ${kci_core}/kci_build \ ---build-configs=${kci_core}/build-configs.yaml \ +--yaml-configs=${kci_core}/build-configs.yaml \ check_new_commit \ --config=${config} \ --storage=${params.KCI_STORAGE_URL} \ diff --git a/jenkins/test-runner.jpl b/jenkins/test-runner.jpl new file mode 100644 index 0000000..19daff2 --- /dev/null +++ b/jenkins/test-runner.jpl @@ -0,0 +1,178 @@ +#!/usr/bin/env groovy + +/* + Copyright (C) 2019 Collabora Limited + Author: Guillaume Tucker <guillaume.tucker@collabora.com> + + This module is free software; you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the Free + Software Foundation; either version 2.1 of the License, or (at your option) + any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + details. + + You should have received a copy of the GNU Lesser General Public License + along with this library; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* ---------------------------------------------------------------------------- + * Jenkins parameters + +LABS + Name of the labs where to submit tests +TRIGGER_JOB_NAME + Name of the parent trigger job +TRIGGER_JOB_NUMBER + Number of the parent trigger job +BUILD_JOB_NAME + Name of the job that built the kernel +BUILD_JOB_NUMBER + Number of the job that built the kernel +KCI_CORE_URL (https://github.com/kernelci/kernelci-core.git) + URL of the kernelci-core repository +KCI_CORE_BRANCH (master) + Name of the branch to use in the kernelci-core repository +KCI_STORAGE_URL (https://storage.kernelci.org/) + URL of the KernelCI storage server +DOCKER_BASE (kernelci/build-) + Dockerhub base address used for the build images +CALLBACK_ID (kernel-ci-callback) + Identifier of the callback to look up an authentication token +CALLBACK_URL (https://api.kernelci.org) + Base URL where to send the callbacks +*/ + +@Library('kernelci') _ +import org.kernelci.util.Job + +def getArtifacts(artifacts) +{ + dir(artifacts) { + copyArtifacts( + projectName: params.BUILD_JOB_NAME, + selector: specific("${params.BUILD_JOB_NUMBER}") + ) + + if (params.TRIGGER_JOB_NAME) { + copyArtifacts( + projectName: params.TRIGGER_JOB_NAME, + selector: specific("${params.TRIGGER_JOB_NUMBER}") + ) + } + } +} + +def generateJobs(kci_core, lab, artifacts, jobs_dir) +{ + def token = "${lab}-lava-api" + + dir(kci_core) { + withCredentials([string(credentialsId: token, variable: 'SECRET')]) { + sh(script: """\ +./kci_test \ +generate \ +--bmeta-json=${artifacts}/bmeta.json \ +--dtbs-json=${artifacts}/dtbs.json \ +--lab-json=${artifacts}/${lab}.json \ +--storage=${params.KCI_STORAGE_URL} \ +--lab=${lab} \ +--user=kernel-ci \ +--token=${SECRET} \ +--output=${jobs_dir} \ +--callback-id=${params.CALLBACK_ID} \ +--callback-url=${params.CALLBACK_URL} \ +""") + } + } +} + +def submitJobs(kci_core, lab, jobs_dir) +{ + def token = "${lab}-lava-api" + + dir(kci_core) { + withCredentials([string(credentialsId: token, variable: 'SECRET')]) { + sh(script: """\ +./kci_test \ +submit \ +--lab=${lab} \ +--user=kernel-ci \ +--token=${SECRET} \ +--jobs=${jobs_dir}/* \ +""") + } + } +} + +node("docker && test-runner") { + def j = new Job() + def kci_core = "${env.WORKSPACE}/kernelci-core" + def jobs_dir = "${env.WORKSPACE}/jobs" + def artifacts = "${env.WORKSPACE}/artifacts" + def docker_image = "${params.DOCKER_BASE}base" + def labs = params.LABS.tokenize(' ') + def labs_submit = [] + + print("""\ + Labs: ${params.LABS} + Container: ${docker_image}""") + + j.dockerPullWithRetry(docker_image).inside() { + stage("Init") { + sh(script: "rm -rf ${artifacts}") + sh(script: "rm -rf ${jobs_dir}") + + timeout(time: 15, unit: 'MINUTES') { + parallel( + kci_core: { + j.cloneKciCore( + kci_core, + params.KCI_CORE_URL, params.KCI_CORE_BRANCH) + }, + artifacts: { + getArtifacts(artifacts) + }, + ) + } + + print("Artifacts:") + sh(script: "ls -l ${artifacts}") + + print("Build meta-data:") + sh(script: "cat ${artifacts}/bmeta.json") + } + + stage("Generate") { + for (lab in labs) { + def lab_dir = "${jobs_dir}/${lab}" + generateJobs(kci_core, lab, artifacts, lab_dir) + labs_submit.add(lab) + } + } + + stage("Submit") { + def steps = [:] + def i = 0 + + for (lab in labs_submit) { + def lab_name = "${lab}" + def lab_dir = "${jobs_dir}/${lab}" + def step_name = "${i} ${lab}" + + print(step_name) + + steps[step_name] = { + submitJobs(kci_core, lab_name, lab_dir) + } + + i += 1 + } + + parallel(steps) + } + } +} |