#!/usr/bin/env groovy

pipeline {
    agent any
    triggers {
        pollSCM('H H * * *')
    }
    tools {
        jdk 'oracle-jdk8-latest'
        maven 'apache-maven-latest'
    }
    environment {
        MVN = 'mvn -B -q -Ddoclint=none -Dadditionalparam="-Xdoclint:none" -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn'
        REPO='git@github.com:eclipse-ee4j/jersey.git'
        CREDENTIALS_ID='f5848e71-9994-45e3-8214-137ce91ddbcf'
        BUILD_BRANCH='EE4J_8'
    }
    stages {
        stage('Fetch from git') {
            steps {
                git(branch: BUILD_BRANCH, credentialsId: CREDENTIALS_ID, url: REPO)
            }
        }
        stage('Nightly Build') {
            steps {
                withCredentials([file(credentialsId: '6474d9ed-eadc-47a0-8f60-43277c1cad52', variable: 'KEYRING')]) {
                    configFileProvider([configFile(fileId: '8e6103e6-a03e-44fe-bd9a-a4ed070d9b56', targetLocation: '/home/jenkins/.m2/')]) {

                        //# Workaround: GPG initialization
                        sh("gpg --batch --import ${KEYRING}")
                        sh '''
                        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
                       '''
                        configFileProvider([configFile(fileId: 'c88e58d9-97bd-4f06-af82-fd469abcedea', variable: 'MAVEN_SETTINGS_XML')]) {
                            sh "$MVN -s $MAVEN_SETTINGS_XML clean install"
                        }
                    }
                }
            }
        }
    }
}

