# Auto generated by ./tcwg/generate-yamlfiles.sh from tcwg_bmk.yaml.in and tcwg_bmk/tcwg_bmk-code_size-cpu2017rate--gnu.def. Do not edit.
# Beware: git branch names need the 'refs/heads/' prefix, while tags need 'refs/tags/'
- project:
    name: tcwg_bmk-code_size-cpu2017rate-gnu
    binutils_url: git://sourceware.org/git/binutils-gdb.git
    gcc_url: git+ssh://linaroci@gcc.gnu.org/git/gcc.git
    linux_url: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable.git
    linux_branch: linux-rolling-stable
    glibc_url: git://sourceware.org/git/glibc.git

    toolchain_name: gnu

    # BMK defined in def files
    bmk:
      - cpu2017rate

    target:
      - arm


    # PROFILE_NAME defined in def files
    cflags:
      - O2
      - O2_LTO
      - Os
      - Os_LTO

    jobs:
      - 'tcwg_bmk-gnu-master'


- job-group:
    name: tcwg_bmk-gnu-master
    toolchain_ver: master
    binutils_branch: master
    gcc_branch: master
    glibc_branch: master
    distro: default
    cron_schedule: 'H H H/3 * *'
    jobs:
      - 'tcwg_bmk-code_size-cpu2017rate--gnu-{target}-{toolchain_ver}-{cflags}-build'
      - 'tcwg_bmk-code_size-cpu2017rate--gnu-{target}-{toolchain_ver}-{cflags}-bisect'
    ci_project: 'tcwg_bmk-code_size-cpu2017rate'
    ci_config: 'gnu-{target}-{toolchain_ver}-{cflags}'

#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
          everyone-flat:
            - job-build
            - job-cancel
      - build-discarder:
          days-to-keep: 20

- scm:
    name: jenkins-scripts
    scm:
      - git:
          url: https://gitlab.com/LinaroLtd/tcwg/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://gitlab.com/LinaroLtd/tcwg/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: 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: distro
          default: '{distro}'
          description: 'Distro image to use'
      - string:
          name: scripts_branch
          default: master
          description: 'Scripts revision to use'
      - string:
          name: bmk_branch
          default: master
          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', or pw://series/<id> to build with patches from patchwork ('precommit' mode, use 'pw://series/<id>/retrigger/' to force a rebuild)"

- parameter:
    name: all-component-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}'

- parameter:
    name: build-parameters
    parameters:
      - all-component-parameters:
          default_git: '{default_git}'
      - choice:
          name: update_baseline
          choices:
            - onsuccess
            - force
            - init
            - ignore
          description: "What to do with baseline in this build"
      - choice:
          name: notify
          choices:
            - ignore
            - onregression
            - precommit
          description: "Whether to notify developers about the result of this build"
      - string:
          name: rr_stage
          default: build
          description: "Describe the current round-robin stage for this run (informative only)"
      - default-parameters:
          distro: '{distro}'


- property:
    name: build-properties
    properties:
      - default-properties
      - build-blocker:
          blocking-jobs:
            - '{ci_project}--{ci_config}-bisect'
          queue-scanning: 'ALL'


- property:
    name: bisect-properties
    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:
            # We can't have same regressions between GNU and LLVM toolchains,
            # do allow parallel bisections of those.
            - '{ci_project}--gnu-.*-bisect'
          queue-scanning: 'BUILDABLE'

# Beware: git branch names need the 'refs/heads/' prefix while tags
# need 'refs/tags/'.
- scm:
    name: component-scm
    scm:
        - git:
            url: '{url}'
            branches:
              - 'refs/heads/{branch}'
            basedir: '{component}'
            do-not-fetch-tags: true
            reference-repo: '/home/tcwg-buildslave/snapshots-ref/{reference}'
            refspec: '+refs/heads/{branch}:refs/remotes/origin/{branch}'
            shallow-clone: true
            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

