
pipeline {
    agent any
    options {
        timestamps()
        timeout(activity: true, time: 4, unit: 'HOURS')    
    }

    stages {
        stage ('fetch-opa-psm2')  {
             steps {
                 withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin']) { 
                     dir('opa-psm2-lib') {

                        checkout changelog: false, poll: false, scm: [$class: 'GitSCM', \
                        branches: [[name: '*/master']], \
                        doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], \
                        userRemoteConfigs: [[url: 'https://github.com/intel/opa-psm2.git']]]                        
                      }
                 }
             }
        }
        
        stage ('build-libfabric') {
            steps {
                withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin']) { 
                sh """ 
                  python3.7 contrib/intel/jenkins/build.py 'libfabric' --ofi_build_mode='dbg'
                  echo "libfabric build completed"  
                 """
                }
            }
        }
        stage('build-fabtests') {
            steps {
                withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin']) { 
                sh """
                python3.7 contrib/intel/jenkins/build.py 'fabtests' --ofi_build_mode='dbg'              
                echo 'fabtests build completed' 
                """
                }
            }
        }
        
        stage ('build-shmem') {
            steps {
              withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin']) {
                sh """
                python3.7  contrib/intel/jenkins/build.py 'shmem' --ofi_build_mode='dbg'
                echo 'shmem benchmarks built successfully'
                """
                }
              }
          }
  
        stage ('build OMPI_bm') {
              steps {
              withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin']) {
                  sh """
                  python3.7 contrib/intel/jenkins/build.py 'ompi_benchmarks' --ofi_build_mode='dbg'
                  echo 'mpi benchmarks with ompi - built successfully'
                 """
                }
              }
          }
    
    stage('build IMPI_bm') {
        steps {
          withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin']) {
                sh """
                python3.7 contrib/intel/jenkins/build.py 'impi_benchmarks' --ofi_build_mode='dbg'
                echo 'mpi benchmarks with impi - built successfully'
                """
            }
          }
      }  
    
    stage('build MPICH_bm') {
        steps {
          withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin']) {
                sh """
                python3.7 contrib/intel/jenkins/build.py 'mpich_benchmarks' --ofi_build_mode='dbg'
                echo "mpi benchmarks with mpich - built successfully"
                """
              }
            }
        }
   stage('parallel-tests') {
            parallel { 
                 stage('eth-tcp-dbg') {
                    agent {node {label 'eth'}}
                    steps{
                        withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin/:$PYTHONPATH'])
                        {
                          sh """
                            env
                            (
                                cd  ${env.WORKSPACE}/contrib/intel/jenkins/
                                python3.7 runtests.py --prov=tcp --ofi_build_mode='dbg'
                            )
                          """
                        }
                     }
                 }
                 stage('eth-udp-shm-dbg') {
                     agent {node {label 'eth'}}
                     steps{
                        withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin/:$PYTHONPATH'])
                        {
                          sh """
                            env
                            (
                                cd  ${env.WORKSPACE}/contrib/intel/jenkins/
                                python3.7 runtests.py --prov=udp --ofi_build_mode='dbg'
                                python3.7 runtests.py --prov=udp --util=rxd --ofi_build_mode='dbg'
                                python3.7 runtests.py --prov=shm --ofi_build_mode='dbg'
                            )
                          """
                        }
                     }

                 }
                 stage('hfi1-psm2-verbs-dbg') {
                     agent {node {label 'hfi1'}}
                     steps{
                        withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin:$PYTHONPATH']) {
                          sh """
                            env
                            (
                                cd ${env.WORKSPACE}/contrib/intel/jenkins/
                                python3.7 runtests.py --prov=psm2 --ofi_build_mode='dbg'
                                python3.7 runtests.py --prov=verbs --ofi_build_mode='dbg'
                            )
                         """
                        }
                     }
                 }
                
                 stage('hfi1-verbs_rxd-dbg') {
                    agent {node {label 'hfi1'}}
                     steps{
                        withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin:$PYTHONPATH']) {
                          sh """
                            env
                            (
                                cd ${env.WORKSPACE}/contrib/intel/jenkins/
                                python3.7 runtests.py --prov=verbs --util=rxd --ofi_build_mode='dbg'
                            )
                         """
                        }
                     }
                 }
                 stage('hfi1-verbs_rxm-dbg') {
                     agent {node {label 'hfi1'}}
                     steps{
                        withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin:$PYTHONPATH']) {
                          sh """
                            env
                            (
                                cd ${env.WORKSPACE}/contrib/intel/jenkins/
                                python3.7 runtests.py --prov=verbs --util=rxm --ofi_build_mode='dbg'
                            )
                         """
                        }
                     }
                 }
                 stage('mlx5-verbs_rxm-dbg') {
                     agent {node {label 'mlx5'}}
                     steps{
                        withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin:$PYTHONPATH']) {
                          sh """
                            env
                            (
                                cd ${env.WORKSPACE}/contrib/intel/jenkins/
                                python3.7 runtests.py --prov=verbs --ofi_build_mode='dbg'
                                python3.7 runtests.py --prov=verbs --util=rxm --ofi_build_mode='dbg'
                            )
                          """
                        }
                     }
                 }
                 stage('mlx5-verbs_rxd-dbg') {
                     agent {node {label 'mlx5'}}
                     steps{
                        withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin:$PYTHONPATH']) {
                          sh """
                            env
                            (
                                cd ${env.WORKSPACE}/contrib/intel/jenkins/
                                python3.7 runtests.py --prov=verbs --util=rxd --ofi_build_mode='dbg'
                            )
                          """
                        }
                     }
                 }     
            } 
   }        

  }
 
  post {
    cleanup {
        withEnv(['PATH+EXTRA=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin:$PYTHONPATH']) {
            sh "rm -rf '/mpibuilddir/mpich-build-dir/${env.JOB_NAME}/${env.BUILD_NUMBER}'"
            sh "rm -rf '/mpibuilddir/ompi-build-dir/${env.JOB_NAME}/${env.BUILD_NUMBER}'"
            dir("${env.WORKSPACE}"){
                deleteDir()
            }
        }
    }  
  }
  
}
