- project:
    name: apex
    jobs:
        - 'apex-verify-{stream1}'
        - 'apex-verify-{stream2}'
        - 'apex-runner-{platform}-{scenario}-{stream}'
        - 'apex-build-{stream}'
        - 'apex-deploy-virtual-{scenario}-{stream}'
        - 'apex-deploy-baremetal-{scenario}-{stream}'
        - 'apex-daily-{stream1}'
        - 'apex-daily-{stream2}'

    # stream:    branch with - in place of / (eg. stable-arno)
    # branch:    branch (eg. stable/arno)
    stream:
        - master:
            branch: 'master'
            gs-pathname: ''
            block-stream: 'brahmaputra'
            slave: 'intel-pod7'
        - brahmaputra:
            branch: 'stable/brahmaputra'
            gs-pathname: '/brahmaputra'
            block-stream: 'master'
            slave: 'opnfv-jump-1'
            disabled: false

    stream1:
        - master:
            branch: 'master'
            gs-pathname: ''
            block-stream: 'brahmaputra'
            slave: 'intel-pod7'

    stream2:
        - brahmaputra:
            branch: 'stable/brahmaputra'
            gs-pathname: '/brahmaputra'
            block-stream: 'master'
            slave: 'opnfv-jump-1'
            disabled: false

    project: 'apex'

    scenario:
         - 'os-nosdn-nofeature-ha'
         - 'os-odl_l2-nofeature-ha'
         - 'os-odl_l2-bgpvpn-ha'
         - 'os-odl_l2-sfc-noha'
         - 'os-odl_l3-nofeature-ha'
         - 'os-onos-nofeature-ha'
         - 'os-opencontrail-nofeature-ha'

    platform:
         - 'baremetal'
         - 'virtual'

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

    node: '{slave}'

    parameters:
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - project-parameter:
            project: '{project}'
        - gerrit-parameter:
            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:
        - gerrit-trigger-scm:
            credentials-id: '{ssh-credentials}'
            refspec: '$GERRIT_REFSPEC'
            choosing-strategy: 'gerrit'

    triggers:
        - gerrit:
            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}'
                file-paths:
                  - compare-type: ANT
                    pattern: 'ci/**'
                  - compare-type: ANT
                    pattern: 'build/**'
                  - compare-type: ANT
                    pattern: 'lib/**'
                  - compare-type: ANT
                    pattern: 'config/**'

    properties:
        - build-blocker:
            use-build-blocker: true
            blocking-jobs:
                - 'apex-daily.*{stream2}'
                - 'apex-deploy.*{stream2}'
                - 'apex-build.*{stream2}'
                - 'apex-runner.*{stream2}'
                - 'apex-verify-{stream2}'

    builders:
        - 'apex-build'
        - trigger-builds:
          - project: 'apex-deploy-virtual-os-odl_l2-nofeature-ha-{stream2}'
            predefined-parameters: |
              BUILD_DIRECTORY=apex-verify-{stream2}/build_output
              OPNFV_CLEAN=yes
            git-revision: false
            block: true
        - trigger-builds:
          - project: 'apex-deploy-virtual-os-onos-nofeature-ha-{stream2}'
            predefined-parameters: |
              BUILD_DIRECTORY=apex-verify-{stream2}/build_output
              OPNFV_CLEAN=yes
            git-revision: false
            block: true
        - trigger-builds:
          - project: 'apex-deploy-virtual-os-odl_l3-nofeature-ha-{stream2}'
            predefined-parameters: |
              BUILD_DIRECTORY=apex-verify-{stream2}/build_output
              OPNFV_CLEAN=yes
            git-revision: false
            block: true
        - trigger-builds:
          - project: 'apex-deploy-virtual-os-odl_l2-sfc-noha-{stream2}'
            predefined-parameters: |
              BUILD_DIRECTORY=apex-verify-{stream2}/build_output
              OPNFV_CLEAN=yes
            git-revision: false
            block: true
        - 'apex-workspace-cleanup'

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

    node: '{slave}'

    parameters:
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - project-parameter:
            project: '{project}'
        - gerrit-parameter:
            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:
        - gerrit-trigger-scm:
            credentials-id: '{ssh-credentials}'
            refspec: '$GERRIT_REFSPEC'
            choosing-strategy: 'gerrit'

    triggers:
        - gerrit:
            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}'
                file-paths:
                  - compare-type: ANT
                    pattern: 'ci/**'
                  - compare-type: ANT
                    pattern: 'build/**'
                  - compare-type: ANT
                    pattern: 'lib/**'
                  - compare-type: ANT
                    pattern: 'config/**'

    properties:
        - build-blocker:
            use-build-blocker: true
            blocking-jobs:
                - 'apex-daily.*{stream1}'
                - 'apex-deploy.*{stream1}'
                - 'apex-build.*{stream1}'
                - 'apex-runner.*{stream1}'
                - 'apex-verify-{stream1}'

    builders:
        - 'apex-build'
        - trigger-builds:
          - project: 'apex-deploy-virtual-os-nosdn-nofeature-ha-{stream1}'
            predefined-parameters: |
              BUILD_DIRECTORY=apex-verify-{stream1}
              OPNFV_CLEAN=yes
            git-revision: false
            block: true
