agentic-dev 0.2.11 → 0.2.13

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 (276) hide show
  1. package/README.md +72 -54
  2. package/bin/agentic-dev.mjs +162 -11
  3. package/lib/github.mjs +246 -0
  4. package/lib/orchestration-assets.mjs +249 -0
  5. package/lib/scaffold.mjs +89 -0
  6. package/package.json +8 -19
  7. package/.dockerignore +0 -8
  8. package/.env.example +0 -50
  9. package/.gitignore +0 -16
  10. package/AGENTS.md +0 -86
  11. package/SDD_SKILL.md +0 -589
  12. package/compose.yml +0 -206
  13. package/infra/compose/.env.dev.example +0 -28
  14. package/infra/compose/.env.prod.example +0 -29
  15. package/infra/compose/README.md +0 -35
  16. package/infra/compose/dev.yml +0 -125
  17. package/infra/compose/prod.yml +0 -126
  18. package/infra/terraform/README.md +0 -34
  19. package/infra/terraform/aws/data/.terraform.lock.hcl +0 -25
  20. package/infra/terraform/aws/data/README.md +0 -18
  21. package/infra/terraform/aws/data/main.tf +0 -147
  22. package/infra/terraform/aws/data/outputs.tf +0 -14
  23. package/infra/terraform/aws/data/variables.tf +0 -57
  24. package/infra/terraform/aws/data/versions.tf +0 -10
  25. package/infra/terraform/aws/domain/.terraform.lock.hcl +0 -25
  26. package/infra/terraform/aws/domain/README.md +0 -20
  27. package/infra/terraform/aws/domain/env/dev.tfvars.example +0 -6
  28. package/infra/terraform/aws/domain/env/prod.tfvars.example +0 -7
  29. package/infra/terraform/aws/domain/main.tf +0 -149
  30. package/infra/terraform/aws/domain/outputs.tf +0 -29
  31. package/infra/terraform/aws/domain/variables.tf +0 -58
  32. package/infra/terraform/aws/domain/versions.tf +0 -10
  33. package/infra/terraform/openstack/README.md +0 -38
  34. package/infra/terraform/openstack/dev/.terraform.lock.hcl +0 -24
  35. package/infra/terraform/openstack/dev/README.md +0 -18
  36. package/infra/terraform/openstack/dev/main.tf +0 -49
  37. package/infra/terraform/openstack/dev/providers.tf +0 -15
  38. package/infra/terraform/openstack/dev/terraform.tfvars.example +0 -54
  39. package/infra/terraform/openstack/dev/variables.tf +0 -210
  40. package/infra/terraform/openstack/dev/versions.tf +0 -10
  41. package/infra/terraform/openstack/modules/environment_host/main.tf +0 -143
  42. package/infra/terraform/openstack/modules/environment_host/outputs.tf +0 -25
  43. package/infra/terraform/openstack/modules/environment_host/templates/docker-host-user-data.sh.tftpl +0 -40
  44. package/infra/terraform/openstack/modules/environment_host/variables.tf +0 -145
  45. package/infra/terraform/openstack/modules/environment_host/versions.tf +0 -7
  46. package/infra/terraform/openstack/prod/.terraform.lock.hcl +0 -24
  47. package/infra/terraform/openstack/prod/README.md +0 -18
  48. package/infra/terraform/openstack/prod/main.tf +0 -49
  49. package/infra/terraform/openstack/prod/providers.tf +0 -15
  50. package/infra/terraform/openstack/prod/terraform.tfvars.example +0 -55
  51. package/infra/terraform/openstack/prod/variables.tf +0 -210
  52. package/infra/terraform/openstack/prod/versions.tf +0 -10
  53. package/infra/terraform/openstack/server/.terraform.lock.hcl +0 -45
  54. package/infra/terraform/openstack/server/README.md +0 -47
  55. package/infra/terraform/openstack/server/main.tf +0 -161
  56. package/infra/terraform/openstack/server/outputs.tf +0 -30
  57. package/infra/terraform/openstack/server/providers.tf +0 -30
  58. package/infra/terraform/openstack/server/templates/server-user-data.sh.tftpl +0 -50
  59. package/infra/terraform/openstack/server/variables.tf +0 -233
  60. package/infra/terraform/openstack/server/zz_aspace.auto.tfvars.example.json +0 -29
  61. package/pnpm-workspace.yaml +0 -2
  62. package/scripts/dev/audit_sdd_build_ast.py +0 -277
  63. package/sdd/01_planning/01_feature/INDEX.md +0 -16
  64. package/sdd/01_planning/01_feature/README.md +0 -76
  65. package/sdd/01_planning/01_feature/alerts_feature_spec.md +0 -55
  66. package/sdd/01_planning/01_feature/auth_feature_spec.md +0 -57
  67. package/sdd/01_planning/01_feature/catalog_feature_spec.md +0 -61
  68. package/sdd/01_planning/01_feature/fulfillment_feature_spec.md +0 -58
  69. package/sdd/01_planning/01_feature/health_feature_spec.md +0 -52
  70. package/sdd/01_planning/01_feature/inventory_feature_spec.md +0 -60
  71. package/sdd/01_planning/01_feature/order_feature_spec.md +0 -63
  72. package/sdd/01_planning/01_feature/shipping_feature_spec.md +0 -55
  73. package/sdd/01_planning/01_feature/support_feature_spec.md +0 -53
  74. package/sdd/01_planning/01_feature/user_feature_spec.md +0 -54
  75. package/sdd/01_planning/02_screen/INDEX.md +0 -13
  76. package/sdd/01_planning/02_screen/README.md +0 -41
  77. package/sdd/01_planning/02_screen/admin_screen_spec.pdf +0 -0
  78. package/sdd/01_planning/02_screen/assets/README.md +0 -16
  79. package/sdd/01_planning/02_screen/assets/example/README.md +0 -13
  80. package/sdd/01_planning/02_screen/landing_screen_spec.pdf +0 -0
  81. package/sdd/01_planning/02_screen/mobile_screen_spec.pdf +0 -0
  82. package/sdd/01_planning/02_screen/web_screen_spec.pdf +0 -0
  83. package/sdd/01_planning/03_architecture/INDEX.md +0 -9
  84. package/sdd/01_planning/03_architecture/README.md +0 -25
  85. package/sdd/01_planning/03_architecture/architecture_document_structure.md +0 -77
  86. package/sdd/01_planning/03_architecture/backend/README.md +0 -10
  87. package/sdd/01_planning/03_architecture/frontend/README.md +0 -12
  88. package/sdd/01_planning/03_architecture/infra/README.md +0 -10
  89. package/sdd/01_planning/03_architecture/tech-research/README.md +0 -4
  90. package/sdd/01_planning/03_architecture/templates_system_architecture.md +0 -84
  91. package/sdd/01_planning/04_data/INDEX.md +0 -4
  92. package/sdd/01_planning/04_data/README.md +0 -10
  93. package/sdd/01_planning/04_data/templates_data_modeling.md +0 -119
  94. package/sdd/01_planning/05_api/README.md +0 -12
  95. package/sdd/01_planning/05_api/templates_api_contract.md +0 -90
  96. package/sdd/01_planning/06_iac/README.md +0 -11
  97. package/sdd/01_planning/06_iac/templates_runtime_and_cicd_baseline.md +0 -46
  98. package/sdd/01_planning/07_integration/README.md +0 -11
  99. package/sdd/01_planning/07_integration/templates_frontend_api_integration.md +0 -46
  100. package/sdd/01_planning/08_nonfunctional/README.md +0 -7
  101. package/sdd/01_planning/09_security/README.md +0 -7
  102. package/sdd/01_planning/10_test/README.md +0 -12
  103. package/sdd/01_planning/10_test/templates_test_strategy.md +0 -60
  104. package/sdd/01_planning/INDEX.md +0 -19
  105. package/sdd/01_planning/README.md +0 -17
  106. package/sdd/02_plan/01_feature/README.md +0 -34
  107. package/sdd/02_plan/01_feature/_feature_todo_template.md +0 -29
  108. package/sdd/02_plan/02_screen/INDEX.md +0 -19
  109. package/sdd/02_plan/02_screen/README.md +0 -39
  110. package/sdd/02_plan/02_screen/_screen_todo_template.md +0 -60
  111. package/sdd/02_plan/03_architecture/README.md +0 -23
  112. package/sdd/02_plan/03_architecture/architecture_document_governance.md +0 -40
  113. package/sdd/02_plan/03_architecture/build_ast_runtime_tree_governance.md +0 -53
  114. package/sdd/02_plan/03_architecture/repository_governance.md +0 -39
  115. package/sdd/02_plan/03_architecture/runtime_and_structure_governance.md +0 -38
  116. package/sdd/02_plan/03_architecture/templates-hexagonal-template-architecture.md +0 -9
  117. package/sdd/02_plan/03_architecture/toolchain_governance.md +0 -98
  118. package/sdd/02_plan/04_data/README.md +0 -5
  119. package/sdd/02_plan/05_api/README.md +0 -5
  120. package/sdd/02_plan/06_iac/README.md +0 -11
  121. package/sdd/02_plan/06_iac/dev_runtime_delivery.md +0 -36
  122. package/sdd/02_plan/06_iac/template_runtime_delivery.md +0 -50
  123. package/sdd/02_plan/07_integration/README.md +0 -5
  124. package/sdd/02_plan/07_integration/frontend_live_integration.md +0 -31
  125. package/sdd/02_plan/08_nonfunctional/README.md +0 -5
  126. package/sdd/02_plan/08_nonfunctional/repository_hygiene.md +0 -26
  127. package/sdd/02_plan/09_security/README.md +0 -5
  128. package/sdd/02_plan/10_test/README.md +0 -11
  129. package/sdd/02_plan/10_test/regression_verification.md +0 -39
  130. package/sdd/02_plan/10_test/templates/README.md +0 -8
  131. package/sdd/02_plan/10_test/templates/ui_parity_web_contract.template.yaml +0 -23
  132. package/sdd/02_plan/10_test/verification_strategy.md +0 -43
  133. package/sdd/02_plan/99_generated/from_planning/ui_parity/.gitkeep +0 -1
  134. package/sdd/02_plan/README.md +0 -40
  135. package/sdd/03_build/01_feature/README.md +0 -20
  136. package/sdd/03_build/01_feature/domain/README.md +0 -3
  137. package/sdd/03_build/01_feature/domain/account_and_access.md +0 -20
  138. package/sdd/03_build/01_feature/domain/catalog_and_inventory.md +0 -20
  139. package/sdd/03_build/01_feature/domain/ordering_and_fulfillment.md +0 -21
  140. package/sdd/03_build/01_feature/domain/support_and_observability.md +0 -21
  141. package/sdd/03_build/01_feature/domain_surfaces.md +0 -28
  142. package/sdd/03_build/01_feature/service/README.md +0 -3
  143. package/sdd/03_build/01_feature/service/admin_surface.md +0 -15
  144. package/sdd/03_build/01_feature/service/landing_surface.md +0 -13
  145. package/sdd/03_build/01_feature/service/mobile_surface.md +0 -14
  146. package/sdd/03_build/01_feature/service/web_surface.md +0 -14
  147. package/sdd/03_build/02_screen/README.md +0 -25
  148. package/sdd/03_build/02_screen/_screen_build_template.md +0 -26
  149. package/sdd/03_build/02_screen/admin/README.md +0 -5
  150. package/sdd/03_build/02_screen/landing/README.md +0 -5
  151. package/sdd/03_build/02_screen/mobile/README.md +0 -5
  152. package/sdd/03_build/02_screen/web/README.md +0 -5
  153. package/sdd/03_build/03_architecture/README.md +0 -10
  154. package/sdd/03_build/03_architecture/architecture_document_governance.md +0 -30
  155. package/sdd/03_build/03_architecture/build_ast_runtime_tree_governance.md +0 -24
  156. package/sdd/03_build/03_architecture/repository_governance.md +0 -18
  157. package/sdd/03_build/03_architecture/toolchain_governance.md +0 -36
  158. package/sdd/03_build/06_iac/README.md +0 -3
  159. package/sdd/03_build/06_iac/dev_runtime_delivery.md +0 -10
  160. package/sdd/03_build/06_iac/template_runtime_delivery.md +0 -49
  161. package/sdd/03_build/07_integration/README.md +0 -3
  162. package/sdd/03_build/07_integration/frontend_live_integration.md +0 -11
  163. package/sdd/03_build/08_nonfunctional/README.md +0 -3
  164. package/sdd/03_build/08_nonfunctional/repository_hygiene.md +0 -10
  165. package/sdd/03_build/10_test/README.md +0 -9
  166. package/sdd/03_build/10_test/regression_verification.md +0 -16
  167. package/sdd/03_build/10_test/verification_harness.md +0 -11
  168. package/sdd/03_build/README.md +0 -35
  169. package/sdd/03_verify/01_feature/README.md +0 -5
  170. package/sdd/03_verify/01_feature/domain_verification.md +0 -14
  171. package/sdd/03_verify/01_feature/service_verification.md +0 -22
  172. package/sdd/03_verify/02_screen/README.md +0 -6
  173. package/sdd/03_verify/02_screen/_screen_verify_template.md +0 -20
  174. package/sdd/03_verify/02_screen/admin/README.md +0 -4
  175. package/sdd/03_verify/02_screen/landing/README.md +0 -4
  176. package/sdd/03_verify/02_screen/mobile/README.md +0 -4
  177. package/sdd/03_verify/02_screen/web/README.md +0 -4
  178. package/sdd/03_verify/03_architecture/README.md +0 -10
  179. package/sdd/03_verify/03_architecture/architecture_document_governance.md +0 -15
  180. package/sdd/03_verify/03_architecture/build_ast_runtime_tree_governance.md +0 -28
  181. package/sdd/03_verify/03_architecture/repository_governance.md +0 -16
  182. package/sdd/03_verify/03_architecture/toolchain_governance.md +0 -58
  183. package/sdd/03_verify/06_iac/README.md +0 -3
  184. package/sdd/03_verify/06_iac/dev_runtime_delivery.md +0 -10
  185. package/sdd/03_verify/06_iac/template_runtime_delivery.md +0 -42
  186. package/sdd/03_verify/07_integration/README.md +0 -3
  187. package/sdd/03_verify/07_integration/frontend_live_integration.md +0 -16
  188. package/sdd/03_verify/08_nonfunctional/README.md +0 -3
  189. package/sdd/03_verify/08_nonfunctional/repository_hygiene.md +0 -14
  190. package/sdd/03_verify/10_test/README.md +0 -9
  191. package/sdd/03_verify/10_test/regression_verification.md +0 -16
  192. package/sdd/03_verify/10_test/ui_parity/README.md +0 -4
  193. package/sdd/03_verify/10_test/ui_parity/loop_runs/.gitkeep +0 -0
  194. package/sdd/03_verify/10_test/ui_parity/reference/.gitkeep +0 -0
  195. package/sdd/03_verify/10_test/ui_parity/staged_runs/.gitkeep +0 -0
  196. package/sdd/03_verify/10_test/verification_harness.md +0 -17
  197. package/sdd/03_verify/README.md +0 -22
  198. package/sdd/05_operate/01_runbooks/.gitkeep +0 -1
  199. package/sdd/05_operate/01_runbooks/README.md +0 -4
  200. package/sdd/05_operate/02_delivery_status/README.md +0 -4
  201. package/sdd/05_operate/02_delivery_status/service_status.md +0 -16
  202. package/sdd/05_operate/README.md +0 -12
  203. package/sdd/99_toolchain/01_automation/.gitkeep +0 -1
  204. package/sdd/99_toolchain/01_automation/README.md +0 -76
  205. package/sdd/99_toolchain/01_automation/agentic-dev/analyze_proof_results.py +0 -132
  206. package/sdd/99_toolchain/01_automation/agentic-dev/analyze_route_gap.py +0 -85
  207. package/sdd/99_toolchain/01_automation/agentic-dev/assets/repo-contract.template.json +0 -75
  208. package/sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh +0 -84
  209. package/sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh +0 -33
  210. package/sdd/99_toolchain/01_automation/agentic-dev/init_repo_contract.sh +0 -51
  211. package/sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json +0 -76
  212. package/sdd/99_toolchain/01_automation/agentic-dev/resolve_frontend_target.py +0 -52
  213. package/sdd/99_toolchain/01_automation/agentic-dev/resolve_repo_contract.py +0 -56
  214. package/sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh +0 -100
  215. package/sdd/99_toolchain/01_automation/agentic-dev/run_repo_phase.sh +0 -140
  216. package/sdd/99_toolchain/01_automation/agentic-dev/validate_json_schema.py +0 -39
  217. package/sdd/99_toolchain/01_automation/agentic-parity-harness-design.md +0 -291
  218. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/dashboard.png +0 -0
  219. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/login.png +0 -0
  220. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/queue.png +0 -0
  221. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/support.png +0 -0
  222. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/home.png +0 -0
  223. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/login.png +0 -0
  224. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/workspace.png +0 -0
  225. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/dashboard.png +0 -0
  226. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/fulfillment.png +0 -0
  227. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/login.png +0 -0
  228. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/dashboard.png +0 -0
  229. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/login.png +0 -0
  230. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/orders.png +0 -0
  231. package/sdd/99_toolchain/01_automation/build_asset_recipes.py +0 -10
  232. package/sdd/99_toolchain/01_automation/build_screen_spec_pdf.py +0 -427
  233. package/sdd/99_toolchain/01_automation/capture_screen_assets.mjs +0 -148
  234. package/sdd/99_toolchain/01_automation/harness-layout.md +0 -34
  235. package/sdd/99_toolchain/01_automation/parity-execution-tooling-design.md +0 -319
  236. package/sdd/99_toolchain/01_automation/playwright_exactness_manifest.py +0 -21
  237. package/sdd/99_toolchain/01_automation/run_playwright_exactness.py +0 -87
  238. package/sdd/99_toolchain/01_automation/screen_spec_manifest.py +0 -321
  239. package/sdd/99_toolchain/01_automation/spec_asset_builder.py +0 -274
  240. package/sdd/99_toolchain/01_automation/ui-contract-projection.md +0 -79
  241. package/sdd/99_toolchain/01_automation/ui-parity/README.md +0 -60
  242. package/sdd/99_toolchain/01_automation/ui-parity/cli/extract-reference-pages.mjs +0 -2
  243. package/sdd/99_toolchain/01_automation/ui-parity/cli/materialize-reference-assets.mjs +0 -58
  244. package/sdd/99_toolchain/01_automation/ui-parity/cli/normalize-reference-assets.mjs +0 -2
  245. package/sdd/99_toolchain/01_automation/ui-parity/cli/route-gap-report.mjs +0 -187
  246. package/sdd/99_toolchain/01_automation/ui-parity/cli/run-proof.mjs +0 -50
  247. package/sdd/99_toolchain/01_automation/ui-parity/cli/scaffold-contract.mjs +0 -62
  248. package/sdd/99_toolchain/01_automation/ui-parity/cli/upload-parity1.mjs +0 -2
  249. package/sdd/99_toolchain/01_automation/ui-parity/contracts/collector-metadata.schema.json +0 -33
  250. package/sdd/99_toolchain/01_automation/ui-parity/contracts/proof-result.schema.json +0 -76
  251. package/sdd/99_toolchain/01_automation/ui-parity/contracts/route-gap-report.schema.json +0 -95
  252. package/sdd/99_toolchain/01_automation/ui-parity/core/capture-runner.mjs +0 -55
  253. package/sdd/99_toolchain/01_automation/ui-parity/core/load-adapter.mjs +0 -25
  254. package/sdd/99_toolchain/01_automation/ui-parity/core/load-contract.mjs +0 -81
  255. package/sdd/99_toolchain/01_automation/ui-parity/core/paths.mjs +0 -23
  256. package/sdd/99_toolchain/01_automation/ui-parity/core/proof-runner.mjs +0 -255
  257. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-artifact-layout.md +0 -23
  258. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-proof-interface.md +0 -60
  259. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-route-gap-interface.md +0 -82
  260. package/sdd/99_toolchain/01_automation/ui-parity/runtime/playwright-runtime.mjs +0 -16
  261. package/sdd/99_toolchain/01_automation/ui-parity/runtime/static-runtime.mjs +0 -6
  262. package/sdd/99_toolchain/02_policies/.gitkeep +0 -1
  263. package/sdd/99_toolchain/02_policies/build-ast-governance-policy.md +0 -22
  264. package/sdd/99_toolchain/02_policies/compose-runtime-baseline-policy.md +0 -24
  265. package/sdd/99_toolchain/02_policies/convention-storage-policy.md +0 -26
  266. package/sdd/99_toolchain/02_policies/main-push-before-dev-deploy-policy.md +0 -27
  267. package/sdd/99_toolchain/02_policies/regression-verification-policy.md +0 -22
  268. package/sdd/99_toolchain/03_templates/.gitkeep +0 -1
  269. package/sdd/99_toolchain/03_templates/asset_recipe_manifest.example.py +0 -38
  270. package/sdd/99_toolchain/03_templates/generated_assets/README.md +0 -11
  271. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-lockup.svg +0 -3
  272. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-mark.svg +0 -3
  273. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-wordmark.svg +0 -3
  274. package/sdd/99_toolchain/03_templates/playwright_exactness_manifest.example.py +0 -21
  275. package/sdd/99_toolchain/README.md +0 -23
  276. package/sdd/README.md +0 -21