- wrapper:
    name: build-wrappers
    wrappers:
      - timeout:
          timeout: '{timeout}'
      - timestamps
      - ssh-agent-credentials:
          # tcwg-buildslave user id
          users:
            - 'e0958a95-204f-4c14-a66c-5e2be6c5d50a'
            - 'tcwg-buildslave-20220725'
      - credentials-binding:
          - text:
              credential-id: TCWG_JIRA_TOKEN
              variable: TCWG_JIRA_TOKEN

- builder:
    name: trigger-followup-builds-1
    builders:
      - shell: |
          #!/bin/bash
          source artifacts/jenkins/run-build.env
          set -ex

          for i in artifacts/trigger-build-* artifacts/trigger-bisect; do
            if [ -f $i ]; then
              echo "distro=$distro" >> $i
              echo "scripts_branch=$scripts_branch" >> $i
              echo "bmk_branch=$bmk_branch" >> $i
            fi
          done

          trap "" EXIT

- builder:
    name: trigger-followup-builds-2
    builders:
      - trigger-builds:
          - project: '{ci_project}--{ci_config}-build'
            parameter-factories:
              - factory: filebuild
                file-pattern: artifacts/trigger-build-*
          - project: '{ci_project}--{ci_config}-bisect'
            property-file: artifacts/trigger-bisect

- builder:
    name: run-build-notify
    builders:
      - shell: |
          #!/bin/bash
          source artifacts/jenkins/run-build.env
          set -ex

          if [ -f artifacts/failed ]; then
            # Only send notifications for forced successful
            # (aka "onregression") builds; never for failed builds.
            echo "Build failed. Using option notify=ignore."
            notify=ignore
          fi

          # Basic notification -- create entry in interesting-commits.
          # Note that we add --notify to the manifest -- we will need this
          # later in round-robin-baseline.sh when re-writing history
          # to update notifications files in interesting-commits and jira.
          build_container_exec \
            ./jenkins-scripts/rr/round-robin-notify.sh \
            @@rr[top_artifacts] artifacts --notify "$notify" \
            __stage init __verbose true \
            __build_script {build_script} \
            &> ./artifacts/jenkins/notify-init.log &

          if ! wait $!; then
            echo "maxim.kuvyrkov@linaro.org, laurent.alfonsi@linaro.org" \
              > artifacts/jenkins/error-mail-recipients.txt
            echo -e "$BUILD_URL\nERROR: notify-init failed\n" \
              >> artifacts/jenkins/error-mail-body.txt
            echo "ERROR: notify-init failed"
            exit 1
          fi

          # Full notification
          echo "NOTE: Notify developers about this build"

          build_container_exec \
            ./jenkins-scripts/rr/round-robin-notify.sh \
            @@rr[top_artifacts] artifacts __stage full __verbose true \
            __build_script {build_script} \
            &> ./artifacts/jenkins/notify-full.log &

          if ! wait $!; then
            echo "maxim.kuvyrkov@linaro.org, laurent.alfonsi@linaro.org" \
              > artifacts/jenkins/error-mail-recipients.txt
            echo -e "$BUILD_URL\nERROR: notify-full failed\n" \
              >> artifacts/jenkins/error-mail-body.txt
            echo "ERROR: notify-full failed"
          fi

          # Failsafe for avoid spamming developers.
          if [ "$notify" = "ignore" ] \
            && [ -f artifacts/jenkins/mail-recipients.txt ]; then
            echo "maxim.kuvyrkov@linaro.org, laurent.alfonsi@linaro.org" \
              > artifacts/jenkins/error-mail-recipients.txt
            echo -e "$BUILD_URL\nERROR: tried to unexpectedly notify developers\n" \
              >> artifacts/jenkins/error-mail-body.txt
            mv artifacts/jenkins/mail-recipients.txt \
            artifacts/jenkins/mail-recipients.bak
          fi

          trap "" EXIT

