@Library('nf-jenkins-shared-libraries')_  

REPO="common-util-framework"
MVN_HOME='mvn_local_repository'
JAVA_HOME='/opt/java/openjdk'
SERVER_ID = "netfoundry"
BRANCH_NAME="develop"

jfrog_url = "https://netfoundry.jfrog.io/netfoundry/"

link_url = ""

channel = "cd-mop-staging"

skip_dependency = false

pipeline {
    agent {
        ecs {
            inheritFrom 'ec2-agent-jdk17'
        }
    }

    environment {
        SONAR_CLOUD = credentials('sonar')
        BITBUCKET_AUTH = credentials('bitbucket_auth')
        ARTIFACTORY = credentials('jfrog-mop-reader')
    }

    stages {
        stage('Build') {
            steps {
                script {
                    bitbucketStatus repo: REPO, BRANCH_NAME: BRANCH_NAME, GIT_COMMIT: GIT_COMMIT, PR_CHECK: "false", status: "INPROGRESS"
                    sh "mkdir -p ${MVN_HOME}/${BUILD_NUMBER}"
                    dir("${MVN_HOME}/${BUILD_NUMBER}") {
                        sh "for dir in \$(ls \$HOME/.m2/repository/ | grep -v 'io'); do ln -s \$HOME/.m2/repository/\$dir \$dir; done"
                    }
                    configFileProvider([configFile(fileId: 'netfoundry_maven_settings', variable: 'MAVEN_SETTINGS_XML')]) {
                        sh "./mvnw -s $MAVEN_SETTINGS_XML -Dmaven.repo.local=${MVN_HOME}/${BUILD_NUMBER} clean install"
                    }
                }
            }
        }
        
        stage('Dependency-Check') {
            steps {
                script {
                    try{
                        configFileProvider([configFile(fileId: 'netfoundry_maven_settings', variable: 'MAVEN_SETTINGS_XML')]) {
                            sh "./mvnw -s $MAVEN_SETTINGS_XML -Dmaven.repo.local=${MVN_HOME}/${BUILD_NUMBER} -DskipTests dependency-check:check xml:transform"
                        }
                    }catch(e){
                        skip_dependency = true
                        echo "Dependency Checks failed with error ${e}"
                        fn_msg = "Dependency Checks failed. The build will still continue. Please check link for details."
                        color = "#FF8000"
                        author_email = fetch_author_email("${REPO}", "${GIT_COMMIT}")
                        send_custom_notification("${author_email}", "${REPO}", "${channel}", "${fn_msg}", "${color}", "${link_url}")
                    }
                }
            }  
        }

        stage('Sonar') {
            steps {
                script {
                    sonar_url = checkSonarGateMvnw PROJECT_NAME: REPO, BRANCH: BRANCH_NAME, MAVEN_HOME: "${MVN_HOME}/${BUILD_NUMBER}"
                }
            }
        }

        stage('Archive Artifacts'){
            steps{
                script {
                    archiveArtifacts "target/*.*"
                }
            }
        }

        stage('JUnit Reports'){
            steps {
                script {
                    junitParse services: [REPO], parallelize: false, dir: "", xml: "target/surefire-reports/*.xml"
                }
            }
        }

        stage('Artifactory') {
            steps {
                script {
                    artifactory_mvnw REPO: REPO, BUILDPATH: "${MVN_HOME}/${BUILD_NUMBER}"
                }
            }
        }
    }

    post {
        always {
            script {
              sh "rm -rf ${MVN_HOME}/${BUILD_NUMBER}"
            }
        }
        aborted {
            bitbucketStatus repo: REPO, BRANCH_NAME: BRANCH_NAME, GIT_COMMIT: GIT_COMMIT, PR_CHECK: "false", status: "STOPPED"
        }
        failure {
            bitbucketStatus repo: REPO, BRANCH_NAME: BRANCH_NAME, GIT_COMMIT: GIT_COMMIT, PR_CHECK: "false", status: "FAILED"
        }
        success {
            bitbucketStatus repo: REPO, BRANCH_NAME: BRANCH_NAME, GIT_COMMIT: GIT_COMMIT, PR_CHECK: "false", status: "SUCCESSFUL"
        }
    }
}