pipeline {

	agent none

	stages {
		stage('Linux Build & Test') {

		    environment {
                JAVA_HOME = '/usr/lib/jvm/java-11-openjdk-amd64'
            }
			
			agent {
				label 'p4java'
			}
			
			stages {
				stage('Compile') {
					steps {
						sh 'mvn compiler:compile spotbugs:check'
					}
				}

				stage('Build and Test') {
					steps {
						sh 'mvn clean package -P enable-jacoco'
					}
				}
			}
			post {
				always {
					sh 'mvn surefire-report:report-only'

					publishHTML target: [
						allowMissing: false,
						alwaysLinkToLastBuild: true,
						keepAll: true,
						reportDir: 'target/site/',
						reportFiles: 'surefire-report.html',
						reportName: 'LinuxTestReport'
					]

					publishCoverage adapters: [
						jacocoAdapter('target/site/jacoco/jacoco.xml')
					],
					sourceFileResolver: sourceFiles('STORE_LAST_BUILD')
				}
				success {
					archiveArtifacts artifacts: 'target/p4.hpi', fingerprint: true
				}
			}
		}
		
		stage('Windows Build & Test') {
		    environment {
                JAVA_HOME = "C:\\Program Files\\Java\\jdk-11.0.16.1"
            }
			agent {
				label 'p4java-win'
			}

			stages {
				stage('Compile') {
					steps {
						bat 'mvn compiler:compile spotbugs:check'
					}
				}

				stage('Build and Test') {
					steps {
						bat 'mvn clean package'
					}
				}
			}
			post {
				always {
					bat 'mvn surefire-report:report-only'

					publishHTML target: [
						allowMissing: false,
						alwaysLinkToLastBuild: true,
						keepAll: true,
						reportDir: 'target/site/',
						reportFiles: 'surefire-report.html',
						reportName: 'WindowsTestReport'
					]
				}
			}
		}
		
		stage('Launch system tests') {
			steps {
				build job: 'jenkins-system-tests/main', wait: false
			}
		}
	}
}