#        - trigger-builds:
#          - project: 'functest-apex-{slave}-suite-{stream1}'
#            predefined-parameters: |
#              DEPLOY_SCENARIO=os-nosdn-nofeature-ha
#              FUNCTEST_SUITE_NAME=vping_userdata
#            block: true
        - trigger-builds:
          - project: 'apex-deploy-virtual-os-odl_l2-nofeature-ha-{stream1}'
            predefined-parameters: |
              BUILD_DIRECTORY=apex-verify-{stream1}
              OPNFV_CLEAN=yes
            git-revision: false
            block: true
        - 'apex-workspace-cleanup'

- job-template:
    name: 'apex-runner-{platform}-{scenario}-{stream}'

    # runner jobs for deploying manually

    node: '{slave}'

    disabled: false

    parameters:
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - project-parameter:
            project: '{project}'
        - gerrit-parameter:
            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:
        - gerrit-trigger-scm:
            credentials-id: '{ssh-credentials}'
            refspec: ''
            choosing-strategy: 'default'

    properties:
        - build-blocker:
            use-build-blocker: true
            blocking-jobs:
                - 'apex-daily.*{stream}'
                - 'apex-verify.*{stream}'

    builders:
        - trigger-builds:
          - project: 'apex-deploy-{platform}-{scenario}-{stream}'
            predefined-parameters:
              OPNFV_CLEAN=yes
            git-revision: false
            block: true
        - trigger-builds:
          - project: 'yardstick-apex-{slave}-daily-{stream}'
            predefined-parameters:
              DEPLOY_SCENARIO={scenario}
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'
        - trigger-builds:
          - project: 'functest-apex-{slave}-daily-{stream}'
            predefined-parameters:
              DEPLOY_SCENARIO={scenario}
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'

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

    # Job template for builds
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    node: '{slave}'

    disabled: false

    parameters:
        - project-parameter:
            project: '{project}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - gerrit-parameter:
            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:
            credentials-id: '{ssh-credentials}'
            refspec: ''
            branch: '{branch}'

    properties:
        - build-blocker:
            use-build-blocker: true
            blocking-jobs:
                - 'apex-deploy.*{stream}'

    builders:
        - 'apex-build'
        - trigger-builds:
          - project: 'apex-deploy-virtual-os-nosdn-nofeature-ha-{stream}'
            predefined-parameters: |
              BUILD_DIRECTORY=apex-build-{stream}/build
              OPNFV_CLEAN=yes
            git-revision: false
            block: true
        - 'apex-upload-artifact'

- job-template:
    name: 'apex-deploy-virtual-{scenario}-{stream}'

    # Job template for virtual deployment
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    node: '{slave}'

    disabled: false

    scm:
        - git-scm:
            credentials-id: '{ssh-credentials}'
            refspec: ''
            branch: '{branch}'

    parameters:
        - project-parameter:
            project: '{project}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - string:
            name: DEPLOY_SCENARIO
            default: '{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:
        - build-blocker:
            use-build-blocker: true
            blocking-jobs:
                - 'apex-deploy.*{stream}'

    builders:
        - 'apex-deploy-virtual'
        - 'apex-workspace-cleanup'

