def buildScmInfo
stage("Build") {
    node('regular-memory-node') {
        cleanWs()

        sfScmInfo = checkout([$class: 'GitSCM',
            branches: [[name: '*']],
            doGenerateSubmoduleConfigurations: false,
            extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'snowflake']],
            submoduleCfg: [],
            userRemoteConfigs: [[credentialsId: 'a0395839-84c7-4ceb-90e2-bcf66b2d6885', url: 'ssh://bitbucket-internal.int.snowflakecomputing.com:7999/opfdb/fdb_snowflake.git']]
            ])
        println("$sfScmInfo")

        buildScmInfo = checkout([
            $class: 'GitSCM',
            branches: scm.branches,
            doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
            extensions: scm.extensions,
            userRemoteConfigs: scm.userRemoteConfigs,
            extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'snowflake/jenkins/foundationdb']]
            ])
        println("$buildScmInfo")

        sh """
            |export GIT_SPECIFIER=${buildScmInfo.GIT_COMMIT}
            |virtualenv -p python3.4 venv
            |source venv/bin/activate
            |pip3 install docker-compose
            |docker-compose --version
            |git config --global user.name jenkins
            |git config --global user.email fdb-devs@snowflake.net
            |cd snowflake/jenkins
            |./build.sh check_uploaded package sql sql_upload upload
          """.stripMargin()
    }
}

def makeTestStep(iteration) {
    return {
        node("regular-memory-node") {
            cleanWs()
            sfScmInfo = checkout([$class: 'GitSCM',
                branches: [[name: '*']],
                doGenerateSubmoduleConfigurations: false,
                extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'snowflake']],
                submoduleCfg: [],
                userRemoteConfigs: [[credentialsId: 'a0395839-84c7-4ceb-90e2-bcf66b2d6885', url: 'ssh://bitbucket-internal.int.snowflakecomputing.com:7999/opfdb/fdb_snowflake.git']]
                ])
            println("$sfScmInfo")

            scmInfo = checkout([
                $class: 'GitSCM',
                branches: scm.branches,
                doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
                extensions: scm.extensions,
                userRemoteConfigs: scm.userRemoteConfigs,
                extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'snowflake/jenkins/foundationdb']]
                ])
            println("$scmInfo")
            sh """
                |# Clean up the jenkins output; gets messy with too many iterations
                |set +x
                |exec 3>&1
                |exec 1> \$WORKSPACE/setup_${iteration}.log
                |exec 2>&1
                |
                |export GIT_SPECIFIER=${scmInfo.GIT_COMMIT}
                |virtualenv -p python3.4 venv
                |source venv/bin/activate
                |pip3 install docker-compose
                |docker-compose --version
                |git config --global user.name jenkins
                |git config --global user.email fdb-devs@snowflake.net
                |
                |cd snowflake/jenkins
                |echo Iteration ${iteration} building >&3
                |./build.sh configure download test sql sql_upload > \$WORKSPACE/iteration_${iteration}.log 2>&1
                |rc=\$?
                |seed=\$(find . -name traces.json -exec grep -m 1 CMakeSEED {} \\; | awk '{print \$2}'  | head -1 | tr -d '"}')
                |echo Iteration ${iteration} completed with \$rc - seed \$seed >&3
                |mv \$WORKSPACE/iteration_${iteration}.log \$WORKSPACE/iteration_${iteration}_\${seed}.log
                |find . -name traces.json -exec gzip -c {} > \$WORKSPACE/traces_${iteration}_\${seed}.json.gz \\;
                |#cat \$WORKSPACE/iteration_${iteration}.log
              """.stripMargin()
              archiveArtifacts artifacts: 'setup_*log,iteration_*log,traces_*.json.gz',
                optional: true,
                onlyIfSuccessful: false
        }
    }
}

stage("Test") {
    def testSteps = [:]
    for (int i = 0; i < 4; i++) {
        testSteps["Iteration ${i}"] = makeTestStep(i)
    }
    println(testSteps)

    parallel testSteps
    build job: "NotifyGitHub",
        parameters: [
            string(name: 'pr_branch', value: buildScmInfo.GIT_BRANCH),
            string(name: 'publish_url', value: "https://foo.bar/stuff")
        ],
        propagate: false
}
stage("Report") {
    node('regular-memory-node') {
        cleanWs()

        sfScmInfo = checkout([$class: 'GitSCM',
            branches: [[name: '*']],
            doGenerateSubmoduleConfigurations: false,
            extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'snowflake']],
            submoduleCfg: [],
            userRemoteConfigs: [[credentialsId: 'a0395839-84c7-4ceb-90e2-bcf66b2d6885', url: 'ssh://bitbucket-internal.int.snowflakecomputing.com:7999/opfdb/fdb_snowflake.git']]
            ])
        println("$sfScmInfo")

        buildScmInfo = checkout([
            $class: 'GitSCM',
            branches: scm.branches,
            doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
            extensions: scm.extensions,
            userRemoteConfigs: scm.userRemoteConfigs,
            extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'snowflake/jenkins/foundationdb']]
            ])
        println("$buildScmInfo")

        sh """
            |export GIT_SPECIFIER=${buildScmInfo.GIT_COMMIT}
            |virtualenv -p python3.4 venv
            |source venv/bin/activate
            |git config --global user.name jenkins
            |git config --global user.email fdb-devs@snowflake.net
            |cd snowflake/jenkins
            |./build.sh sql_create_report
            |GIT_TREE=(\$(cd foundationdb && git rev-parse HEAD^{tree}))
            |cp -f fdb6-report.txt fdb6-report-\${GIT_TREE}.txt
          """.stripMargin()
        archiveArtifacts artifacts: '**/fdb6-report-*.txt',
            optional: true,
            onlyIfSuccessful: false
    }
}
