//
//  Copyright (c) 2021, 2022 Oracle and/or its affiliates. All rights reserved.
//
//  This program and the accompanying materials are made available under the
//  terms of the Eclipse Public License v. 2.0 which is available at
//  http://www.eclipse.org/legal/epl-2.0,
//  or the Eclipse Distribution License v. 1.0 which is available at
//  http://www.eclipse.org/org/documents/edl-v10.php.
//
//  SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
//

pipeline {
    agent {
        kubernetes {
            label 'el-master-agent-pod'
            yaml """
apiVersion: v1
kind: Pod
spec:

  volumes:
  - name: tools
    persistentVolumeClaim:
      claimName: tools-claim-jiro-eclipselink
  - name: volume-known-hosts
    configMap:
      name: known-hosts      
  - name: settings-xml
    secret:
      secretName: m2-secret-dir
      items:
      - key: settings.xml
        path: settings.xml
  - name: toolchains-xml
    configMap:
      name: m2-dir
      items:
      - key: toolchains.xml
        path: toolchains.xml
  - name: settings-security-xml
    secret:
      secretName: m2-secret-dir
      items:
      - key: settings-security.xml
        path: settings-security.xml
  - name: m2-repo
    emptyDir: {}
    
  containers:
  - name: jnlp
    resources:
      limits:
        memory: "4Gi"
        cpu: "2"
      requests:
        memory: "4Gi"
        cpu: "1"
  - name: el-build
    resources:
      limits:
        memory: "12Gi"
        cpu: "6"
      requests:
        memory: "12Gi"
        cpu: "5.5"
    image: tkraus/el-build:2.0.0
    volumeMounts:
    - name: tools
      mountPath: /opt/tools
    - name: volume-known-hosts
      mountPath: /home/jenkins/.ssh      
    - name: settings-xml
      mountPath: /home/jenkins/.m2/settings.xml
      subPath: settings.xml
      readOnly: true
    - name: toolchains-xml
      mountPath: /home/jenkins/.m2/toolchains.xml
      subPath: toolchains.xml
      readOnly: true
    - name: settings-security-xml
      mountPath: /home/jenkins/.m2/settings-security.xml
      subPath: settings-security.xml
      readOnly: true
    - name: m2-repo
      mountPath: /home/jenkins/.m2/repository
    tty: true
    command:
    - cat
"""
        }
    }
    tools {
        maven 'apache-maven-latest'
        jdk 'openjdk-jdk17-latest'
    }
    stages {
        // Initialize build environment
        stage('Init') {
            steps {
                container('el-build') {
                    sh """
                        /opt/bin/mysql-start.sh
                        mkdir ~/.eclipselinktests
                    """
                    withCredentials([file(credentialsId: 'secret-subkeys.asc', variable: 'KEYRING')]) {
                        sh label: '', script: '''
                            gpg --batch --import "${KEYRING}"
                            for fpr in $(gpg --list-keys --with-colons  | awk -F: \'/fpr:/ {print $10}\' | sort -u);
                            do
                                echo -e "5\\ny\\n" |  gpg --batch --command-fd 0 --expert --edit-key $fpr trust;
                            done'''
                    }
                }
            }
        }
        // Build
        stage('Build') {
            steps {
                container('el-build') {
                    sh """
                        echo '-[ EclipseLink Build ]-----------------------------------------------------------'
                        mvn -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn -B -V clean install -pl '!:eclipselink,!:org.eclipse.persistence.bundles.other,!:org.eclipse.persistence.distribution.tests,!:p2site' -DskipTests
                    """
                }
            }
        }
        // LRG tests
        stage('Run Tests') {
            parallel {
                stage('Core LRG') {
                    steps {
                        container('el-build') {
                            sh """
                                mvn -B -V verify -pl :org.eclipse.persistence.core.test -P test-core-lrg,mysql
                            """
                        }
                    }
                }
                stage('OXM LRG') {
                    steps {
                        container('el-build') {
                            sh """
                                mvn -B -V verify -pl :org.eclipse.persistence.core -P test-core-lrg
                            """
                        }
                    }
                }
                stage('MOXy LRG') {
                    steps {
                        container('el-build') {
                            sh """
                                mvn -B -V test -pl :org.eclipse.persistence.moxy -P test-moxy-lrg
                            """
                        }
                    }
                }
                stage('NoSQL Tests') {
                    steps {
                        container('el-build') {
                            sh """
                                /opt/bin/mongo-start.sh
                                mvn -B -V verify -pl :org.eclipse.persistence.nosql -P mongodb
                                /opt/bin/mongo-stop.sh                                
                            """
                        }
                    }
                }
            }
        }
        //Not in parallel
        stage('JPA LRG') {
            steps {
                container('el-build') {
                    sh """
                                mvn -B -V verify -pl :org.eclipse.persistence.jpa.test -P test-jpa-lrg,mysql
                            """
                }
            }
        }
        stage('SDO LRG') {
            steps {
                container('el-build') {
                    sh """
                                mvn -B -V verify -pl :org.eclipse.persistence.sdo -Ptest-sdo
                            """
                }
            }
        }
        stage('CORBA') {
            steps {
                container('el-build') {
                    sh """
                                mvn -B -V verify -pl :org.eclipse.persistence.corba -P mysql
                            """
                }
            }
        }
        stage('JPA Modelgen, JPA JSE, WDF, JPARS, DBWS, DBWS Builder, Distribution') {
            steps {
                container('el-build') {
                    sh """
                                mvn -B -V clean install -pl :eclipselink
                                mvn -B -V verify -pl :org.eclipse.persistence.jpa.modelgen.processor,:org.eclipse.persistence.jpa.jse.test,:org.eclipse.persistence.extension,:org.eclipse.persistence.jpa.jpql,:org.eclipse.persistence.jpa.wdf.test,:org.eclipse.persistence.jpars,:org.eclipse.persistence.dbws,:org.eclipse.persistence.dbws.builder,:eclipselink,:org.eclipse.persistence.distribution.tests -P mysql;
                            """
                }
            }
        }
        stage('Javadoc') {
            steps {
                container('el-build') {
                    sh """
                                mvn -B -V package -DskipTests -Poss-release
                            """
                }
            }
        }
        // LRG Server tests
/*
        stage('LRG Server tests (Wildfly)') {
            steps {
                container('el-build') {
                    sh """
                            etc/jenkins/test_server.sh
                        """
                }
            }
        }
*/
    }
    post {
        always {
            container('el-build') {
                sh """
                        /opt/bin/mysql-stop.sh
                    """
            }
            script {
                //Multiple Jenkins junit plugin calls due java.nio.channels.ClosedChannelException in new/cloud Eclipse.org build infrastructure if it's called once
                //Retry is there to try (in case of crash) junit test upload again.
                retryCount = 5
                junitReportFiles = [
                        'bundles/**/target/surefire-reports/*.xml,bundles/**/target/failsafe-reports/*.xml',
                        'dbws/**/target/surefire-reports/*.xml,dbws/**/target/failsafe-reports/*.xml',
                        'foundation/**/target/surefire-reports/*.xml,foundation/**/target/failsafe-reports/*.xml',
                        'jpa/**/target/surefire-reports/*.xml,jpa/**/target/failsafe-reports/*.xml',
                        'moxy/**/target/surefire-reports/*.xml,moxy/**/target/failsafe-reports/*.xml',
                        'sdo/**/target/surefire-reports/*.xml,sdo/**/target/failsafe-reports/*.xml',
                        'utils/**/target/surefire-reports/*.xml,utils/**/target/failsafe-reports/*.xml'
                ]
                for (item in junitReportFiles) {
                    echo 'Processing file: ' + item
                    retry(retryCount) {
                        junit allowEmptyResults: true, testResults: item
                    }
                }
            }
            recordIssues(tools: [spotBugs(useRankAsPriority: true), java(), javaDoc()])
        }
    }
}