@empire-builder-kit/nx 1.0.0-rc.30 → 1.0.0-rc.32

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 (310) hide show
  1. package/executors.json +8 -3
  2. package/package.json +14 -7
  3. package/src/aws/child-environment.d.ts +10 -0
  4. package/src/aws/child-environment.js +77 -0
  5. package/src/aws/child-environment.js.map +1 -0
  6. package/src/aws/identity.d.ts +13 -0
  7. package/src/aws/identity.js +41 -0
  8. package/src/aws/identity.js.map +1 -0
  9. package/src/aws-authority/index.d.ts +1 -0
  10. package/src/aws-authority/index.js +5 -0
  11. package/src/aws-authority/index.js.map +1 -0
  12. package/src/aws-authority/stage-authority.d.ts +240 -0
  13. package/src/aws-authority/stage-authority.js +2968 -0
  14. package/src/aws-authority/stage-authority.js.map +1 -0
  15. package/src/cli/main.d.ts +2 -0
  16. package/src/cli/main.js +11 -0
  17. package/src/cli/main.js.map +1 -1
  18. package/src/developer-agent/generator-planning.js +4 -4
  19. package/src/developer-agent/generator-planning.js.map +1 -1
  20. package/src/developer-agent/operation-registry.js +14 -6
  21. package/src/developer-agent/operation-registry.js.map +1 -1
  22. package/src/developer-agent/workspace-inspection.js +11 -2
  23. package/src/developer-agent/workspace-inspection.js.map +1 -1
  24. package/src/executors/deployment-plan/deployment-plan.js +1 -1
  25. package/src/executors/deployment-plan/deployment-plan.js.map +1 -1
  26. package/src/executors/foundation-preflight/foundation-preflight.d.ts +0 -1
  27. package/src/executors/foundation-preflight/foundation-preflight.js.map +1 -1
  28. package/src/executors/foundation-preflight/schema.json +0 -5
  29. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.d.ts +12 -3
  30. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js +95 -32
  31. package/src/executors/foundation-profile-preflight/foundation-profile-preflight.js.map +1 -1
  32. package/src/executors/foundation-profile-preflight/production-database-safeguard.d.ts +64 -0
  33. package/src/executors/foundation-profile-preflight/production-database-safeguard.js +221 -0
  34. package/src/executors/foundation-profile-preflight/production-database-safeguard.js.map +1 -0
  35. package/src/executors/foundation-profile-preflight/schema.json +1 -6
  36. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.d.ts +11 -1
  37. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js +44 -21
  38. package/src/executors/foundation-remove-preflight/foundation-remove-preflight.js.map +1 -1
  39. package/src/executors/foundation-remove-preflight/schema.json +6 -1
  40. package/src/executors/github-bootstrap/github-bootstrap.d.ts +1 -0
  41. package/src/executors/github-bootstrap/github-bootstrap.js +1 -0
  42. package/src/executors/github-bootstrap/github-bootstrap.js.map +1 -1
  43. package/src/executors/github-bootstrap/schema.json +7 -1
  44. package/src/executors/infrastructure-plan/infrastructure-plan.d.ts +27 -369
  45. package/src/executors/infrastructure-plan/infrastructure-plan.js +237 -5470
  46. package/src/executors/infrastructure-plan/infrastructure-plan.js.map +1 -1
  47. package/src/executors/infrastructure-plan/schema.json +8 -64
  48. package/src/executors/local-deploy/federated-credential-transport.d.ts +48 -0
  49. package/src/executors/local-deploy/federated-credential-transport.js +252 -0
  50. package/src/executors/local-deploy/federated-credential-transport.js.map +1 -0
  51. package/src/executors/local-deploy/local-approval.d.ts +4 -9
  52. package/src/executors/local-deploy/local-approval.js +3 -7
  53. package/src/executors/local-deploy/local-approval.js.map +1 -1
  54. package/src/executors/local-deploy/local-deploy.d.ts +60 -43
  55. package/src/executors/local-deploy/local-deploy.js +955 -804
  56. package/src/executors/local-deploy/local-deploy.js.map +1 -1
  57. package/src/executors/local-deploy/schema.json +3 -20
  58. package/src/executors/refresh/refresh.js +2 -2
  59. package/src/executors/refresh/refresh.js.map +1 -1
  60. package/src/executors/remove/remove.js +2 -2
  61. package/src/executors/remove/remove.js.map +1 -1
  62. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.d.ts +27 -1
  63. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js +907 -22
  64. package/src/executors/router-waf-rehearsal/router-waf-rehearsal.js.map +1 -1
  65. package/src/executors/router-waf-rehearsal/schema.json +17 -2
  66. package/src/executors/secret-initialize/schema.json +42 -0
  67. package/src/executors/secret-initialize/secret-initialize.d.ts +32 -0
  68. package/src/executors/secret-initialize/secret-initialize.js +243 -0
  69. package/src/executors/secret-initialize/secret-initialize.js.map +1 -0
  70. package/src/executors/secret-metadata/secret-metadata.d.ts +4 -1
  71. package/src/executors/secret-metadata/secret-metadata.js +76 -29
  72. package/src/executors/secret-metadata/secret-metadata.js.map +1 -1
  73. package/src/executors/sst-lifecycle/generated-secret-retirement.d.ts +53 -0
  74. package/src/executors/sst-lifecycle/generated-secret-retirement.js +192 -0
  75. package/src/executors/sst-lifecycle/generated-secret-retirement.js.map +1 -0
  76. package/src/executors/sst-lifecycle/governed-native-operation.d.ts +46 -0
  77. package/src/executors/sst-lifecycle/governed-native-operation.js +153 -0
  78. package/src/executors/sst-lifecycle/governed-native-operation.js.map +1 -0
  79. package/src/executors/sst-lifecycle/run-sst-command.d.ts +27 -7
  80. package/src/executors/sst-lifecycle/run-sst-command.js +474 -89
  81. package/src/executors/sst-lifecycle/run-sst-command.js.map +1 -1
  82. package/src/executors/sst-lifecycle/schema.json +0 -5
  83. package/src/executors/sst-lifecycle/secret-preflight.d.ts +2 -0
  84. package/src/executors/sst-lifecycle/secret-preflight.js +13 -7
  85. package/src/executors/sst-lifecycle/secret-preflight.js.map +1 -1
  86. package/src/executors/unlock/unlock.js +2 -2
  87. package/src/executors/unlock/unlock.js.map +1 -1
  88. package/src/foundation/provision-logical-database.js +2 -0
  89. package/src/foundation/provision-logical-database.js.map +1 -1
  90. package/src/foundation/router-waf-rate-rehearsal.d.ts +97 -0
  91. package/src/foundation/router-waf-rate-rehearsal.js +210 -0
  92. package/src/foundation/router-waf-rate-rehearsal.js.map +1 -0
  93. package/src/foundation/router-waf.d.ts +59 -9
  94. package/src/foundation/router-waf.js +427 -32
  95. package/src/foundation/router-waf.js.map +1 -1
  96. package/src/foundation/stages.d.ts +1 -0
  97. package/src/foundation/stages.js +11 -0
  98. package/src/foundation/stages.js.map +1 -1
  99. package/src/generators/formatting.d.ts +8 -0
  100. package/src/generators/formatting.js +118 -0
  101. package/src/generators/formatting.js.map +1 -0
  102. package/src/generators/function/function.js +37 -17
  103. package/src/generators/function/function.js.map +1 -1
  104. package/src/generators/post-generation-install.js +2 -2
  105. package/src/generators/post-generation-install.js.map +1 -1
  106. package/src/generators/preset/generator.js +28 -8
  107. package/src/generators/preset/generator.js.map +1 -1
  108. package/src/generators/preset/schema.d.ts +3 -0
  109. package/src/generators/preset/schema.json +5 -5
  110. package/src/generators/preset/workspace-files-developer-agent.js +15 -7
  111. package/src/generators/preset/workspace-files-developer-agent.js.map +1 -1
  112. package/src/generators/preset/workspace-files-ecr-inspector.d.ts +18 -0
  113. package/src/generators/preset/workspace-files-ecr-inspector.js +298 -0
  114. package/src/generators/preset/workspace-files-ecr-inspector.js.map +1 -0
  115. package/src/generators/preset/workspace-files-performance-cost.d.ts +2 -2
  116. package/src/generators/preset/workspace-files-performance-cost.js +8 -8
  117. package/src/generators/preset/workspace-files-performance-cost.js.map +1 -1
  118. package/src/generators/preset/workspace-files-performance-load.d.ts +1 -1
  119. package/src/generators/preset/workspace-files-performance-load.js +29 -24
  120. package/src/generators/preset/workspace-files-performance-load.js.map +1 -1
  121. package/src/generators/preset/workspace-files-stage-authority.d.ts +6 -0
  122. package/src/generators/preset/workspace-files-stage-authority.js +479 -0
  123. package/src/generators/preset/workspace-files-stage-authority.js.map +1 -0
  124. package/src/generators/preset/workspace-files-thin-deploy.d.ts +40 -0
  125. package/src/generators/preset/workspace-files-thin-deploy.js +1500 -0
  126. package/src/generators/preset/workspace-files-thin-deploy.js.map +1 -0
  127. package/src/generators/preset/workspace-files-thin-docs.d.ts +5 -0
  128. package/src/generators/preset/workspace-files-thin-docs.js +240 -0
  129. package/src/generators/preset/workspace-files-thin-docs.js.map +1 -0
  130. package/src/generators/preset/workspace-files-thin-release.d.ts +14 -0
  131. package/src/generators/preset/workspace-files-thin-release.js +26 -0
  132. package/src/generators/preset/workspace-files-thin-release.js.map +1 -0
  133. package/src/generators/preset/workspace-files.d.ts +2 -1
  134. package/src/generators/preset/workspace-files.js +448 -680
  135. package/src/generators/preset/workspace-files.js.map +1 -1
  136. package/src/generators/repository-policy/repository-policy.js +149 -19
  137. package/src/generators/repository-policy/repository-policy.js.map +1 -1
  138. package/src/generators/repository-policy/schema.d.ts +2 -0
  139. package/src/generators/repository-policy/schema.json +11 -1
  140. package/src/generators/repository-policy/tree-policy.d.ts +3 -0
  141. package/src/generators/repository-policy/tree-policy.js +25 -0
  142. package/src/generators/repository-policy/tree-policy.js.map +1 -0
  143. package/src/generators/slice/built-in-plan-api-files.js +1 -0
  144. package/src/generators/slice/built-in-plan-api-files.js.map +1 -1
  145. package/src/generators/slice/built-in-plan-async-work-files.js +41 -0
  146. package/src/generators/slice/built-in-plan-async-work-files.js.map +1 -1
  147. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js +6 -0
  148. package/src/generators/slice/built-in-plan-authorization-infrastructure-files.js.map +1 -1
  149. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js +5 -31
  150. package/src/generators/slice/built-in-plan-data-export-infrastructure-files.js.map +1 -1
  151. package/src/generators/slice/built-in-plan-data-files.d.ts +1 -1
  152. package/src/generators/slice/built-in-plan-data-files.js +89 -30
  153. package/src/generators/slice/built-in-plan-data-files.js.map +1 -1
  154. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js +19 -0
  155. package/src/generators/slice/built-in-plan-data-lifecycle-runtime-files.js.map +1 -1
  156. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js +21 -3
  157. package/src/generators/slice/built-in-plan-data-retention-launcher-files.js.map +1 -1
  158. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js +20 -1
  159. package/src/generators/slice/built-in-plan-database-retirement-rehearsal-files.js.map +1 -1
  160. package/src/generators/slice/built-in-plan-foundation-files.js +3 -5
  161. package/src/generators/slice/built-in-plan-foundation-files.js.map +1 -1
  162. package/src/generators/slice/built-in-plan-frontend-files.js +5 -1
  163. package/src/generators/slice/built-in-plan-frontend-files.js.map +1 -1
  164. package/src/generators/slice/built-in-plan-infrastructure-files.d.ts +1 -1
  165. package/src/generators/slice/built-in-plan-infrastructure-files.js +199 -188
  166. package/src/generators/slice/built-in-plan-infrastructure-files.js.map +1 -1
  167. package/src/generators/slice/built-in-plan-metadata-files.js +13 -0
  168. package/src/generators/slice/built-in-plan-metadata-files.js.map +1 -1
  169. package/src/generators/slice/built-in-plan-native-runtime-authority-files.d.ts +2 -0
  170. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js +307 -0
  171. package/src/generators/slice/built-in-plan-native-runtime-authority-files.js.map +1 -0
  172. package/src/generators/slice/built-in-plan-operations-files.js +65 -51
  173. package/src/generators/slice/built-in-plan-operations-files.js.map +1 -1
  174. package/src/generators/slice/built-in-plan-performance-files.js +97 -19
  175. package/src/generators/slice/built-in-plan-performance-files.js.map +1 -1
  176. package/src/generators/slice/built-in-plan-project-files.js +9 -68
  177. package/src/generators/slice/built-in-plan-project-files.js.map +1 -1
  178. package/src/generators/slice/built-in-plan-secret-runtime-files.d.ts +1 -1
  179. package/src/generators/slice/built-in-plan-secret-runtime-files.js +87 -76
  180. package/src/generators/slice/built-in-plan-secret-runtime-files.js.map +1 -1
  181. package/src/generators/slice/built-in-plan-testing-files.js +94 -47
  182. package/src/generators/slice/built-in-plan-testing-files.js.map +1 -1
  183. package/src/generators/slice/built-in-plan-thin-release-files.d.ts +11 -0
  184. package/src/generators/slice/built-in-plan-thin-release-files.js +129 -0
  185. package/src/generators/slice/built-in-plan-thin-release-files.js.map +1 -0
  186. package/src/generators/slice/built-in-plan-verification-files.js +6 -2
  187. package/src/generators/slice/built-in-plan-verification-files.js.map +1 -1
  188. package/src/generators/slice/built-in-plan-web-files.js +4 -2
  189. package/src/generators/slice/built-in-plan-web-files.js.map +1 -1
  190. package/src/generators/slice/built-in-plan-workload-role-files.js +26 -4
  191. package/src/generators/slice/built-in-plan-workload-role-files.js.map +1 -1
  192. package/src/generators/slice/built-in-plan.d.ts +1 -0
  193. package/src/generators/slice/built-in-plan.js +28 -11
  194. package/src/generators/slice/built-in-plan.js.map +1 -1
  195. package/src/generators/slice/slice.js +30 -32
  196. package/src/generators/slice/slice.js.map +1 -1
  197. package/src/generators/upgrade/upgrade.d.ts +1 -1
  198. package/src/generators/upgrade/upgrade.js +200 -48
  199. package/src/generators/upgrade/upgrade.js.map +1 -1
  200. package/src/generators/workload/performance-registration.d.ts +1 -0
  201. package/src/generators/workload/performance-registration.js +9 -11
  202. package/src/generators/workload/performance-registration.js.map +1 -1
  203. package/src/generators/workload/service-performance-files.d.ts +1 -0
  204. package/src/generators/workload/service-performance-files.js +27 -7
  205. package/src/generators/workload/service-performance-files.js.map +1 -1
  206. package/src/generators/workload/workload.d.ts +1 -1
  207. package/src/generators/workload/workload.js +55 -28
  208. package/src/generators/workload/workload.js.map +1 -1
  209. package/src/git-policy/github-bootstrap.d.ts +28 -7
  210. package/src/git-policy/github-bootstrap.js +205 -163
  211. package/src/git-policy/github-bootstrap.js.map +1 -1
  212. package/src/index.d.ts +1 -0
  213. package/src/index.js +1 -0
  214. package/src/index.js.map +1 -1
  215. package/src/local-dev/private-state.d.ts +3 -0
  216. package/src/local-dev/private-state.js +17 -5
  217. package/src/local-dev/private-state.js.map +1 -1
  218. package/src/local-dev/tls.js +5 -1
  219. package/src/local-dev/tls.js.map +1 -1
  220. package/src/performance/cost-collection.d.ts +1 -1
  221. package/src/performance/cost-collection.js +4 -2
  222. package/src/performance/cost-collection.js.map +1 -1
  223. package/src/performance/cost-controls.d.ts +3 -1
  224. package/src/performance/cost-controls.js +9 -4
  225. package/src/performance/cost-controls.js.map +1 -1
  226. package/src/performance/evidence.d.ts +1 -1
  227. package/src/performance/evidence.js +5 -3
  228. package/src/performance/evidence.js.map +1 -1
  229. package/src/performance/load-safety.js +5 -3
  230. package/src/performance/load-safety.js.map +1 -1
  231. package/src/performance/model.d.ts +2 -2
  232. package/src/performance/model.js +4 -3
  233. package/src/performance/model.js.map +1 -1
  234. package/src/release/index.d.ts +0 -2
  235. package/src/release/index.js +0 -2
  236. package/src/release/index.js.map +1 -1
  237. package/src/release/source-authority.d.ts +4 -5
  238. package/src/release/source-authority.js +13 -123
  239. package/src/release/source-authority.js.map +1 -1
  240. package/src/repository-policy/aurora-preflight.d.ts +1 -1
  241. package/src/repository-policy/aurora-preflight.js +4 -1
  242. package/src/repository-policy/aurora-preflight.js.map +1 -1
  243. package/src/repository-policy/policy.d.ts +21 -2
  244. package/src/repository-policy/policy.js +290 -25
  245. package/src/repository-policy/policy.js.map +1 -1
  246. package/src/schemas/performance-policy-v1.json +3 -1
  247. package/src/schemas/repository-policy-v1.json +46 -2
  248. package/src/secrets/adapters.d.ts +7 -2
  249. package/src/secrets/adapters.js +34 -3
  250. package/src/secrets/adapters.js.map +1 -1
  251. package/src/secrets/aws-control-plane.d.ts +10 -1
  252. package/src/secrets/aws-control-plane.js +67 -0
  253. package/src/secrets/aws-control-plane.js.map +1 -1
  254. package/src/secrets/generated-aws-control-plane.d.ts +23 -0
  255. package/src/secrets/generated-aws-control-plane.js +259 -0
  256. package/src/secrets/generated-aws-control-plane.js.map +1 -0
  257. package/src/secrets/metadata.js +38 -10
  258. package/src/secrets/metadata.js.map +1 -1
  259. package/src/secrets/model.d.ts +8 -1
  260. package/src/secrets/model.js +24 -3
  261. package/src/secrets/model.js.map +1 -1
  262. package/src/secrets/operator.d.ts +89 -3
  263. package/src/secrets/operator.js +422 -9
  264. package/src/secrets/operator.js.map +1 -1
  265. package/src/secrets/registry.d.ts +2 -1
  266. package/src/secrets/registry.js +18 -1
  267. package/src/secrets/registry.js.map +1 -1
  268. package/src/secrets/workload-access.js +10 -2
  269. package/src/secrets/workload-access.js.map +1 -1
  270. package/src/supply-chain/action-pins.js +61 -7
  271. package/src/supply-chain/action-pins.js.map +1 -1
  272. package/src/supply-chain/build-output-bounds.d.ts +2 -0
  273. package/src/supply-chain/build-output-bounds.js +12 -0
  274. package/src/supply-chain/build-output-bounds.js.map +1 -0
  275. package/src/supply-chain/build-output.js +2 -4
  276. package/src/supply-chain/build-output.js.map +1 -1
  277. package/src/supply-chain/ecr-scanning.d.ts +5 -3
  278. package/src/supply-chain/ecr-scanning.js +11 -7
  279. package/src/supply-chain/ecr-scanning.js.map +1 -1
  280. package/src/supply-chain/ecs-deployed-image.d.ts +5 -3
  281. package/src/supply-chain/ecs-deployed-image.js +6 -4
  282. package/src/supply-chain/ecs-deployed-image.js.map +1 -1
  283. package/src/supply-chain/generated-container-release-command.js +849 -44
  284. package/src/supply-chain/generated-container-release-command.js.map +1 -1
  285. package/src/supply-chain/generated-ecr-collector-command.d.ts +0 -1
  286. package/src/supply-chain/generated-ecr-collector-command.js +188 -91
  287. package/src/supply-chain/generated-ecr-collector-command.js.map +1 -1
  288. package/src/supply-chain/generated-files.js +4 -3
  289. package/src/supply-chain/generated-files.js.map +1 -1
  290. package/src/supply-chain/index.d.ts +1 -1
  291. package/src/supply-chain/index.js +2 -1
  292. package/src/supply-chain/index.js.map +1 -1
  293. package/src/workload-roles/index.d.ts +10 -17
  294. package/src/workload-roles/index.js +5 -18
  295. package/src/workload-roles/index.js.map +1 -1
  296. package/src/workspace-deployment/identity.d.ts +3 -0
  297. package/src/workspace-deployment/identity.js +22 -0
  298. package/src/workspace-deployment/identity.js.map +1 -0
  299. package/src/workspace-deployment/index.d.ts +3 -0
  300. package/src/workspace-deployment/index.js +7 -0
  301. package/src/workspace-deployment/index.js.map +1 -0
  302. package/src/workspace-deployment/migration-evidence.d.ts +29 -0
  303. package/src/workspace-deployment/migration-evidence.js +83 -0
  304. package/src/workspace-deployment/migration-evidence.js.map +1 -0
  305. package/src/workspace-deployment/migration.d.ts +27 -0
  306. package/src/workspace-deployment/migration.js +109 -0
  307. package/src/workspace-deployment/migration.js.map +1 -0
  308. package/src/workspace-deployment/ownership.d.ts +81 -0
  309. package/src/workspace-deployment/ownership.js +381 -0
  310. package/src/workspace-deployment/ownership.js.map +1 -0