- job-template:
    name: 'apex-deploy-baremetal-{scenario}-{stream}'

    # Job template for baremetal deployment
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    node: '{slave}'

    disabled: false

    scm:
        - git-scm:
            credentials-id: '{ssh-credentials}'
            refspec: ''
            branch: '{branch}'

    parameters:
        - project-parameter:
            project: '{project}'
        - apex-parameter:
            gs-pathname: '{gs-pathname}'
        - string:
            name: DEPLOY_SCENARIO
            default: '{scenario}'
            description: "Scenario to deploy with."

    properties:
        - build-blocker:
            use-build-blocker: true
            blocking-jobs:
                - 'apex-verify.*{stream}'
                - 'apex-deploy.*{stream}'
                - 'apex-build.*{stream}'


    builders:
        - 'apex-deploy-baremetal'
        - 'apex-workspace-cleanup'

# Brahmaputra Daily
- job-template:
    name: 'apex-daily-{stream2}'

    # Job template for daily build
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    node: '{slave}'

    disabled: true

    scm:
        - git-scm:
            credentials-id: '{ssh-credentials}'
            refspec: ''
            branch: '{branch}'

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

    properties:
        - build-blocker:
            use-build-blocker: true
            blocking-jobs:
                - 'apex-verify.*{stream2}'
                - 'apex-deploy.*{stream2}'
                - 'apex-build.*{stream2}'
                - 'apex-runner.*{stream2}'

    triggers:
        - 'apex-{stream2}'

    builders:
        - trigger-builds:
          - project: 'apex-build-{stream2}'
            git-revision: true
            current-parameters: true
            block: true
        - trigger-builds:
          - project: 'apex-deploy-baremetal-os-odl_l2-nofeature-ha-{stream2}'
            predefined-parameters: |
              BUILD_DIRECTORY=apex-build-{stream2}/build_output
              OPNFV_CLEAN=yes
            git-revision: true
            block: true
        - trigger-builds:
          - project: 'functest-apex-{slave}-daily-{stream2}'
            predefined-parameters:
              DEPLOY_SCENARIO=os-odl_l2-nofeature-ha
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'
        - trigger-builds:
          - project: 'yardstick-apex-{slave}-daily-{stream2}'
            predefined-parameters:
              DEPLOY_SCENARIO=os-odl_l2-nofeature-ha
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'
        - trigger-builds:
          - project: 'apex-deploy-baremetal-os-onos-nofeature-ha-{stream2}'
            predefined-parameters:
              BUILD_DIRECTORY=apex-build-{stream2}/build_output
            git-revision: true
            block: true
        - trigger-builds:
          - project: 'functest-apex-{slave}-daily-{stream2}'
            predefined-parameters:
              DEPLOY_SCENARIO=os-onos-nofeature-ha
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'
        - trigger-builds:
          - project: 'yardstick-apex-{slave}-daily-{stream2}'
            predefined-parameters:
              DEPLOY_SCENARIO=os-onos-nofeature-ha
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'
        - trigger-builds:
          - project: 'apex-deploy-baremetal-os-odl_l3-nofeature-ha-{stream2}'
            predefined-parameters:
              BUILD_DIRECTORY=apex-build-{stream2}/build_output
            git-revision: true
            block: true
        - trigger-builds:
          - project: 'functest-apex-{slave}-daily-{stream2}'
            predefined-parameters:
              DEPLOY_SCENARIO=os-odl_l3-nofeature-ha
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'
        - trigger-builds:
          - project: 'yardstick-apex-{slave}-daily-{stream2}'
            predefined-parameters:
              DEPLOY_SCENARIO=os-odl_l3-nofeature-ha
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'
        - trigger-builds:
          - project: 'apex-deploy-baremetal-os-odl_l2-bgpvpn-ha-{stream2}'
            predefined-parameters:
              BUILD_DIRECTORY=apex-build-{stream2}/build_output
            git-revision: true
            block: true
        - trigger-builds:
          - project: 'functest-apex-{slave}-daily-{stream2}'
            predefined-parameters:
              DEPLOY_SCENARIO=os-odl_l2-bgpvpn-ha
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'
        - trigger-builds:
          - project: 'yardstick-apex-{slave}-daily-{stream2}'
            predefined-parameters:
              DEPLOY_SCENARIO=os-odl_l2-bgpvpn-ha
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'

