import groovy.json.JsonOutput

STAGING_BRANCH = "master"
STAGING_ACCOUNT = "twitch-eventbus-dev"
STAGING_ACCOUNT_ID = 297385687169
PRODUCTION_ACCOUNT = "twitch-eventbus-prod"
PRODUCTION_ACCOUNT_ID = 859517684765
AWS_REGION = "us-west-2"

def make(cmd) {
  sh "make ${cmd}"
}

def ecrEndpoint(accountID) {
  return "${accountID}.dkr.ecr.us-west-2.amazonaws.com"
}

def gitShortCommitSha() {
    return sh(script: "git rev-parse --short HEAD", returnStdout: true).trim()
}

def gitShortCommitMsg() {
    return sh(script: "git log --pretty=oneline --abbrev-commit -1 --no-decorate", returnStdout: true).trim()
}

def commitLink() {
  sha = gitShortCommitSha()
  msg = gitShortCommitMsg()
  return "<https://git.xarth.tv/eventbus/badges/commit/${sha}|*\"${msg}\"*>"
}

def message(payload) {
  try {
    slackSend(
      attachments: JsonOutput.toJson(payload),
      channel: '#eventbus-deploys',
      tokenCredentialId: 'samus-slack-api-token'
    )
  } catch (Exception e) {
    println e
  }
}

pipeline {
    agent any
    options {
        disableConcurrentBuilds()
        timeout(time: 1, unit: 'HOURS')
        ansiColor('xterm')
        timestamps()
    }
    stages {
        stage('Build') {
            steps {
                make("build")
            }
        }
        stage('Push Image Staging') {
            when {
                branch STAGING_BRANCH
            }
            steps {
                withAWS(credentials: STAGING_ACCOUNT, region: AWS_REGION) {
		    sh """
		      ./push_image.sh badges ${GIT_COMMIT} Dockerfile ${ecrEndpoint(STAGING_ACCOUNT_ID)}
		    """
                }
            }
        }
        stage('Push Image Production') {
            when {
                branch 'master'
            }
            steps {
                withAWS(credentials: PRODUCTION_ACCOUNT, region: AWS_REGION) {
		    sh """
		      ./push_image.sh badges ${GIT_COMMIT} Dockerfile ${ecrEndpoint(PRODUCTION_ACCOUNT_ID)}
		    """
                }
            }
	    }
    }
}
