#!/usr/bin/env groovy

pipeline {
    agent any
    triggers {
        pollSCM('H H * * *')
    }
    options {
        disableConcurrentBuilds()
        buildDiscarder(logRotator(numToKeepStr:'15', artifactNumToKeepStr: '2' ))
    }
    tools {
        jdk 'oracle-jdk8-latest'
        maven 'apache-maven-latest'
    }
    environment {
        MVN = 'mvn -B -q -Dmaven.test.failure.ignore=true -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn'
        REPO='git@github.com:eclipse-ee4j/jersey.git'
        SECRET_FILE_ID='6474d9ed-eadc-47a0-8f60-43277c1cad52'
        SECURITY_FILE_ID='8e6103e6-a03e-44fe-bd9a-a4ed070d9b56'
        CONFIG_FILE_ID='c88e58d9-97bd-4f06-af82-fd469abcedea'
        CREDENTIALS_ID='f5848e71-9994-45e3-8214-137ce91ddbcf'
        BUILD_BRANCH='master'
    }
    stages {
        stage('Fetch from git') {
            steps {
                git(branch: BUILD_BRANCH, credentialsId: CREDENTIALS_ID, url: REPO)
            }
        }
        stage('Nightly Build') {
            steps {
                withCredentials([file(credentialsId: SECRET_FILE_ID, variable: 'KEYRING')]) {
                    configFileProvider([configFile(fileId: SECURITY_FILE_ID, 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: CONFIG_FILE_ID, variable: 'MAVEN_SETTINGS_XML')]) {
                            sh "$MVN -s $MAVEN_SETTINGS_XML clean install"
                        }
                    }
                }
            }
            post {
                always {
                    archiveArtifacts allowEmptyArchive: true, artifacts: '**/target/**.jar', fingerprint: true, onlyIfSuccessful: true
                    junit allowEmptyResults: true, testResults:'**/target/surefire-reports/*.xml'
                }
            }
        }
    }
}