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
This commit is contained in:
116
tests/test-deploy-persistent.ts
Executable file
116
tests/test-deploy-persistent.ts
Executable file
@@ -0,0 +1,116 @@
|
||||
#!/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);
|
||||
});
|
||||
Reference in New Issue
Block a user