@Library('nf-jenkins-shared-libraries')_

REPO='ziti-import-export'
ECR_TAG=""
BUILD_LINK = ""

pipeline {
    agent {
        ecs {
            inheritFrom 'ec2-agent-jdk21'
        }
    }

    environment {
        SONAR_CLOUD = credentials('sonar')
        BITBUCKET_AUTH = credentials('bitbucket_auth')
    }

    parameters {
        choice(name: 'IMAGE_TYPE', choices: ['sandbox', 'release', 'hotfix'], description: 'Whether the image is to be a release for prod or a release candidate for lower environments')
        string(name: 'BRANCH', defaultValue: 'develop', description: 'Branch to be built from')
    }

    stages {
        stage('Checkout Branch') {
            steps {
                git credentialsId: 'new-jenkins-bitbucket-ssh', url: "git@bitbucket.org:netfoundry/${REPO}.git", branch: "${params.BRANCH}"
                sh "ls"
                script {
                    GIT_HASH = sh(returnStdout: true, script: "git rev-parse --short HEAD").trim()
                }
                echo "hash is: ${GIT_HASH}"
            }
        }

        stage('Go Build') {
            steps{
                script{
                    sh "go mod download"
                    sh "go mod tidy"
                    sh "go build -o serve"
                    sh "ls -ltr; ls -ltr serve"
                }
            }
        }

        stage('Docker Build'){
            steps{
                sh "docker --version"
                sh "aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 447513199460.dkr.ecr.us-east-1.amazonaws.com"
                sh "docker build . -t local/${REPO}"
                sh "ls"
            }
        }

        stage('Docker Push'){
            steps{
                script{
                    def tag_suffix = "${new Date().format('yyyyMMddHHmm')}"
                    ECR_TAG = "${GIT_HASH}-${IMAGE_TYPE}-${tag_suffix}"
                    currentBuild.description = "Git Hash: ${GIT_HASH}\n ECR Tag: ${ECR_TAG}"
                    awsEcrImageCreate("${REPO}", "${ECR_TAG}", "production")
                }
            }
        }
    }

    post {
        always {
            script {
                env.BUILD_LINK = "${RUN_DISPLAY_URL}"
            }
        }
        success {
            script {
                env.ECR_TAG = "${ECR_TAG}"
            }
        }
    }
}