- project:
    name: 'apex'
    project: 'apex'
    jobs:
        - 'apex-verify-{stream}'
        - 'apex-verify-gate-{stream}'
        - 'apex-verify-unit-tests-{stream}'
        - 'apex-runner-cperf-{stream}'
        - 'apex-virtual-{stream}'
        - 'apex-deploy-{platform}-{stream}'
        - 'apex-daily-{stream}'
        - 'apex-csit-promote-daily-{stream}'
        - 'apex-fdio-promote-daily-{stream}'
        - 'apex-{scenario}-baremetal-{scenario_stream}'
        - 'apex-testsuite-{scenario}-baremetal-{scenario_stream}'
        - 'apex-upload-snapshot'
        - 'apex-create-snapshot'
        - 'apex-flex-daily-os-nosdn-nofeature-ha-{stream}'
        - 'apex-dovetail-daily-os-nosdn-nofeature-ha-baremetal-danube'
    # stream:    branch with - in place of / (eg. stable-arno)
    # branch:    branch (eg. stable/arno)
    stream:
        - master: &master
            branch: 'master'
            gs-pathname: ''
            build-slave: 'apex-build-master'
            virtual-slave: 'apex-virtual-master'
            baremetal-slave: 'apex-baremetal-master'
            verify-scenario: 'os-odl-nofeature-ha'
            scenario_stream: 'master'
            disable_daily: true
        - euphrates: &euphrates
            branch: 'stable/euphrates'
            gs-pathname: '/euphrates'
            build-slave: 'apex-build-master'
            virtual-slave: 'apex-virtual-master'
            baremetal-slave: 'apex-baremetal-master'
            verify-scenario: 'os-odl-nofeature-ha'
            scenario_stream: 'euphrates'
            disable_daily: false
        - danube: &danube
            branch: 'stable/danube'
            gs-pathname: '/danube'
            build-slave: 'apex-build-danube'
            virtual-slave: 'apex-virtual-danube'
            baremetal-slave: 'apex-baremetal-danube'
            verify-scenario: 'os-odl_l3-nofeature-ha'
            scenario_stream: 'danube'
            disabled: true
            disable_daily: true

    scenario:
        {%- for stream in scenarios %}
        {%- for scenario in scenarios[stream] %}
        - '{{scenario}}':
              <<: *{{stream}}
        {%- endfor %}
        {%- endfor %}

    platform:
         - 'baremetal'
         - 'virtual'

# Unit Test
- job-template:
    name: 'apex-verify-unit-tests-{stream}'

    node: '{build-slave}'

    concurrent: true

    parameters:
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - project-parameter:
            project: '{project}'
            branch: '{branch}'

    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: 'true'
                - 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: 'apex'
                branches:
                  - branch-compare-type: 'ANT'
                    branch-pattern: '**/{branch}'
                disable-strict-forbidden-file-verification: 'false'
                file-paths:
                  - compare-type: ANT
                    pattern: 'apex/tests/**'
                forbidden-file-paths:
                  - compare-type: ANT
                    pattern: '*'
                  - compare-type: ANT
                    pattern: 'apex/*'
                  - compare-type: ANT
                    pattern: 'build/**'
                  - compare-type: ANT
                    pattern: 'lib/**'
                  - compare-type: ANT
                    pattern: 'config/**'
                  - compare-type: ANT
                    pattern: 'apex/build/**'
                  - compare-type: ANT
                    pattern: 'apex/common/**'
                  - compare-type: ANT
                    pattern: 'apex/inventory/**'
                  - compare-type: ANT
                    pattern: 'apex/network/**'
                  - compare-type: ANT
                    pattern: 'apex/overcloud/**'
                  - compare-type: ANT
                    pattern: 'apex/settings/**'
                  - compare-type: ANT
                    pattern: 'apex/undercloud/**'
                  - compare-type: ANT
                    pattern: 'apex/virtual/**'
    properties:
        - logrotate-default
        - throttle:
            max-per-node: 1
            max-total: 10
            option: 'project'

    builders:
        - shell:
            !include-raw-escape: ./apex-unit-test.sh

