@Library('corda-shared-build-pipeline-steps')
import static com.r3.build.BuildControl.killAllExistingBuildsForJob

killAllExistingBuildsForJob(env.JOB_NAME, env.BUILD_NUMBER.toInteger())

pipeline {
    agent { label 'standard' }
    options {
        timestamps()
        timeout(time: 3, unit: 'HOURS')
        buildDiscarder(logRotator(daysToKeepStr: '14', artifactDaysToKeepStr: '14'))
    }

    environment {
        PR_CONTEXT_STRING = "PR Code Checks"
    }

    stages {
        stage('Detekt check') {
            steps {
                script {
                    pullRequest.createStatus(
                            status: 'pending',
                            context: "${PR_CONTEXT_STRING}",
                            description: "Running code checks",
                            targetUrl: "${env.BUILD_URL}")
                }
                sh "./gradlew --no-daemon clean detekt"
            }
        }

        stage('Compilation warnings check') {
            steps {
                sh "./gradlew --no-daemon -Pcompilation.warningsAsErrors=true compileAll"
            }
        }

        stage('No API change check') {
            steps {
                sh "./gradlew --no-daemon generateApi"
                sh ".ci/check-api-changes.sh"
            }
        }

        stage('Deploy Nodes') {
            steps {
                sh "./gradlew --no-daemon jar deployNodes"
            }
        }
    }

    post {
        success {
            script {
                pullRequest.createStatus(
                        status: 'success',
                        context: "${PR_CONTEXT_STRING}",
                        description: 'Code checks passed',
                        targetUrl: "${env.BUILD_URL}")
            }
        }

        failure {
            script {
                pullRequest.createStatus(
                        status: 'failure',
                        context: "${PR_CONTEXT_STRING}",
                        description: 'Code checks failed',
                        targetUrl: "${env.BUILD_URL}")
            }
        }
        cleanup {
            deleteDir() /* clean up our workspace */
        }
    }
}
