#!groovy

node {
  // System Dependent Locations
  def mvntool = tool name: 'maven3', type: 'hudson.tasks.Maven$MavenInstallation'
  def jdktool = tool name: 'jdk8', type: 'hudson.model.JDK'

  // Environment
  List mvnEnv = ["PATH+MVN=${mvntool}/bin", "PATH+JDK=${jdktool}/bin", "JAVA_HOME=${jdktool}/", "MAVEN_HOME=${mvntool}"]
  mvnEnv.add("MAVEN_OPTS=-Xms256m -Xmx1024m -Djava.awt.headless=true")

  try
  {
    stage('Checkout') {
      checkout scm
    }
  } catch (Exception e) {
    notifyBuild("Checkout Failure")
    throw e
  }

  try
  {
    stage('Compile') {
      withEnv(mvnEnv) {
        timeout(time: 15, unit: 'MINUTES') {
          sh "mvn -B clean install -Dtest=None"
        }
      }
    }
  } catch(Exception e) {
    notifyBuild("Compile Failure")
    throw e
  }

  try
  {
    stage('Javadoc') {
      withEnv(mvnEnv) {
        timeout(time: 15, unit: 'MINUTES') {
          sh "mvn -B javadoc:javadoc"
        }
      }
    }
  } catch(Exception e) {
    notifyBuild("Javadoc Failure")
    throw e
  }

  try
  {
    stage('Test') {
      withEnv(mvnEnv) {
        timeout(time: 90, unit: 'MINUTES') {
          // Run test phase / ignore test failures
          sh "mvn -B install -Dmaven.test.failure.ignore=true"
          // Report failures in the jenkins UI
          step([$class: 'JUnitResultArchiver', 
              testResults: '**/target/surefire-reports/TEST-*.xml'])
          // Collect up the jacoco execution results
          def jacocoExcludes = 
              // build tools
              "**/org/eclipse/jetty/ant/**" +
              ",**/org/eclipse/jetty/maven/**" +
              ",**/org/eclipse/jetty/jspc/**" +
              // example code / documentation
              ",**/org/eclipse/jetty/embedded/**" +
              ",**/org/eclipse/jetty/asyncrest/**" +
              ",**/org/eclipse/jetty/demo/**" +
              // special environments / late integrations
              ",**/org/eclipse/jetty/gcloud/**" +
              ",**/org/eclipse/jetty/infinispan/**" +
              ",**/org/eclipse/jetty/osgi/**" +
              ",**/org/eclipse/jetty/spring/**" +
              ",**/org/eclipse/jetty/http/spi/**" +
              // test classes
              ",**/org/eclipse/jetty/tests/**" +
              ",**/org/eclipse/jetty/test/**";
          step([$class: 'JacocoPublisher', 
              inclusionPattern: '**/org/eclipse/jetty/**/*.class',
              exclusionPattern: jacocoExcludes,
              execPattern: '**/target/jacoco.exec', 
              classPattern: '**/target/classes', 
              sourcePattern: '**/src/main/java'])
          // Report on Maven and Javadoc warnings
          step([$class: 'WarningsPublisher', 
              consoleParsers: [
                  [parserName: 'Maven'],
                  [parserName: 'JavaDoc'],
                  [parserName: 'JavaC']
              ]])
        }
        if(isUnstable())
        {
          notifyBuild("Unstable / Test Errors")
        }
      }
    }
  } catch(Exception e) {
    notifyBuild("Test Failure")
    throw e
  }

  try
  {
    stage 'Compact3'

    dir("aggregates/jetty-all-compact3") {
      withEnv(mvnEnv) {
        sh "mvn -B -Pcompact3 clean install"
      }
    }
  } catch(Exception e) {
    notifyBuild("Compact3 Failure")
    throw e
  }
}

// True if this build is part of the "active" branches
// for Jetty.
def isActiveBranch()
{
  def branchName = "${env.BRANCH_NAME}"
  return ( branchName == "master" ||
           branchName.startsWith("jetty-") );
}

// Test if the Jenkins Pipeline or Step has marked the
// current build as unstable
def isUnstable()
{
  return currentBuild.result == "UNSTABLE"
}

// Send a notification about the build status
def notifyBuild(String buildStatus)
{
  if ( !isActiveBranch() )
  {
    // don't send notifications on transient branches
    return
  }

  // default the value
  buildStatus = buildStatus ?: "UNKNOWN"

  def email = "${env.EMAILADDRESS}"
  def summary = "${env.JOB_NAME}#${env.BUILD_NUMBER} - ${buildStatus}"
  def detail = """<h4>Job: <a href='${env.JOB_URL}'>${env.JOB_NAME}</a> [#${env.BUILD_NUMBER}]</h4>
  <p><b>${buildStatus}</b></p>
  <table>
    <tr><td>Build</td><td><a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></td><tr>
    <tr><td>Console</td><td><a href='${env.BUILD_URL}console'>${env.BUILD_URL}console</a></td><tr>
    <tr><td>Test Report</td><td><a href='${env.BUILD_URL}testReport/'>${env.BUILD_URL}testReport/</a></td><tr>
  </table>
  """

  emailext (
    to: email,
    subject: summary,
    body: detail
  )
}

// vim: et:ts=2:sw=2:ft=groovy
