import hudson.model.Result
import hudson.model.*;
import jenkins.model.CauseOfInterruption
node {
}

def skipbuild=0
def win_stop=0

def abortPreviousBuilds() {
    def currentJobName = env.JOB_NAME
    def currentBuildNumber = env.BUILD_NUMBER.toInteger()
    def jobs = Jenkins.instance.getItemByFullName(currentJobName)
    def builds = jobs.getBuilds()

    for (build in builds) {
        if (!build.isBuilding()) {
            continue;
        }

        if (currentBuildNumber == build.getNumber().toInteger()) {
            continue;
        }

        build.doKill()    //doTerm(),doKill(),doTerm()
    }
}
//  abort previous build
abortPreviousBuilds()
def abort_previous(){
    def buildNumber = env.BUILD_NUMBER as int
    if (buildNumber > 1) milestone(buildNumber - 1)
    milestone(buildNumber)
}
def pre_test(){
    sh 'hostname'
    sh '''
        date
        sudo rmtaos || echo "taosd has not installed"
    '''
    sh '''
        killall -9 taosd ||echo "no taosd running"
        killall -9 gdb || echo "no gdb running"
        killall -9 python3.8 || echo "no python program running"
        cd ${WKC}
    '''
    script {
        if (env.CHANGE_TARGET == 'master') {
            sh '''
                cd ${WK}
                git checkout master
                cd ${WKC}
                git checkout master
            '''
        } else if(env.CHANGE_TARGET == '2.0') {
            sh '''
                cd ${WK}
                git checkout 2.0
                cd ${WKC}
                git checkout 2.0
            '''
        } else if(env.CHANGE_TARGET == '3.0') {
            sh '''
                cd ${WK}
                git checkout 3.0
                cd ${WKC}
                git checkout 3.0
            '''
        } else {
            sh '''
                cd ${WK}
                git checkout develop
                cd ${WKC}
                git checkout develop
            '''
        }
    }
    if (env.CHANGE_URL =~ /\/TDengine\//) {
        sh '''
            cd ${WKC}
            git pull >/dev/null
            git fetch origin +refs/pull/${CHANGE_ID}/merge
            git checkout -qf FETCH_HEAD
            git log|head -n20
            cd ${WK}
            git pull >/dev/null
            git log|head -n20
        '''
    } else if (env.CHANGE_URL =~ /\/TDinternal\//) {
        sh '''
            cd ${WK}
            git pull >/dev/null
            git fetch origin +refs/pull/${CHANGE_ID}/merge
            git checkout -qf FETCH_HEAD
            git log|head -n20
            cd ${WKC}
            git pull >/dev/null
            git log|head -n20
        '''
    } else {
        sh '''
            echo "unmatched reposiotry ${CHANGE_URL}"
        '''
    }
    sh '''
        cd ${WKC}
        git submodule update --init --recursive
    '''
    sh '''
        cd ${WK}
        export TZ=Asia/Harbin
        date
        rm -rf debug
        mkdir debug
        cd debug
        cmake .. > /dev/null
        make -j4> /dev/null
    '''
    sh '''
        cd ${WKPY}
        git reset --hard
        git pull
        pip3 install .
    '''
    return 1
}
def pre_test_win(){
    bat '''
        hostname
        date /t
        time /t
        taskkill /f /t /im python.exe
        taskkill /f /t /im bash.exe
        cd C:\\workspace\\%EXECUTOR_NUMBER%\\TDengine
        rd /s /Q C:\\workspace\\%EXECUTOR_NUMBER%\\TDengine\\debug
        exit 0
    '''
    bat '''
        cd C:\\workspace\\%EXECUTOR_NUMBER%\\TDengine
        git reset --hard
        git fetch || git fetch
        git checkout -f
    '''
    script {
        if (env.CHANGE_TARGET == 'master') {
            bat '''
                cd C:\\workspace\\%EXECUTOR_NUMBER%\\TDengine
                git checkout master
            '''
        } else if(env.CHANGE_TARGET == '2.0') {
            bat '''
                cd C:\\workspace\\%EXECUTOR_NUMBER%\\TDengine
                git checkout 2.0
            '''
        } else if(env.CHANGE_TARGET == '3.0') {
            bat '''
                cd C:\\workspace\\%EXECUTOR_NUMBER%\\TDengine
                git checkout 3.0
            '''
        } else {
            bat '''
                cd C:\\workspace\\%EXECUTOR_NUMBER%\\TDengine
                git checkout develop
            '''
        }
    }
    bat '''
        cd C:\\workspace\\%EXECUTOR_NUMBER%\\TDengine
        git branch
        git pull || git pull
        git fetch origin +refs/pull/%CHANGE_ID%/merge
        git checkout -qf FETCH_HEAD
    '''
}
def pre_test_build_win() {
    bat '''
        echo "building ..."
        time /t
        cd C:\\workspace\\%EXECUTOR_NUMBER%\\TDengine
        mkdir debug
        cd debug
        call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat" x64
        set CL=/MP8
        cmake .. -G "NMake Makefiles JOM"
        jom -j 4 || exit 8
        time /t
    '''
    return 1
}

