---
# Global macros

# PARAMETERS
- parameter:
    name: agl-infra-parameters
    parameters:
      - string:
          name: PROJECT
          default: '{project}'
          # yamllint disable rule:line-length
          description: "JJB configured PROJECT parameter to identify a Gerrit project"
          # yamllint enable
      - string:
          name: GERRIT_BRANCH
          default: '{branch}'
          description: "JJB configured GERRIT_BRANCH parameter"
      - string:
          name: GERRIT_PROJECT
          default: '{project}'
          description: "GERRIT_PROJECT parameter if not given by trigger"
      - string:
          name: GERRIT_REFSPEC
          default: '{refspec}'
          description: "GERRIT_REFSPEC parameter if not given by trigger"

# SCMS
- scm:
    name: git-scm
    scm:
      - git:
          credentials-id: 'd28b1f3b-3603-49bc-b837-bb0a2e85d4b8'
          url: '$GIT_BASE'
          refspec: ''
          branches:
            - 'origin/${branch}'
          skip-tag: true
          wipe-workspace: true

- scm:
    name: gerrit-trigger-scm
    scm:
      - git:
          credentials-id: 'd28b1f3b-3603-49bc-b837-bb0a2e85d4b8'
          url: '$GIT_BASE'
          refspec: '{refspec}'
          branches:
            - 'origin/$GERRIT_BRANCH'
          skip-tag: true
          choosing-strategy: '{choosing-strategy}'

- scm:
    name: gerrit-trigger-scm-basedir
    scm:
      - git:
          credentials-id: 'd28b1f3b-3603-49bc-b837-bb0a2e85d4b8'
          url: '$GIT_BASE'
          refspec: '{refspec}'
          branches:
            - 'origin/$GERRIT_BRANCH'
          skip-tag: true
          choosing-strategy: '{choosing-strategy}'
          basedir: '{basedir}'

- scm:
    name: git-branch-scm
    scm:
      - git:
          credentials-id: 'd28b1f3b-3603-49bc-b837-bb0a2e85d4b8'
          url: '$GIT_BASE'
          refspec: ''
          branches:
            - 'origin/{branch}'
          skip-tag: true
          wipe-workspace: true

# TRIGGERS
- trigger:
    name: gerrit-trigger-patch-submitted
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - patchset-created-event:
                exclude-drafts: 'false'
                exclude-trivial-rebase: 'false'
                exclude-no-code-change: 'true'
            - draft-published-event
            - comment-added-contains-event:
                comment-contains-value: 'recheck'
            - comment-added-contains-event:
                comment-contains-value: 'rebuild'
            - comment-added-contains-event:
                comment-contains-value: 'reverify'
            - comment-added-contains-event:
                comment-contains-value: 'RECHECK'
            - comment-added-contains-event:
                comment-contains-value: 'REBUILD'
            - comment-added-contains-event:
                comment-contains-value: 'REVERIFY'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
              file-paths:
                - compare-type: ANT
                  pattern: '{files}'

- trigger:
    name: gerrit-trigger-patch-submitted-manual-verified-silent
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - patchset-created-event:
                exclude-drafts: 'false'
                exclude-trivial-rebase: 'false'
                exclude-no-code-change: 'true'
            - draft-published-event
            - comment-added-contains-event:
                comment-contains-value: 'recheck'
            - comment-added-contains-event:
                comment-contains-value: 'rebuild'
            - comment-added-contains-event:
                comment-contains-value: 'reverify'
            - comment-added-contains-event:
                comment-contains-value: 'RECHECK'
            - comment-added-contains-event:
                comment-contains-value: 'REBUILD'
            - comment-added-contains-event:
                comment-contains-value: 'REVERIFY'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
          gerrit-build-started-verified-value: 0
          gerrit-build-successful-verified-value: 1
          gerrit-build-failed-verified-value: 0
          skip-vote:
            successful: true
            failed: true
            unstable: true
            notbuilt: true
          silent: 'true'

- trigger:
    name: gerrit-trigger-patch-submitted-manual-verified
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - patchset-created-event:
                exclude-drafts: 'false'
                exclude-trivial-rebase: 'false'
                exclude-no-code-change: 'true'
            - draft-published-event
            - comment-added-contains-event:
                comment-contains-value: 'recheck'
            - comment-added-contains-event:
                comment-contains-value: 'rebuild'
            - comment-added-contains-event:
                comment-contains-value: 'reverify'
            - comment-added-contains-event:
                comment-contains-value: 'RECHECK'
            - comment-added-contains-event:
                comment-contains-value: 'REBUILD'
            - comment-added-contains-event:
                comment-contains-value: 'REVERIFY'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
          gerrit-build-started-verified-value: 0
          gerrit-build-successful-verified-value: 1
          gerrit-build-failed-verified-value: 0
          skip-vote:
            successful: true
            failed: true
            unstable: true
            notbuilt: true
          silent: 'true'

- trigger:
    name: gerrit-trigger-patch-submitted-silent
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - patchset-created-event:
                exclude-drafts: 'false'
                exclude-trivial-rebase: 'false'
                exclude-no-code-change: 'true'
            - draft-published-event
            - comment-added-contains-event:
                comment-contains-value: 'recheck'
            - comment-added-contains-event:
                comment-contains-value: 'rebuild'
            - comment-added-contains-event:
                comment-contains-value: 'reverify'
            - comment-added-contains-event:
                comment-contains-value: 'RECHECK'
            - comment-added-contains-event:
                comment-contains-value: 'REBUILD'
            - comment-added-contains-event:
                comment-contains-value: 'REVERIFY'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
          silent: 'true'

