# Auto generated by ./tcwg/generate-yamlfiles.sh from tcwg_kernel.yaml.in and tcwg_kernel/tcwg_kernel-llvm.def. Do not edit. # Beware: git branch names need the 'refs/heads/' prefix, while tags need 'refs/tags/' - project: name: tcwg_kernel-llvm toolchain_name: llvm components: binutils linux llvm qemu binutils_url: git://sourceware.org/git/binutils-gdb.git llvm_url: https://github.com/llvm/llvm-project.git qemu_url: https://gitlab.com/qemu-project/qemu.git toolchain_ver: - master: binutils_branch: refs/heads/master llvm_branch: refs/heads/main qemu_branch: refs/heads/master distro: lts - release: binutils_branch: refs/heads/binutils-2_37-branch llvm_branch: refs/heads/release/13.x qemu_branch: refs/heads/master distro: lts_1 target: - aarch64 - arm linux: - next: linux_url: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git linux_branch: refs/heads/master - mainline: linux_url: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux_branch: refs/heads/master - stable: linux_url: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git linux_branch: refs/heads/linux-rolling-stable - lts: linux_url: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git linux_branch: refs/heads/linux-rolling-lts linux_config: - defconfig - allmodconfig - allyesconfig - allnoconfig jobs: - 'tcwg_kernel-llvm-build-{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config}' - 'tcwg_kernel-llvm-bisect-{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config}' - view: name: tcwg_kernel-llvm view-type: list regex: 'tcwg_kernel-llvm.*' #BEGIN: tcwg/round-robin.yaml.inc # -*- mode: Yaml -*- #BEGIN: tcwg/default.yaml.inc # -*- mode: Yaml -*- - property: name: default-properties properties: - authorization: anonymous: - job-read - job-extended-read linaro: - job-build - job-cancel - build-discarder: days-to-keep: 30 num-to-keep: 30 - scm: name: jenkins-scripts scm: - git: url: https://git.linaro.org/toolchain/jenkins-scripts.git refspec: +refs/heads/*:refs/remotes/origin/* +refs/changes/*:refs/changes/* branches: - $scripts_branch basedir: jenkins-scripts skip-tag: true reference-repo: /home/tcwg-buildslave/snapshots-ref/jenkins-scripts.git wipe-workspace: false clean: before: true prune: true #END: tcwg/default.yaml.inc - parameter: name: default-parameters parameters: - string: name: ci_project default: '{ci_project}' description: "CI project ID; used as namespace for git branches" - string: name: ci_config default: '{ci_config}' description: "CI configuration ID; used as name of git branches and selects build flags" - string: name: extra_build_params default: "" description: "Extra parameters to pass to the build script; can be used to override settings extracted from ci_project/ci_config" - string: name: mail_recipients default: default description: "Comma-separated list of email recipients" - string: name: distro default: '{distro}' description: 'Distro image to use' - string: name: scripts_branch default: master description: 'Scripts revision to use' - parameter: name: component-parameters parameters: - string: name: '{component}_git' default: '{default_git}' description: "{component} git_url#branch/sha1 to build, or 'default', 'baseline' or 'jenkins-scm'" - parameter: name: build-parameters parameters: - component-parameters: component: binutils default_git: '{default_git}' - component-parameters: component: linux default_git: '{default_git}' - component-parameters: component: llvm default_git: '{default_git}' - component-parameters: component: qemu default_git: '{default_git}' - choice: name: update_baseline choices: - update - reset - init - push description: "What to do with baseline in this build" - default-parameters: ci_project: '{ci_project}' ci_config: '{ci_config}' distro: '{distro}' # Beware: git branch names need the 'refs/heads/' prefix while tags # need 'refs/tags/'. - scm: name: component-scm scm: - git: url: '{url}' branches: - '{branch}' basedir: '{component}' skip-tag: true reference-repo: '/home/tcwg-buildslave/snapshots-ref/{reference}' wipe-workspace: false clean: before: true prune: true # SCMs must start with jenkins-scripts and then be ordered alphabetically. # Same alphabetical order must be followed in .def files. The reason behind # this is that jenkins sets $GIT_COMMIT to sha1 of jenkins-scripts, and then # sets $GIT_COMMIT_1, $GIT_COMMIT_2, etc. to sha1s of component SCM /in the # order that they are declared here/. - scm: name: build-scms scm: - jenkins-scripts - component-scm: component: binutils url: '{binutils_url}' branch: '{binutils_branch}' reference: binutils-gdb.git - component-scm: component: linux url: '{linux_url}' branch: '{linux_branch}' reference: linux.git - component-scm: component: llvm url: '{llvm_url}' branch: '{llvm_branch}' reference: llvm-project.git - component-scm: component: qemu url: '{qemu_url}' branch: '{qemu_branch}' reference: qemu.git - wrapper: name: build-wrappers wrappers: - timeout: timeout: '{timeout}' - timestamps - ssh-agent-credentials: # tcwg-buildslave user id users: - 'e0958a95-204f-4c14-a66c-5e2be6c5d50a' - builder: name: trigger-followup-builds builders: - build-name-setter: name: 'artifacts/jenkins/build-name' file: true - conditional-step: # Only run if above succeeded # (a failed build is indicated by artifacts/failed) condition-kind: current-status steps: - shell: | #!/bin/bash set -ex for i in artifacts/trigger-build-* artifacts/trigger-bisect; do if [ -f $i ]; then echo "ci_project=$ci_project" >> $i echo "ci_config=$ci_config" >> $i echo "mail_recipients=$mail_recipients" >> $i echo "distro=$distro" >> $i echo "scripts_branch=$scripts_branch" >> $i fi done - trigger-builds: - project: '{rr_project}-build{job_suffix}' parameter-factories: - factory: filebuild file-pattern: artifacts/trigger-build-* - project: '{rr_project}-bisect{job_suffix}' property-file: artifacts/trigger-bisect - shell: command: | #!/bin/bash if [ -f artifacts/failed ]; then exit $(cat artifacts/failed) fi unstable-return: 125 - builder: name: run-build builders: - shell: command: | #!/bin/bash set -ex # Delete artifacts now to avoid re-using stale artifacts if # below docker-run.sh fails to start up a container. rm -rf artifacts/ mkdir -p artifacts/jenkins dryruncmd="" # Skip SCM-triggered builds if there are other builds in # the queue. We need to process all pending bisection-triggered # builds before fetching a new batch of upstream changes. if [ x"${{BUILD_CAUSE_SCMTRIGGER-false}}" = x"true" ]; then inQueue=$(curl -s "${{JOB_URL}}api/xml?tree=inQueue" \ | sed -e "s#.*\(.*\).*#\1#") if [ x"$inQueue" = x"true" ]; then dryruncmd="echo SKIPPING SCM BUILD:" touch artifacts/jenkins/skip-scm-build fi fi build_name="#$BUILD_NUMBER" branch_opt="" # 1 to skip jenkins-scripts i=1 for c in {components}; do eval "g=\$$$${{c}}_git" if [ x"$g" = x"default" ]; then if [ x"${{BUILD_CAUSE_SCMTRIGGER-false}}" = x"true" ]; then g="jenkins-scm" else g="baseline" fi fi if [ x"$g" = x"jenkins-scm" ]; then eval "g=\$GIT_URL_$i#\$GIT_COMMIT_$i" fi i=$(($i+1)) if [ x"$g" != x"baseline" ]; then build_name="$build_name-$c" branch_opt="$branch_opt ==rr[${{c}}_git] $g" fi done $dryruncmd \ ./jenkins-scripts/docker-run.sh \ --distro $distro \ -- \ ./jenkins-scripts/{build_script} \ %% artifacts/jenkins/manifest.sh \ ==rr[ci_project] $ci_project \ ==rr[ci_config] $ci_config \ $extra_build_params \ --scripts_branch "$scripts_branch" \ $branch_opt \ ==rr[mode] "jenkins-full" \ ==rr[update_baseline] "$update_baseline" \ --BUILD_URL "$BUILD_URL" & res=0 && wait $! || res=$? if [ $res != 0 ]; then echo $res > artifacts/failed fi if [ -f artifacts/jenkins/skip-scm-build ]; then build_name="$build_name-skip-scm-build" fi if [ -f artifacts/results ]; then build_name="$build_name-R$(tail -n1 artifacts/results)" fi if [ x"$update_baseline" != x"update" ]; then build_name="$build_name-$update_baseline" fi if [ -f artifacts/trigger-bisect ]; then build_name="$build_name-trigger-bisect" fi echo "$build_name" > artifacts/jenkins/build-name # If we didn't run the docker command if [ -n "$dryruncmd" ]; then # Mark build unstable aka a skipped config exit 125 fi unstable-return: 125 - trigger-followup-builds: rr_project: '{rr_project}' job_suffix: '{job_suffix}' - publisher: name: build-publishers publishers: - archive: artifacts: 'artifacts/**' latest-only: false - parameter: name: bisect-parameters parameters: - string: name: current_project default: "" description: "Project to bisect" - string: name: bad_git default: "" description: "Bad git_url#branch/SHA1" - file: name: jenkins-scripts/replay_log description: "Replay part of bisect using provided bisect log" - default-parameters: ci_project: '{ci_project}' ci_config: '{ci_config}' distro: '{distro}' - wrapper: name: bisect-wrappers wrappers: - build-wrappers: timeout: '{timeout}' - credentials-binding: - text: credential-id: TCWG_JIRA_TOKEN variable: TCWG_JIRA_TOKEN - builder: name: run-bisect builders: - shell: command: | #!/bin/bash set -ex # Delete artifacts now to avoid re-using stale artifacts if # below docker-run.sh fails to start up a container. rm -rf artifacts/ mkdir -p artifacts/jenkins build_name="#$BUILD_NUMBER-$current_project" echo "$build_name" > artifacts/jenkins/build-name # artifacts/jenkins/mail-*.txt will be overwritten in successful builds. echo "maxim.kuvyrkov@linaro.org" > artifacts/jenkins/mail-recipients.txt echo "[TCWG CI] Bisect failed" > artifacts/jenkins/mail-subject.txt echo "Bisect $BUILD_URL failed" > artifacts/jenkins/mail-body.txt ./jenkins-scripts/docker-run.sh \ --distro $distro \ -- \ ./jenkins-scripts/round-robin-bisect.sh \ %% artifacts/manifests/bisect.sh \ --BUILD_URL "$BUILD_URL" \ --current_project "$current_project" \ --bad_git "$bad_git" \ --replay_log "$(pwd)/jenkins-scripts/replay_log" \ --build_script "./jenkins-scripts/{build_script}" \ __TCWG_JIRA_TOKEN "$TCWG_JIRA_TOKEN" \ -- \ ==rr[ci_project] $ci_project \ ==rr[ci_config] $ci_config \ $extra_build_params \ --scripts_branch "$scripts_branch" & res=0 && wait $! || res=$? if [ $res != 0 ]; then echo $res > artifacts/failed fi if [ x"$mail_recipients" != x"default" ]; then echo "$mail_recipients" > artifacts/jenkins/mail-recipients.txt fi unstable-return: 125 - trigger-followup-builds: rr_project: '{rr_project}' job_suffix: '{job_suffix}' - publisher: name: bisect-publishers publishers: - build-publishers - email-ext: # Strangely, we no longer need to double-{ ${FILE} macro in # recipients and body sections. They appear to bypass # job-template expansion. recipients: | ${FILE,path="artifacts/jenkins/mail-recipients.txt"} subject: | ${FILE,path="artifacts/jenkins/mail-subject.txt"} content-type: text body: | ${FILE,path="artifacts/jenkins/mail-body.txt"} failure: true success: true aborted: true send-to: - recipients #END: tcwg/round-robin.yaml.inc - job-template: name: tcwg_kernel-llvm-build-{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config} project-type: freestyle defaults: global properties: - default-properties - build-blocker: blocking-jobs: - "tcwg_kernel-llvm-bisect-{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config}" queue-scanning: 'ALL' parameters: - build-parameters: ci_project: 'tcwg_kernel' ci_config: '{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config}' default_git: 'default' distro: '{distro}' disabled: false node: tcwg-x86_64-build concurrent: false display-name: 'TCWG Build tcwg_kernel/{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config}' workspace: workspace/tcwg_kernel_$EXECUTOR_NUMBER scm: - build-scms: binutils_url: '{binutils_url}' binutils_branch: '{binutils_branch}' llvm_url: '{llvm_url}' llvm_branch: '{llvm_branch}' qemu_url: '{qemu_url}' qemu_branch: '{qemu_branch}' linux_url: '{linux_url}' linux_branch: '{linux_branch}' triggers: - pollscm: cron: 'H H H/4 * *' wrappers: - build-wrappers: timeout: 600 builders: - run-build: build_script: 'tcwg_kernel-build.sh' components: '{components}' rr_project: 'tcwg_kernel-llvm' job_suffix: '-{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config}' publishers: - build-publishers - job-template: name: tcwg_kernel-llvm-bisect-{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config} project-type: freestyle defaults: global properties: - default-properties - build-blocker: # Run at most 1 bisect job for all configurations. # Bisect jobs can easily run for 5+ hours, and a few of them # can hog the entire TCWG build farm for a long time. Since # same regression tends to appear in multiple configurations, # run bisections for all configurations in-order. blocking-jobs: - "tcwg_kernel-.*-bisect-.*" queue-scanning: 'BUILDABLE' parameters: - bisect-parameters: ci_project: 'tcwg_kernel' ci_config: '{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config}' distro: '{distro}' disabled: false node: tcwg-x86_64-build concurrent: false display-name: 'TCWG Bisect tcwg_kernel/{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config}' workspace: workspace/tcwg_kernel_$EXECUTOR_NUMBER scm: - jenkins-scripts wrappers: - bisect-wrappers: timeout: 1440 builders: - run-bisect: build_script: 'tcwg_kernel-build.sh' rr_project: 'tcwg_kernel-llvm' job_suffix: '-{toolchain_name}-{toolchain_ver}-{target}-{linux}-{linux_config}' publishers: - bisect-publishers # checksum: 606988665c3f63b7ceaec367c64eb14e