/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

/**
 * UI-Test Build file for Jenkins Multibranch pipeline.
 *
 * The pipeline runs only the UI tests.
 *
 */

LABEL = 'ubuntu'
buildJdk = 'jdk_1.8_latest'
buildMvn = 'maven_3.5.4'
deploySettings = 'archiva-uid-jenkins'
DOCKERHUB_CREDS = 'c725478f-9125-460a-900f-1da562e51026'
//localRepository = ".repository"
localRepository = "../.maven_repositories/${env.EXECUTOR_NUMBER}"

pipeline {
    agent {
        label "${LABEL}"
    }
    options {
        disableConcurrentBuilds()
        durabilityHint('PERFORMANCE_OPTIMIZED')
        buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '3'))
    }

    stages {


        stage('Checkout') {
            steps {
                script {
                    echo "Info: Job-Name=${JOB_NAME}, Branch=${BRANCH_NAME}, Workspace=${PWD}"
                }
                checkout scm
            }
            post {
                failure {
                    notifyBuild("Checkout failure")
                }
            }
        }

        stage('Test htmlunit') {
            when {
                not {
                    triggeredBy 'UpstreamCause'
                }
            }
            steps {
                timeout(120) {
                    withMaven(maven: buildMvn, jdk: buildJdk,
                            mavenSettingsConfig: deploySettings,
                            mavenLocalRepo: localRepository,
                            options: [concordionPublisher(disabled: true), dependenciesFingerprintPublisher(disabled: true),
                                      findbugsPublisher(disabled: true), artifactsPublisher(disabled: true),
                                      invokerPublisher(disabled: true), jgivenPublisher(disabled: true),
                                      junitPublisher(disabled: true, ignoreAttachments: false),
                                      openTasksPublisher(disabled: true), pipelineGraphPublisher(disabled: true)]
                    )
                            {
                                sh "chmod 755 ./src/ci/scripts/prepareWorkspace.sh"
                                sh "./src/ci/scripts/prepareWorkspace.sh -d '.repository'"
                                // Needs a lot of time to reload the repository files, try without cleanup
                                // Not sure, but maybe
                                // sh "rm -rf .repository"

                                // Run test phase / ignore test failures
                                // -B: Batch mode
                                // -U: Force snapshot update
                                // -e: Produce execution error messages
                                // -fae: Fail at the end
                                // -Dmaven.compiler.fork=true: Compile in a separate forked process
                                // -Pci-server: Profile for CI-Server
                                // -Pit-js: Run the selenium test
                                sh "mvn clean verify -B -V -U -e -fae -Dmaven.compiler.fork=true -DmaxWaitTimeInMs=2000 -Pci-server -Pit-js -DtrimStackTrace=false -Djava.io.tmpdir=.tmp -pl :archiva-webapp-test"

                            }
                }
            }
            post {
                always {
                    junit testResults: '**/target/failsafe-reports/TEST-*.xml'
                }
                failure {
                    notifyBuild("Failure in Htmlunit test stage")
                }
            }
        }

        // Uses a docker container that is started by script. Maybe we could use the docker functionality
        // of the jenkins pipeline in the future.
        stage('Test chrome') {
            when {
                not {
                    triggeredBy 'UpstreamCause'
                }
            }
            steps {
                timeout(120) {
                    withCredentials([[$class          : 'UsernamePasswordMultiBinding', credentialsId: DOCKERHUB_CREDS,
                                      usernameVariable: 'DOCKER_HUB_USER', passwordVariable: 'DOCKER_HUB_PW']]) {
                        withMaven(maven: buildMvn, jdk: buildJdk,
                                mavenSettingsConfig: deploySettings,
                                mavenLocalRepo: localRepository,
                                options: [concordionPublisher(disabled: true), dependenciesFingerprintPublisher(disabled: true),
                                          findbugsPublisher(disabled: true), artifactsPublisher(disabled: true),
                                          invokerPublisher(disabled: true), jgivenPublisher(disabled: true),
                                          junitPublisher(disabled: true, ignoreAttachments: false),
                                          openTasksPublisher(disabled: true), pipelineGraphPublisher(disabled: true)]
                        )
                                {
                                    sh "chmod 755 ./src/ci/scripts/prepareWorkspace.sh"
                                    sh "./src/ci/scripts/prepareWorkspace.sh"
                                    sh "chmod 755 src/ci/scripts/container_webtest.sh"
                                    sh "src/ci/scripts/container_webtest.sh start"
                                    // Needs a lot of time to reload the repository files, try without cleanup
                                    // Not sure, but maybe
                                    // sh "rm -rf .repository"

                                    // Run test phase / ignore test failures
                                    // -B: Batch mode
                                    // -U: Force snapshot update
                                    // -e: Produce execution error messages
                                    // -fae: Fail at the end
                                    // -Pci-server: Profile for CI Server
                                    // -Pit-js: Runs the Selenium tests
                                    // -Pchrome: Activates the Selenium Chrome Test Agent
                                    sh "mvn clean verify -B -V -e -fae -Dmaven.compiler.fork=true -DmaxWaitTimeInMs=2000 -DseleniumRemote=true -Pci-server -Pit-js -Pchrome -pl :archiva-webapp-test -DtrimStackTrace=false"
                                }
                    }
                }
            }
            post {
                always {
                    sh "src/ci/scripts/container_webtest.sh stop"
                    junit testResults: '**/target/failsafe-reports/TEST-*.xml'
                }
                failure {
                    notifyBuild("Failure in Chrome test stage")
                }
            }
        }

    }
    post {
        unstable {
            notifyBuild("Unstable Build")
        }
        success {
            script {
                def previousResult = currentBuild.previousBuild?.result
                if (previousResult && !currentBuild.resultIsWorseOrEqualTo(previousResult)) {
                    notifyBuild("Fixed")
                }
            }
            cleanWs deleteDirs: true, notFailBuild: true, patterns: [[pattern: '.repository', type: 'EXCLUDE']]
        }

    }
}

// Send a notification about the build status
def notifyBuild(String buildStatus) {
    // default the value
    buildStatus = buildStatus ?: "UNKNOWN"

    def email = "notifications@archiva.apache.org"
    def summary = "${env.JOB_NAME}#${env.BUILD_NUMBER} - ${buildStatus} - ${currentBuild?.currentResult}"
    def detail = """<h4>Job: <a href='${env.JOB_URL}'>${env.JOB_NAME}</a> [#${env.BUILD_NUMBER}]</h4>
  <p><b>${buildStatus}</b></p>
  <table>
    <tr><td>Build</td><td><a href='${env.BUILD_URL}'>${env.BUILD_URL}</a></td><tr>
    <tr><td>Console</td><td><a href='${env.BUILD_URL}console'>${env.BUILD_URL}console</a></td><tr>
    <tr><td>Test Report</td><td><a href='${env.BUILD_URL}testReport/'>${env.BUILD_URL}testReport/</a></td><tr>
  </table>
  """

    emailext(
            to: email,
            subject: summary,
            body: detail,
            mimeType: 'text/html'
    )
}

// vim: et:ts=4:sw=4:ft=groovy
