@Library('eo-jenkins-lib@main') import eo.Utils

pipeline {
    agent any
    options {
        disableConcurrentBuilds()
        timeout(time: 20, unit: 'MINUTES')
    }
    triggers {
        cron(BRANCH_NAME == 'main' ? 'H H(0-7) * * *' : '')
    }
    stages {
        stage('Build') {
            parallel {
                stage('Unit Tests (Bookworm)') {
                    steps {
                        sh 'nox -k debian-bookworm'
                    }
                }
                stage('Unit Tests (Trixie)') {
                    steps {
                        sh 'nox -k debian-trixie'
                    }
                }
                stage('Pylint') {
                    steps {
                        sh 'nox -s pylint'
                    }
                }
                stage('Codestyle') {
                    steps {
                        sh 'nox -s codestyle'
                    }
                }
                stage('Check manifest') {
                    steps {
                        sh 'nox -s check_manifest'
                    }
                }
           }
            post {
                always {
                    // do not stop if diff-cover fails
                    catchError {
                        sh 'nox --no-reuse-existing-virtualenvs -k "coverage_report"'
                    }
                    script {
                        def utils = new Utils()
                        utils.publish_coverage('coverage.xml')
                        utils.publish_coverage_native()
                        utils.publish_diff_cover()
                        utils.display_diff_cover_status()
                        utils.publish_pylint('pylint.out')
                    }
                    mergeJunitResults()
                }
            }
        }
        stage('Packaging') {
            steps {
                script {
                    env.SHORT_JOB_NAME=sh(
                        returnStdout: true,
                        // given JOB_NAME=gitea/project/PR-46, returns project
                        // given JOB_NAME=project/main, returns project
                        script: '''
                            echo "${JOB_NAME}" | sed "s/gitea\\///" | awk -F/ '{print $1}'
                        '''
                    ).trim()
                    if (env.GIT_BRANCH == 'main' || env.GIT_BRANCH == 'origin/main') {
                        sh "sudo -H -u eobuilder /usr/local/bin/eobuilder -d bookworm,trixie ${SHORT_JOB_NAME}"
                    } else if (env.GIT_BRANCH.startsWith('hotfix/')) {
                        sh "sudo -H -u eobuilder /usr/local/bin/eobuilder -d bookworm,trixie --branch ${env.GIT_BRANCH} --hotfix ${SHORT_JOB_NAME}"
                    }
                }
            }
        }
    }
    post {
        always {
            script {
                def utils = new Utils()
                utils.mail_notify(currentBuild, env, 'ci+jenkins-lingo@entrouvert.org')
            }
        }
        success {
            cleanWs()
        }
    }
}
