@swovohq/fuel 0.2.2-alpha.86 → 0.2.2-alpha.88
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/dist/bin/fuel.js +10 -31
- package/dist/bin/fuel.js.map +1 -1
- package/dist/commands/config-verify.d.ts.map +1 -1
- package/dist/commands/config-verify.js +14 -6
- package/dist/commands/config-verify.js.map +1 -1
- package/dist/commands/create-app.d.ts.map +1 -1
- package/dist/commands/create-app.js +1 -0
- package/dist/commands/create-app.js.map +1 -1
- package/dist/commands/infra-deploy.d.ts +4 -0
- package/dist/commands/infra-deploy.d.ts.map +1 -1
- package/dist/commands/infra-deploy.js +72 -43
- package/dist/commands/infra-deploy.js.map +1 -1
- package/dist/commands/infra-destroy.js +3 -3
- package/dist/commands/infra-destroy.js.map +1 -1
- package/dist/commands/infra-init.d.ts +91 -0
- package/dist/commands/infra-init.d.ts.map +1 -1
- package/dist/commands/infra-init.js +451 -78
- package/dist/commands/infra-init.js.map +1 -1
- package/dist/commands/infra-pull.d.ts.map +1 -1
- package/dist/commands/infra-pull.js +6 -5
- package/dist/commands/infra-pull.js.map +1 -1
- package/dist/infra/azure-defaults.d.ts +49 -0
- package/dist/infra/azure-defaults.d.ts.map +1 -0
- package/dist/infra/azure-defaults.js +52 -0
- package/dist/infra/azure-defaults.js.map +1 -0
- package/dist/infra/azure-keyvault-client.d.ts +4 -0
- package/dist/infra/azure-keyvault-client.d.ts.map +1 -0
- package/dist/infra/azure-keyvault-client.js +57 -0
- package/dist/infra/azure-keyvault-client.js.map +1 -0
- package/dist/infra/azure-rbac.d.ts +11 -0
- package/dist/infra/azure-rbac.d.ts.map +1 -0
- package/dist/infra/azure-rbac.js +47 -0
- package/dist/infra/azure-rbac.js.map +1 -0
- package/dist/infra/azure-state-storage.d.ts +20 -0
- package/dist/infra/azure-state-storage.d.ts.map +1 -0
- package/dist/infra/azure-state-storage.js +229 -0
- package/dist/infra/azure-state-storage.js.map +1 -0
- package/dist/infra/credentials.d.ts +2 -2
- package/dist/infra/credentials.d.ts.map +1 -1
- package/dist/infra/credentials.js +3 -2
- package/dist/infra/credentials.js.map +1 -1
- package/dist/infra/deployment-detect.d.ts +9 -0
- package/dist/infra/deployment-detect.d.ts.map +1 -0
- package/dist/infra/deployment-detect.js +53 -0
- package/dist/infra/deployment-detect.js.map +1 -0
- package/dist/infra/github-client.d.ts.map +1 -1
- package/dist/infra/github-client.js +1 -4
- package/dist/infra/github-client.js.map +1 -1
- package/dist/infra/orchestrator.d.ts.map +1 -1
- package/dist/infra/orchestrator.js +193 -65
- package/dist/infra/orchestrator.js.map +1 -1
- package/dist/infra/preflight.js +11 -11
- package/dist/infra/preflight.js.map +1 -1
- package/dist/infra/remote-secret.d.ts +14 -0
- package/dist/infra/remote-secret.d.ts.map +1 -0
- package/dist/infra/remote-secret.js +42 -0
- package/dist/infra/remote-secret.js.map +1 -0
- package/dist/infra/template-engine.d.ts +13 -0
- package/dist/infra/template-engine.d.ts.map +1 -1
- package/dist/infra/template-engine.js +106 -38
- package/dist/infra/template-engine.js.map +1 -1
- package/dist/infra/tofu-runner.d.ts +4 -3
- package/dist/infra/tofu-runner.d.ts.map +1 -1
- package/dist/infra/tofu-runner.js +36 -27
- package/dist/infra/tofu-runner.js.map +1 -1
- package/dist/infra/types.d.ts +239 -16
- package/dist/infra/types.d.ts.map +1 -1
- package/dist/infra/types.js +153 -17
- package/dist/infra/types.js.map +1 -1
- package/package.json +10 -2
- package/schema/fuel.schema.json +528 -83
|
@@ -41,18 +41,21 @@ const path = __importStar(require("path"));
|
|
|
41
41
|
const chalk_1 = __importDefault(require("chalk"));
|
|
42
42
|
const tofu_runner_1 = require("./tofu-runner");
|
|
43
43
|
const secrets_manager_client_1 = require("./secrets-manager-client");
|
|
44
|
+
const azure_keyvault_client_1 = require("./azure-keyvault-client");
|
|
44
45
|
const config_writer_1 = require("./config-writer");
|
|
45
46
|
const git_client_1 = require("./git-client");
|
|
46
47
|
const github_client_1 = require("./github-client");
|
|
47
48
|
const github_secrets_client_1 = require("./github-secrets-client");
|
|
48
49
|
const subprocess_1 = require("./subprocess");
|
|
49
50
|
const s3_state_bucket_1 = require("./s3-state-bucket");
|
|
51
|
+
const azure_state_storage_1 = require("./azure-state-storage");
|
|
52
|
+
const azure_rbac_1 = require("./azure-rbac");
|
|
50
53
|
function slugify(name) {
|
|
51
54
|
return name.replace(/[^a-z0-9]/gi, '_').toLowerCase();
|
|
52
55
|
}
|
|
53
|
-
async function
|
|
56
|
+
async function runAwsCompensation(infraDir, credentials, tofuVars) {
|
|
54
57
|
console.log(chalk_1.default.red('\n--- Cleaning up AWS resources ---'));
|
|
55
|
-
const args = (0, tofu_runner_1.buildDestroyArgs)(credentials, tofuVars);
|
|
58
|
+
const args = (0, tofu_runner_1.buildDestroyArgs)(credentials, tofuVars, 'ecs');
|
|
56
59
|
const awsEnv = {
|
|
57
60
|
AWS_ACCESS_KEY_ID: credentials.AWS_ACCESS_KEY_ID,
|
|
58
61
|
AWS_SECRET_ACCESS_KEY: credentials.AWS_SECRET_ACCESS_KEY,
|
|
@@ -65,33 +68,89 @@ async function runCompensation(infraDir, credentials, tofuVars) {
|
|
|
65
68
|
}
|
|
66
69
|
console.log(chalk_1.default.green('AWS resources cleaned up'));
|
|
67
70
|
}
|
|
68
|
-
function
|
|
71
|
+
async function runAzureCompensation(infraDir, credentials, tofuVars) {
|
|
72
|
+
console.log(chalk_1.default.red('\n--- Cleaning up Azure resources ---'));
|
|
73
|
+
const args = (0, tofu_runner_1.buildDestroyArgs)(credentials, tofuVars, 'azure');
|
|
74
|
+
const azureEnv = {
|
|
75
|
+
ARM_SUBSCRIPTION_ID: credentials.AZURE_SUBSCRIPTION_ID,
|
|
76
|
+
ARM_TENANT_ID: credentials.AZURE_TENANT_ID,
|
|
77
|
+
ARM_CLIENT_ID: credentials.AZURE_CLIENT_ID,
|
|
78
|
+
ARM_CLIENT_SECRET: credentials.AZURE_CLIENT_SECRET,
|
|
79
|
+
};
|
|
80
|
+
const { code } = await (0, subprocess_1.spawnStreaming)(args, infraDir, azureEnv);
|
|
81
|
+
if (code !== 0) {
|
|
82
|
+
console.error(chalk_1.default.red('Compensation destroy failed. Manually delete Azure resources.'));
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
console.log(chalk_1.default.green('Azure resources cleaned up'));
|
|
86
|
+
}
|
|
87
|
+
function printOutputTable(rows) {
|
|
69
88
|
const divider = chalk_1.default.gray('─'.repeat(60));
|
|
70
89
|
console.log('\n' + divider);
|
|
71
90
|
console.log(chalk_1.default.bold(' Deployment Complete'));
|
|
72
91
|
console.log(divider);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
92
|
+
for (const [label, value] of rows) {
|
|
93
|
+
console.log(` ${chalk_1.default.dim(label.padEnd(18))}${value}`);
|
|
94
|
+
}
|
|
76
95
|
console.log(divider);
|
|
77
96
|
console.log(chalk_1.default.cyan('\n Next steps:'));
|
|
78
97
|
console.log(' Your code has been pushed. Your first deploy will start shortly.\n');
|
|
79
98
|
}
|
|
80
|
-
async function
|
|
99
|
+
async function pushCodeAndProtect(targetRoot, config, credentials, repoName, githubRepoUrl, options) {
|
|
100
|
+
await (0, git_client_1.wireGitRemote)(targetRoot, githubRepoUrl);
|
|
101
|
+
console.log(chalk_1.default.green('Git remote origin set'));
|
|
102
|
+
const allBranches = [...new Set(config.apps.map((app) => app.branch))];
|
|
103
|
+
const branches = options?.targetBranch
|
|
104
|
+
? allBranches.filter((b) => b === options.targetBranch)
|
|
105
|
+
: allBranches;
|
|
106
|
+
// Phase 1: push the base commit so the branch exists on the remote.
|
|
107
|
+
try {
|
|
108
|
+
await (0, git_client_1.pushToRemote)(targetRoot, credentials.GITHUB_TOKEN, branches, options?.forcePush);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
console.log(chalk_1.default.yellow(`Warning: base push failed. Push manually: git push -u origin ${branches.join(' ')}`));
|
|
112
|
+
}
|
|
113
|
+
// Phase 2: commit infrastructure and push on top as a fast-forward.
|
|
114
|
+
const committed = await (0, git_client_1.commitAll)(targetRoot, 'Add infrastructure configuration');
|
|
115
|
+
if (committed) {
|
|
116
|
+
console.log(chalk_1.default.green('Infrastructure files committed'));
|
|
117
|
+
}
|
|
118
|
+
try {
|
|
119
|
+
await (0, git_client_1.pushToRemote)(targetRoot, credentials.GITHUB_TOKEN, branches, false);
|
|
120
|
+
console.log(chalk_1.default.green(`Code pushed to: ${branches.join(', ')}`));
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
console.log(chalk_1.default.yellow(`Warning: automatic push failed. Push manually: git push origin ${branches.join(' ')}`));
|
|
124
|
+
}
|
|
125
|
+
if (!options?.skipBranchProtection) {
|
|
126
|
+
console.log(chalk_1.default.cyan('--- Applying branch protections ---'));
|
|
127
|
+
for (const branch of branches) {
|
|
128
|
+
try {
|
|
129
|
+
await (0, github_client_1.setBranchProtection)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName, branch);
|
|
130
|
+
console.log(chalk_1.default.green(`✓ Branch protection set for: ${branch}`));
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
console.log(chalk_1.default.yellow(`Warning: could not set branch protection for ${branch}`));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
console.log(chalk_1.default.yellow('--- Skipping branch protections (--skip-branch-protection) ---'));
|
|
139
|
+
}
|
|
140
|
+
return branches;
|
|
141
|
+
}
|
|
142
|
+
async function runAwsOrchestrator(targetRoot, config, credentials, options) {
|
|
81
143
|
const infraDir = path.join(targetRoot, 'infra');
|
|
82
|
-
const repoName = `${config.name}-monorepo`;
|
|
83
|
-
// Generate TofuVars
|
|
144
|
+
const repoName = config.github_repo_name ?? `${config.name}-monorepo`;
|
|
84
145
|
const tofuVars = {
|
|
85
146
|
db_username: slugify(config.name),
|
|
86
147
|
db_name: slugify(config.name),
|
|
87
148
|
github_repo_name: repoName,
|
|
88
149
|
};
|
|
89
|
-
// Ensure S3 state bucket exists (before Tofu init)
|
|
90
150
|
console.log(chalk_1.default.cyan('--- Ensuring state bucket exists ---'));
|
|
91
151
|
const suffix = (0, s3_state_bucket_1.deriveSuffix)(config.name);
|
|
92
152
|
const bucketName = (0, s3_state_bucket_1.buildStateBucketName)(config.name, suffix);
|
|
93
153
|
await (0, s3_state_bucket_1.ensureStateBucket)(credentials, bucketName);
|
|
94
|
-
// Write secret to AWS Secrets Manager (before Tofu — Tofu reads it via data.tf)
|
|
95
154
|
const secretName = `${config.name}-infrastructure-variables`;
|
|
96
155
|
const secretPayload = {
|
|
97
156
|
...config,
|
|
@@ -102,13 +161,12 @@ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, o
|
|
|
102
161
|
console.log(chalk_1.default.cyan('--- Writing infrastructure secret ---'));
|
|
103
162
|
await (0, secrets_manager_client_1.putSecret)(credentials, secretName, secretPayload);
|
|
104
163
|
console.log(chalk_1.default.green('Secret written to AWS Secrets Manager'));
|
|
105
|
-
// SIGINT compensation setup
|
|
106
164
|
const state = { tofuStarted: false };
|
|
107
165
|
const sigintHandler = async () => {
|
|
108
166
|
if (options?.destroyOnFailure) {
|
|
109
167
|
console.log(chalk_1.default.yellow('\nInterrupted — running compensation...'));
|
|
110
168
|
if (state.tofuStarted) {
|
|
111
|
-
await
|
|
169
|
+
await runAwsCompensation(infraDir, credentials, tofuVars);
|
|
112
170
|
}
|
|
113
171
|
}
|
|
114
172
|
else {
|
|
@@ -119,7 +177,6 @@ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, o
|
|
|
119
177
|
};
|
|
120
178
|
process.once('SIGINT', sigintHandler);
|
|
121
179
|
try {
|
|
122
|
-
// Step 1: Create GitHub repo (skip in plan-only mode)
|
|
123
180
|
if (!options?.planOnly) {
|
|
124
181
|
console.log(chalk_1.default.cyan('--- Creating GitHub repository ---'));
|
|
125
182
|
const exists = await (0, github_client_1.repoExists)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName);
|
|
@@ -131,16 +188,15 @@ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, o
|
|
|
131
188
|
console.log(chalk_1.default.green(`✓ Repository created: ${credentials.GITHUB_ORGANIZATION}/${repoName}`));
|
|
132
189
|
}
|
|
133
190
|
}
|
|
134
|
-
// Step 2: Single Tofu apply (all AWS resources)
|
|
135
191
|
state.tofuStarted = true;
|
|
136
192
|
const result = await (0, tofu_runner_1.runTofuApply)(infraDir, credentials, tofuVars, {
|
|
137
193
|
planOnly: options?.planOnly,
|
|
194
|
+
deployment: 'ecs',
|
|
138
195
|
});
|
|
139
196
|
if (options?.planOnly) {
|
|
140
197
|
console.log(chalk_1.default.green('\n Plan complete — no resources were created.\n'));
|
|
141
198
|
return;
|
|
142
199
|
}
|
|
143
|
-
// Step 3: Set GitHub Actions secrets
|
|
144
200
|
console.log(chalk_1.default.cyan('--- Setting GitHub Actions secrets ---'));
|
|
145
201
|
const roleArn = result.outputs['oidc_role_arn'].value;
|
|
146
202
|
const secrets = {
|
|
@@ -150,68 +206,134 @@ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, o
|
|
|
150
206
|
};
|
|
151
207
|
await (0, github_secrets_client_1.setRepoSecrets)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName, secrets);
|
|
152
208
|
console.log(chalk_1.default.green('✓ GitHub Actions secrets configured'));
|
|
153
|
-
// Step 4: Push code in two phases.
|
|
154
|
-
//
|
|
155
|
-
// GitHub Actions skips `paths`-filtered workflows when it cannot compute a
|
|
156
|
-
// diff for a push — which is exactly what happens on the orphan/force push
|
|
157
|
-
// that first creates (or overwrites) the branch. To make the deploy
|
|
158
|
-
// workflows (filtered on infra/**, apps/**, packages/**, ...) trigger
|
|
159
|
-
// reliably, we split the push:
|
|
160
|
-
// 1. push the scaffolded base commit to establish the branch on the remote
|
|
161
|
-
// 2. commit the infrastructure files and push them on top
|
|
162
|
-
// The second push is a normal fast-forward with a computable diff, so the
|
|
163
|
-
// path filters match and the deploy pipeline runs.
|
|
164
209
|
const githubRepoUrl = result.outputs['github_http_repo_url'].value;
|
|
165
|
-
await (
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
210
|
+
await pushCodeAndProtect(targetRoot, config, credentials, repoName, githubRepoUrl, options);
|
|
211
|
+
printOutputTable([
|
|
212
|
+
['ALB DNS', result.outputs['alb_dns'].value],
|
|
213
|
+
['ECR URL', result.outputs['ecr_url'].value],
|
|
214
|
+
['GitHub Repo', githubRepoUrl],
|
|
215
|
+
]);
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
if (err instanceof tofu_runner_1.TofuApplyError) {
|
|
219
|
+
if (options?.destroyOnFailure) {
|
|
220
|
+
await runAwsCompensation(infraDir, credentials, tofuVars);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
console.log(chalk_1.default.yellow('\n Partial resources preserved. Fix the issue and re-run:'));
|
|
224
|
+
console.log(chalk_1.default.yellow(' fuel infra:deploy\n'));
|
|
225
|
+
}
|
|
226
|
+
process.exit(1);
|
|
174
227
|
}
|
|
175
|
-
|
|
176
|
-
|
|
228
|
+
throw err;
|
|
229
|
+
}
|
|
230
|
+
finally {
|
|
231
|
+
process.removeListener('SIGINT', sigintHandler);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async function runAzureOrchestrator(targetRoot, config, credentials, options) {
|
|
235
|
+
const infraDir = path.join(targetRoot, 'infra');
|
|
236
|
+
const repoName = config.github_repo_name ?? `${config.name}-monorepo`;
|
|
237
|
+
const tofuVars = {
|
|
238
|
+
db_username: slugify(config.name),
|
|
239
|
+
db_name: slugify(config.name),
|
|
240
|
+
github_repo_name: repoName,
|
|
241
|
+
};
|
|
242
|
+
console.log(chalk_1.default.cyan('--- Ensuring resource group, state storage and Key Vault exist ---'));
|
|
243
|
+
const suffix = (0, s3_state_bucket_1.deriveSuffix)(config.name);
|
|
244
|
+
const resourceGroupName = (0, azure_state_storage_1.buildResourceGroupName)(config.name);
|
|
245
|
+
const storageAccountName = (0, azure_state_storage_1.buildStateStorageAccountName)(config.name, suffix);
|
|
246
|
+
const keyVaultName = (0, azure_state_storage_1.buildKeyVaultName)(config.name, suffix);
|
|
247
|
+
await (0, azure_state_storage_1.ensureResourceGroup)(credentials, resourceGroupName, config.location);
|
|
248
|
+
await (0, azure_state_storage_1.ensureStateStorage)(credentials, resourceGroupName, storageAccountName, config.location);
|
|
249
|
+
await (0, azure_state_storage_1.ensureBootstrapKeyVault)(credentials, resourceGroupName, keyVaultName, config.location);
|
|
250
|
+
await (0, azure_rbac_1.ensureRoleAssignmentPermission)(credentials, resourceGroupName);
|
|
251
|
+
const secretName = 'infrastructure-variables';
|
|
252
|
+
const secretPayload = {
|
|
253
|
+
...config,
|
|
254
|
+
seed: (0, config_writer_1.generateSeed)(),
|
|
255
|
+
github_org: credentials.GITHUB_ORGANIZATION,
|
|
256
|
+
};
|
|
257
|
+
console.log(chalk_1.default.cyan('--- Writing infrastructure secret ---'));
|
|
258
|
+
await (0, azure_keyvault_client_1.putSecret)(credentials, keyVaultName, secretName, secretPayload);
|
|
259
|
+
console.log(chalk_1.default.green('Secret written to Azure Key Vault'));
|
|
260
|
+
const state = { tofuStarted: false };
|
|
261
|
+
const sigintHandler = async () => {
|
|
262
|
+
if (options?.destroyOnFailure) {
|
|
263
|
+
console.log(chalk_1.default.yellow('\nInterrupted — running compensation...'));
|
|
264
|
+
if (state.tofuStarted) {
|
|
265
|
+
await runAzureCompensation(infraDir, credentials, tofuVars);
|
|
266
|
+
}
|
|
177
267
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
console.log(chalk_1.default.green('Infrastructure files committed'));
|
|
268
|
+
else {
|
|
269
|
+
console.log(chalk_1.default.yellow('\nInterrupted — partial resources preserved.'));
|
|
270
|
+
console.log(chalk_1.default.yellow('Re-run "fuel infra:deploy" to resume.\n'));
|
|
182
271
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
272
|
+
process.exit(1);
|
|
273
|
+
};
|
|
274
|
+
process.once('SIGINT', sigintHandler);
|
|
275
|
+
try {
|
|
276
|
+
if (!options?.planOnly) {
|
|
277
|
+
console.log(chalk_1.default.cyan('--- Creating GitHub repository ---'));
|
|
278
|
+
const exists = await (0, github_client_1.repoExists)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName);
|
|
279
|
+
if (exists) {
|
|
280
|
+
console.log(chalk_1.default.yellow(`Repository ${credentials.GITHUB_ORGANIZATION}/${repoName} already exists, skipping creation`));
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
await (0, github_client_1.createGitHubRepo)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName);
|
|
284
|
+
console.log(chalk_1.default.green(`✓ Repository created: ${credentials.GITHUB_ORGANIZATION}/${repoName}`));
|
|
285
|
+
}
|
|
186
286
|
}
|
|
187
|
-
|
|
188
|
-
|
|
287
|
+
state.tofuStarted = true;
|
|
288
|
+
const result = await (0, tofu_runner_1.runTofuApply)(infraDir, credentials, tofuVars, {
|
|
289
|
+
planOnly: options?.planOnly,
|
|
290
|
+
deployment: 'azure',
|
|
291
|
+
});
|
|
292
|
+
if (options?.planOnly) {
|
|
293
|
+
console.log(chalk_1.default.green('\n Plan complete — no resources were created.\n'));
|
|
294
|
+
return;
|
|
189
295
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
296
|
+
console.log(chalk_1.default.cyan('--- Setting GitHub Actions secrets ---'));
|
|
297
|
+
const oidcClientId = result.outputs['github_oidc_client_id']?.value;
|
|
298
|
+
const secrets = {
|
|
299
|
+
AZURE_TENANT_ID: credentials.AZURE_TENANT_ID,
|
|
300
|
+
AZURE_SUBSCRIPTION_ID: credentials.AZURE_SUBSCRIPTION_ID,
|
|
301
|
+
PROJECT_NAME: config.name,
|
|
302
|
+
ACR_LOGIN_SERVER: result.outputs['acr_login_server'].value,
|
|
303
|
+
RESOURCE_GROUP: resourceGroupName,
|
|
304
|
+
};
|
|
305
|
+
if (oidcClientId) {
|
|
306
|
+
secrets.AZURE_CLIENT_ID = oidcClientId;
|
|
202
307
|
}
|
|
203
308
|
else {
|
|
204
|
-
console.log(chalk_1.default.yellow('
|
|
309
|
+
console.log(chalk_1.default.yellow(' github_oidc disabled — skipping AZURE_CLIENT_ID secret (CI push/deploy will not work until it is set up)'));
|
|
310
|
+
}
|
|
311
|
+
await (0, github_secrets_client_1.setRepoSecrets)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName, secrets);
|
|
312
|
+
console.log(chalk_1.default.green('✓ GitHub Actions secrets configured'));
|
|
313
|
+
const githubRepoUrl = result.outputs['github_http_repo_url'].value;
|
|
314
|
+
await pushCodeAndProtect(targetRoot, config, credentials, repoName, githubRepoUrl, options);
|
|
315
|
+
printOutputTable([
|
|
316
|
+
['Front Door', result.outputs['front_door_endpoint_hostname']?.value ?? '(not created)'],
|
|
317
|
+
['ACR', result.outputs['acr_login_server'].value],
|
|
318
|
+
['Resource Group', resourceGroupName],
|
|
319
|
+
['GitHub Repo', githubRepoUrl],
|
|
320
|
+
]);
|
|
321
|
+
const domainValidation = (result.outputs['custom_domain_validation']?.value ?? {});
|
|
322
|
+
const domains = Object.entries(domainValidation);
|
|
323
|
+
if (domains.length > 0) {
|
|
324
|
+
console.log(chalk_1.default.cyan('\n--- Custom domain DNS records needed ---'));
|
|
325
|
+
console.log(chalk_1.default.yellow(' Add these at the domain\'s own DNS provider so Azure can validate ownership and issue the managed TLS certificate:\n'));
|
|
326
|
+
for (const [hostName, record] of domains) {
|
|
327
|
+
console.log(chalk_1.default.white(` ${hostName}`));
|
|
328
|
+
console.log(` TXT ${record.txt_record_name} → ${record.txt_record_value}`);
|
|
329
|
+
console.log(` CNAME ${hostName} → ${record.cname_target}\n`);
|
|
330
|
+
}
|
|
205
331
|
}
|
|
206
|
-
// Print output table
|
|
207
|
-
const albDns = result.outputs['alb_dns'].value;
|
|
208
|
-
const ecrUrl = result.outputs['ecr_url'].value;
|
|
209
|
-
printOutputTable(albDns, ecrUrl, githubRepoUrl);
|
|
210
332
|
}
|
|
211
333
|
catch (err) {
|
|
212
334
|
if (err instanceof tofu_runner_1.TofuApplyError) {
|
|
213
335
|
if (options?.destroyOnFailure) {
|
|
214
|
-
await
|
|
336
|
+
await runAzureCompensation(infraDir, credentials, tofuVars);
|
|
215
337
|
}
|
|
216
338
|
else {
|
|
217
339
|
console.log(chalk_1.default.yellow('\n Partial resources preserved. Fix the issue and re-run:'));
|
|
@@ -225,4 +347,10 @@ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, o
|
|
|
225
347
|
process.removeListener('SIGINT', sigintHandler);
|
|
226
348
|
}
|
|
227
349
|
}
|
|
350
|
+
async function runInfraOrchestrator(targetRoot, _appName, config, credentials, options) {
|
|
351
|
+
if (config.deployment === 'azure') {
|
|
352
|
+
return runAzureOrchestrator(targetRoot, config, credentials, options);
|
|
353
|
+
}
|
|
354
|
+
return runAwsOrchestrator(targetRoot, config, credentials, options);
|
|
355
|
+
}
|
|
228
356
|
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/infra/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/infra/orchestrator.ts"],"names":[],"mappings":"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"}
|
package/dist/infra/preflight.js
CHANGED
|
@@ -51,17 +51,7 @@ async function runPreflight(configPath, credentialOverrides) {
|
|
|
51
51
|
catch (err) {
|
|
52
52
|
fail('tofu', err.message);
|
|
53
53
|
}
|
|
54
|
-
// Check 2: credentials
|
|
55
|
-
let credentials;
|
|
56
|
-
try {
|
|
57
|
-
credentials = await (0, credentials_1.resolveCredentials)(undefined, credentialOverrides);
|
|
58
|
-
pass('AWS credentials valid');
|
|
59
|
-
pass('GitHub token valid');
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
fail('credentials', err.message);
|
|
63
|
-
}
|
|
64
|
-
// Check 3: config
|
|
54
|
+
// Check 2: config (loaded first so we know which cloud's credentials to require)
|
|
65
55
|
let config;
|
|
66
56
|
try {
|
|
67
57
|
config = await (0, config_loader_1.loadInfraConfig)(configPath);
|
|
@@ -70,6 +60,16 @@ async function runPreflight(configPath, credentialOverrides) {
|
|
|
70
60
|
catch (err) {
|
|
71
61
|
fail('fuel.yml', err.message);
|
|
72
62
|
}
|
|
63
|
+
// Check 3: credentials
|
|
64
|
+
let credentials;
|
|
65
|
+
try {
|
|
66
|
+
credentials = await (0, credentials_1.resolveCredentials)(undefined, credentialOverrides, config.deployment);
|
|
67
|
+
pass(config.deployment === 'azure' ? 'Azure credentials valid' : 'AWS credentials valid');
|
|
68
|
+
pass('GitHub token valid');
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
fail('credentials', err.message);
|
|
72
|
+
}
|
|
73
73
|
return { config: config, credentials: credentials, tofuVersion: tofuVersion };
|
|
74
74
|
}
|
|
75
75
|
//# sourceMappingURL=preflight.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/infra/preflight.ts"],"names":[],"mappings":";;;;;AAkBA,4CA2BC;AAQD,oCAiCC;AAtFD,iDAAwC;AACxC,kDAAyB;AACzB,mDAAiD;AACjD,+CAAkD;AAGlD,MAAM,cAAc,GAAG,CAAC,CAAA;AACxB,MAAM,cAAc,GAAG,CAAC,CAAA;AAExB,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,IAAI,CAAC,KAAa,EAAE,MAAc;IACzC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,CAAC,CAAA;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,SAAgB,gBAAgB;IAC9B,IAAI,MAAc,CAAA;IAClB,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,wBAAQ,EAAC,cAAc,EAAE;YAChC,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAA;IACH,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;IACxD,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3D,IACE,KAAK,GAAG,cAAc;QACtB,CAAC,KAAK,KAAK,cAAc,IAAI,KAAK,GAAG,cAAc,CAAC,EACpD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,iBAAiB,cAAc,IAAI,cAAc,eAAe;YACzG,qDAAqD,CACtD,CAAA;IACH,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAC9C,CAAC;AAQM,KAAK,UAAU,YAAY,CAChC,UAAkB,EAClB,mBAA8E;IAE9E,uBAAuB;IACvB,IAAI,WAAmB,CAAA;IACvB,IAAI,CAAC;QACH,WAAW,GAAG,gBAAgB,EAAE,CAAA;QAChC,IAAI,CAAC,QAAQ,WAAW,EAAE,CAAC,CAAA;IAC7B,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/infra/preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Credentials, Deployment } from './types';
|
|
2
|
+
/** Reads the fuel.yml-shaped infrastructure secret from wherever the deployment's provider stores it. */
|
|
3
|
+
export declare function fetchRemoteConfigSecret(deployment: Deployment, credentials: Credentials, projectName: string): Promise<Record<string, unknown>>;
|
|
4
|
+
/**
|
|
5
|
+
* True when the error shape indicates no secret exists yet (first deploy).
|
|
6
|
+
*
|
|
7
|
+
* AWS Secrets Manager is a shared multi-tenant endpoint — a missing secret is a
|
|
8
|
+
* proper API-level `ResourceNotFoundException`/404. Azure Key Vault gets its own
|
|
9
|
+
* DNS name per vault, so on a brand-new project the vault itself doesn't exist
|
|
10
|
+
* yet and the lookup fails at the network layer (`ENOTFOUND`) rather than with
|
|
11
|
+
* an HTTP 404 — that has to be treated the same as "no existing secret".
|
|
12
|
+
*/
|
|
13
|
+
export declare function isSecretNotFoundError(err: any): boolean;
|
|
14
|
+
//# sourceMappingURL=remote-secret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-secret.d.ts","sourceRoot":"","sources":["../../src/infra/remote-secret.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAOjD,yGAAyG;AACzG,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAcvD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchRemoteConfigSecret = fetchRemoteConfigSecret;
|
|
4
|
+
exports.isSecretNotFoundError = isSecretNotFoundError;
|
|
5
|
+
const secrets_manager_client_1 = require("./secrets-manager-client");
|
|
6
|
+
const azure_keyvault_client_1 = require("./azure-keyvault-client");
|
|
7
|
+
const azure_state_storage_1 = require("./azure-state-storage");
|
|
8
|
+
const AZURE_SECRET_NAME = 'infrastructure-variables';
|
|
9
|
+
/** Reads the fuel.yml-shaped infrastructure secret from wherever the deployment's provider stores it. */
|
|
10
|
+
async function fetchRemoteConfigSecret(deployment, credentials, projectName) {
|
|
11
|
+
if (deployment === 'azure') {
|
|
12
|
+
const vaultName = (0, azure_state_storage_1.buildKeyVaultName)(projectName, (0, azure_state_storage_1.deriveSuffix)(projectName));
|
|
13
|
+
return (0, azure_keyvault_client_1.getSecret)(credentials, vaultName, AZURE_SECRET_NAME);
|
|
14
|
+
}
|
|
15
|
+
return (0, secrets_manager_client_1.getSecret)(credentials, `${projectName}-infrastructure-variables`);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* True when the error shape indicates no secret exists yet (first deploy).
|
|
19
|
+
*
|
|
20
|
+
* AWS Secrets Manager is a shared multi-tenant endpoint — a missing secret is a
|
|
21
|
+
* proper API-level `ResourceNotFoundException`/404. Azure Key Vault gets its own
|
|
22
|
+
* DNS name per vault, so on a brand-new project the vault itself doesn't exist
|
|
23
|
+
* yet and the lookup fails at the network layer (`ENOTFOUND`) rather than with
|
|
24
|
+
* an HTTP 404 — that has to be treated the same as "no existing secret".
|
|
25
|
+
*/
|
|
26
|
+
function isSecretNotFoundError(err) {
|
|
27
|
+
if (err?.name === 'ResourceNotFoundException')
|
|
28
|
+
return true;
|
|
29
|
+
if (err?.code === 'SecretNotFound')
|
|
30
|
+
return true;
|
|
31
|
+
if (err?.statusCode === 404)
|
|
32
|
+
return true;
|
|
33
|
+
// Scoped to the vault's own hostname so an unrelated DNS/network failure elsewhere
|
|
34
|
+
// isn't misread as "no secret yet" — a bare ENOTFOUND/getaddrinfo isn't enough.
|
|
35
|
+
if (typeof err?.message === 'string' &&
|
|
36
|
+
/ENOTFOUND|getaddrinfo/i.test(err.message) &&
|
|
37
|
+
/\.vault\.azure\.net/i.test(err.message)) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=remote-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-secret.js","sourceRoot":"","sources":["../../src/infra/remote-secret.ts"],"names":[],"mappings":";;AAQA,0DAUC;AAWD,sDAcC;AA1CD,qEAAoE;AACpE,mEAAqE;AACrE,+DAAuE;AAEvE,MAAM,iBAAiB,GAAG,0BAA0B,CAAA;AAEpD,yGAAyG;AAClG,KAAK,UAAU,uBAAuB,CAC3C,UAAsB,EACtB,WAAwB,EACxB,WAAmB;IAEnB,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAA,uCAAiB,EAAC,WAAW,EAAE,IAAA,kCAAY,EAAC,WAAW,CAAC,CAAC,CAAA;QAC3E,OAAO,IAAA,iCAAc,EAAC,WAAW,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,IAAA,kCAAY,EAAC,WAAW,EAAE,GAAG,WAAW,2BAA2B,CAAC,CAAA;AAC7E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,qBAAqB,CAAC,GAAQ;IAC5C,IAAI,GAAG,EAAE,IAAI,KAAK,2BAA2B;QAAE,OAAO,IAAI,CAAA;IAC1D,IAAI,GAAG,EAAE,IAAI,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAA;IAC/C,IAAI,GAAG,EAAE,UAAU,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IACxC,mFAAmF;IACnF,gFAAgF;IAChF,IACE,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ;QAChC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAC1C,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EACxC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -21,11 +21,24 @@ export declare function patchBackendTf(infraRoot: string, projectName: string, a
|
|
|
21
21
|
* Patch default.tfvars: set project_name, aws_region, db_password from config and credentials.
|
|
22
22
|
*/
|
|
23
23
|
export declare function patchDefaultTfvars(infraRoot: string, config: InfraConfig, credentials: Credentials): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Patch backend.tf (azurerm backend): replace {resource_group_name}, {storage_account_name},
|
|
26
|
+
* {container_name} placeholders.
|
|
27
|
+
*/
|
|
28
|
+
export declare function patchAzureBackendTf(infraRoot: string, resourceGroupName: string, storageAccountName: string, containerName: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Patch default.tfvars for the azure template: project_name, location, github_repo_name,
|
|
31
|
+
* db_username/db_name (used only when an app enables the Postgres engine).
|
|
32
|
+
*/
|
|
33
|
+
export declare function patchAzureDefaultTfvars(infraRoot: string, config: Extract<InfraConfig, {
|
|
34
|
+
deployment: 'azure';
|
|
35
|
+
}>): Promise<void>;
|
|
24
36
|
/**
|
|
25
37
|
* Prune modules not referenced in main.tf (after patching).
|
|
26
38
|
* Always keeps modules listed in MODULES_DONT_REMOVE (e.g., secret-main).
|
|
27
39
|
*/
|
|
28
40
|
export declare function pruneUnusedModules(infraRoot: string): Promise<void>;
|
|
41
|
+
export declare function acrNameFor(projectName: string): string;
|
|
29
42
|
/**
|
|
30
43
|
* Copy GitHub Actions workflow files into <projectDir>/.github/workflows/.
|
|
31
44
|
* Replaces what Terraform's github_repository_file resources used to do.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../src/infra/template-engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../src/infra/template-engine.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AASlD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAenE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAMpE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,EAAE,MAAM,EAC1B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE;IAAE,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,GACpD,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBzE;AA8CD,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtD;AAwCD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,WAAW,EACxB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC,CAuDf"}
|