# Verify
- job-template:
    name: 'apex-verify-{stream}'

    node: '{virtual-slave}'

    concurrent: true

    project-type: 'multijob'

    parameters:
        - apex-parameter:
            gs-pathname: '{gs-pathname}/dev'
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - string:
            name: ARTIFACT_VERSION
            default: dev
            description: "Used for overriding the ARTIFACT_VERSION"
    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: 'true'
                - 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: 'apex'
                branches:
                  - branch-compare-type: 'ANT'
                    branch-pattern: '**/{branch}'
                disable-strict-forbidden-file-verification: 'true'
                file-paths:
                  - compare-type: ANT
                    pattern: '*'
                  - compare-type: ANT
                    pattern: 'apex/*'
                  - compare-type: ANT
                    pattern: 'build/**'
                  - compare-type: ANT
                    pattern: 'lib/**'
                  - compare-type: ANT
                    pattern: 'config/**'
                  - compare-type: ANT
                    pattern: 'apex/build/**'
                  - compare-type: ANT
                    pattern: 'apex/common/**'
                  - compare-type: ANT
                    pattern: 'apex/inventory/**'
                  - compare-type: ANT
                    pattern: 'apex/network/**'
                  - compare-type: ANT
                    pattern: 'apex/overcloud/**'
                  - compare-type: ANT
                    pattern: 'apex/settings/**'
                  - compare-type: ANT
                    pattern: 'apex/undercloud/**'
                  - compare-type: ANT
                    pattern: 'apex/virtual/**'
                forbidden-file-paths:
                  - compare-type: ANT
                    pattern: 'apex/tests/**'
                  - compare-type: ANT
                    pattern: 'docs/**'

    properties:
        - logrotate-default
        - throttle:
            max-per-node: 3
            max-total: 10
            option: 'project'

    builders:
        - description-setter:
            description: "Built on $NODE_NAME"
        - multijob:
            name: basic
            condition: SUCCESSFUL
            projects:
                - name: 'apex-verify-unit-tests-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=$GERRIT_REFSPEC
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                  node-parameters: false
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: true
        - multijob:
            name: build
            condition: SUCCESSFUL
            projects:
                - name: 'apex-build-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    ARTIFACT_VERSION=$ARTIFACT_VERSION
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=$GERRIT_REFSPEC
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                  node-parameters: false
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: true
        - multijob:
            name: deploy-virtual
            condition: SUCCESSFUL
            projects:
                - name: 'apex-virtual-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    ARTIFACT_VERSION=$ARTIFACT_VERSION
                    DEPLOY_SCENARIO={verify-scenario}
                    OPNFV_CLEAN=yes
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=$GERRIT_REFSPEC
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                  node-parameters: true
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: true

# Verify Scenario Gate
- job-template:
    name: 'apex-verify-gate-{stream}'

    node: '{virtual-slave}'

    concurrent: true

    project-type: 'multijob'

    parameters:
        - apex-parameter:
            gs-pathname: '{gs-pathname}/dev'
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - string:
            name: GIT_BASE
            default: https://gerrit.opnfv.org/gerrit/$PROJECT
            description: "Used for overriding the GIT URL coming from parameters macro."
        - string:
            name: ARTIFACT_VERSION
            default: dev
            description: "Used for overriding the ARTIFACT_VERSION"

    scm:
        - git-scm-gerrit

    triggers:
        - gerrit:
            server-name: 'gerrit.opnfv.org'
            trigger-on:
                - comment-added-contains-event:
                    comment-contains-value: '^Patch Set [0-9]+: Code-Review\+2.*start-gate-scenario:.*'
            projects:
              - project-compare-type: 'ANT'
                project-pattern: 'apex'
                branches:
                  - branch-compare-type: 'ANT'
                    branch-pattern: '**/{branch}'
                file-paths:
                  - compare-type: ANT
                    pattern: 'ci/**'
                  - compare-type: ANT
                    pattern: 'build/**'
                  - compare-type: ANT
                    pattern: 'lib/**'
                  - compare-type: ANT
                    pattern: 'config/**'
                  - compare-type: ANT
                    pattern: 'apex/**'

    properties:
        - logrotate-default
        - build-blocker:
            use-build-blocker: true
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-verify.*'
                - 'apex-virtual.*'
        - throttle:
            max-per-node: 1
            max-total: 10
            option: 'project'

    builders:
        - multijob:
            name: deploy-virtual
            condition: SUCCESSFUL
            projects:
                - name: 'apex-deploy-virtual-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    ARTIFACT_VERSION=$ARTIFACT_VERSION
                    DEPLOY_SCENARIO=gate
                    OPNFV_CLEAN=yes
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=$GERRIT_REFSPEC
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                    GERRIT_EVENT_COMMENT_TEXT=$GERRIT_EVENT_COMMENT_TEXT
                  node-parameters: true
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: true
        - shell: |
            echo DEPLOY_SCENARIO=$(echo $GERRIT_EVENT_COMMENT_TEXT | grep start-gate-scenario | grep -Eo 'os-.*') > detected_scenario
        - inject:
           properties-file: detected_scenario
        - multijob:
            name: functest-smoke
            condition: SUCCESSFUL
            projects:
              - name: 'functest-apex-virtual-suite-{stream}'
                current-parameters: false
                predefined-parameters: |
                  DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  FUNCTEST_MODE=tier
                  FUNCTEST_TIER=healthcheck
                  GERRIT_BRANCH=$GERRIT_BRANCH
                  GERRIT_REFSPEC=$GERRIT_REFSPEC
                  GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                  GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                node-parameters: true
                kill-phase-on: NEVER
                abort-all-job: true
                git-revision: false

