diff --git a/src/orchestrator/production-deployer.ts b/src/orchestrator/production-deployer.ts index fb7dd32..0ead6a0 100644 --- a/src/orchestrator/production-deployer.ts +++ b/src/orchestrator/production-deployer.ts @@ -347,53 +347,32 @@ export class ProductionDeployer { ): Promise { state.phase = 'verifying_health'; state.progress = 95; - state.message = 'Verifying application health'; + state.message = 'Verifying application status via Dokploy'; - if (!state.url) { - throw new Error('Application URL not available'); + if (!state.resources.applicationId) { + throw new Error('Application ID not available'); } - const timeout = config.healthCheckTimeout || 120000; - const interval = config.healthCheckInterval || 5000; + const timeout = config.healthCheckTimeout || 60000; + const interval = config.healthCheckInterval || 3000; const startTime = Date.now(); - const endpoints = ['/', '/health', '/api']; - while (Date.now() - startTime < timeout) { - for (const endpoint of endpoints) { - try { - const checkUrl = `${state.url}${endpoint}`; - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), 5000); - - const response = await fetch(checkUrl, { - method: 'GET', - signal: controller.signal, - }); - - clearTimeout(timeoutId); - console.log(`Health check ${checkUrl} returned ${response.status}`); - state.message = 'Application is responding'; + try { + const app = await this.client.getApplication(state.resources.applicationId); + const appStatus = app.applicationStatus; + console.log(`Application status: ${appStatus}`); + + if (appStatus === 'done') { + state.message = 'Application deployed successfully'; return; - } catch (error) { - const errorMsg = error instanceof Error ? error.message : String(error); - - if ( - errorMsg.includes('certificate') || - errorMsg.includes('SSL') || - errorMsg.includes('TLS') || - errorMsg.includes('CERT') || - errorMsg.includes('unable to verify') || - errorMsg.includes('self signed') || - errorMsg.includes('self-signed') - ) { - console.log(`Health check SSL error (treating as alive): ${errorMsg}`); - state.message = 'Application is responding (SSL provisioning)'; - return; - } - - console.log(`Health check failed: ${errorMsg}`); } + + if (appStatus === 'error') { + throw new Error('Application deployment failed in Dokploy'); + } + } catch (error) { + console.log(`Status check failed: ${error}`); } const elapsed = Math.round((Date.now() - startTime) / 1000); @@ -403,7 +382,7 @@ export class ProductionDeployer { await this.sleep(interval); } - throw new Error('Health check timeout - application did not become healthy'); + throw new Error('Health check timeout - application did not become ready'); } private async rollback(state: DeploymentState): Promise {