
pipeline {
  agent none

    stages {
      stage('Build') {
        parallel {
          stage('Linux Build') {
            agent { docker 'linux-build-agent:latest' }
            steps {
              echo 'Building..'
              sh 'make build/hello-linux-64'
              archiveArtifacts artifacts: 'build/hello-linux-64', fingerprint: true
            }
          }
          stage('Windows Build') {
            agent { docker 'windows-build-agent:latest' }
            steps {
              // echo 'Preparing..'
              // cleanWs()
              echo 'Building..'
              sh 'make build/hello-win64.exe'
              archiveArtifacts artifacts: 'build/hello-win64.exe', fingerprint: true
              // echo 'Cleaning..'
              // cleanWs cleanWhenFailure: false, cleanWhenNotBuilt: false, cleanWhenUnstable: false
            }
          }
          stage('MacOSX Build') {
            agent { docker 'macosx-build-agent:latest' }
            steps {
              echo 'Building..'
              sh 'make build/hello-macosx.bin'
              archiveArtifacts artifacts: 'build/hello-macosx.bin', fingerprint: true
            }
          }
          stage('Linting') {
            agent { docker 'lint-agent:latest' }
            steps {
              echo 'Linting..'
              sh 'make tidy || true'
              //  junit allowEmptyResults: true, healthScaleFactor: 0.0, testResults: 'build/tidy.xml'
              sh 'true'
            }
          }
        }
      }
      stage('Test') {
        agent { docker 'linux-build-agent:latest' }
        steps {
          echo 'Testing..'
          sh 'make test || true'
          junit allowEmptyResults: true, healthScaleFactor: 0.0, testResults: 'build/tests.xml'
        }
      }
      stage('Deploy') {
        agent { docker 'linux-build-agent:latest' }
        when {
          expression {
            currentBuild.result == null || currentBuild.result == 'SUCCESS' 
          }
        }
        steps {
          echo 'Deploying....'
          sh 'make publish'
        }
      }
    }
}

