def groovy

pipeline {
  agent none

  parameters {
    choice(name: 'MODE', choices: ['Release', 'Milestone'], description: 'The deploy mode')
    string(name: 'MILESTONE_VERSION', defaultValue: 'MO', description: 'Only for milestone build')
  }

  stages {

    stage('Load groovy script') {
      agent any
      stages {
        stage('Checkout') {
          steps {
            checkout scm
            script {
              groovy = load('releng/Jenkinsfile.groovy')
            }
          }
        }
      }
    }

    stage('Launch agent') {
      agent {
        kubernetes {
          label 'rcptt-build-and-deploy-agent-3.5.4'
          yaml "${env.YAML_BUILD_AND_DEPLOY_AGENT}"
        }
      }
      stages {
        stage('Start Build and Test') {
          steps {
            script {
              if(params.MODE == 'Milestone') {
                groovy.set_milestone(params.MILESTONE_VERSION)
              }
              groovy.build_and_test(true)
            }
          }
        }
        stage('Deploy') {
          steps {
            script {
              groovy.deploy(params.MODE, params.MILESTONE_VERSION)
            }
          }
        }
      }
      post {
        always {
          script {
            groovy.post_build_actions()
          }
        }
      }
    }

  }
}