pipeline {
  agent {
    label 'linux-agents'
  }

  options {
    ansiColor('xterm')
    disableConcurrentBuilds()
  }

  environment {
    DEPLOYMENT_NOTIFICATIONS_CHANNEL = '#ci-alerts'
    TF_IN_AUTOMATION = 1
  }

  stages {
    stage('Build') {
      steps {
        sh "mkdir -p bin/"
        sh "make docker/build/linux"
      }
    } /** end: stage */

    stage('Deploy') {
      parallel {
        stage('Development') {
          when {
            expression { return env.BRANCH_NAME == 'develop' }
          }
          environment {
            AWS_PROFILE = "gdb-delphi-dev"
          }
          steps {
            sh "make deploy/dev"
          }
        } /** end: stage */
        stage('Production') {
          when {
            expression { return env.BRANCH_NAME == 'master' }
          }
          environment {
            AWS_PROFILE = "gdb-delphi-dev"
          }
          steps {
            sh "make deploy/prod"
          }
        } /** end: stage */
      } /** end: parallel */
      post {
        success {
          slackSend channel: "${env.DEPLOYMENT_NOTIFICATIONS_CHANNEL}",
            color: 'good',
            iconEmoji: ':tada:',
            username: 'Deploy',
            message: "successfully finished deployment for ${env.JOB_NAME} <${env.BUILD_URL}|Open>"
        }
        unsuccessful {
          slackSend channel: "${env.DEPLOYMENT_NOTIFICATIONS_CHANNEL}",
            color: 'danger',
            iconEmoji: ':warning:',
            username: 'Deploy',
            message: "deploy failed for ${env.JOB_NAME} <${env.BUILD_URL}|Open>"
        }
      } /** end: post */
    } /** end: stage */
  } /** end: stages */
  post {
    success {
      slackSend channel: "${env.DEPLOYMENT_NOTIFICATIONS_CHANNEL}",
        color: 'good',
        iconEmoji: ':tada:',
        username: 'Jenkins',
        message: "build ${currentBuild.result} for ${env.JOB_NAME} <${env.BUILD_URL}|Open>"
    }
    unsuccessful {
      slackSend channel: "${env.DEPLOYMENT_NOTIFICATIONS_CHANNEL}",
        color: 'danger',
        iconEmoji: ':red_circle:',
        username: 'Jenkins',
        message: "build ${currentBuild.result} for ${env.JOB_NAME} <${env.BUILD_URL}|Open>"
    }
  } /** end: post */
}