pipeline {
  agent none
  options {
    disableConcurrentBuilds()
    buildDiscarder(logRotator(numToKeepStr: '8', daysToKeepStr: '20'))
  }
  stages {
    stage('ITensorGPU test') {
      parallel {
        stage('julia-1.6') {
	  options {
            timeout(time: 45, unit: 'MINUTES')
          }
          agent {
            dockerfile {
              label 'gpu&&v100'
              filename 'Dockerfile'
              dir 'jenkins'
              additionalBuildArgs  '--build-arg JULIA=1.6'
              args '--gpus "device=0"'
            }
          }
          environment {
            HOME = pwd(tmp:true)
            OMP_NUM_THREADS = 4
            JULIA_NUM_THREADS = 4
          }
          steps {
            sh '''
              julia --project=monorepo -e 'using Pkg; Pkg.Registry.update(); Pkg.develop(; path="./NDTensors"); Pkg.develop(; path="."); Pkg.develop(; path="./ITensorGPU"); Pkg.test("ITensorGPU");'
            '''
          }
        }
        stage('julia-1.7') {
	  options {
            timeout(time: 45, unit: 'MINUTES')
          }
          agent {
            dockerfile {
              label 'gpu&&v100'
              filename 'Dockerfile'
              dir 'jenkins'
              additionalBuildArgs  '--build-arg JULIA=1.7'
              args '--gpus "device=0"'
            }
          }
          environment {
            HOME = pwd(tmp:true)
            OMP_NUM_THREADS = 4
            JULIA_NUM_THREADS = 4
          }
          steps {
            sh '''
              julia --project=monorepo -e 'using Pkg; Pkg.Registry.update(); Pkg.develop(; path="./NDTensors"); Pkg.develop(; path="."); Pkg.develop(; path="./ITensorGPU"); Pkg.test("ITensorGPU");'
            '''
          }
        }
        stage('julia-1.8') {
	  options {
            timeout(time: 45, unit: 'MINUTES')
          }
          agent {
            dockerfile {
              label 'gpu&&v100'
              filename 'Dockerfile'
              dir 'jenkins'
              additionalBuildArgs  '--build-arg JULIA=1.8'
              args '--gpus "device=1"'
            }
          }
          environment {
            HOME = pwd(tmp:true)
            OMP_NUM_THREADS = 4
            JULIA_NUM_THREADS = 4
          }
          steps {
            sh '''
              julia --project=monorepo -e 'using Pkg; Pkg.Registry.update(); Pkg.develop(; path="./NDTensors"); Pkg.develop(; path="."); Pkg.develop(; path="./ITensorGPU"); Pkg.test("ITensorGPU");'
            '''
          }
        }
      }
    }
  }
}
