/*
 * 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') {
            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') {
            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
