import groovy.json.JsonSlurper

AWS_REGION = "us-west-2"
DEV_CREDENTIALS_ID = "twitch-secretshop-dev"
DEV_ACCOUNT_ID = "454314487337"
JENKINS_ROLE = "secretshop-jenkins"

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

// Returns the most recent docker tags for gql in dev, ordered by most recent first
def recentTags() {
    withAWS(role: JENKINS_ROLE, roleAccount: DEV_ACCOUNT_ID, region: AWS_REGION) {
        dockertags = sh(script: "aws ecr describe-images --repository-name secretshop  --query 'reverse(sort_by(imageDetails,&imagePushedAt))[*].imageTags[0]'  | jq '.[:15]'  ", returnStdout: true).trim()
        return new JsonSlurper().parseText(dockertags.toString())
    }
}
pipeline {
    agent any

    options {
        ansiColor('xterm')
        timestamps()
        timeout(time: 15, unit: 'MINUTES')
    }

    stages {
        stage('Select version') {
            steps {
                script {
                    def msg = "Which application version would you like to deploy to dev?"
                    try {
                        timeout(time: 60, unit: 'SECONDS') {
                            dockerTag = input(
                                id: 'dockerTag',
                                message: msg,
                                parameters: [[
                                                 $class      : 'ChoiceParameterDefinition',
                                                 defaultValue: 'strDef',
                                                 choices     : "${recentTags().join("\n")}",
                                                 name        : "choose-docker-tag"
                                             ]]
                            )

                        }
                    } catch (err) {
                        error("Build cancelled - ${err}")
                    }
                }
            }
        }

        stage('Deploy dev docker image') {
            environment {
                DOCKER_TAG = "${dockerTag}"
            }
            steps {
                withAWS (role: JENKINS_ROLE, roleAccount: DEV_ACCOUNT_ID) {
                    make('deploy-docker-dev')
                }
            }
        }
    }
}
