@tamyla/clodo-framework 3.0.3 → 3.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [3.0.5](https://github.com/tamylaa/clodo-framework/compare/v3.0.4...v3.0.5) (2025-10-14)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* add missing join import in clodo-service.js ([5e0d7c6](https://github.com/tamylaa/clodo-framework/commit/5e0d7c6ce3262454138f39b4e44d0d24dc7bcb65))
|
|
7
|
+
|
|
8
|
+
## [3.0.4](https://github.com/tamylaa/clodo-framework/compare/v3.0.3...v3.0.4) (2025-10-14)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* resolve deployment configuration and database binding issues ([f9d7036](https://github.com/tamylaa/clodo-framework/commit/f9d7036e18b49ba9082cad8f8e181f5abc1c2c2d))
|
|
14
|
+
|
|
1
15
|
## [3.0.3](https://github.com/tamylaa/clodo-framework/compare/v3.0.2...v3.0.3) (2025-10-14)
|
|
2
16
|
|
|
3
17
|
|
package/bin/clodo-service.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
1
|
+
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Clodo Framework - Unified Three-Tier Service Management CLI
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import { Command } from 'commander';
|
|
16
16
|
import { createInterface } from 'readline';
|
|
17
17
|
import chalk from 'chalk';
|
|
18
|
+
import { join } from 'path';
|
|
18
19
|
import { ServiceOrchestrator } from '../dist/service-management/ServiceOrchestrator.js';
|
|
19
20
|
import { InputCollector } from '../dist/service-management/InputCollector.js';
|
|
20
21
|
|
|
@@ -436,7 +437,9 @@ program
|
|
|
436
437
|
console.log(chalk.white('Using Three-Tier Input Architecture\n'));
|
|
437
438
|
|
|
438
439
|
const isInteractive = options.interactive && !options.nonInteractive;
|
|
439
|
-
const configManager = new UnifiedConfigManager(
|
|
440
|
+
const configManager = new UnifiedConfigManager({
|
|
441
|
+
configDir: join(process.cwd(), 'config', 'customers')
|
|
442
|
+
});
|
|
440
443
|
const inputCollector = new InputCollector({ interactive: isInteractive });
|
|
441
444
|
const confirmationHandler = new ConfirmationHandler({ interactive: isInteractive });
|
|
442
445
|
|
|
@@ -398,7 +398,7 @@ export class DatabaseOrchestrator {
|
|
|
398
398
|
// Use BINDING name (not database name) for wrangler command
|
|
399
399
|
const command = this.buildMigrationCommand(bindingName, environment, isRemote);
|
|
400
400
|
console.log(` 📋 Migration command: ${command}`);
|
|
401
|
-
const output = await this.executeWithRetry(command, 120000); // 2 minute timeout
|
|
401
|
+
const output = await this.executeWithRetry(command, 120000, this.projectRoot); // 2 minute timeout
|
|
402
402
|
|
|
403
403
|
// Parse migration output
|
|
404
404
|
const migrationsApplied = this.parseMigrationOutput(output);
|
|
@@ -504,7 +504,7 @@ export class DatabaseOrchestrator {
|
|
|
504
504
|
try {
|
|
505
505
|
const isRemote = this.environments[environment].isRemote;
|
|
506
506
|
const command = this.buildBackupCommand(databaseName, environment, backupFile, isRemote);
|
|
507
|
-
await this.executeWithRetry(command, 300000); // 5 minute timeout for backups
|
|
507
|
+
await this.executeWithRetry(command, 300000, this.projectRoot); // 5 minute timeout for backups
|
|
508
508
|
|
|
509
509
|
if (existsSync(backupFile)) {
|
|
510
510
|
const stats = await stat(backupFile);
|
|
@@ -629,7 +629,7 @@ export class DatabaseOrchestrator {
|
|
|
629
629
|
try {
|
|
630
630
|
for (const command of commands) {
|
|
631
631
|
const fullCommand = this.buildDatabaseCommand(command, databaseName, environment);
|
|
632
|
-
await this.executeWithRetry(fullCommand, 60000);
|
|
632
|
+
await this.executeWithRetry(fullCommand, 60000, this.projectRoot);
|
|
633
633
|
executedCommands++;
|
|
634
634
|
}
|
|
635
635
|
console.log(` ✅ Cleanup completed: ${executedCommands} operations`);
|
|
@@ -683,10 +683,11 @@ export class DatabaseOrchestrator {
|
|
|
683
683
|
const matches = output.match(/Applied (\d+) migration/);
|
|
684
684
|
return matches ? parseInt(matches[1]) : 0;
|
|
685
685
|
}
|
|
686
|
-
async executeWithRetry(command, timeout = null) {
|
|
686
|
+
async executeWithRetry(command, timeout = null, workingDir = null) {
|
|
687
687
|
const actualTimeout = timeout || (this.config ? this.config.executionTimeout : 30000);
|
|
688
688
|
const maxAttempts = this.config ? this.config.retryAttempts : 3;
|
|
689
689
|
const retryDelay = this.config ? this.config.retryDelay : 1000;
|
|
690
|
+
const cwd = workingDir || this.projectRoot;
|
|
690
691
|
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
691
692
|
try {
|
|
692
693
|
const {
|
|
@@ -694,7 +695,8 @@ export class DatabaseOrchestrator {
|
|
|
694
695
|
} = await execAsync(command, {
|
|
695
696
|
encoding: 'utf8',
|
|
696
697
|
timeout: actualTimeout,
|
|
697
|
-
stdio: 'pipe'
|
|
698
|
+
stdio: 'pipe',
|
|
699
|
+
cwd: cwd
|
|
698
700
|
});
|
|
699
701
|
return stdout;
|
|
700
702
|
} catch (error) {
|