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

CRON_SETTINGS = BRANCH_NAME == 'main' ? 'H H(0-7) * * *' : ''

pipeline {
    agent any
    triggers {
        cron(CRON_SETTINGS)
    }
    options { disableConcurrentBuilds() }
    parameters {
        choice(name: 'deps_version',
               choices: ['both', 'latest', 'debian'],
               description: "Select dependencies for the tests (latest = django4, debian=bookworm (django3) and trixie, latest or debian= both")
    }
    stages {
        stage('Tests') {
            parallel {
                stage('Dependencies latest versions') {
                    when { expression { params.deps_version == 'latest' || params.deps_version == 'both' } }
                    steps {
                        sh """PGPORT=`python3 -c 'import struct; import socket; s=socket.socket(); s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack("ii", 1, 0)); s.bind(("", 0)); print(s.getsockname()[1]); s.close()'` pg_virtualenv -o fsync=off nox -N -k "latest" """
                    }
                }
                stage('Debian bookworm') {
                    when { expression { params.deps_version == 'debian' || params.deps_version == 'both' || currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause') } }
                    steps {
                        sh """PGPORT=`python3 -c 'import struct; import socket; s=socket.socket(); s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack("ii", 1, 0)); s.bind(("", 0)); print(s.getsockname()[1]); s.close()'` pg_virtualenv -o fsync=off nox -N -k "debian-bookworm" """
                    }
                }
                stage('Debian trixie') {
                    when { expression { params.deps_version == 'debian' || params.deps_version == 'both' || currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause') } }
                    steps {
                        sh """PGPORT=`python3 -c 'import struct; import socket; s=socket.socket(); s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack("ii", 1, 0)); s.bind(("", 0)); print(s.getsockname()[1]); s.close()'` pg_virtualenv -o fsync=off nox -N -k "debian-trixie" """
                    }
                }
                stage('Codestyle') {
                    steps {
                        sh """nox -N -k "ci" """
                    }
                }
            }
            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-authentic@entrouvert.org')
            }
        }
        cleanup {
            cleanWs()
        }
    }
}
// vim: expandtab tabstop=4 shiftwidth=4
