def determineTargets(jenkinsUrl) {
    if (jenkinsUrl.contains('scheduler.theorchard.io')) {
        return 'scheduler.theorchard.io/jobs/**/*.groovy'
    } else {
        return 'pipeline.theorchard.io/jobs/**/*.groovy'
    }
}

def isPipeline = env.JENKINS_URL.contains('pipeline.theorchard.io')

pipeline {
    agent any

    options {
        ansiColor('xterm')
        disableConcurrentBuilds()
        timestamps()
    }

    stages {
        stage('Unit Tests') {
            steps {
                withGradle {
                    sh './gradlew test'
                }
            }
            post {
                always {
                    junit 'lib/build/test-results/test/*.xml'
                }
            }
        }
        stage('Configure Jobs') {
            when {
                branch 'master'
            }
            steps {
                script {
                    def jenkinsUrl = env.JENKINS_URL
                    def targets = determineTargets(jenkinsUrl)
                    jobDsl(
                        targets: targets,
                        removedJobAction: 'DELETE',
                        removedViewAction: 'DELETE',
                        failOnMissingPlugin: true,
                        additionalParameters: [GIT_URL: env.GIT_URL]
                    )
                }
            }
        }
        stage('Trigger Organization Scan') {
            when {
                allOf {
                    branch 'master'
                    expression { isPipeline }
                }
            }
            steps {
                build job: 'theorchard', wait: false
                build job: 'SME-AOMA', wait: false
            }
        }
    }
}
