@swovohq/fuel 0.2.2-alpha.87 → 0.2.2-alpha.89

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.
Files changed (190) hide show
  1. package/README.md +65 -2
  2. package/dist/bin/fuel.js +10 -31
  3. package/dist/bin/fuel.js.map +1 -1
  4. package/dist/commands/config-verify.d.ts.map +1 -1
  5. package/dist/commands/config-verify.js +14 -6
  6. package/dist/commands/config-verify.js.map +1 -1
  7. package/dist/commands/create-app.d.ts.map +1 -1
  8. package/dist/commands/create-app.js +10 -3
  9. package/dist/commands/create-app.js.map +1 -1
  10. package/dist/commands/infra-deploy.d.ts +4 -0
  11. package/dist/commands/infra-deploy.d.ts.map +1 -1
  12. package/dist/commands/infra-deploy.js +75 -43
  13. package/dist/commands/infra-deploy.js.map +1 -1
  14. package/dist/commands/infra-destroy.js +3 -3
  15. package/dist/commands/infra-destroy.js.map +1 -1
  16. package/dist/commands/infra-init.d.ts +91 -0
  17. package/dist/commands/infra-init.d.ts.map +1 -1
  18. package/dist/commands/infra-init.js +510 -80
  19. package/dist/commands/infra-init.js.map +1 -1
  20. package/dist/commands/infra-pull.d.ts.map +1 -1
  21. package/dist/commands/infra-pull.js +6 -5
  22. package/dist/commands/infra-pull.js.map +1 -1
  23. package/dist/infra/azure-defaults.d.ts +49 -0
  24. package/dist/infra/azure-defaults.d.ts.map +1 -0
  25. package/dist/infra/azure-defaults.js +52 -0
  26. package/dist/infra/azure-defaults.js.map +1 -0
  27. package/dist/infra/azure-keyvault-client.d.ts +4 -0
  28. package/dist/infra/azure-keyvault-client.d.ts.map +1 -0
  29. package/dist/infra/azure-keyvault-client.js +57 -0
  30. package/dist/infra/azure-keyvault-client.js.map +1 -0
  31. package/dist/infra/azure-rbac.d.ts +11 -0
  32. package/dist/infra/azure-rbac.d.ts.map +1 -0
  33. package/dist/infra/azure-rbac.js +47 -0
  34. package/dist/infra/azure-rbac.js.map +1 -0
  35. package/dist/infra/azure-state-storage.d.ts +20 -0
  36. package/dist/infra/azure-state-storage.d.ts.map +1 -0
  37. package/dist/infra/azure-state-storage.js +229 -0
  38. package/dist/infra/azure-state-storage.js.map +1 -0
  39. package/dist/infra/credentials.d.ts +2 -2
  40. package/dist/infra/credentials.d.ts.map +1 -1
  41. package/dist/infra/credentials.js +8 -4
  42. package/dist/infra/credentials.js.map +1 -1
  43. package/dist/infra/deployment-detect.d.ts +9 -0
  44. package/dist/infra/deployment-detect.d.ts.map +1 -0
  45. package/dist/infra/deployment-detect.js +53 -0
  46. package/dist/infra/deployment-detect.js.map +1 -0
  47. package/dist/infra/github-client.d.ts +6 -0
  48. package/dist/infra/github-client.d.ts.map +1 -1
  49. package/dist/infra/github-client.js +31 -4
  50. package/dist/infra/github-client.js.map +1 -1
  51. package/dist/infra/github-token-link.d.ts +4 -0
  52. package/dist/infra/github-token-link.d.ts.map +1 -0
  53. package/dist/infra/github-token-link.js +28 -0
  54. package/dist/infra/github-token-link.js.map +1 -0
  55. package/dist/infra/orchestrator.d.ts +4 -1
  56. package/dist/infra/orchestrator.d.ts.map +1 -1
  57. package/dist/infra/orchestrator.js +203 -66
  58. package/dist/infra/orchestrator.js.map +1 -1
  59. package/dist/infra/preflight.d.ts.map +1 -1
  60. package/dist/infra/preflight.js +17 -9
  61. package/dist/infra/preflight.js.map +1 -1
  62. package/dist/infra/remote-secret.d.ts +14 -0
  63. package/dist/infra/remote-secret.d.ts.map +1 -0
  64. package/dist/infra/remote-secret.js +42 -0
  65. package/dist/infra/remote-secret.js.map +1 -0
  66. package/dist/infra/template-engine.d.ts +13 -4
  67. package/dist/infra/template-engine.d.ts.map +1 -1
  68. package/dist/infra/template-engine.js +141 -49
  69. package/dist/infra/template-engine.js.map +1 -1
  70. package/dist/infra/tofu-runner.d.ts +4 -3
  71. package/dist/infra/tofu-runner.d.ts.map +1 -1
  72. package/dist/infra/tofu-runner.js +36 -27
  73. package/dist/infra/tofu-runner.js.map +1 -1
  74. package/dist/infra/types.d.ts +239 -16
  75. package/dist/infra/types.d.ts.map +1 -1
  76. package/dist/infra/types.js +206 -18
  77. package/dist/infra/types.js.map +1 -1
  78. package/dist/infra-templates/TODO-azure-prod.md +119 -0
  79. package/dist/infra-templates/modules/azure-container-app/main.tf +124 -0
  80. package/dist/infra-templates/modules/azure-container-app/outputs.tf +24 -0
  81. package/dist/infra-templates/modules/azure-container-app/variables.tf +80 -0
  82. package/dist/infra-templates/modules/azure-container-apps-environment/main.tf +18 -0
  83. package/dist/infra-templates/modules/azure-container-apps-environment/outputs.tf +14 -0
  84. package/dist/infra-templates/modules/azure-container-apps-environment/variables.tf +24 -0
  85. package/dist/infra-templates/modules/azure-container-registry/main.tf +10 -0
  86. package/dist/infra-templates/modules/azure-container-registry/outputs.tf +14 -0
  87. package/dist/infra-templates/modules/azure-container-registry/variables.tf +20 -0
  88. package/dist/infra-templates/modules/azure-front-door/main.tf +80 -0
  89. package/dist/infra-templates/modules/azure-front-door/outputs.tf +20 -0
  90. package/dist/infra-templates/modules/azure-front-door/variables.tf +26 -0
  91. package/dist/infra-templates/modules/azure-github-oidc/main.tf +48 -0
  92. package/dist/infra-templates/modules/azure-github-oidc/outputs.tf +9 -0
  93. package/dist/infra-templates/modules/azure-github-oidc/variables.tf +69 -0
  94. package/dist/infra-templates/modules/azure-key-vault/main.tf +21 -0
  95. package/dist/infra-templates/modules/azure-key-vault/outputs.tf +11 -0
  96. package/dist/infra-templates/modules/azure-key-vault/variables.tf +43 -0
  97. package/dist/infra-templates/modules/azure-monitor/main.tf +29 -0
  98. package/dist/infra-templates/modules/azure-monitor/outputs.tf +17 -0
  99. package/dist/infra-templates/modules/azure-monitor/variables.tf +32 -0
  100. package/dist/infra-templates/modules/azure-network/main.tf +134 -0
  101. package/dist/infra-templates/modules/azure-network/outputs.tf +44 -0
  102. package/dist/infra-templates/modules/azure-network/variables.tf +56 -0
  103. package/dist/infra-templates/modules/azure-postgresql-flexible/main.tf +34 -0
  104. package/dist/infra-templates/modules/azure-postgresql-flexible/outputs.tf +20 -0
  105. package/dist/infra-templates/modules/azure-postgresql-flexible/variables.tf +54 -0
  106. package/dist/infra-templates/modules/azure-redis-cache/main.tf +32 -0
  107. package/dist/infra-templates/modules/azure-redis-cache/outputs.tf +15 -0
  108. package/dist/infra-templates/modules/azure-redis-cache/variables.tf +30 -0
  109. package/dist/infra-templates/modules/azure-resource-group/main.tf +5 -0
  110. package/dist/infra-templates/modules/azure-resource-group/outputs.tf +11 -0
  111. package/dist/infra-templates/modules/azure-resource-group/variables.tf +16 -0
  112. package/dist/infra-templates/modules/azure-sql-database/main.tf +63 -0
  113. package/dist/infra-templates/modules/azure-sql-database/outputs.tf +20 -0
  114. package/dist/infra-templates/modules/azure-sql-database/variables.tf +78 -0
  115. package/dist/infra-templates/modules/azure-storage-account/main.tf +13 -0
  116. package/dist/infra-templates/modules/azure-storage-account/outputs.tf +16 -0
  117. package/dist/infra-templates/modules/azure-storage-account/variables.tf +38 -0
  118. package/dist/infra-templates/modules/cloud-watch/event-bridge.tf +15 -0
  119. package/dist/infra-templates/modules/cloud-watch/lambda.tf +84 -0
  120. package/dist/infra-templates/modules/cloud-watch/lambda_function.zip +0 -0
  121. package/dist/infra-templates/modules/cloud-watch/lambda_function_deploy.zip +0 -0
  122. package/dist/infra-templates/modules/cloud-watch/main.tf +156 -0
  123. package/dist/infra-templates/modules/cloud-watch/sns.tf +3 -0
  124. package/dist/infra-templates/modules/cloud-watch/variables.tf +38 -0
  125. package/dist/infra-templates/modules/ecs-core/alb.tf +126 -0
  126. package/dist/infra-templates/modules/ecs-core/cloudwatch.tf +48 -0
  127. package/dist/infra-templates/modules/ecs-core/iam.tf +95 -0
  128. package/dist/infra-templates/modules/ecs-core/main.tf +12 -0
  129. package/dist/infra-templates/modules/ecs-core/outputs.tf +44 -0
  130. package/dist/infra-templates/modules/ecs-core/secrets.tf +9 -0
  131. package/dist/infra-templates/modules/ecs-core/security_groups.tf +73 -0
  132. package/dist/infra-templates/modules/ecs-core/variables.tf +96 -0
  133. package/dist/infra-templates/modules/ecs-service/ecs_autoscaling.tf +51 -0
  134. package/dist/infra-templates/modules/ecs-service/ecs_service.tf +39 -0
  135. package/dist/infra-templates/modules/ecs-service/ecs_task_definition.tf +56 -0
  136. package/dist/infra-templates/modules/ecs-service/variables.tf +170 -0
  137. package/dist/infra-templates/modules/elastic-container-registry/main.tf +32 -0
  138. package/dist/infra-templates/modules/elastic-container-registry/outputs.tf +9 -0
  139. package/dist/infra-templates/modules/elastic-container-registry/variables.tf +25 -0
  140. package/dist/infra-templates/modules/github-oidc-role/main.tf +46 -0
  141. package/dist/infra-templates/modules/github-oidc-role/outputs.tf +4 -0
  142. package/dist/infra-templates/modules/github-oidc-role/variables.tf +11 -0
  143. package/dist/infra-templates/modules/guardduty/main.tf +8 -0
  144. package/dist/infra-templates/modules/iam/main.tf +205 -0
  145. package/dist/infra-templates/modules/iam/outputs.tf +3 -0
  146. package/dist/infra-templates/modules/iam/variables.tf +4 -0
  147. package/dist/infra-templates/modules/random-key/main.tf +11 -0
  148. package/dist/infra-templates/modules/random-key/outputs.tf +4 -0
  149. package/dist/infra-templates/modules/random-key/variables.tf +10 -0
  150. package/dist/infra-templates/modules/redis/main.tf +47 -0
  151. package/dist/infra-templates/modules/redis/outputs.tf +8 -0
  152. package/dist/infra-templates/modules/redis/variables.tf +20 -0
  153. package/dist/infra-templates/modules/relational-database-service/main.tf +44 -0
  154. package/dist/infra-templates/modules/relational-database-service/outputs.tf +13 -0
  155. package/dist/infra-templates/modules/relational-database-service/security-group.tf +15 -0
  156. package/dist/infra-templates/modules/relational-database-service/variables.tf +50 -0
  157. package/dist/infra-templates/modules/secret/main.tf +14 -0
  158. package/dist/infra-templates/modules/secret/outputs.tf +3 -0
  159. package/dist/infra-templates/modules/secret/variables.tf +8 -0
  160. package/dist/infra-templates/modules/simple-storage-service/main.tf +28 -0
  161. package/dist/infra-templates/modules/simple-storage-service/variables.tf +4 -0
  162. package/dist/infra-templates/modules/vpc/data.tf +2 -0
  163. package/dist/infra-templates/modules/vpc/main.tf +76 -0
  164. package/dist/infra-templates/modules/vpc/outputs.tf +23 -0
  165. package/dist/infra-templates/modules/vpc/variables.tf +5 -0
  166. package/dist/infra-templates/package.json +6 -0
  167. package/dist/infra-templates/templates/azure/MANUAL_DEPLOY.md +168 -0
  168. package/dist/infra-templates/templates/azure/backend.tf +8 -0
  169. package/dist/infra-templates/templates/azure/data.tf +21 -0
  170. package/dist/infra-templates/templates/azure/default.tfvars +0 -0
  171. package/dist/infra-templates/templates/azure/locals.tf +116 -0
  172. package/dist/infra-templates/templates/azure/main.tf +421 -0
  173. package/dist/infra-templates/templates/azure/outputs.tf +40 -0
  174. package/dist/infra-templates/templates/azure/providers.tf +65 -0
  175. package/dist/infra-templates/templates/azure/variables.tf +69 -0
  176. package/dist/infra-templates/templates/azure/workflows/build_and_deploy.yml +155 -0
  177. package/dist/infra-templates/templates/azure/workflows/tests.yml +63 -0
  178. package/dist/infra-templates/templates/ecs/README.md +225 -0
  179. package/dist/infra-templates/templates/ecs/backend.tf +7 -0
  180. package/dist/infra-templates/templates/ecs/data.tf +6 -0
  181. package/dist/infra-templates/templates/ecs/default.tfvars +1 -0
  182. package/dist/infra-templates/templates/ecs/locals.tf +97 -0
  183. package/dist/infra-templates/templates/ecs/main.tf +185 -0
  184. package/dist/infra-templates/templates/ecs/outputs.tf +42 -0
  185. package/dist/infra-templates/templates/ecs/providers.tf +21 -0
  186. package/dist/infra-templates/templates/ecs/variables.tf +105 -0
  187. package/dist/infra-templates/templates/ecs/workflows/build_and_deploy.yml +188 -0
  188. package/dist/infra-templates/templates/ecs/workflows/tests.yml +65 -0
  189. package/package.json +10 -2
  190. package/schema/fuel.schema.json +570 -91