@@ -1,147 +0,0 @@
1
- provider "aws" {
2
- region = var.aws_region
3
- }
4
-
5
- data "aws_caller_identity" "current" {}
6
-
7
- locals {
8
- phase = lower(var.phase)
9
- bucket_name = trimspace(var.bucket_name) != "" ? trimspace(var.bucket_name) : "${var.bucket_prefix}-${local.phase}-${data.aws_caller_identity.current.account_id}"
10
- }
11
-
12
- resource "aws_dynamodb_table" "app" {
13
- name = var.table_name
14
- billing_mode = "PAY_PER_REQUEST"
15
- hash_key = "PK"
16
- range_key = "SK"
17
-
18
- attribute {
19
- name = "PK"
20
- type = "S"
21
- }
22
-
23
- attribute {
24
- name = "SK"
25
- type = "S"
26
- }
27
-
28
- attribute {
29
- name = "GSI1PK"
30
- type = "S"
31
- }
32
-
33
- attribute {
34
- name = "GSI1SK"
35
- type = "S"
36
- }
37
-
38
- attribute {
39
- name = "GSI2PK"
40
- type = "S"
41
- }
42
-
43
- attribute {
44
- name = "GSI2SK"
45
- type = "S"
46
- }
47
-
48
- global_secondary_index {
49
- name = "GSI1"
50
- hash_key = "GSI1PK"
51
- range_key = "GSI1SK"
52
- projection_type = "ALL"
53
- }
54
-
55
- global_secondary_index {
56
- name = "GSI2"
57
- hash_key = "GSI2PK"
58
- range_key = "GSI2SK"
59
- projection_type = "ALL"
60
- }
61
-
62
- point_in_time_recovery {
63
- enabled = local.phase == "prod"
64
- }
65
-
66
- tags = {
67
- Name = var.table_name
68
- Project = var.project_name
69
- Phase = local.phase
70
- ManagedBy = "terraform"
71
- ManagedVia = "aws"
72
- DataSurface = "dynamodb"
73
- }
74
- }
75
-
76
- resource "aws_s3_bucket" "assets" {
77
- bucket = local.bucket_name
78
- force_destroy = var.force_destroy
79
-
80
- tags = {
81
- Name = local.bucket_name
82
- Project = var.project_name
83
- Phase = local.phase
84
- ManagedBy = "terraform"
85
- ManagedVia = "aws"
86
- DataSurface = "s3"
87
- }
88
- }
89
-
90
- resource "aws_s3_bucket_versioning" "assets" {
91
- bucket = aws_s3_bucket.assets.id
92
-
93
- versioning_configuration {
94
- status = local.phase == "prod" ? "Enabled" : "Suspended"
95
- }
96
- }
97
-
98
- resource "aws_s3_bucket_server_side_encryption_configuration" "assets" {
99
- bucket = aws_s3_bucket.assets.id
100
-
101
- rule {
102
- apply_server_side_encryption_by_default {
103
- sse_algorithm = "AES256"
104
- }
105
- }
106
- }
107
-
108
- resource "aws_s3_bucket_public_access_block" "assets" {
109
- bucket = aws_s3_bucket.assets.id
110
-
111
- block_public_acls = true
112
- ignore_public_acls = true
113
- block_public_policy = var.public_read_enabled ? false : true
114
- restrict_public_buckets = var.public_read_enabled ? false : true
115
- }
116
-
117
- resource "aws_s3_bucket_cors_configuration" "assets" {
118
- bucket = aws_s3_bucket.assets.id
119
-
120
- cors_rule {
121
- allowed_headers = ["*"]
122
- allowed_methods = ["GET", "PUT", "POST", "DELETE"]
123
- allowed_origins = var.cors_allowed_origins
124
- expose_headers = ["ETag"]
125
- max_age_seconds = 3600
126
- }
127
- }
128
-
129
- resource "aws_s3_bucket_policy" "public_read" {
130
- count = var.public_read_enabled ? 1 : 0
131
- bucket = aws_s3_bucket.assets.id
132
-
133
- policy = jsonencode({
134
- Version = "2012-10-17"
135
- Statement = [
136
- {
137
- Sid = "PublicReadGetObject"
138
- Effect = "Allow"
139
- Principal = "*"
140
- Action = ["s3:GetObject"]
141
- Resource = ["${aws_s3_bucket.assets.arn}/*"]
142
- }
143
- ]
144
- })
145
-
146
- depends_on = [aws_s3_bucket_public_access_block.assets]
147
- }
@@ -1,14 +0,0 @@
1
- output "table_name" {
2
- value = aws_dynamodb_table.app.name
3
- description = "Active application DynamoDB table."
4
- }
5
-
6
- output "bucket_name" {
7
- value = aws_s3_bucket.assets.bucket
8
- description = "Active application S3 bucket."
9
- }
10
-
11
- output "bucket_public_url" {
12
- value = "https://s3.${var.aws_region}.amazonaws.com"
13
- description = "Public S3 endpoint base used by the current backend."
14
- }
@@ -1,57 +0,0 @@
1
- variable "aws_region" {
2
- type = string
3
- description = "AWS region."
4
- default = "ap-northeast-2"
5
- }
6
-
7
- variable "phase" {
8
- type = string
9
- description = "Deployment phase."
10
- default = "prod"
11
- }
12
-
13
- variable "table_name" {
14
- type = string
15
- description = "Application DynamoDB table name."
16
- default = "template-service"
17
- }
18
-
19
- variable "project_name" {
20
- type = string
21
- description = "Project tag used across resources."
22
- default = "template-service"
23
- }
24
-
25
- variable "bucket_name" {
26
- type = string
27
- description = "Optional explicit bucket name."
28
- default = ""
29
- }
30
-
31
- variable "bucket_prefix" {
32
- type = string
33
- description = "Bucket prefix used when bucket_name is empty."
34
- default = "template-assets"
35
- }
36
-
37
- variable "cors_allowed_origins" {
38
- type = list(string)
39
- description = "Allowed origins for browser asset access."
40
- default = [
41
- "https://app.example.com",
42
- "https://admin.example.com",
43
- "https://dev.example.com"
44
- ]
45
- }
46
-
47
- variable "public_read_enabled" {
48
- type = bool
49
- description = "Allow public read access for uploaded image objects."
50
- default = true
51
- }
52
-
53
- variable "force_destroy" {
54
- type = bool
55
- description = "Allow bucket destroy with objects."
56
- default = false
57
- }
@@ -1,10 +0,0 @@
1
- terraform {
2
- required_version = ">= 1.6.0"
3
-
4
- required_providers {
5
- aws = {
6
- source = "hashicorp/aws"
7
- version = "~> 5.0"
8
- }
9
- }
10
- }
@@ -1,25 +0,0 @@
1
- # This file is maintained automatically by "terraform init".
2
- # Manual edits may be lost in future updates.
3
-
4
- provider "registry.terraform.io/hashicorp/aws" {
5
- version = "5.100.0"
6
- constraints = "~> 5.0"
7
- hashes = [
8
- "h1:edXOJWE4ORX8Fm+dpVpICzMZJat4AX0VRCAy/xkcOc0=",
9
- "zh:054b8dd49f0549c9a7cc27d159e45327b7b65cf404da5e5a20da154b90b8a644",
10
- "zh:0b97bf8d5e03d15d83cc40b0530a1f84b459354939ba6f135a0086c20ebbe6b2",
11
- "zh:1589a2266af699cbd5d80737a0fe02e54ec9cf2ca54e7e00ac51c7359056f274",
12
- "zh:6330766f1d85f01ae6ea90d1b214b8b74cc8c1badc4696b165b36ddd4cc15f7b",
13
- "zh:7c8c2e30d8e55291b86fcb64bdf6c25489d538688545eb48fd74ad622e5d3862",
14
- "zh:99b1003bd9bd32ee323544da897148f46a527f622dc3971af63ea3e251596342",
15
- "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
16
- "zh:9f8b909d3ec50ade83c8062290378b1ec553edef6a447c56dadc01a99f4eaa93",
17
- "zh:aaef921ff9aabaf8b1869a86d692ebd24fbd4e12c21205034bb679b9caf883a2",
18
- "zh:ac882313207aba00dd5a76dbd572a0ddc818bb9cbf5c9d61b28fe30efaec951e",
19
- "zh:bb64e8aff37becab373a1a0cc1080990785304141af42ed6aa3dd4913b000421",
20
- "zh:dfe495f6621df5540d9c92ad40b8067376350b005c637ea6efac5dc15028add4",
21
- "zh:f0ddf0eaf052766cfe09dea8200a946519f653c384ab4336e2a4a64fdd6310e9",
22
- "zh:f1b7e684f4c7ae1eed272b6de7d2049bb87a0275cb04dbb7cda6636f600699c9",
23
- "zh:ff461571e3f233699bf690db319dfe46aec75e58726636a0d97dd9ac6e32fb70",
24
- ]
25
- }
@@ -1,20 +0,0 @@
1
- # Terraform Domain (template)
2
-
3
- 이 스택은 template repo의 AWS 도메인/엣지 skeleton을 제공한다.
4
- Route53 hosted zone은 `root_domain` 기준으로 조회하고, 서비스 FQDN은 기본적으로 `dev.<root_domain>` 또는 `<root_domain>` 규칙으로 계산한다.
5
-
6
- ## Domain Policy
7
-
8
- - DEV(개발계): `dev.<root_domain>`
9
- - PROD: `<root_domain>`
10
- - clone 후 `root_domain`, `service_fqdn`, `target_ip`는 현재 서비스에 맞게 바로 교체한다.
11
-
12
- ## Manual
13
-
14
- ```bash
15
- terraform -chdir=infra/terraform/aws/domain init
16
- terraform -chdir=infra/terraform/aws/domain plan \
17
- -var "phase=dev" \
18
- -var "root_domain=example.com" \
19
- -var "target_ip=203.0.113.10"
20
- ```
@@ -1,6 +0,0 @@
1
- phase = "dev"
2
- root_domain = "example.com"
3
- aws_region = "ap-northeast-2"
4
- target_ip = "203.0.113.10"
5
- ttl = 60
6
- enabled = true
@@ -1,7 +0,0 @@
1
- phase = "prod"
2
- root_domain = "example.com"
3
- service_fqdn = "app.example.com"
4
- aws_region = "ap-northeast-2"
5
- target_ip = "203.0.113.20"
6
- ttl = 60
7
- enabled = true
@@ -1,149 +0,0 @@
1
- provider "aws" {
2
- region = var.aws_region
3
- }
4
-
5
- provider "aws" {
6
- alias = "us_east_1"
7
- region = "us-east-1"
8
- }
9
-
10
- locals {
11
- phase = lower(var.phase)
12
- root_domain = lower(trimspace(var.root_domain))
13
- service_fqdn = lower(
14
- trimspace(var.service_fqdn) != ""
15
- ? var.service_fqdn
16
- : (local.phase == "prod" ? local.root_domain : "dev.${local.root_domain}")
17
- )
18
- origin_fqdn = "origin.${local.service_fqdn}"
19
- origin_id = replace(local.origin_fqdn, ".", "-")
20
- }
21
-
22
- data "aws_route53_zone" "root" {
23
- name = "${local.root_domain}."
24
- private_zone = false
25
- }
26
-
27
- resource "aws_route53_record" "origin_a" {
28
- count = var.enabled ? 1 : 0
29
- zone_id = data.aws_route53_zone.root.zone_id
30
- name = local.origin_fqdn
31
- type = "A"
32
- ttl = var.ttl
33
- records = [var.target_ip]
34
-
35
- allow_overwrite = true
36
- }
37
-
38
- resource "aws_acm_certificate" "service" {
39
- count = var.enabled && var.cdn_enabled ? 1 : 0
40
- provider = aws.us_east_1
41
- domain_name = local.service_fqdn
42
- validation_method = "DNS"
43
- }
44
-
45
- resource "aws_route53_record" "cert_validation" {
46
- for_each = var.enabled && var.cdn_enabled ? {
47
- for dvo in aws_acm_certificate.service[0].domain_validation_options : dvo.domain_name => {
48
- name = dvo.resource_record_name
49
- record = dvo.resource_record_value
50
- type = dvo.resource_record_type
51
- }
52
- } : {}
53
-
54
- zone_id = data.aws_route53_zone.root.zone_id
55
- name = each.value.name
56
- type = each.value.type
57
- ttl = 60
58
- records = [each.value.record]
59
-
60
- allow_overwrite = true
61
- }
62
-
63
- resource "aws_acm_certificate_validation" "service" {
64
- count = var.enabled && var.cdn_enabled ? 1 : 0
65
- provider = aws.us_east_1
66
- certificate_arn = aws_acm_certificate.service[0].arn
67
- validation_record_fqdns = [for row in aws_route53_record.cert_validation : row.fqdn]
68
- }
69
-
70
- resource "aws_cloudfront_distribution" "service" {
71
- count = var.enabled && var.cdn_enabled ? 1 : 0
72
- enabled = true
73
- is_ipv6_enabled = true
74
- price_class = var.cdn_price_class
75
- comment = "template edge for ${local.service_fqdn}"
76
- aliases = [local.service_fqdn]
77
-
78
- origin {
79
- domain_name = local.origin_fqdn
80
- origin_id = local.origin_id
81
-
82
- custom_origin_config {
83
- http_port = var.origin_port
84
- https_port = 443
85
- origin_protocol_policy = "http-only"
86
- origin_ssl_protocols = ["TLSv1.2"]
87
- }
88
- }
89
-
90
- default_cache_behavior {
91
- target_origin_id = local.origin_id
92
- viewer_protocol_policy = "redirect-to-https"
93
- compress = true
94
- allowed_methods = ["GET", "HEAD", "OPTIONS", "PUT", "POST", "PATCH", "DELETE"]
95
- cached_methods = ["GET", "HEAD", "OPTIONS"]
96
-
97
- forwarded_values {
98
- query_string = true
99
- headers = ["*"]
100
-
101
- cookies {
102
- forward = "all"
103
- }
104
- }
105
- }
106
-
107
- restrictions {
108
- geo_restriction {
109
- restriction_type = "none"
110
- }
111
- }
112
-
113
- viewer_certificate {
114
- acm_certificate_arn = aws_acm_certificate_validation.service[0].certificate_arn
115
- ssl_support_method = "sni-only"
116
- minimum_protocol_version = "TLSv1.2_2021"
117
- }
118
-
119
- depends_on = [
120
- aws_route53_record.origin_a,
121
- aws_acm_certificate_validation.service,
122
- ]
123
- }
124
-
125
- resource "aws_route53_record" "service_alias" {
126
- count = var.enabled && var.cdn_enabled ? 1 : 0
127
- zone_id = data.aws_route53_zone.root.zone_id
128
- name = local.service_fqdn
129
- type = "A"
130
-
131
- alias {
132
- name = aws_cloudfront_distribution.service[0].domain_name
133
- zone_id = aws_cloudfront_distribution.service[0].hosted_zone_id
134
- evaluate_target_health = false
135
- }
136
-
137
- allow_overwrite = true
138
- }
139
-
140
- resource "aws_route53_record" "service_a" {
141
- count = var.enabled && !var.cdn_enabled ? 1 : 0
142
- zone_id = data.aws_route53_zone.root.zone_id
143
- name = local.service_fqdn
144
- type = "A"
145
- ttl = var.ttl
146
- records = [var.target_ip]
147
-
148
- allow_overwrite = true
149
- }
@@ -1,29 +0,0 @@
1
- output "service_fqdn" {
2
- value = local.service_fqdn
3
- description = "Managed public service domain."
4
- }
5
-
6
- output "origin_fqdn" {
7
- value = local.origin_fqdn
8
- description = "Origin DNS name that points to the OpenStack backend."
9
- }
10
-
11
- output "origin_url" {
12
- value = "http://${local.origin_fqdn}:${var.origin_port}"
13
- description = "Origin URL that CloudFront points to."
14
- }
15
-
16
- output "root_domain" {
17
- value = local.root_domain
18
- description = "Resolved root domain."
19
- }
20
-
21
- output "cloudfront_domain_name" {
22
- value = var.cdn_enabled ? aws_cloudfront_distribution.service[0].domain_name : ""
23
- description = "CloudFront distribution domain."
24
- }
25
-
26
- output "cloudfront_distribution_id" {
27
- value = var.cdn_enabled ? aws_cloudfront_distribution.service[0].id : ""
28
- description = "CloudFront distribution id."
29
- }
@@ -1,58 +0,0 @@
1
- variable "phase" {
2
- type = string
3
- description = "Deployment phase."
4
- default = "dev"
5
- }
6
-
7
- variable "root_domain" {
8
- type = string
9
- description = "Hosted zone root domain."
10
- default = "example.com"
11
- }
12
-
13
- variable "service_fqdn" {
14
- type = string
15
- description = "Optional explicit final service domain."
16
- default = ""
17
- }
18
-
19
- variable "aws_region" {
20
- type = string
21
- description = "AWS region for Route53 and general provider calls."
22
- default = "ap-northeast-2"
23
- }
24
-
25
- variable "target_ip" {
26
- type = string
27
- description = "Origin target IPv4."
28
- }
29
-
30
- variable "origin_port" {
31
- type = number
32
- description = "Origin backend port."
33
- default = 8080
34
- }
35
-
36
- variable "ttl" {
37
- type = number
38
- description = "DNS TTL."
39
- default = 60
40
- }
41
-
42
- variable "enabled" {
43
- type = bool
44
- description = "Enable record management."
45
- default = true
46
- }
47
-
48
- variable "cdn_enabled" {
49
- type = bool
50
- description = "Enable CloudFront distribution and alias record."
51
- default = true
52
- }
53
-
54
- variable "cdn_price_class" {
55
- type = string
56
- description = "CloudFront price class."
57
- default = "PriceClass_200"
58
- }
@@ -1,10 +0,0 @@
1
- terraform {
2
- required_version = ">= 1.6.0"
3
-
4
- required_providers {
5
- aws = {
6
- source = "hashicorp/aws"
7
- version = "~> 5.0"
8
- }
9
- }
10
- }
@@ -1,38 +0,0 @@
1
- # OpenStack Terraform
2
-
3
- OpenStack provider는 공용 축으로 두되, canonical compute baseline은 `server/` root를 우선한다.
4
-
5
- 구조:
6
-
7
- - `modules/environment_host`: OpenStack Docker host 공통 module
8
- - `server/`: Aspace/OpenStack backend compute canonical root
9
- - `dev/`: DEV(개발계)용 Terraform root
10
- - `prod/`: PROD용 Terraform root
11
-
12
- 원칙:
13
-
14
- - canonical delivery split에서는 `openstack/server`가 backend compute를 담당하고, `aws/domain`과 `aws/data`가 외곽 surface를 담당한다.
15
- - DEV(개발계)와 PROD는 state를 분리한다.
16
- - compose 자동 기동이 필요하면 각 환경 root의 `compose_env_content`에 대응 환경의 `.env` 전체를 넣는다.
17
- - 네트워크를 공유하려면 `create_network=false`와 `network_id`/`subnet_id`를 사용한다.
18
-
19
- 사용:
20
-
21
- ```bash
22
- cd infra/terraform/openstack/server
23
- cp zz_aspace.auto.tfvars.example.json zz_aspace.auto.tfvars.json
24
- terraform init -backend=false
25
- terraform validate
26
-
27
- cd infra/terraform/openstack/dev
28
- cp terraform.tfvars.example terraform.tfvars
29
- terraform init
30
- terraform validate
31
- terraform plan
32
-
33
- cd ../prod
34
- cp terraform.tfvars.example terraform.tfvars
35
- terraform init
36
- terraform validate
37
- terraform plan
38
- ```
@@ -1,24 +0,0 @@
1
- # This file is maintained automatically by "terraform init".
2
- # Manual edits may be lost in future updates.
3
-
4
- provider "registry.terraform.io/terraform-provider-openstack/openstack" {
5
- version = "2.1.0"
6
- constraints = "~> 2.1"
7
- hashes = [
8
- "h1:2TcmfEzBOGQPALErrXTaL6v+k/WAL40adao4izRYmdw=",
9
- "zh:113661750398bf21c8fe36aade9fb6f5eb82b5bcd3bcd30bd37ac805d83398f4",
10
- "zh:1b3c26347b9cd61e413ee93c2f422cc3278a77f55fd3516eaabb3e2a85f65281",
11
- "zh:1b751bbf1e4152829a643b532fd3f5967a2e89a41fac381257e0b41665be3306",
12
- "zh:1b967bbfd9b344419c0e0df0c3a15fcbd731e91f19a18955a55aace8d9ec039a",
13
- "zh:1bc0fc7c0a21e568db043b654501ce668ba19bf7628d37a7d2aaa512fd6e5aeb",
14
- "zh:425cbf61757d4b503e7bf0f409ea59835ca3afbd2432d56ad552c2e5d234a572",
15
- "zh:67d4f059cb4d73bf6c060313ec32962c4e5bd8dc7be2542a6f2098ab32575cd9",
16
- "zh:7fe841ac5b68a4f52fb3cf45070828f3845de44746679d434e4349f3c23e3ef2",
17
- "zh:ac1ed4c6ef0b6a3410568a05d3f9933d184497f065988503c43da0b2f0786ab2",
18
- "zh:c5c0d14c86fabd9ab6a5d555e6a8d511942665fb5fa948dd452b0d1934068344",
19
- "zh:c9ae5c210192275185d6823566a9421983e8e64c2665a4cae00b92dd0706bd19",
20
- "zh:ee9865ccc053e7f345e532654fb628d1cf1e81cd2e929643c1691bebffcf7b98",
21
- "zh:f3416d2f666095e740522c4964e436470bb9ec17bd53aaae8169ad93297d07bd",
22
- "zh:fbca85457dd49e17168989d64f7cfc4a519d55ef4e00e89cea2859e87ad87f83",
23
- ]
24
- }
@@ -1,18 +0,0 @@
1
- # OpenStack DEV
2
-
3
- DEV(개발계) 전용 Terraform root다.
4
-
5
- 사용:
6
-
7
- ```bash
8
- cd infra/terraform/openstack/dev
9
- cp terraform.tfvars.example terraform.tfvars
10
- terraform init
11
- terraform validate
12
- terraform plan
13
- ```
14
-
15
- 메모:
16
-
17
- - 기본 compose 파일은 `infra/compose/dev.yml`이다.
18
- - cloud-init 자동 기동을 쓰려면 `compose_env_content`에 `infra/compose/.env.dev` 전체를 넣는다.
@@ -1,49 +0,0 @@
1
- module "environment_host" {
2
- source = "../modules/environment_host"
3
-
4
- availability_zone = var.availability_zone
5
- create_network = var.create_network
6
- network_name = var.network_name
7
- subnet_name = var.subnet_name
8
- subnet_cidr = var.subnet_cidr
9
- create_router = var.create_router
10
- router_name = var.router_name
11
- external_network_id = var.external_network_id
12
- network_id = var.network_id
13
- subnet_id = var.subnet_id
14
- service_allowed_cidrs = var.service_allowed_cidrs
15
- ssh_allowed_cidrs = var.ssh_allowed_cidrs
16
- name = var.name
17
- image_name = var.image_name
18
- flavor_name = var.flavor_name
19
- keypair_name = var.keypair_name
20
- assign_floating_ip = var.assign_floating_ip
21
- floating_ip_pool = var.floating_ip_pool
22
- exposed_tcp_ports = var.exposed_tcp_ports
23
- repo_clone_url = var.repo_clone_url
24
- repo_ref = var.repo_ref
25
- compose_file = "infra/compose/dev.yml"
26
- compose_env_filename = ".env.dev"
27
- compose_env_content = var.compose_env_content
28
- deploy_compose_on_boot = var.deploy_compose_on_boot
29
- }
30
-
31
- output "network_id" {
32
- description = "Effective network id used by the DEV(개발계) host"
33
- value = module.environment_host.network_id
34
- }
35
-
36
- output "subnet_id" {
37
- description = "Effective subnet id used by the DEV(개발계) host"
38
- value = module.environment_host.subnet_id
39
- }
40
-
41
- output "router_id" {
42
- description = "Created router id when create_router=true"
43
- value = module.environment_host.router_id
44
- }
45
-
46
- output "instance" {
47
- description = "DEV(개발계) host summary"
48
- value = module.environment_host.instance
49
- }