# Master Daily
- job-template:
    name: 'apex-daily-{stream1}'

    # Job template for daily build
    #
    # Required Variables:
    #     stream:    branch with - in place of / (eg. stable)
    #     branch:    branch (eg. stable)
    node: '{slave}'

    disabled: false

    scm:
        - git-scm:
            credentials-id: '{ssh-credentials}'
            refspec: ''
            branch: '{branch}'

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

    properties:
        - build-blocker:
            use-build-blocker: true
            blocking-jobs:
                - 'apex-verify.*{stream1}'
                - 'apex-deploy.*{stream1}'
                - 'apex-build.*{stream1}'
                - 'apex-runner.*{stream1}'

    triggers:
        - 'apex-{stream1}'

    builders:
        - trigger-builds:
          - project: 'apex-build-{stream1}'
            git-revision: true
            current-parameters: true
            block: true
        - trigger-builds:
          - project: 'apex-deploy-virtual-nosdn-nofeature-ha-{stream1}'
            predefined-parameters: |
              BUILD_DIRECTORY=apex-build-{stream1}/build
              OPNFV_CLEAN=yes
            git-revision: true
            block: true
        - trigger-builds:
          - project: 'functest-apex-{slave}-daily-{stream1}'
            predefined-parameters:
              DEPLOY_SCENARIO=os-nosdn-nofeature-ha
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'
        - trigger-builds:
          - project: 'yardstick-apex-{slave}-daily-{stream1}'
            predefined-parameters:
              DEPLOY_SCENARIO=os-nosdn-nofeature-ha
            block: true
            block-thresholds:
                build-step-failure-threshold: 'never'
                failure-threshold: 'never'
                unstable-threshold: 'FAILURE'

- job-template:
    name: 'apex-gs-clean-{stream}'

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

    disabled: false

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

    builders:
        - 'apex-gs-clean'

    triggers:
        - 'apex-gs-clean-{stream}'


########################
# 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/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_URL
            default: artifacts.opnfv.org/$PROJECT{gs-pathname}
            description: "URL to Google Storage."

########################
# builder macros
########################
- builder:
    name: 'apex-build'
    builders:
        - shell: |
            #!/bin/bash
            set -o errexit
            set -o nounset
            set -o pipefail
            # log info to console
            echo "Starting the build of Apex using OpenStack Master packages. This will take some time..."
            echo "---------------------------------------------------------------------------------------"
            echo
            # create the cache directory if it doesn't exist
            [[ -d $CACHE_DIRECTORY ]] || mkdir -p $CACHE_DIRECTORY
            # set OPNFV_ARTIFACT_VERSION
            if echo $BUILD_TAG | grep "apex-verify" 1> /dev/null; then
              if echo $GERRIT_BRANCH | grep "brahmaputra" 1> /dev/null; then
                export OPNFV_ARTIFACT_VERSION=brahmaputra-dev${BUILD_NUMBER}
                export BUILD_ARGS="-v $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY $BUILD_DIRECTORY"
              else
                export OPNFV_ARTIFACT_VERSION=dev${BUILD_NUMBER}
                export BUILD_ARGS="-r $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY"
              fi
            elif [ "$ARTIFACT_VERSION" == "daily" ]; then
              if echo $GERRIT_BRANCH | grep "brahmaputra" 1> /dev/null; then
                export OPNFV_ARTIFACT_VERSION=brahmaputra-$(date -u +"%Y-%m-%d")
                export BUILD_ARGS="-v $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY $BUILD_DIRECTORY"
              else
                export OPNFV_ARTIFACT_VERSION=$(date -u +"%Y-%m-%d")
                export BUILD_ARGS="-r $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY --iso"
              fi
            else
              export OPNFV_ARTIFACT_VERSION=${ARTIFACT_VERSION}
              if echo $GERRIT_BRANCH | grep "brahmaputra" 1> /dev/null; then
                export BUILD_ARGS="-v $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY $BUILD_DIRECTORY"
              else
                export BUILD_ARGS="-r $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY --iso"
              fi
            fi
            # clean for stable but doesn't matter for master
            if echo $GERRIT_BRANCH | grep "brahmaputra" 1> /dev/null; then
              sudo opnfv-clean
            fi
            # start the build
            cd $WORKSPACE/ci
            ./build.sh $BUILD_ARGS
            RPM_VERSION=$(grep Version: $BUILD_DIRECTORY/opnfv-apex.spec | awk '{ print $2 }')-$(echo $OPNFV_ARTIFACT_VERSION | tr -d '_-')
            # list the contents of BUILD_OUTPUT directory
            ls -al $BUILD_DIRECTORY
            # save information regarding artifact into file
            (
                echo "OPNFV_ARTIFACT_VERSION=$OPNFV_ARTIFACT_VERSION"
                echo "OPNFV_GIT_URL=$(git config --get remote.origin.url)"
                echo "OPNFV_GIT_SHA1=$(git rev-parse HEAD)"
                echo "OPNFV_ARTIFACT_URL=$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso"
                echo "OPNFV_ARTIFACT_MD5SUM=$(md5sum $BUILD_DIRECTORY/release/OPNFV-CentOS-7-x86_64-$OPNFV_ARTIFACT_VERSION.iso | cut -d' ' -f1)"
                echo "OPNFV_SRPM_URL=$GS_URL/opnfv-apex-$RPM_VERSION.src.rpm"
                echo "OPNFV_RPM_URL=$GS_URL/opnfv-apex-$RPM_VERSION.noarch.rpm"
                echo "OPNFV_RPM_MD5SUM=$(md5sum $BUILD_DIRECTORY/noarch/opnfv-apex-$RPM_VERSION.noarch.rpm | cut -d' ' -f1)"
                echo "OPNFV_BUILD_URL=$BUILD_URL"
            ) > $WORKSPACE/opnfv.properties
            echo "--------------------------------------------------------"
            echo "Done!"

