pipeline {
    agent {
        label 'aws'
    }

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

    parameters {
        string(name: 'SHARED_LIBRARIES_VERSION', defaultValue: 'master', description: 'The version of the Jenkins shared libraries to use. Can be a branch, tag or Git revision.')
    }

    // Declare environment variables here
    environment {
        GITHUB_REPOSITORY = 'streamlit-creative-generator-poc'
        SERVICE_NAME = 'streamlit-creative-gen-poc'
        ECR_ACCOUNT_ID = '086679231553'
        AWS_REGIONS = 'us-east-1'
        QA_ACCOUNT_ID = '285943604611'
        QA_DEPLOYMENT_ROLE = 'qa-jenkins-pipeline-deploy-role'
    }

    stages {
        stage('Cleanup Workspace') {
            steps {
                cleanWs()
            }
        }
        stage('Checkout Code') {
            steps {
                script {
                    def scmVars = checkout scm
                    env.GIT_COMMIT = scmVars.GIT_COMMIT
                    env.BRANCH_NAME = scmVars.GIT_BRANCH.tokenize("/").last()
                }
            }
        }
        stage('Load Shared Libraries') {
            steps {
                library "jenkins-global-libraries@${params.SHARED_LIBRARIES_VERSION}"
            }
        }
        stage('Compliance Checks') {
            steps {
                complianceChecks()
            }
        }
        stage('Create a Release') {
            when {
                branch 'master'
            }
            steps {
                script {
                    dockerToEcr awsRegions: [env.AWS_REGIONS], ecrAccountId: env.ECR_ACCOUNT_ID, imageName: env.GITHUB_REPOSITORY, imageTag: env.GIT_COMMIT,
                        dockerBuildTarget: 'deploy'
                }
            }
        }
        stage('Deploy to QA') {
            when {
                branch 'master'
            }
            steps {
                fargateDeploy environment: 'qa',
                    awsRegions: [env.AWS_REGIONS],
                    gitCommit: env.GIT_COMMIT,
                    imageNameOverride: env.GITHUB_REPOSITORY,
                    serviceName: env.SERVICE_NAME,
                    ecrRegistryAccountId: env.ECR_ACCOUNT_ID,
                    awsDeploymentTargetAccountId: env.QA_ACCOUNT_ID,
                    awsDeploymentRoleName: env.QA_DEPLOYMENT_ROLE
            }
        }
    }
}