@@ -6,6 +6,8 @@ const prettier_1 = require("prettier");
6
6
  const index_js_1 = require("../../repository-policy/index.js");
7
7
  const index_js_2 = require("../../ownership/index.js");
8
8
  const workspace_files_1 = require("./workspace-files");
9
+ const formatting_js_1 = require("../formatting.js");
10
+ const index_js_3 = require("../../workspace-deployment/index.js");
9
11
  function frameworkPackageVersion() {
10
12
  const manifest = require('../../../package.json');
11
13
  if (typeof manifest.version !== 'string') {
@@ -14,28 +16,44 @@ function frameworkPackageVersion() {
14
16
  return manifest.version;
15
17
  }
16
18
  async function presetGenerator(tree, options) {
19
+ const deploymentProfile = options.deploymentProfile ?? 'starter';
17
20
  const suppliedAccounts = [
18
21
  options.developmentAccountId,
19
22
  options.stagingAccountId,
20
23
  options.productionAccountId,
21
24
  ];
22
- if (suppliedAccounts.some((value) => value !== undefined) &&
23
- suppliedAccounts.some((value) => value === undefined)) {
24
- throw new Error('Preset deployment topology requires all three exact stage account IDs together.');
25
+ if (deploymentProfile === 'starter' &&
26
+ options.stagingAccountId !== undefined) {
27
+ throw new Error('The starter deployment profile has no staging stage; omit --stagingAccountId.');
25
28
  }
26
- const deploymentAccounts = suppliedAccounts.every((value) => value !== undefined)
27
- ? (0, index_js_1.validateDeploymentAccountTopology)(options.deploymentProfile ?? 'starter', {
29
+ const requiredAccounts = deploymentProfile === 'starter'
30
+ ? [options.developmentAccountId, options.productionAccountId]
31
+ : suppliedAccounts;
32
+ if (requiredAccounts.some((value) => value !== undefined) &&
33
+ requiredAccounts.some((value) => value === undefined)) {
34
+ throw new Error(deploymentProfile === 'starter'
35
+ ? 'Starter preset deployment topology requires development and production account IDs together.'
36
+ : 'Isolated preset deployment topology requires all three exact stage account IDs together.');
37
+ }
38
+ const deploymentAccounts = requiredAccounts.every((value) => value !== undefined)
39
+ ? (0, index_js_1.validateDeploymentAccountTopology)(deploymentProfile, {
28
40
  development: (0, index_js_1.normalizeDeploymentAccountId)(options.developmentAccountId, 'Development deployment account'),
29
41
  production: (0, index_js_1.normalizeDeploymentAccountId)(options.productionAccountId, 'Production deployment account'),
30
- staging: (0, index_js_1.normalizeDeploymentAccountId)(options.stagingAccountId, 'Staging deployment account'),
42
+ staging: deploymentProfile === 'starter'
43
+ ? null
44
+ : (0, index_js_1.normalizeDeploymentAccountId)(options.stagingAccountId, 'Staging deployment account'),
31
45
  })
32
46
  : { development: null, production: null, staging: null };
47
+ const deploymentRegion = options.deploymentRegion === undefined
48
+ ? null
49
+ : (0, index_js_1.configuredDeploymentRegion)(options.deploymentRegion);
33
50
  const renderedFiles = (0, workspace_files_1.renderWorkspaceFiles)({
34
51
  deploymentAccounts,
35
- deploymentProfile: options.deploymentProfile ?? 'starter',
36
- deploymentRegion: options.deploymentRegion ?? null,
52
+ deploymentProfile,
53
+ deploymentRegion,
37
54
  frameworkVersion: options.frameworkVersion ?? frameworkPackageVersion(),
38
55
  name: options.name,
56
+ workspaceDeploymentId: options.workspaceDeploymentId ?? (0, index_js_3.createWorkspaceDeploymentId)(),
39
57
  });
40
58
  const files = Object.fromEntries(await Promise.all(Object.entries(renderedFiles).map(async ([path, contents]) => {
41
59
  if ((0, workspace_files_1.isRawWorkspaceAuthorityPath)(path)) {
@@ -59,6 +77,8 @@ async function presetGenerator(tree, options) {
59
77
  }
60
78
  (0, index_js_2.restampFoundationOwnership)(tree);
61
79
  (0, index_js_2.restampWorkspaceOwnership)(tree);
80
+ await (0, formatting_js_1.formatTreeFileToFixedPoint)(tree, 'packages/foundation/.ebk/ownership.json');
81
+ await (0, formatting_js_1.formatTreeFileToFixedPoint)(tree, '.ebk/ownership.json');
62
82
  }
63
83
  exports.default = presetGenerator;
64
84
  //# sourceMappingURL=generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/generator.ts"],"names":[],"mappings":";;AAoBA,0DAQC;AAED,0CAiGC;AA9HD,uCAAoD;AAEpD,+DAK0C;AAC1C,uDAGkC;AAClC,uDAG2B;AAC3B,oDAA8D;AAC9D,kEAAkF;AAElF,SAAgB,uBAAuB;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,uBAAuB,CAA0B,CAAC;IAC3E,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC1B,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,IAAU,EACV,OAA8B;IAE9B,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,SAAS,CAAC;IACjE,MAAM,gBAAgB,GAAG;QACvB,OAAO,CAAC,oBAAoB;QAC5B,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,mBAAmB;KAC5B,CAAC;IACF,IACE,iBAAiB,KAAK,SAAS;QAC/B,OAAO,CAAC,gBAAgB,KAAK,SAAS,EACtC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IACD,MAAM,gBAAgB,GACpB,iBAAiB,KAAK,SAAS;QAC7B,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC,mBAAmB,CAAC;QAC7D,CAAC,CAAC,gBAAgB,CAAC;IACvB,IACE,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;QACrD,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,EACrD,CAAC;QACD,MAAM,IAAI,KAAK,CACb,iBAAiB,KAAK,SAAS;YAC7B,CAAC,CAAC,8FAA8F;YAChG,CAAC,CAAC,0FAA0F,CAC/F,CAAC;IACJ,CAAC;IACD,MAAM,kBAAkB,GACtB,gBAAgB,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;QACpD,CAAC,CAAC,IAAA,4CAAiC,EAAC,iBAAiB,EAAE;YACnD,WAAW,EAAE,IAAA,uCAA4B,EACvC,OAAO,CAAC,oBAAuC,EAC/C,gCAAgC,CACjC;YACD,UAAU,EAAE,IAAA,uCAA4B,EACtC,OAAO,CAAC,mBAAsC,EAC9C,+BAA+B,CAChC;YACD,OAAO,EACL,iBAAiB,KAAK,SAAS;gBAC7B,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAA,uCAA4B,EAC1B,OAAO,CAAC,gBAAmC,EAC3C,4BAA4B,CAC7B;SACR,CAAC;QACJ,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7D,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB,KAAK,SAAS;QACpC,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAA,qCAA0B,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAA,sCAAoB,EAAC;QACzC,kBAAkB;QAClB,iBAAiB;QACjB,gBAAgB;QAChB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,uBAAuB,EAAE;QACvE,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,qBAAqB,EACnB,OAAO,CAAC,qBAAqB,IAAI,IAAA,sCAA2B,GAAE;KACjE,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B,MAAM,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE;QAC3D,IAAI,IAAA,6CAA2B,EAAC,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAU,CAAC;QACnC,CAAC;QACD,IAAI,CAAC;YACH,OAAO;gBACL,IAAI;gBACJ,MAAM,IAAA,iBAAc,EAAC,QAAQ,EAAE;oBAC7B,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,IAAI;iBAClB,CAAC;aACM,CAAC;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAU,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CACH,CACF,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,IAAA,qCAA0B,EAAC,IAAI,CAAC,CAAC;IACjC,IAAA,oCAAyB,EAAC,IAAI,CAAC,CAAC;IAChC,MAAM,IAAA,0CAA0B,EAC9B,IAAI,EACJ,yCAAyC,CAC1C,CAAC;IACF,MAAM,IAAA,0CAA0B,EAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;AAChE,CAAC;AAED,kBAAe,eAAe,CAAC"}
@@ -8,4 +8,7 @@ export interface PresetGeneratorSchema {
8
8
  name: string;
9
9
  productionAccountId?: string | number;
10
10
  stagingAccountId?: string | number;
11
+ /** Internal deterministic-test hook. Public generation always creates a new
12
+ * workspace deployment identity. */
13
+ workspaceDeploymentId?: string;
11
14
  }
@@ -12,8 +12,8 @@
12
12
  },
13
13
  "deploymentRegion": {
14
14
  "type": "string",
15
- "pattern": "^[a-z]{2}(-gov)?-[a-z]+(-[a-z]+)*-[0-9]$",
16
- "description": "Optional exact shared AWS Region for all canonical stages."
15
+ "pattern": "^(?!(us-iso-|us-isob-|eu-isoe-|us-isof-))[a-z]{2}(-gov)?-[a-z]+(-[a-z]+)*-[0-9]$",
16
+ "description": "Optional exact shared AWS Region for every stage active under the selected deployment profile."
17
17
  },
18
18
  "developmentAccountId": {
19
19
  "anyOf": [
@@ -25,7 +25,7 @@
25
25
  "multipleOf": 1
26
26
  }
27
27
  ],
28
- "description": "Optional exact development AWS account ID. Supply all three stage accounts together."
28
+ "description": "Optional exact development AWS account ID. Supply development and production together for starter; supply all three stage accounts for an isolated profile."
29
29
  },
30
30
  "name": {
31
31
  "type": "string",
@@ -50,7 +50,7 @@
50
50
  "multipleOf": 1
51
51
  }
52
52
  ],
53
- "description": "Optional exact staging AWS account ID. Supply all three stage accounts together."
53
+ "description": "Optional exact staging AWS account ID. Omit for starter; supply all three stage accounts together for an isolated profile."
54
54
  },
55
55
  "productionAccountId": {
56
56
  "anyOf": [
@@ -62,7 +62,7 @@
62
62
  "multipleOf": 1
63
63
  }
64
64
  ],
65
- "description": "Optional exact production AWS account ID. Supply all three stage accounts together."
65
+ "description": "Optional exact production AWS account ID. Supply development and production together for starter; supply all three stage accounts for an isolated profile."
66
66
  }
67
67
  },
68
68
  "required": ["name"]
@@ -22,9 +22,9 @@ const HANDOFF_STATE_DESCRIPTIONS = {
22
22
  function deploymentAuthorityGuidance(deploymentProfile) {
23
23
  switch (deploymentProfile) {
24
24
  case 'starter':
25
- return `Development and staging mutation may run locally only through the matching
26
- authenticated Nx lifecycle and committed Repository Operating Policy. Production mutation
27
- belongs to the protected GitHub environment and OIDC workflow. Never invoke SST directly.`;
25
+ return `Development and production mutation may run locally only through the matching
26
+ authenticated Nx lifecycle and committed Repository Operating Policy. GitHub deployment
27
+ remains optional. Never invoke SST directly.`;
28
28
  case 'production-isolated':
29
29
  return `Development and staging mutation may run locally only through the matching
30
30
  authenticated Nx lifecycle and committed Repository Operating Policy. Production mutation
@@ -61,13 +61,20 @@ Begin and hand off implementation work with
61
61
  \`pnpm nx run ${name}:verify\` and the workspace \`pnpm verify\` barrier before claiming
62
62
  implemented-and-verified.
63
63
 
64
+ If a Slice, Service, or Job generator reports a retained post-generation install, rerun
65
+ that same generator with the exact scoped prefix
66
+ \`pnpm --config.verify-deps-before-run=warn nx generate\`. This is the sole exception to
67
+ the workspace's fail-closed dependency-state check: it lets Nx reach EBK's bound recovery
68
+ callback, which owns the install. Never run \`pnpm install\` while the retained marker exists.
69
+
64
70
  Use one topic branch and linked worktree per independent change. Stop on stale base,
65
71
  overlapping paths or shared external state, ownership or generated drift, invalid policy,
66
72
  blocking markers, missing prerequisites, or unknown authority; never merge, rebase, discard,
67
73
  or overwrite another worktree automatically.
68
74
 
69
- ${deploymentAuthorityGuidance(deploymentProfile)} Secret values remain a human-only TTY ceremony;
70
- agents may use only value-blind metadata, status, and verification.
75
+ ${deploymentAuthorityGuidance(deploymentProfile)} Human-supplied secret values remain a
76
+ human-only TTY ceremony. Agents may use value-blind metadata, status, verification, and the
77
+ exact generated-secret initializer; the initializer accepts and returns no plaintext value.
71
78
 
72
79
  Read \`docs/developer-agent.md\`, \`docs/developer-agent-handoff.template.json\`,
73
80
  \`docs/developer-agent-adapters.md\`, \`docs/git-workflow.md\`, and
@@ -236,8 +243,9 @@ For every mutation, name the cleanup and recovery owner before execution.
236
243
  ${deploymentAuthorityGuidance(deploymentProfile)} Destructive work additionally requires an
237
244
  exact target, explicit approval, retained recovery proof, and completed cleanup.
238
245
 
239
- Secret values are entered only through the human TTY ceremony. Agents and CI are limited to
240
- value-blind secret metadata, status, and verification.
246
+ Human-supplied secret values are entered only through the human TTY ceremony. Agents and CI
247
+ may use value-blind metadata, status, verification, and the exact generated-secret initializer;
248
+ the initializer accepts and returns no plaintext value.
241
249
 
242
250
  ## Handoff and resumption
243
251
 
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-files-developer-agent.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/workspace-files-developer-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-files-developer-agent.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/workspace-files-developer-agent.ts"],"names":[],"mappings":";;;AA4jBA,sFAuBC;AAnlBD,6DAQwC;AAG3B,QAAA,4BAA4B,GAAG,yBAAkC,CAAC;AAClE,QAAA,qCAAqC,GAChD,4CAAqD,CAAC;AAC3C,QAAA,uCAAuC,GAClD,kCAA2C,CAAC;AAEjC,QAAA,sCAAsC,GAAG;IACpD,oCAA4B;IAC5B,6CAAqC;IACrC,+CAAuC;CAC/B,CAAC;AAgBX,MAAM,0BAA0B,GAAG;IACjC,0BAA0B,EACxB,wEAAwE;IAC1E,oCAAoC,EAClC,kFAAkF;IACpF,yBAAyB,EACvB,+FAA+F;IACjG,0BAA0B,EACxB,+EAA+E;IACjF,qCAAqC,EACnC,wEAAwE;IAC1E,2BAA2B,EACzB,0DAA0D;CACC,CAAC;AAEhE,SAAS,2BAA2B,CAClC,iBAAoC;IAEpC,QAAQ,iBAAiB,EAAE,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO;;6CAEgC,CAAC;QAC1C,KAAK,qBAAqB;YACxB,OAAO;;0FAE6E,CAAC;QACvF,KAAK,gBAAgB;YACnB,OAAO;;2FAE8E,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,IAAY,EACZ,iBAAoC;IAEpC,OAAO;;iDAEwC,IAAI;;;;;;;;;;;;;;;;;;;gBAmBrC,IAAI;gBACJ,IAAI;;;;;;;;;;;;;;EAclB,2BAA2B,CAAC,iBAAiB,CAAC;;;;;;;CAO/C,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,yCAA8B,CAAC,GAAG,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,OAAO,0BAA0B,CAAC,KAAK,CAAC,EAAE,CAClE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CACpB,IAAY,EACZ,iBAAoC;IAEpC,OAAO;;8DAEqD,IAAI;;;;;;;;;;;;uBAY3C,IAAI;;;;mBAIR,IAAI;;;;;;;;;;;;;;;;mBAgBJ,IAAI,sCAAsC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAgCjC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyFlC,2BAA2B,CAAC,iBAAiB,CAAC;;;;;;;;;IAS5C,6CAAqC;;;;;;;;;;;;;EAavC,mBAAmB,EAAE;;IAEnB,6CAAqC;8BACX,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAoD5B,+CAAuC;CAC5C,CAAC;AACF,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA2C;IAE3C,MAAM,qBAAqB,GAAG,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACzD,MAAM,wBAAwB,GAC5B,wDAAwD,CAAC;IAC3D,MAAM,oBAAoB,GAAG,GAAG,OAAO,CAAC,IAAI,SAAS,CAAC;IACtD,OAAO;QACL,gBAAgB,EAAE,EAAE;QACpB,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;QACpC,oBAAoB,EAAE,KAAK;QAC3B,aAAa,EAAE,EAAE;QACjB,IAAI,EAAE,uCAA4B;QAClC,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE;YACd,gBAAgB,EAAE,KAAK;YACvB,SAAS,EAAE,WAAW;YACtB,WAAW,EACT,2FAA2F;SAC9F;QACD,UAAU,EAAE;YACV;gBACE,SAAS,EAAE,cAAc;gBACzB,EAAE,EAAE,eAAe,OAAO,CAAC,IAAI,EAAE;gBACjC,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE;oBACL,SAAS,EAAE,EAAE;oBACb,eAAe,EAAE,CAAC,QAAQ,CAAC;oBAC3B,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;oBACxB,oBAAoB,EAAE,CAAC,oBAAoB,CAAC;iBAC7C;aACF;SACF;QACD,QAAQ,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;QACrC,UAAU,EAAE;YACV,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,+BAA+B;YACxC,MAAM,EAAE,qBAAqB;YAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,QAAQ,EAAE,gCAAgC;SAC3C;QACD,gBAAgB,EAAE,CAAC,QAAQ,CAAC;QAC5B,uBAAuB,EAAE,EAAE;QAC3B,oBAAoB,EAAE,CAAC,oBAAoB,CAAC;QAC5C,2BAA2B,EAAE,CAAC,oBAAoB,CAAC;QACnD,OAAO,EAAE;YACP;gBACE,QAAQ,EAAE;oBACR,SAAS,EAAE,EAAE;oBACb,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;iBACzB;gBACD,SAAS,EAAE;oBACT;wBACE,MAAM,EAAE,qBAAqB;wBAC7B,aAAa,EAAE,QAAQ;wBACvB,IAAI,EAAE,8BAA8B;wBACpC,YAAY,EAAE,qBAAqB;wBACnC,SAAS,EAAE,wBAAwB;qBACpC;iBACF;gBACD,OAAO,EAAE;oBACP,iBAAiB,EAAE,EAAE;oBACrB,KAAK,EAAE,EAAE;iBACV;gBACD,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;gBACpC,IAAI,EAAE,sCAA2B;gBACjC,cAAc,EAAE;oBACd,gBAAgB,EAAE,KAAK;oBACvB,SAAS,EAAE,WAAW;oBACtB,WAAW,EACT,sEAAsE;iBACzE;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,eAAe,OAAO,CAAC,IAAI,EAAE;oBACnC,gBAAgB,EAAE,EAAE;iBACrB;gBACD,OAAO,EAAE,YAAY;gBACrB,QAAQ,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;gBACrC,aAAa,EAAE,kDAAuC;gBACtD,MAAM,EAAE;oBACN,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtB,QAAQ,EAAE,gCAAgC;iBAC3C;gBACD,eAAe,EAAE;oBACf,MAAM,EAAE,qBAAqB;oBAC7B,SAAS,EAAE,wBAAwB;oBACnC,MAAM,EAAE;wBACN,SAAS,EAAE,EAAE;wBACb,OAAO,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE;wBACpC,MAAM,EAAE;4BACN,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,CAAC;4BACT,WAAW,EAAE,CAAC;4BACd,OAAO,EAAE,CAAC;4BACV,OAAO,EAAE,CAAC;yBACX;wBACD,WAAW,EAAE;4BACX,KAAK,EAAE,OAAO;4BACd,QAAQ,EAAE,KAAK;yBAChB;wBACD,QAAQ,EAAE,EAAE;wBACZ,cAAc,EAAE,KAAK;wBACrB,IAAI,EAAE,yBAAyB;wBAC/B,SAAS,EAAE;4BACT,cAAc,EAAE,8BAA8B;4BAC9C,OAAO,EAAE,OAAO,CAAC,IAAI;4BACrB,UAAU,EAAE,QAAQ;4BACpB,MAAM,EAAE,QAAQ;yBACjB;wBACD,OAAO,EAAE,QAAQ;wBACjB,YAAY,EAAE,IAAI;wBAClB,mBAAmB,EAAE,KAAK;wBAC1B,aAAa,EAAE,0DAA+C;wBAC9D,MAAM,EAAE;4BACN,mBAAmB,EAAE,EAAE;4BACvB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;4BACtB,kBAAkB,EAAE,0BAA0B,OAAO,CAAC,gBAAgB,EAAE;yBACzE;wBACD,MAAM,EAAE;4BACN,WAAW,EAAE,0BAA0B;4BACvC,UAAU,EAAE,IAAI;4BAChB,SAAS,EAAE,0BAA0B;yBACtC;wBACD,SAAS,EAAE,OAAO,CAAC,IAAI;qBACxB;oBACD,aAAa,EAAE,0DAA+C;iBAC/D;gBACD,IAAI,EAAE;oBACJ,eAAe,EAAE,kDAAuC;oBACxD,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,OAAO,CAAC,gBAAgB;iBAClC;gBACD,UAAU,EAAE;oBACV,aAAa,EAAE,EAAE;oBACjB,WAAW,EAAE,EAAE;oBACf,SAAS,EAAE,EAAE;oBACb,OAAO,EAAE,EAAE;iBACZ;gBACD,YAAY,EAAE;oBACZ,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,CAAC,oBAAoB,CAAC;iBAChC;aACF;SACF;QACD,aAAa,EAAE,kDAAuC;QACtD,SAAS,EAAE;YACT,eAAe,EAAE,CAAC,QAAQ,CAAC;YAC3B,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;SACzB;QACD,KAAK,EAAE,2BAA2B;QAClC,UAAU,EAAE;YACV,aAAa,EAAE,EAAE;YACjB,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,EAAE;SACZ;QACD,QAAQ,EAAE;YACR,iBAAiB,EAAE,EAAE;YACrB,cAAc,EAAE,aAAa;YAC7B,qBAAqB,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YACjD,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,gBAAgB,EAAE,CAAC,4BAA4B,CAAC;SACjD;QACD,IAAI,EAAE;YACJ,0BAA0B,EAAE,2CAA2C;YACvE,SAAS,EAAE,6BAA6B;SACzC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BR,CAAC;AACF,CAAC;AAED,SAAgB,qCAAqC,CACnD,OAA2C;IAE3C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAChD,OAAO;QACL,cAAc,EAAE,oBAAoB,CAClC,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,iBAAiB,CAC1B;QACD,KAAK,EAAE;YACL,CAAC,oCAA4B,CAAC,EAAE,aAAa,CAC3C,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,iBAAiB,CAC1B;YACD,CAAC,6CAAqC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CACxD,QAAQ,EACR,IAAI,EACJ,CAAC,CACF,IAAI;YACL,CAAC,+CAAuC,CAAC,EAAE,uBAAuB,EAAE;SACrE;QACD,WAAW,EAAE,8CAAsC;KACpD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { DeploymentProfile } from '../../repository-policy/index.js';
2
+ export declare const THIN_ECR_INSPECTOR_WORKFLOW_PATH: ".github/workflows/ecr-inspector-evidence.yml";
3
+ interface EcrInspectorWorkflowOptions {
4
+ actionPins: {
5
+ checkout: string;
6
+ configureAwsCredentials: string;
7
+ downloadArtifact: string;
8
+ pnpmSetup: string;
9
+ setupNode: string;
10
+ uploadArtifact: string;
11
+ };
12
+ deploymentProfile: DeploymentProfile;
13
+ name: string;
14
+ nodeVersion: string;
15
+ }
16
+ /** Render the postdeploy scanner against the thin lifecycle receipt artifact. */
17
+ export declare function renderThinEcrInspectorWorkflow(options: EcrInspectorWorkflowOptions): Readonly<Record<typeof THIN_ECR_INSPECTOR_WORKFLOW_PATH, string>>;
18
+ export {};
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.THIN_ECR_INSPECTOR_WORKFLOW_PATH = void 0;
4
+ exports.renderThinEcrInspectorWorkflow = renderThinEcrInspectorWorkflow;
5
+ exports.THIN_ECR_INSPECTOR_WORKFLOW_PATH = '.github/workflows/ecr-inspector-evidence.yml';
6
+ /** Render the postdeploy scanner against the thin lifecycle receipt artifact. */
7
+ function renderThinEcrInspectorWorkflow(options) {
8
+ const { actionPins, deploymentProfile, name, nodeVersion } = options;
9
+ const stageChoices = deploymentProfile === 'starter' ? 'production' : 'staging, production';
10
+ const stageBranchCases = deploymentProfile === 'starter'
11
+ ? 'production:main'
12
+ : 'staging:develop|production:main';
13
+ return {
14
+ [exports.THIN_ECR_INSPECTOR_WORKFLOW_PATH]: `name: ECR Inspector evidence
15
+
16
+ on:
17
+ workflow_dispatch:
18
+ inputs:
19
+ stage:
20
+ description: Exact deployed container stage
21
+ required: true
22
+ type: choice
23
+ options: [${stageChoices}]
24
+ deployment_commit:
25
+ description: Exact successful Deploy workflow commit
26
+ required: true
27
+ type: string
28
+ deploy_run_id:
29
+ description: Exact successful Deploy workflow run ID
30
+ required: true
31
+ type: string
32
+ deployment_receipt_artifact_name:
33
+ description: Exact deployment-receipt artifact from that run
34
+ required: true
35
+ type: string
36
+ slice:
37
+ description: Exact registered Product Slice
38
+ required: true
39
+ type: string
40
+ artifact_id:
41
+ description: Exact OCI artifact ID from operations/release.json
42
+ required: true
43
+ type: string
44
+ task_definition_family:
45
+ description: Exact deployed ECS task-definition family
46
+ required: true
47
+ type: string
48
+ deployment_kind:
49
+ description: Exact deployed ECS authority kind
50
+ required: true
51
+ type: choice
52
+ options: [service, task]
53
+ cluster_arn:
54
+ description: Exact ECS cluster ARN
55
+ required: true
56
+ type: string
57
+ deployment_arn:
58
+ description: Exact ECS service ARN or task ARN
59
+ required: true
60
+ type: string
61
+
62
+ concurrency:
63
+ group: ecr-inspector-\${{ inputs.stage }}-\${{ inputs.slice }}-\${{ inputs.artifact_id }}
64
+ cancel-in-progress: false
65
+
66
+ permissions:
67
+ contents: read
68
+
69
+ jobs:
70
+ collect:
71
+ name: exact deployed OCI and Inspector evidence
72
+ runs-on: ubuntu-latest
73
+ environment: ecr-inspector-\${{ inputs.stage }}
74
+ permissions:
75
+ actions: read
76
+ contents: read
77
+ id-token: write
78
+ env:
79
+ AWS_EVIDENCE_ROLE_ARN: \${{ secrets.AWS_ECR_INSPECTOR_EVIDENCE_ROLE_ARN }}
80
+ AWS_EXPECTED_ACCOUNT_ID: \${{ vars.AWS_EXPECTED_ACCOUNT_ID }}
81
+ AWS_REGION: \${{ vars.AWS_REGION }}
82
+ EBK_ARTIFACT_ID: \${{ inputs.artifact_id }}
83
+ EBK_CLUSTER_ARN: \${{ inputs.cluster_arn }}
84
+ EBK_DEPLOYMENT_ARN: \${{ inputs.deployment_arn }}
85
+ EBK_DEPLOYMENT_COMMIT: \${{ inputs.deployment_commit }}
86
+ EBK_DEPLOYMENT_KIND: \${{ inputs.deployment_kind }}
87
+ EBK_DEPLOYMENT_RECEIPT_ARTIFACT_NAME: \${{ inputs.deployment_receipt_artifact_name }}
88
+ EBK_DEPLOY_RUN_ID: \${{ inputs.deploy_run_id }}
89
+ EBK_SLICE: \${{ inputs.slice }}
90
+ EBK_STAGE: \${{ inputs.stage }}
91
+ EBK_TASK_DEFINITION_FAMILY: \${{ inputs.task_definition_family }}
92
+ GH_REPO: \${{ github.repository }}
93
+ GH_TOKEN: \${{ github.token }}
94
+ steps:
95
+ - name: Validate exact postdeploy evidence authority
96
+ run: |
97
+ set -euo pipefail
98
+ case "$EBK_DEPLOYMENT_COMMIT" in ''|*[!0-9a-f]*) exit 1 ;; esac
99
+ { [ "\${#EBK_DEPLOYMENT_COMMIT}" -eq 40 ] || [ "\${#EBK_DEPLOYMENT_COMMIT}" -eq 64 ]; } || exit 1
100
+ case "$EBK_DEPLOY_RUN_ID" in ''|0|*[!0-9]*) exit 1 ;; esac
101
+ case "$EBK_SLICE" in ''|-*|*-|*[!a-z0-9-]*) exit 1 ;; esac
102
+ expected_branch=develop
103
+ if [ "$EBK_STAGE" = production ]; then expected_branch=main; fi
104
+ case "$EBK_STAGE:$expected_branch" in ${stageBranchCases}) ;;
105
+ *) echo 'ECR evidence stage is inactive for this deployment profile'; exit 1 ;;
106
+ esac
107
+ prefix="deployment-receipt-$EBK_STAGE-$EBK_DEPLOY_RUN_ID-"
108
+ case "$EBK_DEPLOYMENT_RECEIPT_ARTIFACT_NAME" in
109
+ "$prefix"*) attempt="\${EBK_DEPLOYMENT_RECEIPT_ARTIFACT_NAME#"$prefix"}" ;;
110
+ *) echo 'Deployment receipt artifact does not bind the exact Deploy run'; exit 1 ;;
111
+ esac
112
+ case "$attempt" in ''|0*|*[!0-9]*) exit 1 ;; esac
113
+ echo "EBK_DEPLOY_RUN_ATTEMPT=$attempt" >> "$GITHUB_ENV"
114
+ run="$(gh api "/repos/$GH_REPO/actions/runs/$EBK_DEPLOY_RUN_ID")"
115
+ [ "$(printf '%s' "$run" | jq -r .conclusion)" = success ] &&
116
+ [ "$(printf '%s' "$run" | jq -r .run_attempt)" = "$attempt" ] &&
117
+ [ "$(printf '%s' "$run" | jq -r .head_sha)" = "$EBK_DEPLOYMENT_COMMIT" ] &&
118
+ [ "$(printf '%s' "$run" | jq -r .head_branch)" = "$expected_branch" ] &&
119
+ [ "$(printf '%s' "$run" | jq -r .path)" = .github/workflows/deploy.yml ] || {
120
+ echo 'Deploy run is not the exact successful protected source authority'; exit 1;
121
+ }
122
+ artifacts="$(gh api "/repos/$GH_REPO/actions/runs/$EBK_DEPLOY_RUN_ID/artifacts?per_page=100")"
123
+ count="$(printf '%s' "$artifacts" | jq --arg name "$EBK_DEPLOYMENT_RECEIPT_ARTIFACT_NAME" \
124
+ '[.artifacts[] | select(.name == $name and .expired == false)] | length')"
125
+ [ "$count" = 1 ] || { echo 'Exact unexpired deployment receipt is absent or ambiguous'; exit 1; }
126
+ - uses: ${actionPins.checkout}
127
+ with:
128
+ fetch-depth: 0
129
+ persist-credentials: false
130
+ ref: \${{ inputs.deployment_commit }}
131
+ - name: Restore exact deployment receipt and release binding
132
+ uses: ${actionPins.downloadArtifact}
133
+ with:
134
+ github-token: \${{ github.token }}
135
+ name: \${{ inputs.deployment_receipt_artifact_name }}
136
+ path: .
137
+ run-id: \${{ inputs.deploy_run_id }}
138
+ - id: candidate
139
+ name: Verify exact release-candidate artifact provenance
140
+ run: |
141
+ set -euo pipefail
142
+ binding=.ebk/evidence/deployment/postdeploy-supply-chain.json
143
+ test -f "$binding" || { echo 'Postdeploy release-candidate binding is absent'; exit 1; }
144
+ artifact_id="$(jq -r '.releaseCandidateArtifactId // empty' "$binding")"
145
+ artifact_digest="$(jq -r '.releaseCandidateArtifactDigest // empty' "$binding")"
146
+ candidate_source="$(jq -r '.releaseSourceCommit // empty' "$binding")"
147
+ producer_attempt="$(jq -r '.releaseCandidateProducerRunAttempt // empty' "$binding")"
148
+ producer_run_id="$(jq -r '.releaseCandidateProducerRunId // empty' "$binding")"
149
+ profile="$(jq -r '.profile // empty' "$binding")"
150
+ case "$artifact_id:$producer_attempt:$producer_run_id" in
151
+ *[!0-9:]*|:*|*:|*::*|0*:*|*:0*:*|*:0*) echo 'Candidate artifact provenance is malformed'; exit 1 ;;
152
+ esac
153
+ printf '%s' "$artifact_digest" | grep -Eq '^sha256:[0-9a-f]{64}$' || {
154
+ echo 'Candidate artifact digest is malformed'; exit 1;
155
+ }
156
+ case "$candidate_source" in ''|*[!0-9a-f]*) exit 1 ;; esac
157
+ { [ "\${#candidate_source}" -eq 40 ] || [ "\${#candidate_source}" -eq 64 ]; } || exit 1
158
+ expected_candidate_branch=develop
159
+ case "$profile:$EBK_STAGE" in
160
+ starter:production) expected_candidate_branch=main ;;
161
+ production-isolated:staging|production-isolated:production|fully-isolated:staging|fully-isolated:production) ;;
162
+ *) echo 'Candidate profile and protected ECR stage disagree'; exit 1 ;;
163
+ esac
164
+ artifact="$(gh api "/repos/$GH_REPO/actions/artifacts/$artifact_id")"
165
+ printf '%s' "$artifact" | jq -e \
166
+ --arg digest "$artifact_digest" \
167
+ --arg id "$artifact_id" \
168
+ --arg name "release-candidate-$candidate_source" \
169
+ --arg run "$producer_run_id" \
170
+ '(.id | tostring) == $id and .name == $name and .expired == false and .digest == $digest and (.workflow_run.id | tostring) == $run' \
171
+ >/dev/null || { echo 'Candidate artifact differs from the exact producer'; exit 1; }
172
+ producer="$(gh api "/repos/$GH_REPO/actions/runs/$producer_run_id")"
173
+ printf '%s' "$producer" | jq -e \
174
+ --arg attempt "$producer_attempt" \
175
+ --arg branch "$expected_candidate_branch" \
176
+ --arg run "$producer_run_id" \
177
+ --arg source "$candidate_source" \
178
+ '(.id | tostring) == $run and (.run_attempt | tostring) == $attempt and .head_sha == $source and .head_branch == $branch and .conclusion == "success" and .event == "push" and .path == ".github/workflows/ci.yml"' \
179
+ >/dev/null || { echo 'Candidate producer is not the exact successful protected CI run'; exit 1; }
180
+ echo "artifact_id=$artifact_id" >> "$GITHUB_OUTPUT"
181
+ echo "producer_run_id=$producer_run_id" >> "$GITHUB_OUTPUT"
182
+ echo "candidate_source=$candidate_source" >> "$GITHUB_OUTPUT"
183
+ - name: Require fresh original candidate destination
184
+ run: |
185
+ set -euo pipefail
186
+ test ! -e .ebk/evidence/ecr-original-release-candidate || {
187
+ echo 'Original candidate destination already exists'; exit 1;
188
+ }
189
+ - name: Download exact original release candidate
190
+ uses: ${actionPins.downloadArtifact}
191
+ with:
192
+ artifact-ids: \${{ steps.candidate.outputs.artifact_id }}
193
+ github-token: \${{ github.token }}
194
+ path: .ebk/evidence/ecr-original-release-candidate
195
+ run-id: \${{ steps.candidate.outputs.producer_run_id }}
196
+ - name: Verify downloaded release candidate identity
197
+ env:
198
+ EBK_CANDIDATE_SOURCE: \${{ steps.candidate.outputs.candidate_source }}
199
+ EBK_PRODUCER_RUN_ID: \${{ steps.candidate.outputs.producer_run_id }}
200
+ run: |
201
+ set -euo pipefail
202
+ candidate=.ebk/evidence/ecr-original-release-candidate/packages/$EBK_SLICE/candidate.json
203
+ test -f "$candidate" || { echo 'Exact Slice candidate is absent'; exit 1; }
204
+ jq -e \
205
+ --arg slice "$EBK_SLICE" \
206
+ --arg source "$EBK_CANDIDATE_SOURCE" \
207
+ --arg run "$EBK_PRODUCER_RUN_ID" \
208
+ '.kind == "ebk-release-candidate" and .schemaVersion == 1 and .slice == $slice and .sourceCommit == $source and (.provenance.runId | tostring) == $run' \
209
+ "$candidate" >/dev/null || { echo 'Downloaded candidate identity disagrees with its immutable artifact'; exit 1; }
210
+ - uses: ${actionPins.pnpmSetup}
211
+ - uses: ${actionPins.setupNode}
212
+ with:
213
+ node-version: ${nodeVersion}
214
+ cache: pnpm
215
+ - run: pnpm install --frozen-lockfile --ignore-scripts --ignore-pnpmfile
216
+ - name: Verify managed workspace integrity before AWS authority
217
+ run: pnpm nx run ${name}:workspace-health
218
+ - name: Validate read-only evidence role configuration
219
+ run: |
220
+ set -euo pipefail
221
+ test -n "$AWS_EVIDENCE_ROLE_ARN" && test -n "$AWS_EXPECTED_ACCOUNT_ID" && test -n "$AWS_REGION"
222
+ case "$AWS_EVIDENCE_ROLE_ARN" in
223
+ arn:aws:iam::$AWS_EXPECTED_ACCOUNT_ID:role/*) ;;
224
+ *) echo 'ECR evidence role does not belong to the expected account'; exit 1 ;;
225
+ esac
226
+ - uses: ${actionPins.configureAwsCredentials}
227
+ with:
228
+ role-to-assume: \${{ secrets.AWS_ECR_INSPECTOR_EVIDENCE_ROLE_ARN }}
229
+ role-session-name: ebk-ecr-inspector-\${{ github.run_id }}-\${{ github.run_attempt }}
230
+ aws-region: \${{ vars.AWS_REGION }}
231
+ - name: Collect exact deployed OCI and Inspector evidence
232
+ env:
233
+ ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
234
+ ACTIONS_ID_TOKEN_REQUEST_URL: ''
235
+ run: |
236
+ set -euo pipefail
237
+ [ "$(aws sts get-caller-identity --query Account --output text)" = "$AWS_EXPECTED_ACCOUNT_ID" ]
238
+ slice_root="packages/$EBK_SLICE"
239
+ test -d "$slice_root" || { echo 'Requested Product Slice is absent'; exit 1; }
240
+ input="$slice_root/.ebk/evidence/ecr-inspector-input.json"
241
+ EBK_COLLECTOR_INPUT="$input" node -e '
242
+ const { mkdirSync, writeFileSync } = require("node:fs");
243
+ const { dirname } = require("node:path");
244
+ const deployment = process.env.EBK_DEPLOYMENT_KIND === "service"
245
+ ? { clusterArn: process.env.EBK_CLUSTER_ARN, kind: "service", serviceArn: process.env.EBK_DEPLOYMENT_ARN }
246
+ : { clusterArn: process.env.EBK_CLUSTER_ARN, kind: "task", taskArn: process.env.EBK_DEPLOYMENT_ARN };
247
+ const record = {
248
+ accountId: process.env.AWS_EXPECTED_ACCOUNT_ID,
249
+ artifactId: process.env.EBK_ARTIFACT_ID,
250
+ deployment,
251
+ deployRunAttempt: process.env.EBK_DEPLOY_RUN_ATTEMPT,
252
+ deployRunId: process.env.EBK_DEPLOY_RUN_ID,
253
+ deploymentReceiptPath: "../../.ebk/evidence/deployment/latest.json",
254
+ outputDirectory: ".ebk/evidence/supply-chain/ecr-scans",
255
+ postdeployBindingPath: "../../.ebk/evidence/deployment/postdeploy-supply-chain.json",
256
+ region: process.env.AWS_REGION,
257
+ releaseCandidatePath: "../../.ebk/evidence/ecr-original-release-candidate/packages/" + process.env.EBK_SLICE + "/candidate.json",
258
+ schemaVersion: 1,
259
+ stage: process.env.EBK_STAGE,
260
+ taskDefinitionFamily: process.env.EBK_TASK_DEFINITION_FAMILY,
261
+ };
262
+ mkdirSync(dirname(process.env.EBK_COLLECTOR_INPUT), { recursive: true, mode: 0o700 });
263
+ writeFileSync(process.env.EBK_COLLECTOR_INPUT, JSON.stringify(record, null, 2) + "\\n", { flag: "wx", mode: 0o600 });
264
+ '
265
+ export EBK_ECR_SCAN_INPUT_PATH=.ebk/evidence/ecr-inspector-input.json
266
+ pnpm nx run "$EBK_SLICE:ecr-inspector-collect"
267
+ - name: Clear current ECR evidence authority
268
+ if: always()
269
+ env:
270
+ ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
271
+ ACTIONS_ID_TOKEN_REQUEST_URL: ''
272
+ run: |
273
+ unset AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN AWS_SECURITY_TOKEN
274
+ echo 'AWS_ACCESS_KEY_ID=' >> "$GITHUB_ENV"
275
+ echo 'AWS_SECRET_ACCESS_KEY=' >> "$GITHUB_ENV"
276
+ echo 'AWS_SESSION_TOKEN=' >> "$GITHUB_ENV"
277
+ echo 'AWS_SECURITY_TOKEN=' >> "$GITHUB_ENV"
278
+ - name: Retain exact deployed OCI and Inspector evidence
279
+ if: always()
280
+ uses: ${actionPins.uploadArtifact}
281
+ env:
282
+ ACTIONS_ID_TOKEN_REQUEST_TOKEN: ''
283
+ ACTIONS_ID_TOKEN_REQUEST_URL: ''
284
+ AWS_ACCESS_KEY_ID: ''
285
+ AWS_SECRET_ACCESS_KEY: ''
286
+ AWS_SESSION_TOKEN: ''
287
+ with:
288
+ name: ecr-inspector-\${{ inputs.stage }}-\${{ inputs.slice }}-\${{ github.run_id }}-\${{ github.run_attempt }}
289
+ if-no-files-found: error
290
+ include-hidden-files: true
291
+ retention-days: 90
292
+ path: |
293
+ packages/\${{ inputs.slice }}/.ebk/evidence/ecr-inspector-input.json
294
+ packages/\${{ inputs.slice }}/.ebk/evidence/supply-chain/ecr-scans/**
295
+ `,
296
+ };
297
+ }
298
+ //# sourceMappingURL=workspace-files-ecr-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-files-ecr-inspector.js","sourceRoot":"","sources":["../../../../../../packages/nx/src/generators/preset/workspace-files-ecr-inspector.ts"],"names":[],"mappings":";;;AAoBA,wEAsSC;AAxTY,QAAA,gCAAgC,GAC3C,8CAAuD,CAAC;AAgB1D,iFAAiF;AACjF,SAAgB,8BAA8B,CAC5C,OAAoC;IAEpC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IACrE,MAAM,YAAY,GAChB,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC;IACzE,MAAM,gBAAgB,GACpB,iBAAiB,KAAK,SAAS;QAC7B,CAAC,CAAC,iBAAiB;QACnB,CAAC,CAAC,iCAAiC,CAAC;IACxC,OAAO;QACL,CAAC,wCAAgC,CAAC,EAAE;;;;;;;;;oBASpB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDAiFkB,gBAAgB;;;;;;;;;;;;;;;;;;;;;;gBAsBlD,UAAU,CAAC,QAAQ;;;;;;gBAMnB,UAAU,CAAC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA0D3B,UAAU,CAAC,gBAAgB;;;;;;;;;;;;;;;;;;;;gBAoB3B,UAAU,CAAC,SAAS;gBACpB,UAAU,CAAC,SAAS;;0BAEV,WAAW;;;;2BAIV,IAAI;;;;;;;;;gBASf,UAAU,CAAC,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAsDlC,UAAU,CAAC,cAAc;;;;;;;;;;;;;;;CAexC;KACE,CAAC;AACJ,CAAC"}
@@ -55,12 +55,12 @@ export declare function validateProtectedAggregateCountSourceAuthority(input: Pr
55
55
  artifactName: string;
56
56
  runAttempt: string;
57
57
  }>;
58
- export declare function renderProtectedAggregateCountWorkflow(): Readonly<Record<typeof PROTECTED_AGGREGATE_COUNT_WORKFLOW_PATH, string>>;
58
+ export declare function renderProtectedAggregateCountWorkflow(rehearsalStage?: 'development' | 'staging'): Readonly<Record<typeof PROTECTED_AGGREGATE_COUNT_WORKFLOW_PATH, string>>;
59
59
  /**
60
60
  * Treats caller-supplied run IDs and artifact names only as selectors. The
61
61
  * selected producer runs and artifacts must independently match the fixed
62
62
  * protected workflow contracts before AWS authority is introduced.
63
63
  */