- job-template:
    name: 'apex-runner-cperf-{stream}'

    # runner cperf job
    project-type: 'multijob'
    node: 'intel-pod2'

    disabled: false

    parameters:
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - string:
            name: GIT_BASE
            default: https://gerrit.opnfv.org/gerrit/$PROJECT
            description: "Used for overriding the GIT URL coming from parameters macro."

    scm:
        - git-scm

    properties:
        - logrotate-default
        - build-blocker:
            use-build-blocker: false
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-deploy.*'
        - throttle:
            max-per-node: 1
            max-total: 10
            option: 'project'

    builders:
        - description-setter:
            description: "Deployed on $NODE_NAME"
        - multijob:
            name: 'Baremetal Deploy'
            condition: ALWAYS
            projects:
                - name: 'apex-deploy-baremetal-{stream}'
                  node-parameters: false
                  current-parameters: true
                  predefined-parameters: |
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=
                    OPNFV_CLEAN=yes
                    DEPLOY_SCENARIO={verify-scenario}
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: false
        - multijob:
            name: CPERF
            condition: SUCCESSFUL
            projects:
                - name: 'cperf-apex-intel-pod2-daily-master'
                  node-parameters: true
                  current-parameters: false
                  predefined-parameters:
                    DEPLOY_SCENARIO={verify-scenario}
                  kill-phase-on: NEVER
                  abort-all-job: false
                  git-revision: false

# Deploy job
- job-template:
    name: 'apex-deploy-{platform}-{stream}'

    node: 'apex-{platform}-{stream}'

    concurrent: true

    disabled: false
    quiet-period: 30
    scm:
        - git-scm-gerrit

    wrappers:
        - timeout:
            timeout: 140
            fail: true

    parameters:
        - '{project}-{platform}-{stream}-defaults'
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - string:
            name: DEPLOY_SCENARIO
            default: '{verify-scenario}'
            description: "Scenario to deploy with."
        - string:
            name: OPNFV_CLEAN
            default: 'no'
            description: "Use yes in lower case to invoke clean. Indicates if the deploy environment should be cleaned before deployment"

    properties:
        - logrotate-default
        - build-blocker:
            use-build-blocker: true
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-deploy.*'
                - 'functest.*'
                - 'yardstick.*'
                - 'dovetail.*'
                - 'storperf.*'
        - throttle:
            max-per-node: 1
            max-total: 10
            option: 'project'

    builders:
        - description-setter:
            description: "Deployed on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
        - 'apex-download-artifact'
        - 'apex-deploy'
        - 'clean-workspace'


