pipeline {
    agent any

    stages {
        stage('Configuration') {
            steps {
                dir('codiki-properties') {
                    git url:'https://gitea.takiguchi.ovh/Codiki/codiki-properties.git', branch: 'hexagonal-reforged', credentialsId: 'Jenkins-gitea'
                }
                script {
                    sh 'sed -i "s/<POSTGRES_PASSWORD>/$(cat ./codiki-properties/passwords/postgres)/g" ./codiki-properties/application-prod.yml'
                    sh 'cp ./codiki-properties/application-prod.yml ./backend/codiki-launcher/src/main/resources/application-prod.yml'
                    sh 'sed -i "s/<POSTGRES_PASSWORD>/$(cat ./codiki-properties/passwords/postgres)/g" ./docker-compose.yml'
                }
            }
        }
        stage('Build') {
            steps {
                script {
                    sh """
                        sudo /usr/bin/docker build -t codiki-backend -f ./Dockerfile-backend . --no-cache
                        sudo /usr/bin/docker build -t codiki-frontend -f ./Dockerfile-frontend . --no-cache
                        sudo /usr/bin/docker save codiki-backend:latest -o ./codiki-backend.tar
                        sudo /usr/bin/docker save codiki-frontend:latest -o ./codiki-frontend.tar
                        sudo chown jenkins:jenkins ./codiki-backend.tar
                        sudo chown jenkins:jenkins ./codiki-frontend.tar
                        chmod 644 ./codiki-backend.tar
                        chmod 644 ./codiki-frontend.tar
                    """
                }
            }
        }
        stage('Deploy') {
            steps {
                sshPublisher(
                    publishers: [
                        sshPublisherDesc(
                            configName: 'DebianServer [codiki]',
                            transfers: [
                                sshTransfer(
                                    cleanRemote: false,
                                    excludes: '',
                                    execCommand: '',
                                    execTimeout: 120000,
                                    flatten: false,
                                    makeEmptyDirs: false,
                                    noDefaultExcludes: false,
                                    patternSeparator: '[, ]+',
                                    remoteDirectory: '/opt/codiki',
                                    remoteDirectorySDF: false,
                                    removePrefix: '',
                                    sourceFiles: 'codiki-backend.tar,codiki-frontend.tar,docker-compose.yml'
                                ),
                                sshTransfer(
                                    cleanRemote: false,
                                    excludes: '',
                                    execCommand: """
                                        cd /opt/codiki
                                        sudo /usr/bin/docker load < /opt/codiki/codiki-backend.tar
                                        sudo /usr/bin/docker load < /opt/codiki/codiki-frontend.tar
                                        sudo /usr/bin/docker compose down
                                        sudo /usr/bin/docker compose up --detach
                                    """,
                                    execTimeout: 120000,
                                    flatten: false,
                                    makeEmptyDirs: false,
                                    noDefaultExcludes: false,
                                    patternSeparator: '[, ]+',
                                    remoteDirectory: '/opt/codiki',
                                    remoteDirectorySDF: false,
                                    removePrefix: '',
                                    sourceFiles: ''
                                )
                            ],
                            usePromotionTimestamp: false,
                            useWorkspaceInPromotion: false,
                            verbose: true
                        )
                    ]
                )
            }
        }
    }
}
