pipeline {
    agent {
        label 'linux-agents'
    }

    environment {
     ECR_URL      = '725764004555.dkr.ecr.us-east-1.amazonaws.com'
     ECR_REPO     = 'traefik'
     ECR_REPO_URL = "${ECR_URL}/${ECR_REPO}"
     AWS_PROFILE  = 'gdb-apollo-dev'

     NOTIFICATIONS_CHANNEL = '#apollo-deployments'
    }
    stages {
        stage('Load shared pipeline library') {
            steps {
                library changelog: false, identifier: 'infraLib@master'
            }
        }
        stage('Lint') {
            steps {
                echo 'Linting..'
                sh label: 'lint', script: 'docker run --rm -v $(pwd):/app -w /app/plugins-local/src/github.com/traefik/plugin-pathresponse/ golangci/golangci-lint:v1.53.3 golangci-lint run .'
            }
        }
        stage('Build') {
            steps {
                echo 'Building..'
                sh label: 'build', script: "docker build -t ${env.ECR_REPO_URL}:latest ."
            }
        }
        stage('Push') {
            when {
                branch 'master'
            }
            steps {
                echo 'Pushing..'
                sh label: 'docker login', script: "aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${env.ECR_URL}"
                sh label: 'push', script: "docker push ${env.ECR_REPO_URL}:latest"
            }
        }
        stage('Deploy') {
            when {
                branch 'master'
            }
            steps {
                echo 'Deploying..'
                sh label: 'docker login', script: 'aws ecs update-service --cluster dev-apollo-clu --service dev-apollo-traefik --force-new-deployment'
            }
        }
    }
    post {
        always {
            script {
                utility.slackNotify(currentBuild.currentResult, env.NOTIFICATIONS_CHANNEL)
            }
        }
    }
}