@Library('cadoles') _

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

    stages {
        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()
                    build(
                        job: "../emissary-firmware/${env.GIT_BRANCH}",
                        parameters: [
                            [$class: 'StringParameterValue', name: 'emissaryRelease', value: currentVersion]
                        ]
                    )
                }
            }
        }
    }

    post {
        always {
            cleanWs()
        }
    }
}