# Virtual Deploy and Test
- job-template:
    name: 'apex-virtual-{stream}'

    project-type: 'multijob'

    disabled: false

    scm:
        - git-scm-gerrit

    parameters:
        - '{project}-defaults'
        - '{project}-virtual-{stream}-defaults'
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - string:
            name: DEPLOY_SCENARIO
            default: '{verify-scenario}'
            description: "Scenario to deploy with."
        - string:
            name: ARTIFACT_VERSION
            default: dev
            description: "Used for overriding the ARTIFACT_VERSION"
    properties:
        - logrotate-default
        - build-blocker:
            use-build-blocker: true
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-runner.*'
                - 'apex-.*-promote.*'
                - 'apex-run.*'
                - 'apex-virtual-.*'
                - 'apex-verify-gate-.*'
        - throttle:
            max-per-node: 1
            max-total: 10
            option: 'project'
    builders:
        - description-setter:
            description: "Deployed on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
        - multijob:
            name: deploy-virtual
            condition: SUCCESSFUL
            projects:
                - name: 'apex-deploy-virtual-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    ARTIFACT_VERSION=$ARTIFACT_VERSION
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                    OPNFV_CLEAN=yes
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=$GERRIT_REFSPEC
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                  node-parameters: true
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: true
        - multijob:
            name: functest-smoke
            condition: SUCCESSFUL
            projects:
              - name: 'functest-apex-virtual-suite-{stream}'
                current-parameters: false
                predefined-parameters: |
                  DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  FUNCTEST_SUITE_NAME=healthcheck
                  GERRIT_BRANCH=$GERRIT_BRANCH
                  GERRIT_REFSPEC=$GERRIT_REFSPEC
                  GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                  GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                node-parameters: true
                kill-phase-on: NEVER
                abort-all-job: true
                git-revision: false

# Baremetal Deploy and Test
- job-template:
    name: 'apex-{scenario}-baremetal-{scenario_stream}'

    project-type: 'multijob'

    disabled: false

    scm:
        - git-scm

    parameters:
        - '{project}-defaults'
        - '{project}-baremetal-{scenario_stream}-defaults'
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - string:
            name: DEPLOY_SCENARIO
            default: '{scenario}'
            description: "Scenario to deploy with."
    properties:
        - logrotate-default
        - build-blocker:
            use-build-blocker: true
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-verify.*'
                - 'apex-runner.*'
                - 'apex-.*-promote.*'
                - 'apex-run.*'
                - 'apex-.+-baremetal-.+'
        - throttle:
            max-per-node: 1
            max-total: 10
            option: 'project'
    builders:
        - description-setter:
            description: "Deployed on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
        - multijob:
            name: 'Baremetal Deploy'
            condition: SUCCESSFUL
            projects:
                - name: 'apex-deploy-baremetal-{scenario_stream}'
                  node-parameters: true
                  current-parameters: true
                  predefined-parameters: |
                    OPNFV_CLEAN=yes
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: false
        - multijob:
            name: 'OPNFV Test Suite'
            projects:
                - name: 'apex-testsuite-{scenario}-baremetal-{scenario_stream}'
                  node-parameters: true
                  current-parameters: false
                  predefined-parameters:
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  kill-phase-on: NEVER
                  abort-all-job: true
                  git-revision: false

    publishers:
        - groovy-postbuild:
            script:
                !include-raw-escape: ./update-build-result.groovy

# Baremetal test job
- job-template:
    name: 'apex-testsuite-{scenario}-baremetal-{scenario_stream}'

    project-type: 'multijob'

    disabled: false

    parameters:
        - '{project}-defaults'
        - '{project}-baremetal-{scenario_stream}-defaults'
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - string:
            name: DEPLOY_SCENARIO
            default: '{scenario}'
            description: "Scenario to deploy with."
    properties:
        - logrotate-default
        - build-blocker:
            use-build-blocker: true
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-verify.*'
                - 'apex-runner.*'
                - 'apex-.*-promote.*'
                - 'apex-run.*'
                - 'apex-testsuite-.+-baremetal-.+'
        - throttle:
            max-per-node: 1
            max-total: 10
            option: 'project'
    builders:
        - description-setter:
            description: "Testing on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
        - multijob:
            name: Functest
            condition: ALWAYS
            projects:
                - name: 'functest-apex-baremetal-daily-{scenario_stream}'
                  node-parameters: true
                  current-parameters: false
                  predefined-parameters:
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  kill-phase-on: NEVER
                  abort-all-job: false
                  git-revision: false
        - multijob:
            name: Yardstick
            condition: ALWAYS
            projects:
                - name: 'yardstick-apex-baremetal-daily-{scenario_stream}'
                  node-parameters: true
                  current-parameters: false
                  predefined-parameters:
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  kill-phase-on: NEVER
                  abort-all-job: false
                  git-revision: false
        - multijob:
            name: Dovetail
            condition: ALWAYS
            projects:
                - name: 'dovetail-apex-baremetal-proposed_tests-{scenario_stream}'
                  node-parameters: true
                  current-parameters: false
                  predefined-parameters:
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  kill-phase-on: NEVER
                  enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-(nosdn-nofeature|nosdn-kvm|odl_l3-fdio)-ha/"
                  abort-all-job: false
                  git-revision: false
        - multijob:
            name: StorPerf
            condition: ALWAYS
            projects:
                - name: 'storperf-apex-baremetal-daily-{scenario_stream}'
                  node-parameters: true
                  current-parameters: false
                  predefined-parameters:
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  enable-condition: "def m = '$DEPLOY_SCENARIO' ==~ /os-nosdn-nofeature-ha/"
                  kill-phase-on: NEVER
                  abort-all-job: false
                  git-revision: false
