pipeline {
  agent none
  stages {
    stage('Start Parallelworks Cluster') {
       agent {
        label 'built-in'   
       }
      steps {
        script {
          for (label in pullRequest.labels) {
            if ((label.matches("(.*)-aws-(.*)"))) {
                 env.CHOICE_NODE='pclusternoaav2use1'
            }  
            else if ((label.matches("(.*)-gcp-(.*)"))) { 
                env.CHOICE_NODE='gclusternoaav2usc1'
            }  
            else if ((label.matches("(.*)-azure-(.*)"))) {
                env.CHOICE_NODE='azclusternoaav2use1'
            }  
            else { 
                env.CHOICE_NODE='none'
            }
         }
// Why do I need another if..block, because it just works this way.

            if (CHOICE_NODE == 'azclusternoaav2use1') {
                echo "Starting up Parallelworks cluster ${CHOICE_NODE}...this might take 5-10 minutes...please be patient."
                build job: 'parallel-works-jenkins-client/start-cluster', parameters: [string(name: 'PW_CLUSTER_NAME', value: 'azclusternoaav2use1'), string(name: 'PW_CLUSTER_SSH_KEY', value: '~/.ssh/pw_id_rsa'), string(name: 'JAVA_VERSION', value: '11')]

            } 
             else if (CHOICE_NODE == 'gclusternoaav2usc1') {
                echo "Starting up Parallelworks cluster ${CHOICE_NODE}...this might take 5-10 minutes...please be patient."
                build job: 'parallel-works-jenkins-client/start-cluster', parameters: [string(name: 'PW_CLUSTER_NAME', value: 'gclusternoaav2usc1'), string(name: 'PW_CLUSTER_SSH_KEY', value: '~/.ssh/pw_id_rsa'), string(name: 'JAVA_VERSION', value: '11')]
            }
             else if (CHOICE_NODE == 'pclusternoaav2use1') {
                 echo "Starting up Parallelworks cluster ${CHOICE_NODE}...this might take 5-10 minutes...please be patient."
                build job: 'parallel-works-jenkins-client/start-cluster', parameters: [string(name: 'PW_CLUSTER_NAME', value: 'pclusternoaav2use1'), string(name: 'PW_CLUSTER_SSH_KEY', value: '~/.ssh/pw_id_rsa'), string(name: 'JAVA_VERSION', value: '11')]
            }
             else {
                echo "${CHOICE_NODE} is NOT a Parallelworks cluster, moving on..."
            }
       }    
    }
  } 
  stage('Run Regression Tests script') {
        agent {
          label "${CHOICE_NODE}"
        }
        environment {
        GITHUB_SSH_KEY = credentials('ParallelworksGithubPrivateKey')
        ACCNR = 'epic'
        GITHUB_TOKEN = credentials('zachgithubtoken')
        NODE_PATH = '/lustre/'
      }
      steps {
          script {
            for (label in pullRequest.labels) {
            if ((label.matches("(.*)-BL"))) {
               env.CREATE_BASELINES='true'
            } 
            else {
               env.CREATE_BASELINES='false'
            }
          }
        }
        cleanWs()
        checkout scm
        sh '''
        pwd
        git submodule update --init --recursive
        cd tests/
        if [[ "${CREATE_BASELINES}" = true ]] 
        then
        echo "Creating baselines for regressions tests"
        ./rt.sh -c -l rt.conf
        echo "Sending regression test logs to $GIT_URL"
        git config user.email "ecc.platform@noaa.gov"
        git config user.name "epic-cicd-jenkins"
        set +x
        cd ${WORKSPACE}
        export httpsorigin=`echo ${GIT_URL} | sed -e "s/github/$GITHUB_TOKEN@github/"` > /dev/null 2>&1 
        git remote -v | grep -w httpsorigin > /dev/null 2>&1 && git remote remove httpsorigin > /dev/null 2>&1
        git remote add httpsorigin $httpsorigin > /dev/null 2>&1
        git add tests/logs/RegressionTests_noaacloud.log
        git commit -m "[AutoRT] noaacloud Job Completed.\n\n\n on-behalf-of @ufs-community <ecc.platform@noaa.gov>" 
        git push httpsorigin HEAD:$CHANGE_BRANCH > /dev/null 2>&1
        set -x
        echo "Pushed logs to $GIT_URL $CHANGE_BRANCH"
        echo "Removing labels from $GIT_URL"
        GIT_OWNER=$(echo $GIT_URL | cut -d '/' -f4)
        GIT_REPO_NAME=$(echo $GIT_URL | cut -d '/' -f5 | cut -d '.' -f1)
        curl --silent -X DELETE -H "Accept: application/vnd.github.v3+json" -H "Authorization: Bearer ${GITHUB_TOKEN}"  https://api.github.com/repos/${GIT_OWNER}/${GIT_REPO_NAME}/issues/${CHANGE_ID}/labels -d '{"labels":[".*BL"]}'
        else
        echo "Running regression tests and NOT creating baselines."
        ./rt.sh -l rt.conf
        echo "Sending regression test logs to $GIT_URL"
        git config user.email "ecc.platform@noaa.gov"
        git config user.name "epic-cicd-jenkins"
        set +x
        cd ${WORKSPACE}
        export httpsorigin=`echo ${GIT_URL} | sed -e "s/github/$GITHUB_TOKEN@github/"` > /dev/null 2>&1 
        git remote -v | grep -w httpsorigin > /dev/null 2>&1 && git remote remove httpsorigin > /dev/null 2>&1
        git remote add httpsorigin $httpsorigin > /dev/null 2>&1
        git add tests/logs/RegressionTests_noaacloud.log
        git commit -m "[AutoRT] noaacloud Job Completed.\n\n\n on-behalf-of @ufs-community <ecc.platform@noaa.gov>" 
        git push httpsorigin HEAD:$CHANGE_BRANCH > /dev/null 2>&1
        set -x
        echo "Pushed logs to $GIT_URL $CHANGE_BRANCH"
        echo "Removing labels from $GIT_URL"
        GIT_OWNER=$(echo $GIT_URL | cut -d '/' -f4)
        GIT_REPO_NAME=$(echo $GIT_URL | cut -d '/' -f5 | cut -d '.' -f1)
        curl --silent -X DELETE -H "Accept: application/vnd.github.v3+json" -H "Authorization: Bearer ${GITHUB_TOKEN}"  https://api.github.com/repos/${GIT_OWNER}/${GIT_REPO_NAME}/issues/${CHANGE_ID}/labels -d '{"labels":[".*RT"]}'
        fi
        '''
      }
 }
  stage('Stop Parallelworks Cluster') {
       agent {
        label 'built-in'   
       }
      // Pedantic comment.
      steps {
        script {
          if (CHOICE_NODE == 'azclusternoaav2use1') {
                echo "Shutting Down Parallelworks cluster ${CHOICE_NODE}."
                build job: 'parallel-works-jenkins-client/stop-cluster', parameters: [string(name: 'PW_CLUSTER_NAME', value: 'azclusternoaav2use1')]

            } 
          else if (CHOICE_NODE == 'gclusternoaav2usc1') {
                echo "Shutting Down Parallelworks cluster ${CHOICE_NODE}."
                build job: 'parallel-works-jenkins-client/stop-cluster', parameters: [string(name: 'PW_CLUSTER_NAME', value: 'gclusternoaav2usc1')]
            }
          else if (CHOICE_NODE == 'pclusternoaav2use1') {
                echo "Shutting Down Parallelworks cluster ${CHOICE_NODE}."
                build job: 'parallel-works-jenkins-client/stop-cluster', parameters: [string(name: 'PW_CLUSTER_NAME', value: 'pclusternoaav2use1')]
            }
          else {
                echo "${CHOICE_NODE} is NOT a Parallelworks cluster, moving on..."
            }
        }    
      }
    }
  }
}