pipeline {
    agent none
    options { skipDefaultCheckout() } 
    environment{
        WK = '/var/lib/jenkins/workspace/TDinternal'
        WKC = '/var/lib/jenkins/workspace/TDinternal/community'
        WKPY = '/var/lib/jenkins/workspace/taos-connector-python'
    }
    stages {
        stage('run test') {
            parallel {
                stage('linux test') {
                    agent{label " slave3_0 || slave15 || slave16 || slave17 "}
                    options { skipDefaultCheckout() } 
                    when {
                        changeRequest()
                    }
                    steps {
                        timeout(time: 45, unit: 'MINUTES'){
                            pre_test()
                            script {
                                if (env.CHANGE_URL =~ /\/TDengine\//) {
                                    sh '''
                                        cd ${WK}/debug
                                        ctest -VV
                                    '''
                                    sh '''
                                        export LD_LIBRARY_PATH=${WK}/debug/build/lib
                                        cd ${WKC}/tests/system-test
                                        ./fulltest.sh
                                    '''
                                } else if (env.CHANGE_URL =~ /\/TDinternal\//) {
                                    sh '''
                                        cd ${WKC}/debug
                                        ctest -VV
                                    '''
                                    sh '''
                                        export LD_LIBRARY_PATH=${WKC}/debug/build/lib
                                        cd ${WKC}/tests/system-test
                                        ./fulltest.sh
                                    '''
                                } else {
                                    sh '''
                                        echo "unmatched reposiotry ${CHANGE_URL}"
                                    '''
                                }
                            }
                            sh '''
                                cd ${WKC}/tests
                                ./test-all.sh b1fq
                            '''
                        }
                    }
                }
            }
        }
    }
    post {  
        success {
            emailext (
                subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' SUCCESS",
                body: """<!DOCTYPE html>
                <html>
                <head>
                <meta charset="UTF-8">
                </head>
                <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
                    <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 16pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
                        <tr>
                            <td><br />
                                <b><font color="#0B610B"><font size="6">构建信息</font></font></b>
                                <hr size="2" width="100%" align="center" /></td>
                        </tr>
                        <tr>
                            <td>
                                <ul>
                                <div style="font-size:18px">
                                    <li>构建名称>>分支：${env.BRANCH_NAME}</li>
                                    <li>构建结果：<span style="color:green"> Successful </span></li>
                                    <li>构建编号：${BUILD_NUMBER}</li>
                                    <li>触发用户：${env.CHANGE_AUTHOR}</li>
                                    <li>提交信息：${env.CHANGE_TITLE}</li>
                                    <li>构建地址：<a href=${BUILD_URL}>${BUILD_URL}</a></li>
                                    <li>构建日志：<a href=${BUILD_URL}console>${BUILD_URL}console</a></li>
                                    
                                </div>
                                </ul>
                            </td>
                        </tr>
                    </table></font>
                </body>
                </html>""",
                to: "${env.CHANGE_AUTHOR_EMAIL}",
                from: "support@taosdata.com"
            )
        }
        failure {
            emailext (
                subject: "PR-result: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' FAIL",
                body: """<!DOCTYPE html>
                <html>
                <head>
                <meta charset="UTF-8">
                </head>
                <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
                    <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 16pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
                        <tr>
                            <td><br />
                                <b><font color="#0B610B"><font size="6">构建信息</font></font></b>
                                <hr size="2" width="100%" align="center" /></td>
                        </tr>
                        <tr>
                            <td>
                                <ul>
                                <div style="font-size:18px">
                                    <li>构建名称>>分支：${env.BRANCH_NAME}</li>
                                    <li>构建结果：<span style="color:red"> Failure </span></li>
                                    <li>构建编号：${BUILD_NUMBER}</li>
                                    <li>触发用户：${env.CHANGE_AUTHOR}</li>
                                    <li>提交信息：${env.CHANGE_TITLE}</li>
                                    <li>构建地址：<a href=${BUILD_URL}>${BUILD_URL}</a></li>
                                    <li>构建日志：<a href=${BUILD_URL}console>${BUILD_URL}console</a></li>
                                    
                                </div>
                                </ul>
                            </td>
                        </tr>
                    </table></font>
                </body>
                </html>""",
                to: "${env.CHANGE_AUTHOR_EMAIL}",
                from: "support@taosdata.com"
            )
        }
    } 
}
