pipeline {
  agent {
    // docker { image 'ros:kinetic-ros-base-xenial' }
    docker { image 'joinaero/kinetic-ros-opencv-xenial' }
  }

  /*
  environment {
    // FindOpenCV.cmake
    OpenCV_DIR = '/opt/ros/kinetic/share/OpenCV-3.3.1-dev'
  }
  */

  stages {
    stage('Prepare') {
      steps {
        echo "WORKSPACE: ${env.WORKSPACE}"
        echo 'apt-get ..'
        sh 'apt-get update'
      }
    }
    stage('Init') {
      steps {
        echo 'make init ..'
        sh 'make init INIT_OPTIONS=-y'
        // echo 'skip get submodules and make test'
        // sh './scripts/init.sh -y'
      }
    }
    stage('Build') {
      steps {
        echo 'make build ..'
        sh '. /opt/ros/kinetic/setup.sh; make build'
      }
    }
    stage('Install') {
      steps {
        echo 'make install ..'
        sh '. /opt/ros/kinetic/setup.sh; make install SUDO='
      }
    }
    stage('Test') {
      steps {
        echo 'make test ..'
        sh '. /opt/ros/kinetic/setup.sh; make test SUDO='
      }
    }
    stage('Samples') {
      steps {
        echo 'make samples ..'
        sh '. /opt/ros/kinetic/setup.sh; make samples SUDO='
      }
    }
    stage('Tools') {
      steps {
        echo 'make tools ..'
        sh '. /opt/ros/kinetic/setup.sh; make tools SUDO='
      }
    }
    stage('ROS') {
      steps {
        echo 'make ros ..'
        sh '''
        . /opt/ros/kinetic/setup.sh
        rosdep install --from-paths wrappers/ros/src --ignore-src --rosdistro kinetic -y
        make ros SUDO=
        '''
      }
    }
    /*
    stage('Clean') {
      steps {
        echo 'clean ..'
        sh '''
        rm -rf /var/lib/apt/lists/*
        '''
      }
    }
    */
  }

  post {
    always {
      echo 'This will always run'
    }
    success {
      echo 'This will run only if successful'
    }
    failure {
      echo 'This will run only if failed'
      mail to: 'mynteye-ci@slightech.com',
      subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
      body: "Something is wrong with ${env.BUILD_URL}"
    }
    unstable {
      echo 'This will run only if the run was marked as unstable'
    }
    changed {
      echo 'This will run only if the state of the Pipeline has changed'
      echo 'For example, if the Pipeline was previously failing but is now successful'
    }
  }
}