pipeline {
    agent { 
        node { label 'Wrangler1' } 
    }
    environment {
        DOCKER_HOST = 'unix:///var/run/docker.sock'
        OPENAI_TOKEN = credentials('OpenAI-Token')
        OLLAMA = 'ollama/ollama'
        OPENWEBUI = 'ghcr.io/open-webui/open-webui:latest' 
        TIKA = 'apache/tika:latest'
        CHROMADB = 'chromadb/chroma:latest'
        CHROMAUI = 'ghcr.io/logspace-ai/chroma-ui:latest'
    }
    stages {
        stage('Check NVIDIA Driver Version') {
            steps {
                script {
                    catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {
                        sh 'nvidia-smi --query-gpu=driver_version --format=csv,noheader'
                    }
                }
            }
        }
        stage('Check Ollama and Open-WebUI Versions (Before Deploy)') {
            steps {
                script {
                    catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {
                        echo 'Checking Ollama version before deploy:'
                        sh 'docker exec -i ollama ollama -v || echo "Ollama check failed"'

                        echo 'Checking Open-WebUI version before deploy:'
                        sh 'docker exec -i openwebui jq -r .version /app/package.json || echo "Open-WebUI check failed"'
                    }
                }
            }
        }
        stage('Deploy with Docker Compose') {
            steps {
                script {
                    withCredentials([usernamePassword(credentialsId: 'gitea-oauth-open-webui-client-id-secret', passwordVariable: 'CLIENT_SECRET', usernameVariable: 'CLIENT_ID'), string(credentialsId: 'OpenAI-API-Token', variable: 'OPEN_AI_TOKEN'), usernamePassword(credentialsId: 'ldap-bind-auth-user', passwordVariable: 'AD_BIND_PASSWORD', usernameVariable: 'AD_BIND_USER')]) {
                        sh """

                        COMPOSE_PROJECT_NAME=openwebui \
                        CHROMAUI=${CHROMAUI} \
                        CHROMADB=${CHROMADB} \
                        TIKA=${TIKA} \
                        OLLAMA=${OLLAMA} \
                        OPENWEBUI=${OPENWEBUI} \
                        
                        export PG_PASS=\$(openssl rand -base64 48 | tr -dc 'A-Za-z0-9' | head -c32)
                        docker compose pull
                        COMPOSE_PROJECT_NAME=openwebui \
                        CHROMADB=${CHROMADB} \
                        CHROMAUI=$CHROMAUI} \
                        TIKA=${TIKA} \
                        OLLAMA=${OLLAMA} \
                        OPENWEBUI=${OPENWEBUI} \
                        docker compose up -d  --force-recreate

                        sleep 5
                        echo "ALTER USER openwebui_user WITH PASSWORD '\$PG_PASS';" | docker exec -i openwebui_postgres_db psql -U openwebui_user -d openwebui_db

                        """
                    }
                }
            }
        }
        stage('Check Ollama and Open-WebUI Versions (After Deploy)') {
            steps {
                script {
                    catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {
                        echo 'Checking Ollama version after deploy:'
                        sh 'docker exec -i ollama ollama -v || echo "Ollama check failed"'

                        echo 'Checking Open-WebUI version after deploy:'
                        sh 'docker exec -i openwebui jq -r .version /app/package.json || echo "Open-WebUI check failed"'
                    }
                }
            }
        }
    }
    post {
        always {
            echo 'Pipeline finished.'
        }
    }
}