Files
ai-stack-deployer/tests/test-deploy-persistent.ts
Oussama Douhou e617114310 refactor: enterprise-grade project structure
- Move test files to tests/
- Archive session notes to docs/archive/
- Remove temp/diagnostic files
- Clean src/ to only contain production code
2026-01-10 12:32:54 +01:00

117 lines
4.1 KiB
TypeScript
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bun
/**
* Deploy persistent resources for verification
* Skips health check and rollback - leaves resources in Dokploy
*/
import { createProductionDokployClient } from './api/dokploy-production.js';
const STACK_NAME = `verify-${Date.now()}`;
const DOCKER_IMAGE = 'nginx:alpine';
const DOMAIN_SUFFIX = 'ai.flexinit.nl';
console.log('═══════════════════════════════════════');
console.log(' PERSISTENT DEPLOYMENT TEST');
console.log('═══════════════════════════════════════\n');
async function main() {
const client = createProductionDokployClient();
const projectName = `ai-stack-${STACK_NAME}`;
console.log(`Deploying: ${STACK_NAME}`);
console.log(`Project: ${projectName}`);
console.log(`URL: https://${STACK_NAME}.${DOMAIN_SUFFIX}\n`);
// Phase 1: Create Project
console.log('[1/6] Creating project...');
const { project, environment } = await client.createProject(
projectName,
`Verification deployment for ${STACK_NAME}`
);
console.log(`✅ Project: ${project.projectId}`);
console.log(`✅ Environment: ${environment.environmentId}\n`);
// Phase 2: Create Application
console.log('[2/6] Creating application...');
const application = await client.createApplication(
`opencode-${STACK_NAME}`,
environment.environmentId
);
console.log(`✅ Application: ${application.applicationId}\n`);
// Phase 3: Configure Docker Image
console.log('[3/6] Configuring Docker image...');
await client.updateApplication(application.applicationId, {
dockerImage: DOCKER_IMAGE,
sourceType: 'docker',
});
console.log(`✅ Configured: ${DOCKER_IMAGE}\n`);
// Phase 4: Create Domain
console.log('[4/6] Creating domain...');
const domain = await client.createDomain(
`${STACK_NAME}.${DOMAIN_SUFFIX}`,
application.applicationId,
true,
80
);
console.log(`✅ Domain: ${domain.domainId}`);
console.log(`✅ Host: ${domain.host}\n`);
// Phase 5: Trigger Deployment
console.log('[5/6] Triggering deployment...');
await client.deployApplication(application.applicationId);
console.log(`✅ Deployment triggered\n`);
// Phase 6: Summary
console.log('[6/6] Deployment complete!\n');
console.log('═══════════════════════════════════════');
console.log(' DEPLOYMENT SUCCESSFUL');
console.log('═══════════════════════════════════════\n');
console.log(`📦 Resources:`);
console.log(` Project ID: ${project.projectId}`);
console.log(` Environment ID: ${environment.environmentId}`);
console.log(` Application ID: ${application.applicationId}`);
console.log(` Domain ID: ${domain.domainId}`);
console.log(`\n🌐 URLs:`);
console.log(` Application: https://${STACK_NAME}.${DOMAIN_SUFFIX}`);
console.log(` Dokploy UI: https://app.flexinit.nl/project/${project.projectId}`);
console.log(`\n⏱ Note: Application will be accessible in 1-2 minutes (SSL provisioning)`);
console.log(`\n🧹 Cleanup command:`);
console.log(` source .env && curl -X POST -H "x-api-key: \${DOKPLOY_API_TOKEN}" \\`);
console.log(` https://app.flexinit.nl/api/application.delete \\`);
console.log(` -H "Content-Type: application/json" \\`);
console.log(` -d '{"applicationId":"${application.applicationId}"}'`);
console.log('\n');
// Output machine-readable format for verification
const output = {
success: true,
stackName: STACK_NAME,
resources: {
projectId: project.projectId,
environmentId: environment.environmentId,
applicationId: application.applicationId,
domainId: domain.domainId,
},
url: `https://${STACK_NAME}.${DOMAIN_SUFFIX}`,
dokployUrl: `https://app.flexinit.nl/project/${project.projectId}`,
};
console.log('JSON OUTPUT:');
console.log(JSON.stringify(output, null, 2));
process.exit(0);
}
main().catch(error => {
console.error('\n❌ Deployment failed:', error);
process.exit(1);
});