# Build status is always success due conditional plugin prefetching
# build status before multijob phases execute
#        - conditional-step:
#            condition-kind: current-status
#            condition-worst: SUCCESS
#            condtion-best: SUCCESS
#            on-evaluation-failure: mark-unstable
#            steps:
#                - shell: 'echo "Tests Passed"'

- job-template:
    name: 'apex-daily-{stream}'

    # Job template for daily build
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    project-type: 'multijob'

    node: '{baremetal-slave}'

    disabled: '{obj:disable_daily}'

    scm:
        - git-scm

    parameters:
        - '{project}-defaults'
        - '{project}-baremetal-{stream}-defaults'
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'

    properties:
        - logrotate-default
        - build-blocker:
            use-build-blocker: true
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-daily.*'

    triggers:
        - 'apex-{stream}'

    builders:
        - multijob:
            name: build
            condition: SUCCESSFUL
            projects:
                - name: 'apex-build-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                  node-parameters: true
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: true
        - multijob:
            name: 'Verify and upload ISO'
            condition: SUCCESSFUL
            projects:
                - name: 'apex-verify-iso-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    BUILD_DIRECTORY=$WORKSPACE/../apex-build-{stream}/.build
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                  node-parameters: true
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: true
        - apex-builder-{stream}

# snapshot create
- job-template:
    name: 'apex-create-snapshot'

    # Job template for clean
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)

    disabled: false

    builders:
        - shell:
            !include-raw-escape: ./apex-snapshot-create.sh

# snapshot upload
- job-template:
    name: 'apex-upload-snapshot'

    # Job template for clean
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)

    disabled: false

    builders:
        - inject:
           properties-content: ARTIFACT_TYPE=snapshot
        - 'apex-upload-artifact'

# CSIT promote
- job-template:
    name: 'apex-csit-promote-daily-{stream}'

    # Job template for promoting CSIT Snapshots
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    node: '{virtual-slave}'
    project-type: 'multijob'
    disabled: false

    scm:
        - git-scm

    parameters:
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'

    properties:
        - build-blocker:
            use-build-blocker: true
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-verify.*'
                - 'apex-deploy.*'
                - 'apex-runner.*'
                - 'apex-daily.*'

    triggers:
        - timed: '0 12 * * 0'

    builders:
        - multijob:
            name: build
            condition: SUCCESSFUL
            projects:
                - name: 'apex-build-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=$GERRIT_REFSPEC
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                  node-parameters: false
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: true
        - multijob:
            name: deploy-virtual
            condition: SUCCESSFUL
            projects:
                - name: 'apex-deploy-virtual-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    DEPLOY_SCENARIO=os-odl_l3-csit-noha
                    OPNFV_CLEAN=yes
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=$GERRIT_REFSPEC
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                    PROMOTE=True
                  node-parameters: true
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: false
        - multijob:
            name: functest-smoke
            condition: SUCCESSFUL
            projects:
              - name: 'functest-apex-virtual-suite-{stream}'
                current-parameters: false
                predefined-parameters: |
                  DEPLOY_SCENARIO=os-odl_l3-nofeature-noha
                  FUNCTEST_SUITE_NAME=tempest_smoke_serial
                  GERRIT_BRANCH=$GERRIT_BRANCH
                  GERRIT_REFSPEC=$GERRIT_REFSPEC
                  GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                  GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                node-parameters: true
                kill-phase-on: FAILURE
                abort-all-job: true
                git-revision: false
        - multijob:
            name: create snapshot
            condition: SUCCESSFUL
            projects:
              - name: 'apex-create-snapshot'
                current-parameters: false
                predefined-parameters: |
                  SNAP_TYPE=csit
                node-parameters: true
                kill-phase-on: FAILURE
                abort-all-job: true
                git-revision: false
        - multijob:
            name: upload snapshot
            condition: SUCCESSFUL
            projects:
              - name: 'apex-upload-snapshot'
                current-parameters: false
                predefined-parameters: |
                  SNAP_TYPE=csit
                node-parameters: true
                kill-phase-on: FAILURE
                abort-all-job: true
                git-revision: false

