pipeline {
    triggers {
        issueCommentTrigger('@dgl-bot .*')
    }
    agent {
        docker {
            label 'linux-benchmark-node'
            image 'dgllib/dgl-ci-lint'
            alwaysPull true
        }
    }
    stages {
        stage('Regression Test') {
            steps {
                checkout scm
                script {
                    def commentTriggerCause = currentBuild.getBuildCauses('org.jenkinsci.plugins.pipeline.github.trigger.IssueCommentCause')
                    def prOpenTriggerCause = currentBuild.getBuildCauses('jenkins.branch.BranchEventCause')
                    def realTriggerCause = currentBuild.getBuildCauses()
                    echo("BUILD CAUSE: ${realTriggerCause.toString()}")

                    if (commentTriggerCause) {
                        dir('benchmark_scripts_repo') {
                            checkout([$class: 'GitSCM', branches: [[name: '*/master']],
                                userRemoteConfigs: [[credentialsId: 'github', url: 'https://github.com/dglai/DGL_scripts.git']]])
                        }
                        sh('cp benchmark_scripts_repo/benchmark/* benchmarks/scripts/')
                        def comment = env.GITHUB_COMMENT
                        def author = env.GITHUB_COMMENT_AUTHOR
                        def authorized_user = ['VoVAllen', 'BarclayII', 'jermainewang', 'zheng-da', 'mufeili']
                        def isauthorized = author in authorized_user
                        def command_lists = comment.split(' ')
                        def instance_type = command_lists[2].replace('.', "")
                        if (!isauthorized) {
                            error("Not authorized to launch regression tests")
                        }
                        if (command_lists.size() != 5) {
                            pullRequest.comment('Cannot run the regression test due to unknown command')
                            error('Unknown command')
                        } else {
                            pullRequest.comment("Start the Regression test. View at ${RUN_DISPLAY_URL}")
                        }
                        dir('benchmarks/scripts') {
                            sh('python3 -m pip install boto3')
                            sh("PYTHONUNBUFFERED=1 GIT_URL=${env.GIT_URL} GIT_BRANCH=${env.CHANGE_BRANCH} python3 run_reg_test.py --data-folder ${env.GIT_COMMIT}_${instance_type} --run-cmd '${comment}'")
                        }
                        pullRequest.comment("Finished the Regression test. Result table is at https://dgl-asv-data.s3-us-west-2.amazonaws.com/${env.GIT_COMMIT}_${instance_type}/results/result.csv. Jenkins job link is ${RUN_DISPLAY_URL}. ")
                    } else {
                        if (prOpenTriggerCause) {
                            if (env.BUILD_ID == "1") {
                                pullRequest.comment('To trigger regression tests: \n - `@dgl-bot run [instance-type] [which tests] [compare-with-branch]`; \n For example: `@dgl-bot run g4dn.4xlarge all dmlc/master` or `@dgl-bot run c5.9xlarge kernel,api dmlc/master`')
                            }
                        }
                        echo('Build was not started by a trigger')
                    }
                // echo("Comment: ${commentTriggerCause.getComment()}")
                }
            }
            post {
                failure {
                    echo '========Regression execution failed========'
                }
            }
        }
    }
}
