String GITHUB_REPOSITORY = 'terraform-module-version-update-assistant'
String ECR_ACCOUNT_ID = '086679231553'

pipeline {
    agent any

    parameters {
        choice(
                name: 'TARGET_REPOSITORY',
                choices: [
                        'terraform-infra-core',
                        'terraform-infra'
                ],
                description: 'The repository to run the dependabot for.'
        )

        string(
                name: 'TARGET_CONFIGURATION_PATH',
                defaultValue: 'dev',
                description: 'The relative path to the terraform configuration inside the repository'
        )

        string(
                name: 'DEPENDABOT_VERSION',
                defaultValue: 'latest',
                description: 'The version of the dependabot to use. Can be Git revision or latest.'
        )

        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.'
        )
    }

    environment {
        TARGET_CONFIGURATION_PATH = "${params.TARGET_CONFIGURATION_PATH.rstrip('/')}"
    }

    stages {
        stage('Load Shared Libraries') {
            steps {
                library "jenkins-global-libraries@${params.SHARED_LIBRARIES_VERSION}"
            }
        }
        stage('Run Terraform Modules Update') {
            steps {
                dir(params.TARGET_REPOSITORY) {
                    checkout([
                            $class: 'GitSCM',
                            branches: [[name: '*/master']],
                            doGenerateSubmoduleConfigurations: false,
                            extensions: [],
                            submoduleCfg: [],
                            userRemoteConfigs: [
                                    [
                                            credentialsId: '577cbc72-7d9e-4eba-924c-ecbbe6de9805', // Replace with your credentials ID
                                            url: "git@github.com:theorchard/${params.TARGET_REPOSITORY}.git"
                                    ]
                            ]
                    ])

                    withCredentials([string(credentialsId: 'github_packages_token', variable: 'GITHUB_TOKEN')]) {
                        withEnv(['MODULE_VERSIONS_CACHE_FILE=/tmp/dependabro/module_versions_cache.json']) {
                            script {
                                sh script : 'umask 000 && mkdir -p /tmp/dependabro && umask 022'
                                docker.image("086679231553.dkr.ecr.us-east-1.amazonaws.com/terraform-module-version-update-assistant:${params.DEPENDABOT_VERSION}")
                                        .inside("--entrypoint='' -v /var/lib/jenkins/.ssh:/var/lib/jenkins/.ssh -v /tmp/dependabro:/tmp/dependabro") {
                                            sh script: """
                                            git config user.email "it+orchardci@theorchard.com"
                                            git config user.name "DependaBro"
                                            git checkout -b dependabro/terraform-module-version-update/${env.TARGET_CONFIGURATION_PATH}
                                            dependabro ./${env.TARGET_CONFIGURATION_PATH}
                                            git add ./${env.TARGET_CONFIGURATION_PATH}
                                            git update-index --refresh
                                            if git diff-index --quiet HEAD --; 
                                            then
                                                echo "No changes to commit."
                                            else
                                                git commit -m "chore: update terraform modules in ${env.TARGET_CONFIGURATION_PATH}"
                                                git remote set-url origin git@github.com:theorchard/${params.TARGET_REPOSITORY}.git 
                                                git push origin HEAD:dependabro/terraform-module-version-update/${env.TARGET_CONFIGURATION_PATH}
                                                hub pull-request --base master --message "chore: update terraform modules in ${env.TARGET_CONFIGURATION_PATH}" --head dependabro/terraform-module-version-update/${env.TARGET_CONFIGURATION_PATH}
                                            fi
                                        """
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    post {
        always {
            cleanWs()
        }
    }
}