---
- project:
    name: doctor

    project: '{name}'

    stream:
      - master:
          branch: '{stream}'
          gs-pathname: ''
          docker-tag: 'latest'
          disabled: false
      - euphrates:
          branch: 'stable/{stream}'
          gs-pathname: '/{stream}'
          docker-tag: 'stable'
          disabled: false

    installer:
      - 'apex'
      - 'fuel'
    # - 'joid'

    arch:
      - 'x86_64'
      - 'aarch64'

    inspector:
      - 'sample'
      - 'congress'

    task:
      - verify:
          auto-trigger-name: 'doctor-verify'

    exclude:
      - installer: 'apex'
        arch: 'aarch64'

    jobs:
      - 'doctor-verify-{stream}'
      - 'doctor-verify-unit-test-{stream}'
      - 'doctor-{task}-{inspector}-{stream}'
      - 'doctor-{task}-{installer}-{inspector}-{arch}-{stream}'

- job-template:
    name: 'doctor-verify-{stream}'
    disabled: '{obj:disabled}'
    project-type: 'multijob'
    parameters:
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - 'opnfv-build-ubuntu-defaults'
    scm:
      - git-scm-gerrit
    triggers:
      - gerrit:
          server-name: 'gerrit.opnfv.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: '{project}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
              file-paths:
                - compare-type: ANT
                  pattern: 'doctor_tests/**'
    builders:
      - shell: |
         #!/bin/bash
         # we do nothing here as the main stuff will be done
         # in phase jobs
         echo "Triggering phase jobs!"
      - multijob:
          name: 'doctor-build-and-unittest'
          execution-type: PARALLEL
          projects:
            - name: 'doctor-verify-unit-test-{stream}'
              predefined-parameters: |
                PROJECT=$PROJECT
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              kill-phase-on: FAILURE
              current-parameters: true
              git-revision: true

- job-template:
    name: 'doctor-verify-unit-test-{stream}'
    disabled: '{obj:disabled}'
    wrappers:
      - ssh-agent-wrapper
      - build-timeout:
          timeout: 60
    parameters:
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - 'opnfv-build-ubuntu-defaults'
    scm:
      - git-scm-gerrit
    builders:
      - 'doctor-verify-unit-test-builders-macro'
    publishers:
      - 'doctor-verify-unit-test-publishers-macro'

- job-template:
    name: 'doctor-{task}-{inspector}-{stream}'
    disabled: '{obj:disabled}'
    project-type: 'multijob'
    scm:
      - git-scm-gerrit
    triggers:
      - '{auto-trigger-name}':
          project: '{project}'
          branch: '{branch}'
          files: 'doctor_tests/**'
    builders:
      - shell: |
         #!/bin/bash
         # we do nothing here as the main stuff will be done
         # in phase jobs
         echo "Triggering phase jobs!"
      - multijob:
          name: 'doctor-verify-apex-inspector'
          execution-type: PARALLEL
          projects:
            - name: 'doctor-{task}-apex-{inspector}-x86_64-{stream}'
              predefined-parameters: |
                PROJECT=$PROJECT
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              kill-phase-on: FAILURE
              current-parameters: true
              git-revision: true
      - multijob:
          name: 'doctor-verify-fuel-inspector'
          execution-type: PARALLEL
          projects:
            - name: 'doctor-{task}-fuel-{inspector}-x86_64-{stream}'
              predefined-parameters: |
                PROJECT=$PROJECT
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              kill-phase-on: FAILURE
              current-parameters: true
              git-revision: true
      - multijob:
          name: 'doctor-verify-fuel-inspector'
          execution-type: PARALLEL
          projects:
            - name: 'doctor-{task}-fuel-{inspector}-aarch64-{stream}'
              predefined-parameters: |
                PROJECT=$PROJECT
                GERRIT_BRANCH=$GERRIT_BRANCH
                GERRIT_REFSPEC=$GERRIT_REFSPEC
                GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
              kill-phase-on: FAILURE
              current-parameters: true
              git-revision: true

- job-template:
    name: 'doctor-{task}-{installer}-{inspector}-{arch}-{stream}'
    disabled: '{obj:disabled}'
    node: 'doctor-{installer}-{arch}'
    wrappers:
      - ssh-agent-wrapper
      - build-timeout:
          timeout: 30
    parameters:
      - project-parameter:
          project: '{project}'
          branch: '{branch}'
      - '{installer}-defaults'
      - 'doctor-slave-parameter'
      - 'doctor-parameter'
      - 'doctor-functest-parameter'
    scm:
      - git-scm-gerrit
    builders:
      - 'doctor-verify-installer-inspector-builders-macro'
    publishers:
      - 'doctor-verify-publishers-macro'