# FDIO promote
- job-template:
    name: 'apex-fdio-promote-daily-{stream}'

    # Job template for promoting CSIT Snapshots
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    node: '{virtual-slave}'
    project-type: 'multijob'
    disabled: false

    scm:
        - git-scm

    parameters:
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'

    properties:
        - build-blocker:
            use-build-blocker: true
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-verify.*'
                - 'apex-deploy.*'
                - 'apex-runner.*'
                - 'apex-daily.*'

    builders:
        - multijob:
            name: build
            condition: SUCCESSFUL
            projects:
                - name: 'apex-build-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=$GERRIT_REFSPEC
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                  node-parameters: false
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: true
        - multijob:
            name: deploy-virtual
            condition: SUCCESSFUL
            projects:
                - name: 'apex-deploy-virtual-{stream}'
                  current-parameters: false
                  predefined-parameters: |
                    DEPLOY_SCENARIO=os-odl_netvirt-fdio-noha
                    OPNFV_CLEAN=yes
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=$GERRIT_REFSPEC
                    GERRIT_CHANGE_NUMBER=$GERRIT_CHANGE_NUMBER
                    GERRIT_CHANGE_COMMIT_MESSAGE=$GERRIT_CHANGE_COMMIT_MESSAGE
                    PROMOTE=True
                  node-parameters: true
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: false
        - multijob:
            name: create snapshot
            condition: SUCCESSFUL
            projects:
              - name: 'apex-create-snapshot'
                current-parameters: false
                predefined-parameters: |
                  SNAP_TYPE=fdio
                node-parameters: true
                kill-phase-on: FAILURE
                abort-all-job: true
                git-revision: false
        - multijob:
            name: upload snapshot
            condition: SUCCESSFUL
            projects:
              - name: 'apex-upload-snapshot'
                current-parameters: false
                predefined-parameters: |
                  SNAP_TYPE=fdio
                node-parameters: true
                kill-phase-on: FAILURE
                abort-all-job: true
                git-revision: false

# Flex job
- job-template:
    name: 'apex-flex-daily-os-nosdn-nofeature-ha-{stream}'

    project-type: 'multijob'

    disabled: false

    node: 'flex-pod2'

    scm:
        - git-scm
    triggers:
        - 'apex-{stream}'
    parameters:
        - '{project}-defaults'
        - project-parameter:
            project: '{project}'
            branch: '{branch}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - string:
            name: DEPLOY_SCENARIO
            default: 'os-nosdn-nofeature-ha'
            description: "Scenario to deploy with."
        - string:
            name: GIT_BASE
            default: https://gerrit.opnfv.org/gerrit/$PROJECT
            description: 'Git URL to use on this Jenkins Slave'
        - string:
            name: SSH_KEY
            default: /root/.ssh/id_rsa
            description: 'SSH key to use for Apex'
    properties:
        - logrotate-default
        - build-blocker:
            use-build-blocker: true
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-verify.*'
                - 'apex-runner.*'
                - 'apex-.*-promote.*'
                - 'apex-run.*'
                - 'apex-.+-baremetal-.+'
        - throttle:
            max-per-node: 1
            max-total: 10
            option: 'project'
    builders:
        - description-setter:
            description: "Deployed on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
        - multijob:
            name: 'Baremetal Deploy'
            condition: SUCCESSFUL
            projects:
                - name: 'apex-deploy-baremetal-{stream}'
                  node-parameters: true
                  current-parameters: true
                  predefined-parameters: |
                    OPNFV_CLEAN=yes
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: false
        - multijob:
            name: Yardstick
            condition: ALWAYS
            projects:
                - name: 'yardstick-apex-baremetal-daily-{stream}'
                  node-parameters: true
                  current-parameters: false
                  predefined-parameters:
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  kill-phase-on: NEVER
                  abort-all-job: false
                  git-revision: false

