@Library('cadoles') _

pipeline {
    agent {
        dockerfile {
            label 'docker'
            filename 'Dockerfile'
            dir 'misc/jenkins'
        }
    }

    stages {
        stage('Cancel older jobs') {
            steps {
                script {
                    def buildNumber = env.BUILD_NUMBER as int
                    if (buildNumber > 1) milestone(buildNumber - 1)
                    milestone(buildNumber)
                }
            }
        }
        
        stage('Run unit tests') {
            steps {
                script {
                    withCredentials([
                        usernamePassword([
                            credentialsId: 'forge-jenkins',
                            usernameVariable: 'GIT_USERNAME',
                            passwordVariable: 'GIT_PASSWORD'
                        ])
                    ]) {
                        sh '''
                        git config --global credential.https://forge.cadoles.com.username "$GIT_USERNAME"
                        git config --global credential.https://forge.cadoles.com.helper '!f() { test "$1" = get && echo "password=$GIT_PASSWORD"; }; f'

                        export GOPRIVATE=forge.cadoles.com/arcad/edge
                        make test
                        '''
                    }
                }
            }
        }

        stage('Release') {
            when {
                anyOf {
                    branch 'master'
                    branch 'develop'
                }
            }
            steps {
                script {
                    withCredentials([
                        usernamePassword([
                            credentialsId: 'forge-jenkins',
                            usernameVariable: 'GITEA_RELEASE_USERNAME',
                            passwordVariable: 'GITEA_RELEASE_PASSWORD'
                        ])
                    ]) {
                        sh 'make gitea-release'
                    }
                    def currentVersion = sh(returnStdout: true, script: 'make full-version').trim()
                    if (currentVersion.endsWith('-dirty')) {
                        unstable('Could not trigger emissary-firmware build, dirty version !')
                    } else {
                        build(
                            job: "../emissary-firmware/${env.GIT_BRANCH}",
                            parameters: [
                                [$class: 'StringParameterValue', name: 'emissaryRelease', value: currentVersion]
                            ],
                            wait: false
                        )
                    }
                }
            }
        }
    }

    post {
        always {
            cleanWs()
        }
    }
}