# -------------------------------
# parameter macros
# -------------------------------
- parameter:
    name: 'doctor-parameter'
    parameters:
      - string:
          name: OS_CREDS
          default: /home/jenkins/openstack.creds
          description: 'OpenStack credentials'
      - string:
          name: DOCKER_TAG
          default: '{docker-tag}'
          description: 'Tag to pull docker image'
      - string:
          name: CLEAN_DOCKER_IMAGES
          default: 'false'
          description: 'Remove downloaded docker images (opnfv/functest:*)'
      - string:
          name: DEPLOY_SCENARIO
          default: 'os-nosdn-nofeature-ha'
          description: 'Scenario to deploy and test'

- parameter:
    name: 'doctor-functest-parameter'
    parameters:
      # functest-suite-parameter
      - string:
          name: FUNCTEST_MODE
          default: 'testcase'
      - string:
          name: FUNCTEST_SUITE_NAME
          default: 'doctor-notification'
      - string:
          name: TESTCASE_OPTIONS
          # yamllint disable rule:line-length
          default: '-e INSPECTOR_TYPE={inspector} -v $WORKSPACE:/home/opnfv/repos/doctor'
          # yamllint enable rule:line-length
          description: 'Addtional parameters specific to test case(s)'
      # functest-parameter
      - string:
          name: GS_PATHNAME
          default: '{gs-pathname}'
          # yamllint disable rule:line-length
          description: "Version directory where the opnfv documents will be stored in gs repository"
          # yamllint enable rule:line-length
      - string:
          name: FUNCTEST_REPO_DIR
          default: "/home/opnfv/repos/functest"
          description: "Directory where the Functest repository is cloned"
      - string:
          name: PUSH_RESULTS_TO_DB
          default: "true"
          description: "Push the results of all the tests to the resultDB"
      - string:
          name: CI_DEBUG
          default: 'true'
          description: "Show debug output information"
# -------------------------------
# builder macros
# -------------------------------

- builder:
    name: 'doctor-verify-unit-test-builders-macro'
    builders:
      - shell: "tox -e pep8"

- builder:
    name: 'doctor-verify-installer-inspector-builders-macro'
    builders:
      - 'clean-workspace-log'
      # yamllint disable rule:line-length
      - shell: |
          # NOTE: Create symbolic link, so that we can archive file outside
          #       of $WORKSPACE .
          # NOTE: We are printing all logs under 'tests/' during test run,
          #       so this symbolic link should not be in 'tests/'. Otherwise,
          #       we'll have the same log twice in jenkins console log.
          ln -sfn $HOME/opnfv/functest/results/{stream} functest_results
          # NOTE: Get functest script in $WORKSPACE. This functest script is
          #       needed to perform VM image download in set-functest-env.sh
          #       from E release cycle.
          mkdir -p functest/ci
          wget https://git.opnfv.org/functest/plain/functest/ci/download_images.sh -O functest/ci/download_images.sh
      - 'functest-suite-builder'
      - shell: |
          functest_log="$HOME/opnfv/functest/results/{stream}/$FUNCTEST_SUITE_NAME.log"
          # NOTE: checking the test result, as the previous job could return
          #       0 regardless the result of doctor test scenario.
          grep -e 'doctor test successfully' $functest_log || exit 1
      # yamllint enable rule:line-length

# -------------------------------
# publisher macros
# -------------------------------
- publisher:
    name: 'doctor-verify-publishers-macro'
    publishers:
      - archive:
          artifacts: 'doctor_tests/*.log'
      - archive:
          artifacts: 'functest_results/$FUNCTEST_SUITE_NAME.log'
      - email-jenkins-admins-on-failure

- publisher:
    name: 'doctor-verify-unit-test-publishers-macro'
    publishers:
      - email-jenkins-admins-on-failure
      - archive:
          artifacts: '.tox/'


#####################################
# trigger macros
#####################################
- trigger:
    name: 'doctor-verify'
    triggers:
      - gerrit:
          server-name: 'gerrit.opnfv.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: '{project}'
              branches:
                - branch-compare-type: 'ANT'
                  branch-pattern: '**/{branch}'
              file-paths:
                - compare-type: ANT
                  pattern: '{files}'
          skip-vote:
            successful: true
            failed: true
            unstable: true
            notbuilt: true