- trigger:
    name: gerrit-trigger-patch-submitted-silent-start
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - patchset-created-event:
                exclude-drafts: 'false'
                exclude-trivial-rebase: 'false'
                exclude-no-code-change: 'true'
            - draft-published-event
            - comment-added-contains-event:
                comment-contains-value: 'recheck'
            - comment-added-contains-event:
                comment-contains-value: 'rebuild'
            - comment-added-contains-event:
                comment-contains-value: 'reverify'
            - comment-added-contains-event:
                comment-contains-value: 'RECHECK'
            - comment-added-contains-event:
                comment-contains-value: 'REBUILD'
            - comment-added-contains-event:
                comment-contains-value: 'REVERIFY'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
          silent-start: 'true'


- trigger:
    name: gerrit-trigger-patch-merged
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - change-merged-event
            - comment-added-contains-event:
                comment-contains-value: 'remerge$'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'

- trigger:
    name: gerrit-trigger-patch-abandoned
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - change-abandoned-event
            - comment-added-contains-event:
                comment-contains-value: 'remove-artifacts$'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'

- trigger:
    name: gerrit-trigger-silent-patch-submitted
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - patchset-created-event:
                exclude-drafts: 'false'
                exclude-trivial-rebase: 'false'
                exclude-no-code-change: 'false'
            - draft-published-event
            - comment-added-contains-event:
                comment-contains-value: 'recheck'
            - comment-added-contains-event:
                comment-contains-value: 'reverify'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
          silent-start: 'true'

- trigger:
    name: gerrit-trigger-silent-full-check
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - comment-added-contains-event:
                comment-contains-value: 'fullcheck'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
          silent-start: 'true'

- trigger:
    name: gerrit-trigger-silent-patch-merged
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - change-merged-event
            - comment-added-contains-event:
                comment-contains-value: 'remerge$'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
          silent-start: 'true'

- trigger:
    name: gerrit-trigger-silent-patch-merged-abandoned
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - change-merged-event
            - change-abandoned-event
            - comment-added-contains-event:
                comment-contains-value: 'remove-artifacts$'
            - comment-added-contains-event:
                comment-contains-value: 'remerge$'
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
          silent-start: 'true'

- trigger:
    name: gerrit-trigger-tag
    triggers:
      - gerrit:
          server-name: 'gerrit.automotivelinux.org'
          trigger-on:
            - ref-updated-event
          projects:
            - project-compare-type: 'ANT'
              project-pattern: '{name}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: 'refs/tags/**'

# Publishers
- publisher:
    name: archive-artifacts
    publishers:
      - archive:
          artifacts: '{artifacts}'
          allow-empty: true
          fingerprint: true
          latest-only: true

- publisher:
    name: email-notification
    publishers:
      - email-ext:
          recipients: 'jsmoeller@linuxfoundation.org'
          reply-to:
          content-type: default
          # yamllint disable rule:line-length
          subject: '{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!'
          # yamllint enable
          body: |
            $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:

            Check console output at $BUILD_URL to view the results.
          unstable: true
          fixed: true
          send-to:
            - developers
            - recipients

# BUILDERS
- builder:
    name: ci-management-check-unicode
    builders:
      - shell: |
          $WORKSPACE/scripts/check-unicode.sh jjb/

# WRAPPERS
- wrapper:
    name: build-timeout
    wrappers:
      - timeout:
          type: absolute
          timeout: 420
          fail: true

- wrapper:
    # This wrapper is required for all jobs as it configures the wrappers
    # needed by the automotivelinux.org infra.
    name: agl-infra-wrappers
    wrappers:
      - timeout:
          type: absolute
          timeout: '{build-timeout}'
          timeout-var: 'BUILD_TIMEOUT'
          fail: true
      - ssh-agent-credentials:
          users:
            - 'd28b1f3b-3603-49bc-b837-bb0a2e85d4b8'
            - '2d097b8f-bc4a-4222-b496-4ac6332015d7'
      - ansicolor
      - openstack:
          single-use: false

- property:
    name: agl-infra-properties
    properties:
        - build-discarder:
            days-to-keep: '{build-days-to-keep}'
            num-to-keep: '{build-num-to-keep}'

- builder:
    name: packer-validate
    builders:
      - config-file-provider:
          files:
            - file-id: 'packer-cloud-env'
              variable: 'CLOUDENV'
      - shell: |
          #!/bin/bash -x
          cd packer
          varfiles="../packer/vars/*"
          templates="../packer/templates/*"
          provision="../packer/provision/*.sh"
          for v in $varfiles; do
              [[ ${v##*/} =~ ^(cloud-env.*|lava-env.*|README.md)$ ]] && continue
              for t in $templates; do
                  [[ ${t##*/} =~ ^(cloud-env.*|lava-env.*|README.md)$ ]] && continue
                  export PACKER_LOG="yes" && \
                  export PACKER_LOG_PATH="packer-validate-${v##*/}-${t##*/}.log" && \
                              packer.io validate -var-file=$CLOUDENV \
                              -var-file=$v $t
                  if [ $? -ne 0 ]; then
                      exit 1
                  fi
              done
          done
          # todo: migrate to linting with shellcheck
          for p in $provision; do
              /bin/bash -n $p > provision-validate-${p##*/}.log 2>&1
          done

- builder:
    name: packer-build
    builders:
      - config-file-provider:
          files:
            - file-id: 'packer-cloud-env'
              variable: 'CLOUDENV'
      - shell: |
          cd packer
          export PACKER_LOG="yes" && \
          export PACKER_LOG_PATH="packer-build.log" && \
                      packer.io build -color=false -var-file=$CLOUDENV \
                       -var-file=../packer/vars/{platform}.json \
                       -parallel=false \
                       ../packer/templates/{template}.json