- builder:
    name: run-exit-on-failure
    builders:
      - shell: |
          #!/bin/bash
          source artifacts/jenkins/run-build.env
          set -ex

          if [ -f artifacts/failed ]; then
            # Mark failed build as FAILURE; no further steps will run.
            exit $(cat artifacts/failed)
          fi
          # Only successful builds run beyond this point.

          trap "" EXIT

- builder:
    name: run-push-baseline
    builders:
      - shell: |
          #!/bin/bash
          source artifacts/jenkins/run-build.env
          set -ex

          # Update baseline branch of base-artifacts.
          # If we made it this far, then the build is successful
          # (possibly because it was forced to be declared successful).
          if [ "$update_baseline" = "ignore" ]; then
            trap "" EXIT
            exit 0
          fi

          # We may need jira token while rewriting history.
          if [ -f $HOME/.jipdate.yml ]; then
            (
              # BE CAREFUL WITH TCWG_JIRA_TOKEN
              set +x
              build_container_exec \
                sed -i -e "s/#TCWG_JIRA_TOKEN#/$TCWG_JIRA_TOKEN/" \
                "$HOME/.jipdate.yml"
            )
          fi

          build_container_exec \
            ./jenkins-scripts/rr/round-robin-baseline.sh \
            @@rr[top_artifacts] artifacts \
            __build_script {build_script} \
            __push_base_artifacts true \
            __rewrite_base_artifacts true \
            __commit_artifacts {commit_artifacts} \
            __rewrite_num 100 \
            &> ./artifacts/jenkins/rewrite-{commit_artifacts}.log &

          res=0 && wait $! || res=$?

          # Compress big files in artifacts/NN-* directories to save disk space
          # on ci.linaro.org.
          find artifacts/ -size +1M ! -name "*.xz" \
            -path "artifacts/[0-9]*" -print0 \
            | xargs -0 -i@ xz -T0 @

          if [ $res != 0 ]; then
            echo "maxim.kuvyrkov@linaro.org, laurent.alfonsi@linaro.org" \
              > artifacts/jenkins/error-mail-recipients.txt
            echo -e "$BUILD_URL\nERROR: round-robin-baseline.sh failed" \
              >> artifacts/jenkins/error-mail-body.txt
            echo "ERROR: round-robin-baseline.sh failed"
            # We have failed to update the baseline, so let's fail and
            # not notify developers.
            exit 1
          fi

          trap "" EXIT

- builder:
    name: run-push-lnt-results
    builders:
     - trigger-builds:
        - project: tcwg-update-lnt-results
          predefined-parameters: |
            ci_project={ci_project}
            ci_config={ci_config}


- builder:
    name: run-build-init
    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"
            echo "$build_name" > artifacts/jenkins/build-name

            git -C jenkins-scripts submodule update --init --remote

            if [ "{precommit}" = "True" ]; then
              cat >> artifacts/jenkins/run-build.env <<EOF
            update_baseline=ignore
            EOF
            fi

            cat >> artifacts/jenkins/run-build.env <<EOF
            build_name="$build_name"
            EOF
          unstable-return: 125

- builder:
    name: run-build-skip-if-queue
    builders:
      - shell:
          command: |
            #!/bin/bash
            source artifacts/jenkins/run-build.env
            set -ex

            # 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.
            # Re. skipping post-commit build if pre-commit queue is
            # not empty -- it's just a favor to pre-commit builds.
            if [ x"${{BUILD_CAUSE_SCMTRIGGER-false}}" = x"true" ] \
              || [ x"${{BUILD_CAUSE_TIMERTRIGGER-false}}" = x"true" ]; then
              for job_type in build; do
                url="${{JOB_URL%-build/}}-$job_type"
                inQueue=$(curl --retry 5 --max-time 5 -s "$url/api/xml?tree=inQueue" \
                  | sed -e "s#.*<inQueue>\(.*\)</inQueue>.*#\1#")
                if [ "$inQueue" = "true" ]; then
                  echo "SKIP SCM BUILD"
                  touch artifacts/jenkins/skip-scm-build
                  build_name="$build_name-skip-scm-build"
                  echo "$build_name" > artifacts/jenkins/build-name

                  # Mark build unstable aka a skipped build
                  exit 125
                fi
              done
            fi

            trap "" EXIT
          unstable-return: 125