- builder:
    name: 'apex-workspace-cleanup'
    builders:
        - shell: |
            #!/bin/bash
            set -o errexit
            set -o nounset
            set -o pipefail

            # delete everything that is in $WORKSPACE
            sudo /bin/rm -rf $WORKSPACE

- builder:
    name: 'apex-upload-artifact'
    builders:
        - shell: |
            #!/bin/bash
            set -o errexit
            set -o nounset
            set -o pipefail

            # log info to console
            echo "Uploading the Apex artifact. This could take some time..."
            echo "--------------------------------------------------------"
            echo

            # source the opnfv.properties to get ARTIFACT_VERSION
            source $WORKSPACE/opnfv.properties

            # upload artifact and additional files to google storage
            gsutil cp $BUILD_DIRECTORY/release/OPNFV-CentOS-7-x86_64-$OPNFV_ARTIFACT_VERSION.iso gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso > gsutil.iso.log 2>&1
            RPM_INSTALL_PATH=$BUILD_DIRECTORY/noarch
            RPM_LIST=$RPM_INSTALL_PATH/$(basename $OPNFV_RPM_URL)
            VERSION_EXTENSION=$(echo $(basename $OPNFV_RPM_URL) | sed 's/opnfv-apex-//')
            for pkg in common undercloud opendaylight-sfc onos; do
                RPM_LIST+=" ${RPM_INSTALL_PATH}/opnfv-apex-${pkg}-${VERSION_EXTENSION}"
            done
            SRPM_INSTALL_PATH=$BUILD_DIRECTORY
            SRPM_LIST=$SRPM_INSTALL_PATH/$(basename $OPNFV_SRPM_URL)
            for pkg in common undercloud opendaylight-sfc onos; do
                SRPM_LIST+=" ${SRPM_INSTALL_PATH}/opnfv-apex-${pkg}-${VERSION_EXTENSION}"
            done
            for artifact in $RPM_LIST $SRPM_LIST; do
              gsutil cp $artifact gs://$GS_URL/$(basename $artifact) > gsutil.iso.log 2>&1
            done
            gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.properties > gsutil.properties.log 2>&1
            gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/latest.properties > gsutil.latest.log 2>&1

            echo
            echo "--------------------------------------------------------"
            echo "Done!"
            echo "ISO Artifact is available as http://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso"
            echo "RPM Artifact is available as http://$GS_URL/$(basename $OPNFV_RPM_URL)"

