pipeline {
    agent any

    environment {
        HARBOR_HOST = "harbor.dinauer.dev"
        PROJECT = "big-bucket"
        REPO = "core"
    }

    stages {
        stage('Set Image Name') {
            steps {
                script {
                    env.IMAGE = "${env.HARBOR_HOST}/${env.PROJECT}/${env.REPO}:${env.BUILD_NUMBER}"
                    env.LATEST = "${env.HARBOR_HOST}/${env.PROJECT}/${env.REPO}:latest"
                }
            }
        }
        stage('Build Quarkus application') {
            steps {
                script {
                    sh 'mvn clean package'
                }
            }
        }
        stage('Build Docker Image') {
            steps {
                script {
                    sh "docker build --no-cache -t ${env.IMAGE} ."
                    sh "docker tag ${env.IMAGE} ${env.LATEST}"
                }
            }
        }
        stage('Push Image to Docker Hub') {
            steps {
                script {
                    withCredentials([usernamePassword(credentialsId: 'harbor', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
                        sh "echo ${PASSWORD} | docker login ${env.HARBOR_HOST} -u ${USERNAME} --password-stdin"
                        sh "docker push ${env.IMAGE} && docker push ${env.LATEST}"
                        sh "docker logout"
                    }
                }
            }
        }
        stage('Remove image from host') {
            steps {
                script {
                    sh "docker image rm --force ${env.IMAGE} && docker image rm --force ${env.LATEST}"
                }
            }
        }
    }

    post {
        always {
            cleanWs()
        }
    }
}