@@ -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 runCompensation(infraDir, credentials, tofuVars) {
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,96 @@ async function runCompensation(infraDir, credentials, tofuVars) {
65
68
  }
66
69
  console.log(chalk_1.default.green('AWS resources cleaned up'));
67
70
  }
68
- function printOutputTable(albDns, ecrUrl, githubRepoUrl) {
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, codePushed) {
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
- console.log(` ${chalk_1.default.dim('ALB DNS')} ${albDns}`);
74
- console.log(` ${chalk_1.default.dim('ECR URL')} ${ecrUrl}`);
75
- console.log(` ${chalk_1.default.dim('GitHub Repo')} ${githubRepoUrl}`);
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
- console.log(' Your code has been pushed. Your first deploy will start shortly.\n');
97
+ if (codePushed) {
98
+ console.log(' Your code has been pushed. Your first deploy will start shortly.\n');
99
+ }
100
+ else {
101
+ console.log(chalk_1.default.yellow(' Code was NOT pushed automatically — see the push warning above and push manually.\n'));
102
+ }
79
103
  }
80
- async function runInfraOrchestrator(targetRoot, _appName, config, credentials, options) {
104
+ async function pushCodeAndProtect(targetRoot, config, credentials, repoName, githubRepoUrl, options) {
105
+ await (0, git_client_1.wireGitRemote)(targetRoot, githubRepoUrl);
106
+ console.log(chalk_1.default.green('Git remote origin set'));
107
+ const allBranches = [...new Set(config.apps.map((app) => app.branch))];
108
+ const branches = options?.targetBranch
109
+ ? allBranches.filter((b) => b === options.targetBranch)
110
+ : allBranches;
111
+ // Phase 1: push the base commit so the branch exists on the remote.
112
+ try {
113
+ await (0, git_client_1.pushToRemote)(targetRoot, credentials.GITHUB_TOKEN, branches, options?.forcePush);
114
+ }
115
+ catch {
116
+ console.log(chalk_1.default.yellow(`Warning: base push failed. Push manually: git push -u origin ${branches.join(' ')}`));
117
+ }
118
+ // Phase 2: commit infrastructure and push on top as a fast-forward.
119
+ const committed = await (0, git_client_1.commitAll)(targetRoot, 'Add infrastructure configuration');
120
+ if (committed) {
121
+ console.log(chalk_1.default.green('Infrastructure files committed'));
122
+ }
123
+ let codePushed = false;
124
+ try {
125
+ await (0, git_client_1.pushToRemote)(targetRoot, credentials.GITHUB_TOKEN, branches, false);
126
+ console.log(chalk_1.default.green(`Code pushed to: ${branches.join(', ')}`));
127
+ codePushed = true;
128
+ }
129
+ catch {
130
+ console.log(chalk_1.default.yellow(`Warning: automatic push failed. Push manually: git push origin ${branches.join(' ')}`));
131
+ }
132
+ if (!options?.skipBranchProtection) {
133
+ console.log(chalk_1.default.cyan('--- Applying branch protections ---'));
134
+ for (const branch of branches) {
135
+ try {
136
+ await (0, github_client_1.setBranchProtection)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName, branch);
137
+ console.log(chalk_1.default.green(`✓ Branch protection set for: ${branch}`));
138
+ }
139
+ catch {
140
+ console.log(chalk_1.default.yellow(`Warning: could not set branch protection for ${branch}`));
141
+ }
142
+ }
143
+ }
144
+ else {
145
+ console.log(chalk_1.default.yellow('--- Skipping branch protections (--skip-branch-protection) ---'));
146
+ }
147
+ return { branches, codePushed };
148
+ }
149
+ async function runAwsOrchestrator(targetRoot, config, credentials, options) {
81
150
  const infraDir = path.join(targetRoot, 'infra');
82
- const repoName = `${config.name}-monorepo`;
83
- // Generate TofuVars
151
+ const repoName = config.github_repo_name ?? `${config.name}-monorepo`;
84
152
  const tofuVars = {
85
153
  db_username: slugify(config.name),
86
154
  db_name: slugify(config.name),
87
155
  github_repo_name: repoName,
88
156
  };
89
- // Ensure S3 state bucket exists (before Tofu init)
90
157
  console.log(chalk_1.default.cyan('--- Ensuring state bucket exists ---'));
91
158
  const suffix = (0, s3_state_bucket_1.deriveSuffix)(config.name);
92
159
  const bucketName = (0, s3_state_bucket_1.buildStateBucketName)(config.name, suffix);
93
160
  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
161
  const secretName = `${config.name}-infrastructure-variables`;
96
162
  const secretPayload = {
97
163
  ...config,
@@ -102,13 +168,12 @@ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, o
102
168
  console.log(chalk_1.default.cyan('--- Writing infrastructure secret ---'));
103
169
  await (0, secrets_manager_client_1.putSecret)(credentials, secretName, secretPayload);
104
170
  console.log(chalk_1.default.green('Secret written to AWS Secrets Manager'));
105
- // SIGINT compensation setup
106
171
  const state = { tofuStarted: false };
107
172
  const sigintHandler = async () => {
108
173
  if (options?.destroyOnFailure) {
109
174
  console.log(chalk_1.default.yellow('\nInterrupted — running compensation...'));
110
175
  if (state.tofuStarted) {
111
- await runCompensation(infraDir, credentials, tofuVars);
176
+ await runAwsCompensation(infraDir, credentials, tofuVars);
112
177
  }
113
178
  }
114
179
  else {
@@ -119,7 +184,6 @@ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, o
119
184
  };
120
185
  process.once('SIGINT', sigintHandler);
121
186
  try {
122
- // Step 1: Create GitHub repo (skip in plan-only mode)
123
187
  if (!options?.planOnly) {
124
188
  console.log(chalk_1.default.cyan('--- Creating GitHub repository ---'));
125
189
  const exists = await (0, github_client_1.repoExists)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName);
@@ -131,16 +195,15 @@ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, o
131
195
  console.log(chalk_1.default.green(`✓ Repository created: ${credentials.GITHUB_ORGANIZATION}/${repoName}`));
132
196
  }
133
197
  }
134
- // Step 2: Single Tofu apply (all AWS resources)
135
198
  state.tofuStarted = true;
136
199
  const result = await (0, tofu_runner_1.runTofuApply)(infraDir, credentials, tofuVars, {
137
200
  planOnly: options?.planOnly,
201
+ deployment: 'ecs',
138
202
  });
139
203
  if (options?.planOnly) {
140
204
  console.log(chalk_1.default.green('\n Plan complete — no resources were created.\n'));
141
205
  return;
142
206
  }
143
- // Step 3: Set GitHub Actions secrets
144
207
  console.log(chalk_1.default.cyan('--- Setting GitHub Actions secrets ---'));
145
208
  const roleArn = result.outputs['oidc_role_arn'].value;
146
209
  const secrets = {
@@ -150,68 +213,136 @@ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, o
150
213
  };
151
214
  await (0, github_secrets_client_1.setRepoSecrets)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName, secrets);
152
215
  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
216
  const githubRepoUrl = result.outputs['github_http_repo_url'].value;
165
- await (0, git_client_1.wireGitRemote)(targetRoot, githubRepoUrl);
166
- console.log(chalk_1.default.green('Git remote origin set'));
167
- const allBranches = [...new Set(config.apps.map(app => app.branch))];
168
- const branches = options?.targetBranch
169
- ? allBranches.filter(b => b === options.targetBranch)
170
- : allBranches;
171
- // Phase 1: push the base commit so the branch exists on the remote.
172
- try {
173
- await (0, git_client_1.pushToRemote)(targetRoot, credentials.GITHUB_TOKEN, branches, options?.forcePush);
217
+ const { codePushed } = await pushCodeAndProtect(targetRoot, config, credentials, repoName, githubRepoUrl, options);
218
+ printOutputTable([
219
+ ['ALB DNS', result.outputs['alb_dns'].value],
220
+ ['ECR URL', result.outputs['ecr_url'].value],
221
+ ['GitHub Repo', githubRepoUrl],
222
+ ], codePushed);
223
+ return { codePushed };
224
+ }
225
+ catch (err) {
226
+ if (err instanceof tofu_runner_1.TofuApplyError) {
227
+ if (options?.destroyOnFailure) {
228
+ await runAwsCompensation(infraDir, credentials, tofuVars);
229
+ }
230
+ else {
231
+ console.log(chalk_1.default.yellow('\n Partial resources preserved. Fix the issue and re-run:'));
232
+ console.log(chalk_1.default.yellow(' fuel infra:deploy\n'));
233
+ }
234
+ process.exit(1);
174
235
  }
175
- catch {
176
- console.log(chalk_1.default.yellow(`Warning: base push failed. Push manually: git push -u origin ${branches.join(' ')}`));
236
+ throw err;
237
+ }
238
+ finally {
239
+ process.removeListener('SIGINT', sigintHandler);
240
+ }
241
+ }
242
+ async function runAzureOrchestrator(targetRoot, config, credentials, options) {
243
+ const infraDir = path.join(targetRoot, 'infra');
244
+ const repoName = config.github_repo_name ?? `${config.name}-monorepo`;
245
+ const tofuVars = {
246
+ db_username: slugify(config.name),
247
+ db_name: slugify(config.name),
248
+ github_repo_name: repoName,
249
+ };
250
+ console.log(chalk_1.default.cyan('--- Ensuring resource group, state storage and Key Vault exist ---'));
251
+ const suffix = (0, s3_state_bucket_1.deriveSuffix)(config.name);
252
+ const resourceGroupName = (0, azure_state_storage_1.buildResourceGroupName)(config.name);
253
+ const storageAccountName = (0, azure_state_storage_1.buildStateStorageAccountName)(config.name, suffix);
254
+ const keyVaultName = (0, azure_state_storage_1.buildKeyVaultName)(config.name, suffix);
255
+ await (0, azure_state_storage_1.ensureResourceGroup)(credentials, resourceGroupName, config.location);
256
+ await (0, azure_state_storage_1.ensureStateStorage)(credentials, resourceGroupName, storageAccountName, config.location);
257
+ await (0, azure_state_storage_1.ensureBootstrapKeyVault)(credentials, resourceGroupName, keyVaultName, config.location);
258
+ await (0, azure_rbac_1.ensureRoleAssignmentPermission)(credentials, resourceGroupName);
259
+ const secretName = 'infrastructure-variables';
260
+ const secretPayload = {
261
+ ...config,
262
+ seed: (0, config_writer_1.generateSeed)(),
263
+ github_org: credentials.GITHUB_ORGANIZATION,
264
+ };
265
+ console.log(chalk_1.default.cyan('--- Writing infrastructure secret ---'));
266
+ await (0, azure_keyvault_client_1.putSecret)(credentials, keyVaultName, secretName, secretPayload);
267
+ console.log(chalk_1.default.green('Secret written to Azure Key Vault'));
268
+ const state = { tofuStarted: false };
269
+ const sigintHandler = async () => {
270
+ if (options?.destroyOnFailure) {
271
+ console.log(chalk_1.default.yellow('\nInterrupted — running compensation...'));
272
+ if (state.tofuStarted) {
273
+ await runAzureCompensation(infraDir, credentials, tofuVars);
274
+ }
177
275
  }
178
- // Phase 2: commit infrastructure and push on top as a fast-forward.
179
- const committed = await (0, git_client_1.commitAll)(targetRoot, 'Add infrastructure configuration');
180
- if (committed) {
181
- console.log(chalk_1.default.green('Infrastructure files committed'));
276
+ else {
277
+ console.log(chalk_1.default.yellow('\nInterrupted — partial resources preserved.'));
278
+ console.log(chalk_1.default.yellow('Re-run "fuel infra:deploy" to resume.\n'));
182
279
  }
183
- try {
184
- await (0, git_client_1.pushToRemote)(targetRoot, credentials.GITHUB_TOKEN, branches, false);
185
- console.log(chalk_1.default.green(`Code pushed to: ${branches.join(', ')}`));
280
+ process.exit(1);
281
+ };
282
+ process.once('SIGINT', sigintHandler);
283
+ try {
284
+ if (!options?.planOnly) {
285
+ console.log(chalk_1.default.cyan('--- Creating GitHub repository ---'));
286
+ const exists = await (0, github_client_1.repoExists)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName);
287
+ if (exists) {
288
+ console.log(chalk_1.default.yellow(`Repository ${credentials.GITHUB_ORGANIZATION}/${repoName} already exists, skipping creation`));
289
+ }
290
+ else {
291
+ await (0, github_client_1.createGitHubRepo)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName);
292
+ console.log(chalk_1.default.green(`✓ Repository created: ${credentials.GITHUB_ORGANIZATION}/${repoName}`));
293
+ }
186
294
  }
187
- catch {
188
- console.log(chalk_1.default.yellow(`Warning: automatic push failed. Push manually: git push origin ${branches.join(' ')}`));
295
+ state.tofuStarted = true;
296
+ const result = await (0, tofu_runner_1.runTofuApply)(infraDir, credentials, tofuVars, {
297
+ planOnly: options?.planOnly,
298
+ deployment: 'azure',
299
+ });
300
+ if (options?.planOnly) {
301
+ console.log(chalk_1.default.green('\n Plan complete — no resources were created.\n'));
302
+ return;
189
303
  }
190
- // Step 5: Branch protections
191
- if (!options?.skipBranchProtection) {
192
- console.log(chalk_1.default.cyan('--- Applying branch protections ---'));
193
- for (const branch of branches) {
194
- try {
195
- await (0, github_client_1.setBranchProtection)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName, branch);
196
- console.log(chalk_1.default.green(`✓ Branch protection set for: ${branch}`));
197
- }
198
- catch {
199
- console.log(chalk_1.default.yellow(`Warning: could not set branch protection for ${branch}`));
200
- }
201
- }
304
+ console.log(chalk_1.default.cyan('--- Setting GitHub Actions secrets ---'));
305
+ const oidcClientId = result.outputs['github_oidc_client_id']?.value;
306
+ const secrets = {
307
+ AZURE_TENANT_ID: credentials.AZURE_TENANT_ID,
308
+ AZURE_SUBSCRIPTION_ID: credentials.AZURE_SUBSCRIPTION_ID,
309
+ PROJECT_NAME: config.name,
310
+ ACR_LOGIN_SERVER: result.outputs['acr_login_server'].value,
311
+ RESOURCE_GROUP: resourceGroupName,
312
+ };
313
+ if (oidcClientId) {
314
+ secrets.AZURE_CLIENT_ID = oidcClientId;
202
315
  }
203
316
  else {
204
- console.log(chalk_1.default.yellow('--- Skipping branch protections (--skip-branch-protection) ---'));
317
+ 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)'));
205
318
  }
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);
319
+ await (0, github_secrets_client_1.setRepoSecrets)(credentials.GITHUB_TOKEN, credentials.GITHUB_ORGANIZATION, repoName, secrets);
320
+ console.log(chalk_1.default.green('✓ GitHub Actions secrets configured'));
321
+ const githubRepoUrl = result.outputs['github_http_repo_url'].value;
322
+ const { codePushed } = await pushCodeAndProtect(targetRoot, config, credentials, repoName, githubRepoUrl, options);
323
+ printOutputTable([
324
+ ['Front Door', result.outputs['front_door_endpoint_hostname']?.value ?? '(not created)'],
325
+ ['ACR', result.outputs['acr_login_server'].value],
326
+ ['Resource Group', resourceGroupName],
327
+ ['GitHub Repo', githubRepoUrl],
328
+ ], codePushed);
329
+ const domainValidation = (result.outputs['custom_domain_validation']?.value ?? {});
330
+ const domains = Object.entries(domainValidation);
331
+ if (domains.length > 0) {
332
+ console.log(chalk_1.default.cyan('\n--- Custom domain DNS records needed ---'));
333
+ 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'));
334
+ for (const [hostName, record] of domains) {
335
+ console.log(chalk_1.default.white(` ${hostName}`));
336
+ console.log(` TXT ${record.txt_record_name} → ${record.txt_record_value}`);
337
+ console.log(` CNAME ${hostName} → ${record.cname_target}\n`);
338
+ }
339
+ }
340
+ return { codePushed };
210
341
  }
211
342
  catch (err) {
212
343
  if (err instanceof tofu_runner_1.TofuApplyError) {
213
344
  if (options?.destroyOnFailure) {
214
- await runCompensation(infraDir, credentials, tofuVars);
345
+ await runAzureCompensation(infraDir, credentials, tofuVars);
215
346
  }
216
347
  else {
217
348
  console.log(chalk_1.default.yellow('\n Partial resources preserved. Fix the issue and re-run:'));
@@ -225,4 +356,10 @@ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, o
225
356
  process.removeListener('SIGINT', sigintHandler);
226
357
  }
227
358
  }
359
+ async function runInfraOrchestrator(targetRoot, _appName, config, credentials, options) {
360
+ if (config.deployment === 'azure') {
361
+ return runAzureOrchestrator(targetRoot, config, credentials, options);
362
+ }
363
+ return runAwsOrchestrator(targetRoot, config, credentials, options);
364
+ }
228
365
  //# 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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/infra/preflight.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAclD,wBAAgB,gBAAgB,IAAI,MAAM,CA2BzC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,GAC7E,OAAO,CAAC,eAAe,CAAC,CA8B1B"}
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/infra/preflight.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAclD,wBAAgB,gBAAgB,IAAI,MAAM,CA2BzC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAA;IACnB,WAAW,EAAE,WAAW,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,GAC7E,OAAO,CAAC,eAAe,CAAC,CAqC1B"}
@@ -9,6 +9,7 @@ const child_process_1 = require("child_process");
9
9
  const chalk_1 = __importDefault(require("chalk"));
10
10
  const config_loader_1 = require("./config-loader");
11
11
  const credentials_1 = require("./credentials");
12
+ const github_client_1 = require("./github-client");
12
13
  const MIN_TOFU_MAJOR = 1;
13
14
  const MIN_TOFU_MINOR = 7;
14
15
  function pass(label) {
@@ -51,24 +52,31 @@ async function runPreflight(configPath, credentialOverrides) {
51
52
  catch (err) {
52
53
  fail('tofu', err.message);
53
54
  }
54
- // Check 2: credentials
55
+ // Check 2: config (loaded first so we know which cloud's credentials to require)
56
+ let config;
57
+ try {
58
+ config = await (0, config_loader_1.loadInfraConfig)(configPath);
59
+ pass(`fuel.yml valid — ${config.apps.length} app(s) (${config.apps.map((a) => a.name).join(', ')})`);
60
+ }
61
+ catch (err) {
62
+ fail('fuel.yml', err.message);
63
+ }
64
+ // Check 3: credentials
55
65
  let credentials;
56
66
  try {
57
- credentials = await (0, credentials_1.resolveCredentials)(undefined, credentialOverrides);
58
- pass('AWS credentials valid');
59
- pass('GitHub token valid');
67
+ credentials = await (0, credentials_1.resolveCredentials)(undefined, credentialOverrides, config.deployment);
68
+ pass(config.deployment === 'azure' ? 'Azure credentials valid' : 'AWS credentials valid');
60
69
  }
61
70
  catch (err) {
62
71
  fail('credentials', err.message);
63
72
  }
64
- // Check 3: config
65
- let config;
73
+ // Check 4: GitHub token has permission to create repos, push, and set branch protections
66
74
  try {
67
- config = await (0, config_loader_1.loadInfraConfig)(configPath);
68
- pass(`fuel.yml valid — ${config.apps.length} app(s) (${config.apps.map((a) => a.name).join(', ')})`);
75
+ await (0, github_client_1.validateGitHubToken)(credentials.GITHUB_TOKEN);
76
+ pass('GitHub token valid');
69
77
  }
70
78
  catch (err) {
71
- fail('fuel.yml', err.message);
79
+ fail('GitHub token', err.message);
72
80
  }
73
81
  return { config: config, credentials: credentials, tofuVersion: tofuVersion };
74
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/infra/preflight.ts"],"names":[],"mappings":"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"}
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.
@@ -34,10 +47,6 @@ export declare function copyWorkflowFiles(projectDir: string, config: InfraConfi
34
47
  /**
35
48
  * Generate a self-contained /infra folder in targetRoot.
36
49
  * Copies ECS templates and all Terraform modules, then patches and prunes.
37
- *
38
- * The fuel-infrastructure sibling path is resolved via:
39
- * - FUEL_INFRA_PATH env var (override for testing / CI)
40
- * - process.cwd()/../fuel-infrastructure (default monorepo layout)
41
50
  */
42
51
  export declare function generateInfra(targetRoot: string, config: InfraConfig, credentials: Credentials, infraSourcePath?: string): Promise<void>;
43
52
  //# sourceMappingURL=template-engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../../src/infra/template-engine.ts"],"names":[],"mappings":"AAIA,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,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBzE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAiGf;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,CA4Cf"}
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;AAqBD;;;GAGG;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,CA+Df"}