#!/usr/bin/env groovy

pipeline {
    agent any
    options { disableConcurrentBuilds() }
    environment {
        PYENVPIPELINE_VIRTUALENV = '1'
    }

    stages {
        stage('Build') {
            steps {
                sh '''
                    python3 -m venv .venv
                    . .venv/bin/activate
                    pip install coverage
                    pip install --upgrade pip "setuptools==69.5.1" wheel
                    make EXTRAS="" install
                    cp "${JOB_BASE_NAME}/ocyan.json" "${JOB_BASE_NAME}/${JOB_BASE_NAME}.json"
                    pip install pylint pylint-django vdt.versionplugin.wheel
                    pip install --upgrade "setuptools==69.5.1" wheel
                    make migrate loaddata collectstatic
                    pip install "httpx<0.28"
                '''
            }
        }
        stage('Lint') {
            steps {
                sh '''
                    . .venv/bin/activate
                    pip install coverage
                    make lint
                '''
            }
        }
        stage('Test') {
            steps {
                sh '''
                    . .venv/bin/activate
                    pip install coverage
                    make test
                '''
            }
            post {
                always {
                    junit allowEmptyResults: true, testResults: '**/nosetests.xml'
                }
                success {
                    echo "Coverage step skipped"
                }
            }
        }
    }
    post {
        always {
            echo 'This will always run'
        }
        success {
            echo 'This will run only if successful'
            sh '''
                . .venv/bin/activate
                    pip install coverage
            '''
            build job: 'deploy-project-stg',
                parameters: [string(name: 'PROJECT_NAME', value: env.JOB_BASE_NAME)],
                wait: false,
                propagate: false
        }
        failure {
            emailext subject: "JENKINS-NOTIFICATION: ${currentBuild.currentResult}: Job '${env.JOB_NAME} #${env.BUILD_NUMBER}'",
                    body: '${SCRIPT, template="groovy-text.template"}',
                    recipientProviders: [culprits(), brokenBuildSuspects(), brokenTestsSuspects()]

        }
        unstable {
            echo 'This will run only if the run was marked as unstable'
        }
        changed {
            echo 'This will run only if the state of the Pipeline has changed'
            echo 'For example, if the Pipeline was previously failing but is now successful'
        }
    }
}
