@tamyla/clodo-framework 4.0.4 ā 4.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 +7 -0
- package/dist/lib/shared/deployment/credential-collector.js +14 -3
- package/dist/lib/shared/deployment/workflows/interactive-confirmation.js +19 -4
- package/dist/lib/shared/deployment/workflows/interactive-deployment-coordinator.js +1 -1
- package/dist/lib/shared/deployment/workflows/interactive-domain-info-gatherer.js +5 -5
- package/dist/lib/shared/deployment/workflows/interactive-validation.js +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [4.0.5](https://github.com/tamylaa/clodo-framework/compare/v4.0.4...v4.0.5) (2025-12-09)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* ensure deployments use correct Cloudflare account and zone ([22d42a9](https://github.com/tamylaa/clodo-framework/commit/22d42a9d4cf800e78953a0bcd897d6cb94dfefc5))
|
|
7
|
+
|
|
1
8
|
## [4.0.4](https://github.com/tamylaa/clodo-framework/compare/v4.0.3...v4.0.4) (2025-12-08)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -77,6 +77,7 @@ export class DeploymentCredentialCollector {
|
|
|
77
77
|
console.log(chalk.cyan('\nš Validating Cloudflare API token...\n'));
|
|
78
78
|
}
|
|
79
79
|
let accountId = startCredentials.accountId;
|
|
80
|
+
let accountName = startCredentials.accountName;
|
|
80
81
|
let zoneId = startCredentials.zoneId;
|
|
81
82
|
let zoneName = startCredentials.zoneName;
|
|
82
83
|
try {
|
|
@@ -95,7 +96,9 @@ export class DeploymentCredentialCollector {
|
|
|
95
96
|
|
|
96
97
|
// If account ID not provided, fetch from Cloudflare
|
|
97
98
|
if (!accountId) {
|
|
98
|
-
|
|
99
|
+
const accountInfo = await this.fetchAccountId(cloudflareAPI);
|
|
100
|
+
accountId = accountInfo.id;
|
|
101
|
+
accountName = accountInfo.name;
|
|
99
102
|
}
|
|
100
103
|
|
|
101
104
|
// If zone ID not provided, fetch from Cloudflare
|
|
@@ -118,12 +121,14 @@ export class DeploymentCredentialCollector {
|
|
|
118
121
|
return {
|
|
119
122
|
token,
|
|
120
123
|
accountId,
|
|
124
|
+
accountName,
|
|
121
125
|
zoneId,
|
|
122
126
|
zoneName,
|
|
123
127
|
// Convenience: cloudflareSettings object for passing to orchestrators
|
|
124
128
|
cloudflareSettings: {
|
|
125
129
|
token,
|
|
126
130
|
accountId,
|
|
131
|
+
accountName,
|
|
127
132
|
zoneId,
|
|
128
133
|
zoneName
|
|
129
134
|
}
|
|
@@ -184,7 +189,10 @@ export class DeploymentCredentialCollector {
|
|
|
184
189
|
if (!this.quiet) {
|
|
185
190
|
console.log(chalk.green(`ā
Found account: ${accounts[0].name}\n`));
|
|
186
191
|
}
|
|
187
|
-
return
|
|
192
|
+
return {
|
|
193
|
+
id: accounts[0].id,
|
|
194
|
+
name: accounts[0].name
|
|
195
|
+
};
|
|
188
196
|
}
|
|
189
197
|
|
|
190
198
|
// Multiple accounts - let user choose
|
|
@@ -197,7 +205,10 @@ export class DeploymentCredentialCollector {
|
|
|
197
205
|
if (!this.quiet) {
|
|
198
206
|
console.log(chalk.green(`ā
Selected: ${selectedAccount.name}\n`));
|
|
199
207
|
}
|
|
200
|
-
return
|
|
208
|
+
return {
|
|
209
|
+
id: selectedAccount.id,
|
|
210
|
+
name: selectedAccount.name
|
|
211
|
+
};
|
|
201
212
|
} catch (error) {
|
|
202
213
|
console.error(chalk.red('ā Failed to fetch account ID:'));
|
|
203
214
|
console.error(chalk.yellow(error.message));
|
|
@@ -45,10 +45,25 @@ export class InteractiveConfirmation {
|
|
|
45
45
|
console.log('=====================');
|
|
46
46
|
console.log(`š Domain: ${config.domain}`);
|
|
47
47
|
console.log(`š Environment: ${config.environment}`);
|
|
48
|
-
console.log(`ā” Worker: ${config.worker
|
|
49
|
-
console.log(`š URL: ${config.worker
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
console.log(`ā” Worker: ${config.worker?.name || 'Not configured'}`);
|
|
49
|
+
console.log(`š URL: ${config.worker?.url || 'Not configured'}`);
|
|
50
|
+
|
|
51
|
+
// Database info from resources
|
|
52
|
+
const database = deploymentState.resources?.database;
|
|
53
|
+
if (database) {
|
|
54
|
+
console.log(`šļø Database: ${database.name} (${database.id})`);
|
|
55
|
+
} else {
|
|
56
|
+
console.log(`šļø Database: Not configured`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Secrets info from resources
|
|
60
|
+
const secrets = deploymentState.resources?.secrets;
|
|
61
|
+
if (secrets) {
|
|
62
|
+
const secretCount = Object.keys(secrets).length;
|
|
63
|
+
console.log(`š Secrets: ${secretCount} configured`);
|
|
64
|
+
} else {
|
|
65
|
+
console.log(`š Secrets: Not configured`);
|
|
66
|
+
}
|
|
52
67
|
console.log(`š Deployment ID: ${deploymentState.deploymentId}`);
|
|
53
68
|
}
|
|
54
69
|
|
|
@@ -212,7 +212,7 @@ export class InteractiveDeploymentCoordinator {
|
|
|
212
212
|
const result = await Clodo.deploy({
|
|
213
213
|
servicePath: this.deploymentState.config.servicePath,
|
|
214
214
|
environment: this.deploymentState.config.environment,
|
|
215
|
-
domain: this.deploymentState.config.
|
|
215
|
+
domain: this.deploymentState.config.credentials.zoneName,
|
|
216
216
|
serviceName: this.options.serviceName,
|
|
217
217
|
dryRun: this.deploymentState.config.dryRun,
|
|
218
218
|
credentials: this.deploymentState.config.credentials
|
|
@@ -93,9 +93,9 @@ export class InteractiveDomainInfoGatherer {
|
|
|
93
93
|
config.worker = config.worker || {};
|
|
94
94
|
config.worker.name = `${config.domain}-data-service`;
|
|
95
95
|
|
|
96
|
-
// Use
|
|
97
|
-
const
|
|
98
|
-
config.worker.url = `https://${config.worker.name}.${
|
|
96
|
+
// Use account name from credentials for workers.dev subdomain
|
|
97
|
+
const accountName = config.credentials?.accountName || 'tamylatrading';
|
|
98
|
+
config.worker.url = `https://${config.worker.name}.${accountName}.workers.dev`;
|
|
99
99
|
console.log(`\nš§ Generated Configuration:`);
|
|
100
100
|
console.log(` Worker Name: ${config.worker.name}`);
|
|
101
101
|
console.log(` Worker URL: ${config.worker.url}`);
|
|
@@ -114,8 +114,8 @@ export class InteractiveDomainInfoGatherer {
|
|
|
114
114
|
console.log(` š§ Using extracted name: ${customWorkerName}`);
|
|
115
115
|
}
|
|
116
116
|
config.worker.name = customWorkerName;
|
|
117
|
-
const
|
|
118
|
-
config.worker.url = `https://${config.worker.name}.${
|
|
117
|
+
const accountName = config.credentials?.accountName || 'tamylatrading';
|
|
118
|
+
config.worker.url = `https://${config.worker.name}.${accountName}.workers.dev`;
|
|
119
119
|
console.log(`\nā
Updated worker configuration`);
|
|
120
120
|
}
|
|
121
121
|
}
|
|
@@ -140,7 +140,7 @@ export class InteractiveValidationWorkflow {
|
|
|
140
140
|
// Rename
|
|
141
141
|
const newName = await this.promptForNewWorkerName(config.worker.name);
|
|
142
142
|
config.worker.name = newName;
|
|
143
|
-
config.worker.url = `https://${newName}.${config.credentials?.zoneName || 'tamylatrading.workers.dev'}`;
|
|
143
|
+
config.worker.url = `https://${newName}.${config.credentials?.zoneName || config.credentials?.accountName || 'tamylatrading.workers.dev'}`;
|
|
144
144
|
console.log(` ā
Will deploy as new worker: ${newName}`);
|
|
145
145
|
return true;
|
|
146
146
|
case 2:
|
|
@@ -207,7 +207,7 @@ export class InteractiveValidationWorkflow {
|
|
|
207
207
|
// This is a simplified comparison - in a real implementation,
|
|
208
208
|
// you might fetch the existing worker's configuration
|
|
209
209
|
console.log(` š Existing Worker: ${config.worker.name}`);
|
|
210
|
-
console.log(` š URL: https://${config.worker.name}.${config.credentials?.zoneName || 'tamylatrading.workers.dev'}`);
|
|
210
|
+
console.log(` š URL: https://${config.worker.name}.${config.credentials?.zoneName || config.credentials?.accountName || 'tamylatrading.workers.dev'}`);
|
|
211
211
|
console.log(` š
Last deployed: Unknown (would need API call to check)`);
|
|
212
212
|
console.log(` š§ Environment: ${config.environment || 'production'}`);
|
|
213
213
|
console.log('\n š New Deployment:');
|