- builder:
    name: run-build-start-manifest
    builders:
      - shell:
          command: |
            #!/bin/bash
            source artifacts/jenkins/run-build.env
            set -ex

            repo='ssh://tcwg-buildslave@bkp.tcwglab/home/tcwg-buildslave/base-artifacts/{ci_project}/{ci_config}.git'
            branch='linaro-local/ci/{ci_project}/{ci_config}'
            git_result=$(git ls-remote --heads "$repo" "refs/heads/$branch")
            if [ -d base-artifacts ] && [ "$git_result" != "" ]; then
              git -C base-artifacts fetch "$repo" "refs/heads/$branch" || true
            fi

            docker_opts=(
              --distro $distro
              --ssh_info true
              --node_labels "$NODE_LABELS"
            )

            ./jenkins-scripts/start-container-docker.sh --prefix build_ \
              "${{docker_opts[@]}}" > build_container.sh
            source build_container.sh
            trap "cleanup_all_containers" EXIT

            # Run the build script to fetch base-artifacts/, which are
            # required to fetch baseline sources to apply patches to in
            # pw-apply.sh below.  This also initializes the build manifest
            # with all below settings; we then import this manifest below.
            #
            # The parameter __finish_after makes the build script stop
            # after fetching the baseline and "__" avoids saving this parameter
            # in the manifest, so that we don't see this option in the main
            # run of the build script below.
            build_container_exec \
              ./jenkins-scripts/{build_script} \
              %%rr[top_artifacts] artifacts \
              ==rr[ci_project] '{ci_project}' \
              ==rr[ci_config] '{ci_config}' \
              $extra_build_params \
              --bmk_branch "$bmk_branch" \
              --scripts_branch "$scripts_branch" \
              ==rr[mode] "build" \
              ==rr[update_baseline] "$update_baseline" \
              --BUILD_URL "$BUILD_URL" \
              __finish_at reset_artifacts

            echo "$rr_stage" > artifacts/rr_stage.txt

            cat >> artifacts/jenkins/run-build.env <<EOF
            docker_opts=(${{docker_opts[@]+$(printf "%q$IFS" "${{docker_opts[@]}}")}})
            source build_container.sh
            trap "cleanup_all_containers" EXIT
            EOF

            # Now that we have "trap cleanup_all_containers EXIT" in
            # run-build.env we need to reset the trap at the end of every
            # step to preserve container[s] for the next step.
            trap "" EXIT
          unstable-return: 125

- builder:
    name: run-build-process-params
    builders:
      - shell:
          command: |
            #!/bin/bash
            source artifacts/jenkins/run-build.env
            set -ex

            branch_opt=()
            # 1 to skip jenkins-scripts
            i=1
            for c in binutils gcc glibc linux; do
              eval "g=\$$$${{c}}_git"
              if [ x"$g" = x"default" ]; then
                if [ x"${{BUILD_CAUSE_SCMTRIGGER-false}}" = x"true" ] \
                  || [ x"${{BUILD_CAUSE_TIMERTRIGGER-false}}" = x"true" ]; then
                  g="jenkins-scm"
                else
                  g="baseline"
                fi
              fi
              if [ x"$g" = x"jenkins-scm" ] || [ "$update_baseline" = "init" ]; then
                eval "gb=\$GIT_BRANCH_$i"
                gb=$(echo $gb | sed 's+origin/++')
                eval "g=\$GIT_URL_$i#$gb"
              fi
              i=$(($i+1))

              if [ x"$g" != x"baseline" ]; then
                build_name="$build_name-$c"
                branch_opt+=("==rr[${{c}}_git]" "$g")
              fi
            done

            echo "$build_name" > artifacts/jenkins/build-name

            cat >> artifacts/jenkins/run-build.env <<EOF
            build_name="$build_name"
            branch_opt=(${{branch_opt[@]+$(printf "%q$IFS" "${{branch_opt[@]}}")}})
            EOF

            trap "" EXIT
          unstable-return: 125

