@Library('flexo-libs')_

properties([
    parameters([choice(name: 'BuildEnvironment', choices: 'Staging\nProduction', description: 'Build environment for the service')])
])

node {
    stage("checkout") {
        checkout scm
    }
    stage("build") {
        def buildToolsImage = docker.build("build-tools", "-f npmDockerfile.build .")
        buildToolsImage.inside {
            sh 'yarn build'
            def atlasServiceDomain = "atlas.cursedata.io"
            if (params.BuildEnvironment && params.BuildEnvironment == 'Production') {
                atlasServiceDomain = "atlas.xarth.tv"
            }
            sh "./upload-script.sh $atlasServiceDomain"
        }
        docker.build('atlas')
    }
    withAgentAWS(role_arn: "arn:aws:iam::029773783190:role/TwitchJenkinsAgentForAnchor") {
        stage("publish") {
            sh 'eval $(aws ecr get-login --no-include-email --region=us-west-2)'
            sh 'docker tag atlas:latest 029773783190.dkr.ecr.us-west-2.amazonaws.com/atlas:latest'
            sh 'docker push 029773783190.dkr.ecr.us-west-2.amazonaws.com/atlas:latest'
        }
    }
    withAgentAWS(role_arn: "arn:aws:iam::029773783190:role/TwitchJenkinsAgentForAnchor") {
        stage("deploy") {
            docker.image("build-tools").inside {
                def atlasServiceName = "atlas-staging"
                if (params.BuildEnvironment && params.BuildEnvironment == 'Production') {
                    atlasServiceName = "atlas"
                }
                sh "aws ecs update-service --region us-west-2 --cluster Atlas --service $atlasServiceName --force-new-deployment"
            }
        }
    }
}