64
64
  export declare function validateProtectedPerformanceCostSourceAuthority(input: ProtectedPerformanceCostSourceAuthority): void;
65
- export declare function renderProtectedPerformanceCostWorkflow(): Readonly<Record<typeof PROTECTED_PERFORMANCE_COST_WORKFLOW_PATH, string>>;
65
+ export declare function renderProtectedPerformanceCostWorkflow(rehearsalStage?: 'development' | 'staging'): Readonly<Record<typeof PROTECTED_PERFORMANCE_COST_WORKFLOW_PATH, string>>;
66
66
  export {};
@@ -20,7 +20,7 @@ function validateProtectedAggregateCountSourceAuthority(input) {
20
20
  const refuse = (detail) => {
21
21
  throw new Error(`Protected aggregate-count source authority is invalid: ${detail}.`);
22
22
  };
23
- const branch = input.stage === 'staging'
23
+ const branch = input.stage === 'development' || input.stage === 'staging'
24
24
  ? 'develop'
25
25
  : input.stage === 'production'
26
26
  ? 'main'
@@ -61,7 +61,7 @@ function validateProtectedAggregateCountSourceAuthority(input) {
61
61
  }
62
62
  return Object.freeze({ artifactName, runAttempt });
63
63
  }
64
- function renderProtectedAggregateCountWorkflow() {
64
+ function renderProtectedAggregateCountWorkflow(rehearsalStage = 'staging') {
65
65
  const checkout = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.checkout);
66
66
  const configureAws = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.configureAwsCredentials);