- builder:
    name: run-build-main
    builders:
      - shell:
          command: |
            #!/bin/bash
            source artifacts/jenkins/run-build.env
            set -ex

            # Run the build script to from the manifest created above.
            #
            # The parameter __start_at makes the build script start right
            # where the above run finished.  This allows us to use read-only
            # bind-mount for base-artifacts/, which, otherwise, may require
            # multi-gig rsync.
            build_container_exec \
              ./jenkins-scripts/{build_script} \
              @@rr[top_artifacts] artifacts \
              "${{branch_opt[@]}}" \
              __start_at reset_artifacts+ &
            res=0 && wait $! || res=$?

            # Update build_name
            if [ -f artifacts/results ]; then
              build_name="$build_name-R$(tail -n1 artifacts/results)"
            fi
            if [ "$update_baseline" != "onsuccess" ]; 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

            # Everything but 0 and $INTERNAL_FAILURE is an unexpected exit code,
            # so stop here and do nothing else.  From jenkins point of view ...
            # - if $res==0: build is successful, so proceed with all
            #   followup steps -- notify, push, trigger precommit.
            # - if $res==123: build has a regression, so proceed with triggering
            #   followup builds and sending precommit notifications; but stop
            #   before run-push-baseline by checking artifacts/failed.
            # - if $res is anything else: build has an unexpected failure, so
            #   skip the rest of the steps by setting UNSTABLE build status.
            #   This will cause all followup conditional-steps to skip due to
            #   "current-status" condition.
            #
            # See comment before round-robin.sh:check_regression() for details.
            case $res in
              0)
                ;;
              123)
                echo 123 > artifacts/failed
                ;;
              *)
                res=125
                ;;
            esac

            if [ $res = 125 ]; then
              # We had unexpected failure in the build scripts, so can't
              # proceed with triggers and notifications.  Mark this build
              # as UNSTABLE, which will skip all following conditional-steps.
              exit 125
            fi

            cat >> artifacts/jenkins/run-build.env <<EOF
            build_name="$build_name"
            EOF

            trap "" EXIT
          unstable-return: 125

- builder:
    name: run-build-fini
    builders:
      - shell:
          command: |
            #!/bin/bash
            source artifacts/jenkins/run-build.env
            set -ex
            # The "trap cleanup_all_containers EXIT" statement in
            # artifacts/jenkins/run-build.env will remove build and precommit
            # containers.

- builder:
    name: run-build
    builders:
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-build-init:
                precommit: false
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-build-skip-if-queue:
                dummy: dummy
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-build-start-manifest:
                ci_project: '{ci_project}'
                ci_config: '{ci_config}'
                build_script: '{build_script}'
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-build-process-params:
                dummy: dummy
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-push-baseline:
                build_script: '{build_script}'
                commit_artifacts: 'false'
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-build-main:
                build_script: '{build_script}'
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - trigger-followup-builds-1:
                dummy: dummy
            - trigger-followup-builds-2:
                ci_project: '{ci_project}'
                ci_config: '{ci_config}'
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-build-notify:
                build_script: '{build_script}'
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-exit-on-failure:
                dummy: dummy
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-push-baseline:
                build_script: '{build_script}'
                commit_artifacts: 'true'
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-push-lnt-results:
                ci_project: '{ci_project}'
                ci_config: '{ci_config}'
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - run-build-fini:
                dummy: dummy


