aboutsummaryrefslogtreecommitdiff
path: root/tcwg_bmk_ci_gnu_testing.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'tcwg_bmk_ci_gnu_testing.yaml')
-rw-r--r--tcwg_bmk_ci_gnu_testing.yaml596
1 files changed, 596 insertions, 0 deletions
diff --git a/tcwg_bmk_ci_gnu_testing.yaml b/tcwg_bmk_ci_gnu_testing.yaml
new file mode 100644
index 0000000000..1b068948ae
--- /dev/null
+++ b/tcwg_bmk_ci_gnu_testing.yaml
@@ -0,0 +1,596 @@
+- project:
+ name: tcwg_bmk_ci_gnu_testing
+ binutils_url: git://sourceware.org/git/binutils-gdb.git
+ gcc_url: https://github.com/gcc-mirror/gcc.git
+ linux_url: https://git.linaro.org/kernel-org/linux-stable.git
+ linux_branch: refs/heads/linux-rolling-stable
+ glibc_url: git://sourceware.org/git/glibc.git
+ hw:
+ - fx:
+ target: aarch64
+ - sq:
+ target: aarch64
+ toolchain_name: gnu
+ components: binutils gcc glibc linux
+ bmk:
+ - spec2k6
+ cflags:
+ - Os
+ jobs:
+ - 'tcwg_bmk_ci_gnu_testing-master'
+ exclude:
+ - hw: fx
+ cflags: Os
+ - hw: fx
+ cflags: Os_LTO
+ - hw: fx
+ cflags: Oz
+ - hw: fx
+ cflags: Oz_LTO
+ - hw: fx
+ cflags: O2_LTO
+ - hw: fx
+ cflags: O3_LTO
+ - hw: sq
+ cflags: Os_LTO
+ - hw: sq
+ cflags: Oz
+ - hw: sq
+ cflags: Oz_LTO
+ - hw: sq
+ cflags: O2
+ - hw: sq
+ cflags: O2_LTO
+ - hw: sq
+ cflags: O3
+ - hw: sq
+ cflags: O3_LTO
+ - hw: apm
+ cflags: O2
+ - hw: apm
+ cflags: O2_LTO
+ - hw: apm
+ cflags: O3
+ - hw: apm
+ cflags: O3_LTO
+ - hw: tk1
+ cflags: Os
+ - hw: tk1
+ cflags: Os_LTO
+ - hw: tk1
+ cflags: Oz
+ - hw: tk1
+ cflags: Oz_LTO
+ - hw: tx1
+ cflags: Os
+ - hw: tx1
+ cflags: Os_LTO
+ - hw: tx1
+ cflags: Oz
+ - hw: tx1
+ cflags: Oz_LTO
+
+- job-group:
+ name: tcwg_bmk_ci_gnu_testing-master
+ toolchain_ver: master
+ binutils_branch: refs/heads/master
+ gcc_branch: refs/heads/master
+ glibc_branch: refs/heads/master
+ distro: lts
+ cron_schedule: 'H H H/3 * *'
+ jobs:
+ - 'tcwg_bmk_ci_gnu_testing-build-tcwg_bmk_{hw}-gnu-{toolchain_ver}-{target}-{bmk}-{cflags}'
+ - 'tcwg_bmk_ci_gnu_testing-bisect-tcwg_bmk_{hw}-gnu-{toolchain_ver}-{target}-{bmk}-{cflags}'
+
+
+- view:
+ name: tcwg_bmk_ci_gnu_testing
+ view-type: list
+ regex: 'tcwg_bmk_ci_gnu_testing-build-.*'
+
+#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
+
+- scm:
+ name: bmk-scripts
+ scm:
+ - git:
+ url: https://git.linaro.org/toolchain/bmk-scripts.git
+ refspec: +refs/heads/*:refs/remotes/origin/* +refs/changes/*:refs/changes/*
+ branches:
+ - $bmk_branch
+ basedir: bmk-scripts
+ skip-tag: true
+ reference-repo: /home/tcwg-buildslave/snapshots-ref/bmk-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 and selects benchmarking hardware"
+ - 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: laurent
+ description: 'Scripts revision to use'
+ - string:
+ name: bmk_branch
+ default: laurent
+ description: 'Benchmark 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: gcc
+ default_git: '{default_git}'
+ - component-parameters:
+ component: glibc
+ default_git: '{default_git}'
+ - component-parameters:
+ component: linux
+ 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: gcc
+ url: '{gcc_url}'
+ branch: '{gcc_branch}'
+ reference: gcc.git
+ - component-scm:
+ component: glibc
+ url: '{glibc_url}'
+ branch: '{glibc_branch}'
+ reference: glibc.git
+ - component-scm:
+ component: linux
+ url: '{linux_url}'
+ branch: '{linux_branch}'
+ reference: linux.git
+ - bmk-scripts
+
+- 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
+ echo "bmk_branch=$bmk_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#.*<inQueue>\(.*\)</inQueue>.*#\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 \
+ --ssh_info true \
+ -- \
+ ./jenkins-scripts/{build_script} \
+ %% artifacts/jenkins/manifest.sh \
+ ==rr[ci_project] $ci_project \
+ ==rr[ci_config] $ci_config \
+ $extra_build_params \
+ --bmk_branch "$bmk_branch" \
+ --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, laurent.alfonsi@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 \
+ --ssh_info true \
+ -- \
+ ./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 \
+ --bmk_branch "$bmk_branch" \
+ --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_bmk_ci_gnu_testing-build-tcwg_bmk_{hw}-gnu-{toolchain_ver}-{target}-{bmk}-{cflags}
+ project-type: freestyle
+ defaults: global
+ properties:
+ - default-properties
+ - build-blocker:
+ blocking-jobs:
+ - "tcwg_bmk_ci_gnu_testing-bisect-tcwg_bmk_{hw}-gnu-{toolchain_ver}-{target}-{bmk}-{cflags}"
+ queue-scanning: 'ALL'
+ parameters:
+ - build-parameters:
+ ci_project: 'tcwg_bmk_gnu_{hw}'
+ ci_config: 'gnu-{toolchain_ver}-{target}-{bmk}-{cflags}'
+ default_git: 'default'
+ distro: '{distro}'
+ disabled: false
+ node: tcwg-x86_64-build_bmk
+ concurrent: false
+ display-name: 'TCWG Build tcwg_bmk_{hw}/gnu-{toolchain_ver}-{target}-{bmk}-{cflags}'
+ workspace: workspace/tcwg_bmk_$EXECUTOR_NUMBER
+ scm:
+ - build-scms:
+ binutils_url: '{binutils_url}'
+ binutils_branch: '{binutils_branch}'
+ gcc_url: '{gcc_url}'
+ gcc_branch: '{gcc_branch}'
+ linux_url: '{linux_url}'
+ linux_branch: '{linux_branch}'
+ glibc_url: '{glibc_url}'
+ glibc_branch: '{glibc_branch}'
+ triggers:
+ - pollscm:
+ cron: '{cron_schedule}'
+ wrappers:
+ - build-wrappers:
+ timeout: 600
+ builders:
+ - run-build:
+ build_script: 'tcwg_bmk-build.sh'
+ components: '{components}'
+ rr_project: 'tcwg_bmk_ci_gnu_testing'
+ job_suffix: '-tcwg_bmk_{hw}-gnu-{toolchain_ver}-{target}-{bmk}-{cflags}'
+ publishers:
+ - build-publishers
+
+- job-template:
+ name: tcwg_bmk_ci_gnu_testing-bisect-tcwg_bmk_{hw}-gnu-{toolchain_ver}-{target}-{bmk}-{cflags}
+ 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_bmk_ci_gnu_testing-bisect-tcwg_bmk_{hw}-gnu-.*"
+ queue-scanning: 'BUILDABLE'
+ parameters:
+ - bisect-parameters:
+ ci_project: 'tcwg_bmk_gnu_{hw}'
+ ci_config: 'gnu-{toolchain_ver}-{target}-{bmk}-{cflags}'
+ distro: '{distro}'
+ disabled: false
+ node: tcwg-x86_64-build_bmk
+ concurrent: false
+ display-name: 'TCWG Bisect tcwg_bmk_{hw}/gnu-{toolchain_ver}-{target}-{bmk}-{cflags}'
+ workspace: workspace/tcwg_bmk_$EXECUTOR_NUMBER
+ scm:
+ - jenkins-scripts
+ - bmk-scripts
+ wrappers:
+ - bisect-wrappers:
+ timeout: 2880
+ builders:
+ - run-bisect:
+ build_script: 'tcwg_bmk-build.sh'
+ rr_project: 'tcwg_bmk_ci_gnu_testing'
+ job_suffix: '-tcwg_bmk_{hw}-gnu-{toolchain_ver}-{target}-{bmk}-{cflags}'
+ publishers:
+ - bisect-publishers