# Dovetail Danube test job
- job-template:
    name: 'apex-dovetail-daily-os-nosdn-nofeature-ha-baremetal-danube'

    project-type: 'multijob'

    node: 'huawei-pod4'

    disabled: false

    parameters:
        - '{project}-defaults'
        - project-parameter:
            project: '{project}'
            branch: 'stable/danube'
        - apex-parameter:
            gs-pathname: '/danube'
        - string:
            name: DEPLOY_SCENARIO
            default: 'os-nosdn-nofeature-ha'
            description: "Scenario to deploy with."

    properties:
        - logrotate-default
        - build-blocker:
            use-build-blocker: true
            block-level: 'NODE'
            blocking-jobs:
                - 'apex-verify.*'
                - 'apex-runner.*'
                - 'apex-.*-promote.*'
                - 'apex-run.*'

    triggers:
        - timed: '0 1 * * *'

    builders:
        - description-setter:
            description: "Testing on $NODE_NAME - Scenario: $DEPLOY_SCENARIO"
        - multijob:
            name: 'Baremetal Deploy'
            condition: SUCCESSFUL
            projects:
                - name: 'apex-deploy-baremetal-danube'
                  node-parameters: true
                  current-parameters: true
                  predefined-parameters: |
                    OPNFV_CLEAN=yes
                    GERRIT_BRANCH=$GERRIT_BRANCH
                    GERRIT_REFSPEC=
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  kill-phase-on: FAILURE
                  abort-all-job: true
                  git-revision: false
        - multijob:
            name: Dovetail
            condition: ALWAYS
            projects:
                - name: 'dovetail-apex-baremetal-proposed_tests-danube'
                  node-parameters: true
                  current-parameters: false
                  predefined-parameters:
                    DEPLOY_SCENARIO=$DEPLOY_SCENARIO
                  kill-phase-on: NEVER
                  abort-all-job: false
                  git-revision: false

########################
# parameter macros
########################
- parameter:
    name: apex-parameter
    parameters:
        - string:
            name: ARTIFACT_NAME
            default: 'latest'
            description: "RPM Artifact name that will be appended to GS_URL to deploy a specific artifact"
        - string:
            name: ARTIFACT_VERSION
            default: 'daily'
            description: "Artifact version type"
        - string:
            name: BUILD_DIRECTORY
            default: $WORKSPACE/.build
            description: "Directory where the build artifact will be located upon the completion of the build."
        - string:
            name: CACHE_DIRECTORY
            default: $HOME/opnfv/apex-cache{gs-pathname}
            description: "Directory where the cache to be used during the build is located."
        - string:
            name: GIT_BASE
            default: https://gerrit.opnfv.org/gerrit/$PROJECT
            description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW."
        - string:
            name: GS_PATHNAME
            default: '{gs-pathname}'
            description: "Version directory where opnfv artifacts are stored in gs repository"
        - string:
            name: GS_URL
            default: $GS_BASE{gs-pathname}
            description: "URL to Google Storage."
        - string:
            name: PROMOTE
            default: 'False'
            description: "Flag to know if we should promote/upload snapshot artifacts."

########################
# builder macros
########################
{% for stream in scenarios %}
# {{ stream }} Builder
- builder:
      name: apex-builder-{{ stream }}
      builders:
        - multijob:
            name: Baremetal Deploy and Test Phase
            condition: SUCCESSFUL
            projects:
{% for scenario in scenarios[stream] %}
                - name: 'apex-{{ scenario }}-baremetal-{{ stream }}'
                  node-parameters: false
                  current-parameters: false
                  predefined-parameters: |
                    OPNFV_CLEAN=yes
                  kill-phase-on: NEVER
                  abort-all-job: true
                  git-revision: false
{% endfor %}
{% endfor %}

- builder:
    name: 'apex-unit-test'
    builders:
        - shell:
            !include-raw: ./apex-unit-test.sh

- builder:
    name: 'apex-upload-artifact'
    builders:
        - shell:
            !include-raw: ./apex-upload-artifact.sh

- builder:
    name: 'apex-download-artifact'
    builders:
        - shell:
            !include-raw: ./apex-download-artifact.sh

- builder:
    name: 'apex-deploy'
    builders:
        - shell:
            !include-raw: ./apex-deploy.sh

#######################
# trigger macros
########################
- trigger:
    name: 'apex-master'
    triggers:
        - timed: '0 3 1 1 7'
- trigger:
    name: 'apex-euphrates'
    triggers:
        - timed: '0 12 * * *'
- trigger:
    name: 'apex-danube'
    triggers:
        - timed: '0 3 1 1 7'