- publisher:
    name: build-publishers
    publishers:
      - archive:
          artifacts: 'artifacts/**'
          latest-only: false
      - email-ext:
          recipients: |
            ${{FILE,path="artifacts/jenkins/mail-recipients.txt"}}
          reply-to: linaro-toolchain@lists.linaro.org
          subject: |
            ${{FILE,path="artifacts/jenkins/mail-subject.txt"}}
          content-type: text
          body: |
            ${{FILE,path="artifacts/jenkins/mail-body.txt"}}
          failure: {email_on_failure}
          success: {email_on_success}
          aborted: false
          send-to:
            - recipients
      - email-ext:
          recipients: |
            ${{FILE,path="artifacts/jenkins/error-mail-recipients.txt"}}
          body: |
            ${{FILE,path="artifacts/jenkins/error-mail-body.txt"}}
          failure: true
          success: true
          aborted: true
          send-to:
            - recipients

- 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:
          distro: '{distro}'

- wrapper:
    name: bisect-wrappers
    wrappers:
      - build-wrappers:
          timeout: '{timeout}'

- 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

            cat >> artifacts/jenkins/run-build.env <<EOF
            build_name="$build_name"
            EOF

            ./jenkins-scripts/docker-run.sh \
              --distro $distro \
              --ssh_info true \
              --node_labels "$NODE_LABELS" \
              -- \
              ./jenkins-scripts/rr/round-robin-bisect.sh \
              %%rel_artifacts artifacts \
              --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}" \
              -- \
              ==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
          unstable-return: 125
      - build-name-setter:
          name: 'artifacts/jenkins/build-name'
          file: true
      - conditional-step:
          condition-kind: current-status
          steps:
            - trigger-followup-builds-1:
                dummy: dummy
            - trigger-followup-builds-2:
                ci_project: '{ci_project}'
                ci_config: '{ci_config}'
      - conditional-step:
          condition-kind: current-status
          steps:
            - shell: |
                #!/bin/bash
                set -ex

                if [ -f artifacts/failed ]; then
                  # Mark failed build as FAILURE; no further steps will run.
                  exit $(cat artifacts/failed)
                fi

- publisher:
    name: bisect-publishers
    publishers:
      - archive:
          artifacts: 'artifacts/**'
          latest-only: false
      - email-ext:
          recipients: |
            maxim.kuvyrkov@linaro.org, laurent.alfonsi@linaro.org
          failure: true
          success: false
          aborted: true
          send-to:
            - recipients
#END:   tcwg/round-robin.yaml.inc

- job-template:
    name: tcwg_bmk-code_size-cpu2017rate--gnu-{target}-{toolchain_ver}-{cflags}-build
    project-type: freestyle
    defaults: global
    properties:
      - build-properties:
          ci_project: '{ci_project}'
          ci_config: '{ci_config}'
    parameters:
      - build-parameters:
          default_git: 'default'
          distro: '{distro}'
    disabled: false
    node: tcwg-build_bmk && tcwg-armv8_64
    concurrent: false
    display-name: 'TCWG Build {ci_project}--{ci_config}'
    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:
          ci_project: '{ci_project}'
          ci_config: '{ci_config}'
          build_script: 'tcwg_bmk-build.sh'
    publishers:
      - build-publishers:
          email_on_failure: false
          email_on_success: true

- job-template:
    name: tcwg_bmk-code_size-cpu2017rate--gnu-{target}-{toolchain_ver}-{cflags}-bisect
    project-type: freestyle
    defaults: global
    properties:
      - bisect-properties:
          ci_project: '{ci_project}'
          ci_config: '{ci_config}'
    parameters:
      - bisect-parameters:
          distro: '{distro}'
    disabled: false
    node: tcwg-build_bmk && tcwg-armv8_64
    concurrent: false
    display-name: 'TCWG Bisect {ci_project}--{ci_config}'
    workspace: workspace/tcwg_bmk_$EXECUTOR_NUMBER
    scm:
      - jenkins-scripts
    wrappers:
      - bisect-wrappers:
          timeout: 2880
    builders:
      - run-bisect:
          ci_project: '{ci_project}'
          ci_config: '{ci_config}'
          build_script: 'tcwg_bmk-build.sh'
    publishers:
        - bisect-publishers

# checksum: 162627204841df85cd64aaf31159dafa
