pipeline {
  agent { label 'basic-8gb' }

  tools {
      jdk 'semeru-jdk25-latest'
  }

  options {
    buildDiscarder(logRotator(numToKeepStr: '5'))
    disableConcurrentBuilds()
    timeout(time: 6, unit: 'HOURS')
    skipDefaultCheckout()
  }
  
   parameters {
    booleanParam(
      name: 'PROMOTE',
      defaultValue: true,
      description: '''
        Whether the results of the build should be promoted and made public under
        <a href="https://www.eclipse.org/setups/marketplace-listings/marketplace.eclipse.org.setup">marketplace.eclipse.org.setup</a>.
      '''
    )
  }

  stages {
      stage('Display Parameters') {
      steps {
        echo "PROMOTE=${params.PROMOTE}"
        script {
          env.PROMOTE = params.PROMOTE
        }
      }
    }

    stage('Analyzer') {
      steps {
        sshagent(['projects-storage.eclipse.org-bot-ssh']) {
          sh '''
            which java

            set -o pipefail
            LOGIN="genie.oomph@projects-storage.eclipse.org"
            OOMPH_DIR="/home/data/httpd/download.eclipse.org/oomph"

            scp ${LOGIN}:${OOMPH_DIR}/products/latest/eclipse-inst-linux64.tar.gz .
            tar --warning=no-unknown-keyword -xf eclipse-inst-linux64.tar.gz

            OUTPUT="report"

            which java

            eclipse-installer/eclipse-inst \
              -application org.eclipse.oomph.setup.installer.MarketplaceCatalogGenerator \
              -consoleLog \
              -noSplash \
              -o ${OUTPUT} \
              -await 180 \
              -vmargs \
                -Dfile.encoding=UTF-8 \
                -Dorg.eclipse.emf.ecore.plugin.EcorePlugin.doNotLoadResourcesPlugin=true \
                -Dheadless.startup=true \
                -Doomph.setup.ecf.connect.timeout=120000 \
                -Doomph.setup.ecf.read.timeout=120000 \
                -Doomph.p2.repository.retry=0 \
                -Declipse.p2.mirrors=false \
                -Declipse.p2.unsignedPolicy=allow \
                -Doomph.p2.flush=false \
                -Doomph.p2.repository.fail.permanently=true \
                -Dcom.sun.net.ssl.checkRevocation=false \
                -Dsun.zip.disableMemoryMapping=true \
                -Xmx8G \
                -Duser.home=$(pwd) \
                -Dorg.eclipse.ecf.provider.filetransfer.excludeContributors= \
                -Dorg.eclipse.ecf.provider.filetransfer.httpclient.browse.connectTimeout=120000 \
                -Dorg.eclipse.ecf.provider.filetransfer.httpclient.retrieve.connectTimeout=120000 \
                -Dorg.eclipse.ecf.provider.filetransfer.httpclient.retrieve.readTimeout=120000 \
                -Dorg.eclipse.ecf.provider.filetransfer.httpclient4.browse.connectTimeout=120000 \
                -Dorg.eclipse.ecf.provider.filetransfer.httpclient4.retrieve.connectTimeout=120000 \
                -Dorg.eclipse.ecf.provider.filetransfer.httpclient4.retrieve.readTimeout=120000 \
              2>&1 | tee log

            ls -al report/

            if [[ ${PROMOTE} == "true" ]]; then
              echo "Promoting"
              PUBLISH_ARGUMENT="${OOMPH_DIR}/www/marketplace-listings"
              ssh ${LOGIN} "mkdir -p ${PUBLISH_ARGUMENT}"
              scp report/resolved-minimized.setup ${LOGIN}:${PUBLISH_ARGUMENT}/marketplace.eclipse.org.setup
            fi
          '''
        }
      }
    }
  }

  post {
    failure {
      mail to: 'ed.merks@gmail.com',
      subject: "[Oomph CI] Build Failure ${currentBuild.fullDisplayName}",
      mimeType: 'text/html',
      body: "Project: ${env.JOB_NAME}<br/>Build Number: ${env.BUILD_NUMBER}<br/>Build URL: <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a>"
    }

    fixed {
      mail to: 'ed.merks@gmail.com',
      subject: "[Oomph CI] Back to normal ${currentBuild.fullDisplayName}",
      mimeType: 'text/html',
      body: "Project: ${env.JOB_NAME}<br/>Build Number: ${env.BUILD_NUMBER}<br/>Build URL: <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a>"
    }
  }
}