67
67
  const downloadArtifact = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.downloadArtifact);
@@ -79,7 +79,7 @@ on:
79
79
  description: Exact protected aggregate cohort stage
80
80
  required: true
81
81
  type: choice
82
- options: [staging, production]
82
+ options: [${rehearsalStage}, production]
83
83
  project:
84
84
  description: Exact Product Slice project
85
85
  required: true
@@ -137,7 +137,7 @@ jobs:
137
137
  run: |
138
138
  set -euo pipefail
139
139
  case "$EBK_STAGE:$EBK_PROTECTED_REF" in
140
- staging:refs/heads/develop|production:refs/heads/main) ;;
140
+ ${rehearsalStage}:refs/heads/develop|production:refs/heads/main) ;;
141
141
  *) echo 'Aggregate stage does not match its protected branch'; exit 1 ;;
142
142
  esac
143
143
  case "$EBK_PROJECT" in
@@ -334,7 +334,7 @@ function validateProtectedPerformanceCostSourceAuthority(input) {
334
334
  const refuse = (detail) => {
335
335
  throw new Error(`Protected cost source authority is invalid: ${detail}.`);
336
336
  };
337
- const branch = input.stage === 'staging'
337
+ const branch = input.stage === 'development' || input.stage === 'staging'
338
338
  ? 'develop'
339
339
  : input.stage === 'production'
340
340
  ? 'main'
@@ -399,7 +399,7 @@ function validateProtectedPerformanceCostSourceAuthority(input) {
399
399
  validateArtifact(input.aggregateArtifacts, input.aggregateArtifactTotal, input.aggregateArtifactName, expectedAggregateName, 'aggregate-count');
400
400
  validateArtifact(input.releaseArtifacts, input.releaseArtifactTotal, input.releaseArtifactName, expectedReleaseName, 'release');
401
401
  }
402
- function renderProtectedPerformanceCostWorkflow() {
402
+ function renderProtectedPerformanceCostWorkflow(rehearsalStage = 'staging') {
403
403
  const checkout = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.checkout);
404
404
  const configureAws = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.configureAwsCredentials);
405
405
  const downloadArtifact = (0, index_js_1.pinnedAction)(index_js_1.GITHUB_ACTION_PINS.downloadArtifact);
@@ -417,7 +417,7 @@ on:
417
417
  description: Exact protected billing cohort stage
418
418
  required: true
419
419
  type: choice
420
- options: [staging, production]
420
+ options: [${rehearsalStage}, production]
421
421
  project:
422
422
  description: Exact Product Slice project
423
423
  required: true
@@ -511,7 +511,7 @@ jobs:
511
511
  run: |
512
512
  set -euo pipefail
513
513
  case "$EBK_STAGE:$EBK_PROTECTED_REF" in
514
- staging:refs/heads/develop|production:refs/heads/main) ;;
514
+ ${rehearsalStage}:refs/heads/develop|production:refs/heads/main) ;;
515
515
  *) echo 'Cost collection stage does not match its protected branch'; exit 1 ;;
516
516
  esac
517
517
  case "$EBK_PROJECT" in