// CI pipeline for BowlEye (PinPoint). Builds the Debug APK and runs unit
// tests on every push. Runs on the team19 VM's Jenkins install, using the
// Android SDK at /opt/android-sdk (see docs/ for the VM setup this depends on).
pipeline {
    agent any

    options {
        timeout(time: 45, unit: 'MINUTES')
        disableConcurrentBuilds()
        buildDiscarder(logRotator(numToKeepStr: '20'))
    }

    environment {
        ANDROID_HOME     = '/opt/android-sdk'
        ANDROID_SDK_ROOT = '/opt/android-sdk'
    }

    stages {
        stage('Checkout') {
            steps {
                checkout scm
            }
        }

        stage('Prepare SDK pointer') {
            steps {
                // AGP will also pick up ANDROID_HOME from the environment, but
                // writing local.properties explicitly keeps this working even
                // if the job ever runs on a different agent/environment setup.
                sh 'echo "sdk.dir=/opt/android-sdk" > local.properties'
            }
        }

        stage('Build Debug APK') {
            steps {
                sh 'chmod +x ./gradlew'
                sh './gradlew assembleDebug --no-daemon --stacktrace'
            }
        }

        stage('Unit Tests') {
            steps {
                sh './gradlew testDebugUnitTest --no-daemon --stacktrace'
            }
        }
    }

    post {
        always {
            junit allowEmptyResults: true, testResults: '**/build/test-results/**/*.xml'
            archiveArtifacts artifacts: 'app/build/outputs/apk/**/*.apk', allowEmptyArchive: true
        }
    }
}