- builder:
    name: 'apex-gs-cleanup'
    builders:
        - shell: |
            #!/bin/bash
            set -o errexit
            set -o nounset
            set -o pipefail

            # log info to console
            echo "Cleaning Google Storage"
            echo "-----------------------"
            echo

            thirty_days_ago=$(date -d "30 days ago" +"%Y%m%d")

            for i in $(gsutil ls gs://$GS_URL/*201?*); do
                filedate=$(date -d "$(echo $i | grep -Eo 201[0-9]-?[0-9][0-9]-?[0-9][0-9])" +"%Y%m%d")
                if [ $filedate -lt $thirty_days_ago ]; then
                  # gsutil indicates what it is removing so no need for output here
                  gsutil rm $i
                fi
            done

- builder:
    name: 'apex-deploy-virtual'
    builders:
        - shell: |
            #!/bin/bash
            set -o errexit
            set -o nounset
            set -o pipefail

            # log info to console
            echo "Starting the Apex virtual deployment."
            echo "--------------------------------------------------------"
            echo

            if [[ $BUILD_DIRECTORY == *verify-master* ]]; then
                cd $WORKSPACE/../${BUILD_DIRECTORY/build_output/}
                WORKSPACE=$(pwd)
                echo "WORKSPACE modified to $WORKSPACE"
                cd $WORKSPACE/ci
            elif [[ ! "$ARTIFACT_NAME" == "latest" ]]; then
                # if artifact name is passed the pull a
                # specific artifact from artifacts.opnfv.org
                RPM_INSTALL_PATH=$GS_URL
                RPM_LIST=$RPM_INSTALL_PATH/$ARTIFACT_NAME
            else
                if [[ $BUILD_DIRECTORY == *verify* ]]; then
                  BUILD_DIRECTORY=$WORKSPACE/../$BUILD_DIRECTORY
                  echo "BUILD DIRECTORY modified to $BUILD_DIRECTORY"
                elif [[ $BUILD_DIRECTORY == *apex-build* ]]; then
                  BUILD_DIRECTORY=$WORKSPACE/../$BUILD_DIRECTORY
                  echo "BUILD DIRECTORY modified to $BUILD_DIRECTORY"
                fi

                if [[ -f ${BUILD_DIRECTORY}/../opnfv.properties ]]; then
                    # if opnfv.properties exists then use the
                    # local build. Source the file so we get local OPNFV vars
                    source ${BUILD_DIRECTORY}/../opnfv.properties
                    RPM_INSTALL_PATH=${BUILD_DIRECTORY}/noarch
                    RPM_LIST=$RPM_INSTALL_PATH/$(basename $OPNFV_RPM_URL)
                else
                    if [[ $BUILD_DIRECTORY == *verify* ]]; then
                      echo "BUILD_DIRECTORY is from a verify job, so will not use latest from URL"
                      echo "Check that the slave has opnfv.properties in $BUILD_DIRECTORY"
                      exit 1
                    elif [[ $BUILD_DIRECTORY == *apex-build* ]]; then
                      echo "BUILD_DIRECTORY is from a daily job, so will not use latest from URL"
                      echo "Check that the slave has opnfv.properties in $BUILD_DIRECTORY"
                      exit 1
                    fi
                    # no opnfv.properties means use the latest from artifacts.opnfv.org
                    # get the latest.properties to get the link to the latest artifact
                    curl -s -o $WORKSPACE/opnfv.properties http://$GS_URL/latest.properties
                    [[ -f opnfv.properties ]] || exit 1
                    # source the file so we get OPNFV vars
                    source opnfv.properties
                    RPM_INSTALL_PATH=$(echo $OPNFV_RPM_URL | sed 's/'"$(basename $OPNFV_RPM_URL)"'//')
                    RPM_LIST=$RPM_INSTALL_PATH/$(basename $OPNFV_RPM_URL)
                fi
            fi

            if [ -z "$DEPLOY_SCENARIO" ]; then
              echo "Deploy scenario not set!"
              exit 1
            fi

            # use local build for verify
            if [[ $BUILD_DIRECTORY == *verify-master* ]]; then
                if [ ! -e "${WORKSPACE}/build/lib" ]; then ln -s ${WORKSPACE}/lib ${WORKSPACE}/build/lib; fi
                DEPLOY_CMD="CONFIG=${WORKSPACE}/build RESOURCES=${WORKSPACE}/build/images/ ./deploy.sh -c ${WORKSPACE}/build -r ${WORKSPACE}/build/images/"
                DEPLOY_FILE="${WORKSPACE}/config/deploy/${DEPLOY_SCENARIO}.yaml"
                NETWORK_FILE="${WORKSPACE}/config/network/network_settings.yaml"
                # Make sure python34 is installed
                if ! rpm -q python34 > /dev/null; then
                    sudo yum install -y epel-release
                    if ! sudo yum install -y python34; then
                        echo "Failed to install python34"
                        exit 1
                    fi
                fi
                if ! rpm -q python34-PyYAML > /dev/null; then
                    sudo yum install -y epel-release
                    if ! sudo yum install -y python34-PyYAML; then
                        echo "Failed to install python34-PyYAML"
                        exit 1
                    fi
                fi
                if ! rpm -q python34-setuptools > /dev/null; then
                    if ! sudo yum install -y python34-setuptools; then
                        echo "Failed to install python34-setuptools"
                        exit 1
                    fi
                fi
                if [ -z ${PYTHONPATH:-} ]; then
                    export PYTHONPATH=${WORKSPACE}/lib/python
                else
                    export PYTHONPATH=$PYTHONPATH:${WORKSPACE}/lib/python
                fi
            else
                VERSION_EXTENSION=$(echo $(basename $RPM_LIST) | sed 's/opnfv-apex-//')
                for pkg in common undercloud opendaylight-sfc onos; do
                    RPM_LIST+=" ${RPM_INSTALL_PATH}/opnfv-apex-${pkg}-${VERSION_EXTENSION}"
                done

                # update / install the new rpm
                if rpm -q opnfv-apex > /dev/null; then
                   INSTALLED_RPMS=$(rpm -qa | grep apex)
                   for x in $INSTALLED_RPMS; do
                     INSTALLED_RPM_VER=$(echo $x | sed 's/opnfv-apex-//').rpm
                     # Does each RPM's version match the version required for deployment
                     if [ "$INSTALLED_RPM_VER" == "$VERSION_EXTENSION" ]; then
                       echo "RPM $x is already installed"
                     else
                       echo "RPM $x does not match $VERSION_EXTENSION"
                       echo "Will upgrade/downgrade RPMs..."
                       # Try to upgrade/downgrade RPMS
                       if sudo yum update -y $RPM_LIST | grep "does not update installed package"; then
                         if ! sudo yum downgrade -y $RPM_LIST; then
                           sudo yum remove -y opnfv-apex-undercloud opnfv-apex-common opnfv-apex-opendaylight-sfc opnfv-apex-onos
                           sudo yum downgrade -y $RPM_INSTALL_PATH
                         fi
                       fi
                       break
                     fi
                   done
                else
                   sudo yum install -y $RPM_LIST;
                fi
                DEPLOY_CMD=opnfv-deploy
                DEPLOY_FILE="/etc/opnfv-apex/${DEPLOY_SCENARIO}.yaml"
                NETWORK_FILE="/etc/opnfv-apex/network_settings.yaml"
                export RESOURCES="/var/opt/opnfv/images"
                export CONFIG="/var/opt/opnfv"
            fi

            if [ "$OPNFV_CLEAN" == 'yes' ]; then
                if [[ $BUILD_DIRECTORY == *verify-master* ]]; then
                    sudo CONFIG=../lib ./clean.sh
                else
                    sudo opnfv-clean
                fi
            fi
            # initiate virtual deployment
            echo "Deploy Scenario set to ${DEPLOY_SCENARIO}"
            if [ -e $DEPLOY_FILE ]; then
              sudo $DEPLOY_CMD -v -d ${DEPLOY_FILE} -n $NETWORK_FILE --debug
            else
              echo "File does not exist /etc/opnfv-apex/${DEPLOY_SCENARIO}.yaml"
              exit 1
            fi
            echo
            echo "--------------------------------------------------------"
            echo "Done!"

- builder:
    name: 'apex-deploy-baremetal'
    builders:
        - shell: |
            #!/bin/bash
            set -o errexit
            set -o nounset
            set -o pipefail

            # log info to console
            echo "Starting the Apex baremetal deployment."
            echo "--------------------------------------------------------"
            echo

            if [[ ! "$ARTIFACT_NAME" == "latest" ]]; then
                # if artifact name is passed the pull a
                # specific artifact from artifacts.opnfv.org
                RPM_INSTALL_PATH=$GS_URL/$ARTIFACT_NAME
            else
                if [[ $BUILD_DIRECTORY == *apex-build* ]]; then
                  BUILD_DIRECTORY=$WORKSPACE/../$BUILD_DIRECTORY
                  echo "BUILD DIRECTORY modified to $BUILD_DIRECTORY"
                fi
                if [[ -f ${BUILD_DIRECTORY}/../opnfv.properties ]]; then
                    # if opnfv.properties exists then use the
                    # local build. Source the file so we get local OPNFV vars
                    source ${BUILD_DIRECTORY}/../opnfv.properties
                    RPM_INSTALL_PATH=${BUILD_DIRECTORY}/$(basename $OPNFV_RPM_URL)
                else
                    # no opnfv.properties means use the latest from artifacts.opnfv.org
                    # get the latest.properties to get the link to the latest artifact
                    curl -s -o $WORKSPACE/opnfv.properties http://$GS_URL/latest.properties
                    [[ -f opnfv.properties ]] || exit 1
                    # source the file so we get OPNFV vars
                    source opnfv.properties
                    RPM_INSTALL_PATH=$OPNFV_RPM_URL
                fi
            fi

            if [ ! -e "$RPM_INSTALL_PATH" ]; then
               RPM_INSTALL_PATH=http://${OPNFV_RPM_URL}
            fi

            RPM_LIST=$RPM_INSTALL_PATH
            for pkg in common undercloud; do
                RPM_LIST+=" ${RPM_INSTALL_PATH/opnfv-apex/opnfv-apex-${pkg}}"
            done

            # update / install the new rpm
            if rpm -q opnfv-apex > /dev/null; then
               if [ $(basename $OPNFV_RPM_URL) == $(rpm -q opnfv-apex).rpm ]; then
                 echo "RPM is already installed"
               elif sudo yum update -y $RPM_LIST | grep "does not update installed package"; then
                   if ! sudo yum downgrade -y $RPM_LIST; then
                     sudo yum remove -y opnfv-undercloud opnfv-common
                     sudo yum downgrade -y $RPM_INSTALL_PATH
                   fi
               fi
            else
               sudo yum install -y $RPM_LIST;
            fi

            # cleanup environment before we start
            sudo opnfv-clean
            # initiate baremetal deployment
            if [ -e /etc/opnfv-apex/network_settings.yaml ]; then
              if [ -n "$DEPLOY_SCENARIO" ]; then
                echo "Deploy Scenario set to ${DEPLOY_SCENARIO}"
                if [ -e /etc/opnfv-apex/${DEPLOY_SCENARIO}.yaml ]; then
                  sudo opnfv-deploy -i  /root/inventory/pod_settings.yaml \
                  -d /etc/opnfv-apex/${DEPLOY_SCENARIO}.yaml \
                  -n /root/network/network_settings.yaml --debug
                else
                  echo "File does not exist /etc/opnfv-apex/${DEPLOY_SCENARIO}.yaml"
                  exit 1
                fi
              else
                echo "Deploy scenario not set!"
                exit 1
              fi
            else
              echo "File /etc/opnfv-apex/network_settings.yaml does not exist!"
              exit 1
            fi

            echo
            echo "--------------------------------------------------------"
            echo "Done!"

#######################
# trigger macros
########################
- trigger:
    name: 'apex-master'
    triggers:
        - timed: '0 3 * * *'
- trigger:
    name: 'apex-brahmaputra'
    triggers:
        - timed: '0 3 * * *'
- trigger:
    name: 'apex-gs-clean-{stream}'
    triggers:
        - timed: '0 2 * * *'