pipeline {
    agent any
    tools {
        go 'go1.16.2'
    }
    environment {
        GO114MODULE = 'on'
        CGO_ENABLED = 0
        GOPATH = "${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_ID}"
    }
    stages {
        stage('Pre Test') {
            steps {
                echo 'Installing dependencies'
                sh 'go version'
            }
        }

        stage('Build') {
            steps {
                echo 'Compiling and building'
                sh 'go build'
            }
        }

        stage('Test') {
            steps {
                sh "go test ./... -v"
            }
        }

        stage('Test Coverage') {
            steps {
                sh "go get github.com/axw/gocov/..."
                sh "go get github.com/AlekSi/gocov-xml"
                sh "go run github.com/axw/gocov/gocov test ./... | go run github.com/AlekSi/gocov-xml > coverage.xml"
            }
        }
    }
    post {
        always {
            cobertura coberturaReportFile: 'coverage.xml'
        }
    }
}