@polymorphism-tech/morph-spec 4.12.0 → 4.13.0

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 (314) hide show
  1. package/README.md +21 -29
  2. package/bin/morph-spec.js +41 -24
  3. package/bin/task-manager.js +962 -1341
  4. package/bin/validate.js +1 -1
  5. package/claude-plugin.json +1 -1
  6. package/docs/CHEATSHEET.md +10 -11
  7. package/docs/QUICKSTART.md +15 -15
  8. package/framework/CLAUDE.md +5 -2
  9. package/framework/agents/README.md +3 -4
  10. package/framework/agents/ai-agents/ai-system-architect.md +6 -10
  11. package/framework/agents/architecture/seo-growth-hacker.md +166 -326
  12. package/framework/agents/architecture/standards-architect.md +21 -31
  13. package/framework/agents/backend/dotnet-senior.md +160 -86
  14. package/framework/agents/backend/ef-modeler.md +2 -6
  15. package/framework/agents/backend/hangfire-orchestrator.md +8 -9
  16. package/framework/agents/backend/ms-agent-expert.md +1 -1
  17. package/framework/agents/frontend/nextjs-expert.md +198 -133
  18. package/framework/agents/frontend/ui-ux-designer.md +226 -267
  19. package/framework/agents/infrastructure/infra-architect.md +191 -27
  20. package/framework/agents/integrations/clerk-auth.md +19 -26
  21. package/framework/agents/integrations/hangfire-integration.md +1 -4
  22. package/framework/agents.json +215 -1453
  23. package/framework/commands/morph-apply.md +4 -4
  24. package/framework/commands/morph-preflight.md +4 -26
  25. package/framework/commands/morph-proposal.md +19 -19
  26. package/framework/commands/morph-status.md +2 -2
  27. package/framework/commands/morph-troubleshoot.md +6 -13
  28. package/framework/hooks/README.md +1 -6
  29. package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
  30. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
  31. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
  32. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
  33. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
  34. package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
  35. package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
  36. package/framework/hooks/claude-code/statusline.py +4 -5
  37. package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
  38. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
  39. package/framework/hooks/shared/compact-restore.js +28 -5
  40. package/framework/hooks/shared/phase-utils.js +4 -8
  41. package/framework/hooks/shared/state-reader.js +34 -3
  42. package/framework/phases.json +7 -45
  43. package/framework/rules/ai-agents-standards.md +15 -0
  44. package/framework/rules/asaas-standards.md +13 -0
  45. package/framework/rules/clerk-standards.md +13 -0
  46. package/framework/rules/csharp-standards.md +8 -4
  47. package/framework/rules/data-standards.md +18 -0
  48. package/framework/rules/dotnet-templates.md +87 -0
  49. package/framework/rules/frontend-standards.md +13 -13
  50. package/framework/rules/hangfire-standards.md +13 -0
  51. package/framework/rules/infrastructure-standards.md +27 -16
  52. package/framework/rules/morph-workflow.md +73 -13
  53. package/framework/rules/nextjs-standards.md +1 -0
  54. package/framework/rules/nextjs-templates.md +40 -0
  55. package/framework/rules/resend-standards.md +12 -0
  56. package/framework/rules/supabase-standards.md +29 -0
  57. package/framework/skills/README.md +6 -8
  58. package/framework/skills/level-0-meta/mcp-registry.json +21 -99
  59. package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
  60. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
  61. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  62. package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
  63. package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
  64. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
  65. package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
  66. package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
  67. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
  68. package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
  69. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
  70. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
  71. package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
  72. package/framework/skills/level-1-workflows/README.md +1 -1
  73. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
  74. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +58 -124
  75. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
  76. package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
  77. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
  78. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
  79. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
  80. package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
  81. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
  82. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
  83. package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +0 -2
  84. package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
  85. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +57 -77
  86. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  87. package/framework/squad-templates/backend-only.json +6 -6
  88. package/framework/squad-templates/frontend-only.json +17 -8
  89. package/framework/squad-templates/full-stack.json +29 -24
  90. package/framework/standards/STANDARDS.json +1021 -2369
  91. package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
  92. package/framework/standards/backend/dotnet/result-pattern.md +213 -0
  93. package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
  94. package/framework/standards/backend/dotnet/scrutor.md +158 -0
  95. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
  96. package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
  97. package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
  98. package/framework/standards/integration/mcp/mcp-tools.md +91 -77
  99. package/framework/templates/IDE-SNIPPETS.md +2 -6
  100. package/framework/templates/README.md +709 -814
  101. package/framework/templates/REGISTRY.json +223 -762
  102. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
  103. package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
  104. package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
  105. package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
  106. package/framework/templates/code/dotnet/backend/repository.cs +148 -141
  107. package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
  108. package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
  109. package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
  110. package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
  111. package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
  112. package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
  113. package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
  114. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
  115. package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
  116. package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
  117. package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
  118. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
  119. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
  120. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
  121. package/framework/templates/code/dotnet/jobs/job.cs +21 -17
  122. package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
  123. package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
  124. package/framework/templates/code/dotnet/test.cs +192 -106
  125. package/framework/templates/context/ARCHITECTURE.md +89 -0
  126. package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
  127. package/framework/templates/context/CONTEXT.md +180 -181
  128. package/framework/templates/context/design-system.md +1 -5
  129. package/framework/templates/docs/onboarding.md +2 -3
  130. package/framework/templates/docs/proposal.md +171 -182
  131. package/framework/templates/docs/spec.md +1 -3
  132. package/framework/templates/docs/ui-components.md +0 -72
  133. package/framework/templates/examples/design-system-examples.md +4 -4
  134. package/framework/templates/feature/decisions.md +0 -66
  135. package/framework/templates/feature/recap.md +1 -2
  136. package/framework/templates/infrastructure/github/README.md +56 -593
  137. package/framework/templates/integrations/clerk-config.cs +0 -41
  138. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  139. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
  140. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
  141. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
  142. package/framework/templates/project/validate.js +2 -4
  143. package/framework/templates/ui/design-system.css +1 -1
  144. package/framework/workflows/README.md +8 -8
  145. package/framework/workflows/configs/fast-track.json +51 -0
  146. package/framework/workflows/configs/full.json +68 -0
  147. package/framework/workflows/configs/standard.json +7 -3
  148. package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
  149. package/framework/workflows/docs/enforcement-pipeline.md +18 -19
  150. package/framework/workflows/docs/full-morph.md +69 -76
  151. package/framework/workflows/docs/standard.md +49 -44
  152. package/framework/workflows/docs/ui-refresh.md +1 -1
  153. package/package.json +3 -3
  154. package/src/commands/agents/dispatch-agents.js +55 -116
  155. package/src/commands/context/context-refresh.js +79 -0
  156. package/src/commands/phase/phase-reset.js +1 -1
  157. package/src/commands/project/doctor.js +10 -32
  158. package/src/commands/project/init.js +12 -0
  159. package/src/commands/project/status.js +6 -12
  160. package/src/commands/scaffold/scaffold.js +131 -0
  161. package/src/commands/scope/escalate.js +1 -1
  162. package/src/commands/state/advance-phase.js +15 -29
  163. package/src/commands/state/state.js +20 -5
  164. package/src/commands/tasks/task.js +0 -30
  165. package/src/commands/validation/validate-feature.js +3 -10
  166. package/src/core/paths/output-schema.js +12 -13
  167. package/src/core/state/phase-state-machine.js +211 -217
  168. package/src/core/state/state-manager.js +9 -9
  169. package/src/lib/agents/agents-manager.js +2 -2
  170. package/src/lib/agents/output-collector.js +1 -2
  171. package/src/lib/detectors/design-system-detector.js +4 -4
  172. package/src/lib/detectors/index.js +1 -11
  173. package/src/lib/generators/architecture-scanner.js +640 -0
  174. package/src/lib/generators/context-generator.js +3 -3
  175. package/src/lib/generators/design-system-generator.js +508 -587
  176. package/src/lib/generators/index.js +12 -10
  177. package/src/lib/generators/metadata-extractor.js +386 -387
  178. package/src/lib/generators/recap-generator.js +4 -4
  179. package/src/lib/generators/scaffold-generator.js +317 -0
  180. package/src/lib/generators/settings-generator.js +0 -1
  181. package/src/lib/phase-chain/phase-validator.js +64 -42
  182. package/src/lib/stack/stack-profile.js +2 -2
  183. package/src/lib/standards/digest-builder.js +72 -285
  184. package/src/lib/tasks/task-parser.js +11 -5
  185. package/src/lib/validators/architecture/architecture-validator.js +259 -387
  186. package/src/lib/validators/content/content-validator.js +287 -287
  187. package/src/lib/validators/css/css-validator.js +340 -352
  188. package/src/lib/validators/packages/package-validator.js +347 -360
  189. package/src/lib/validators/shared/issue-counter.js +14 -18
  190. package/src/lib/validators/validation-runner.js +3 -19
  191. package/src/scripts/setup-infra.js +1 -1
  192. package/src/utils/agents-installer.js +24 -3
  193. package/src/utils/file-copier.js +1 -0
  194. package/src/utils/hooks-installer.js +11 -19
  195. package/src/utils/skills-installer.js +178 -178
  196. package/framework/agents/architecture/prompt-engineer.md +0 -195
  197. package/framework/agents/backend/api-designer.md +0 -106
  198. package/framework/agents/frontend/blazor-builder.md +0 -229
  199. package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
  200. package/framework/agents/infrastructure/azure-architect.md +0 -150
  201. package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
  202. package/framework/agents/infrastructure/bicep-architect.md +0 -132
  203. package/framework/agents/infrastructure/container-specialist.md +0 -137
  204. package/framework/agents/infrastructure/devops-engineer.md +0 -126
  205. package/framework/agents/integrations/azure-identity.md +0 -148
  206. package/framework/agents/quality/code-analyzer.md +0 -239
  207. package/framework/agents/quality/testing-specialist.md +0 -130
  208. package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
  209. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
  210. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
  211. package/framework/index/troubleshooting-index.json +0 -184
  212. package/framework/rules/testing-standards.md +0 -14
  213. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
  214. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
  215. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
  216. package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
  217. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
  218. package/framework/standards/ai-agents/blazor-ui.md +0 -364
  219. package/framework/standards/architecture/ddd/aggregates.md +0 -120
  220. package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  221. package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  222. package/framework/standards/architecture/ddd/entities.md +0 -99
  223. package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  224. package/framework/standards/architecture/ddd/value-objects.md +0 -124
  225. package/framework/standards/backend/api/minimal-api.md +0 -494
  226. package/framework/standards/backend/api/rest.md +0 -492
  227. package/framework/standards/backend/authentication/passkeys.md +0 -428
  228. package/framework/standards/backend/database/ef-core.md +0 -199
  229. package/framework/standards/backend/database/migrations.md +0 -393
  230. package/framework/standards/backend/database/repository-patterns.md +0 -528
  231. package/framework/standards/backend/dotnet/async.md +0 -366
  232. package/framework/standards/backend/dotnet/core.md +0 -117
  233. package/framework/standards/backend/dotnet/di.md +0 -439
  234. package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  235. package/framework/standards/context/analytics.md +0 -96
  236. package/framework/standards/context/bundles.md +0 -110
  237. package/framework/standards/context/priming.md +0 -78
  238. package/framework/standards/core/architecture.md +0 -185
  239. package/framework/standards/core/coding.md +0 -214
  240. package/framework/standards/core/git-branching-strategy.md +0 -403
  241. package/framework/standards/core/git.md +0 -185
  242. package/framework/standards/core/testing.md +0 -295
  243. package/framework/standards/data/nosql/blob-storage.md +0 -102
  244. package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  245. package/framework/standards/frontend/blazor/design-checklist.md +0 -222
  246. package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  247. package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  248. package/framework/standards/frontend/blazor/html-conversion.md +0 -184
  249. package/framework/standards/frontend/blazor/lifecycle.md +0 -195
  250. package/framework/standards/frontend/blazor/pitfalls.md +0 -198
  251. package/framework/standards/frontend/blazor/state.md +0 -191
  252. package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -266
  253. package/framework/standards/frontend/design-system/design-trends.md +0 -171
  254. package/framework/standards/infrastructure/azure/azure.md +0 -624
  255. package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  256. package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  257. package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  258. package/framework/standards/infrastructure/azure/services/functions.md +0 -486
  259. package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  260. package/framework/standards/infrastructure/azure/services/storage.md +0 -407
  261. package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
  262. package/framework/standards/integration/api/graphql.md +0 -91
  263. package/framework/standards/integration/api/grpc.md +0 -114
  264. package/framework/standards/integration/api/rest-design.md +0 -95
  265. package/framework/standards/integration/event-driven/cqrs.md +0 -101
  266. package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  267. package/framework/standards/integration/event-driven/service-bus.md +0 -95
  268. package/framework/standards/observability/logging.md +0 -131
  269. package/framework/standards/observability/metrics.md +0 -121
  270. package/framework/standards/observability/monitoring.md +0 -114
  271. package/framework/standards/observability/tracing.md +0 -132
  272. package/framework/standards/workflows/parallel-execution.md +0 -112
  273. package/framework/standards/workflows/thread-management.md +0 -113
  274. package/framework/templates/code/dotnet/backend/service.cs +0 -139
  275. package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  276. package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  277. package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  278. package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  279. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  280. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  281. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  282. package/framework/templates/code/dotnet/frontend/component.razor +0 -239
  283. package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  284. package/framework/templates/infrastructure/azure/README.md +0 -286
  285. package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  286. package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  287. package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  288. package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  289. package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  290. package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  291. package/framework/templates/infrastructure/azure/deploy.sh +0 -208
  292. package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  293. package/framework/templates/infrastructure/azure/main.bicep +0 -189
  294. package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  295. package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  296. package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  297. package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  298. package/framework/templates/infrastructure/azure/storage.bicep +0 -106
  299. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  300. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  301. package/framework/templates/integrations/azure-identity-config.cs +0 -288
  302. package/framework/templates/project-structure/dotnet-ddd.md +0 -70
  303. package/framework/templates/saas/subscription.cs +0 -347
  304. package/framework/templates/saas/tenant.cs +0 -338
  305. package/framework/templates/ui/FluentDesignTheme.cs +0 -149
  306. package/framework/templates/ui/MudTheme.cs +0 -281
  307. package/framework/workflows/configs/nodejs-cli.json +0 -40
  308. package/src/commands/standards/context-budget.js +0 -89
  309. package/src/lib/standards/index.js +0 -7
  310. package/src/lib/standards/standards-context-injector.js +0 -302
  311. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
  312. package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
  313. package/src/lib/validators/blazor/blazor-validator.js +0 -369
  314. package/src/lib/validators/blazor/index.js +0 -9
@@ -1,164 +0,0 @@
1
- // ==============================================================================
2
- // MORPH-SPEC - App Service
3
- // Azure App Service with Free F1 tier support
4
- // ==============================================================================
5
-
6
- @description('App Service name')
7
- param name string
8
-
9
- @description('Location')
10
- param location string
11
-
12
- @description('Tags')
13
- param tags object = {}
14
-
15
- @description('App Service Plan SKU (F1, B1, S1, P1v2)')
16
- @allowed(['F1', 'B1', 'S1', 'P1v2', 'P2v2'])
17
- param sku string = 'F1'
18
-
19
- @description('App Insights connection string')
20
- param appInsightsConnectionString string = ''
21
-
22
- @description('.NET version')
23
- @allowed(['v6.0', 'v7.0', 'v8.0'])
24
- param dotnetVersion string = 'v8.0'
25
-
26
- @description('Always On (not available on Free tier)')
27
- param alwaysOn bool = false
28
-
29
- @description('Environment variables')
30
- param envVars object = {}
31
-
32
- // ==============================================================================
33
- // VARIABLES
34
- // ==============================================================================
35
-
36
- var skuTiers = {
37
- F1: 'Free'
38
- B1: 'Basic'
39
- S1: 'Standard'
40
- P1v2: 'PremiumV2'
41
- P2v2: 'PremiumV2'
42
- }
43
-
44
- var planName = 'plan-${name}'
45
-
46
- // Merge default env vars with custom ones
47
- var defaultEnvVars = {
48
- ASPNETCORE_ENVIRONMENT: 'Production'
49
- APPLICATIONINSIGHTS_CONNECTION_STRING: appInsightsConnectionString
50
- }
51
-
52
- var mergedEnvVars = union(defaultEnvVars, envVars)
53
-
54
- // ==============================================================================
55
- // APP SERVICE PLAN
56
- // ==============================================================================
57
-
58
- resource appServicePlan 'Microsoft.Web/serverfarms@2022-09-01' = {
59
- name: planName
60
- location: location
61
- tags: tags
62
- sku: {
63
- name: sku
64
- tier: skuTiers[sku]
65
- }
66
- kind: 'linux'
67
- properties: {
68
- reserved: true // Required for Linux
69
- }
70
- }
71
-
72
- // ==============================================================================
73
- // APP SERVICE
74
- // ==============================================================================
75
-
76
- resource appService 'Microsoft.Web/sites@2022-09-01' = {
77
- name: name
78
- location: location
79
- tags: tags
80
- kind: 'app,linux'
81
- identity: {
82
- type: 'SystemAssigned'
83
- }
84
- properties: {
85
- serverFarmId: appServicePlan.id
86
- httpsOnly: true
87
- siteConfig: {
88
- linuxFxVersion: 'DOTNETCORE|${dotnetVersion}'
89
- alwaysOn: alwaysOn
90
- minTlsVersion: '1.2'
91
- ftpsState: 'Disabled'
92
- http20Enabled: true
93
- healthCheckPath: '/health'
94
- appSettings: [for key in objectKeys(mergedEnvVars): {
95
- name: key
96
- value: mergedEnvVars[key]
97
- }]
98
- cors: {
99
- allowedOrigins: [
100
- 'https://portal.azure.com'
101
- ]
102
- supportCredentials: false
103
- }
104
- }
105
- clientAffinityEnabled: false // Recommended for stateless apps
106
- }
107
- }
108
-
109
- // ==============================================================================
110
- // DEPLOYMENT SLOT (Only for non-Free tiers)
111
- // ==============================================================================
112
-
113
- resource stagingSlot 'Microsoft.Web/sites/slots@2022-09-01' = if (sku != 'F1') {
114
- name: 'staging'
115
- parent: appService
116
- location: location
117
- tags: tags
118
- kind: 'app,linux'
119
- identity: {
120
- type: 'SystemAssigned'
121
- }
122
- properties: {
123
- serverFarmId: appServicePlan.id
124
- httpsOnly: true
125
- siteConfig: {
126
- linuxFxVersion: 'DOTNETCORE|${dotnetVersion}'
127
- alwaysOn: alwaysOn
128
- minTlsVersion: '1.2'
129
- ftpsState: 'Disabled'
130
- http20Enabled: true
131
- healthCheckPath: '/health'
132
- appSettings: [for key in objectKeys(mergedEnvVars): {
133
- name: key
134
- value: mergedEnvVars[key]
135
- }]
136
- }
137
- clientAffinityEnabled: false
138
- }
139
- }
140
-
141
- // ==============================================================================
142
- // OUTPUTS
143
- // ==============================================================================
144
-
145
- @description('App Service ID')
146
- output id string = appService.id
147
-
148
- @description('App Service name')
149
- output name string = appService.name
150
-
151
- @description('App Service URL')
152
- output url string = 'https://${appService.properties.defaultHostName}'
153
-
154
- @description('App Service default hostname')
155
- output defaultHostName string = appService.properties.defaultHostName
156
-
157
- @description('App Service Plan ID')
158
- output planId string = appServicePlan.id
159
-
160
- @description('App Service Managed Identity Principal ID')
161
- output principalId string = appService.identity.principalId
162
-
163
- @description('Staging slot URL (if available)')
164
- output stagingUrl string = sku != 'F1' ? 'https://${stagingSlot.properties.defaultHostName}' : ''
@@ -1,49 +0,0 @@
1
- // ==============================================================================
2
- // MORPH-SPEC - Container Apps Environment
3
- // Azure Container Apps managed environment
4
- // ==============================================================================
5
-
6
- @description('Environment name')
7
- param name string
8
-
9
- @description('Location')
10
- param location string
11
-
12
- @description('Tags')
13
- param tags object = {}
14
-
15
- @description('Log Analytics Workspace ID')
16
- param logAnalyticsWorkspaceId string
17
-
18
- // ==============================================================================
19
- // CONTAINER APPS ENVIRONMENT
20
- // ==============================================================================
21
-
22
- resource containerAppEnv 'Microsoft.App/managedEnvironments@2023-05-01' = {
23
- name: name
24
- location: location
25
- tags: tags
26
- properties: {
27
- appLogsConfiguration: {
28
- destination: 'log-analytics'
29
- logAnalyticsConfiguration: {
30
- customerId: reference(logAnalyticsWorkspaceId, '2022-10-01').customerId
31
- sharedKey: listKeys(logAnalyticsWorkspaceId, '2022-10-01').primarySharedKey
32
- }
33
- }
34
- zoneRedundant: false
35
- }
36
- }
37
-
38
- // ==============================================================================
39
- // OUTPUTS
40
- // ==============================================================================
41
-
42
- @description('Container Apps Environment ID')
43
- output id string = containerAppEnv.id
44
-
45
- @description('Container Apps Environment name')
46
- output name string = containerAppEnv.name
47
-
48
- @description('Default domain')
49
- output defaultDomain string = containerAppEnv.properties.defaultDomain
@@ -1,156 +0,0 @@
1
- // ==============================================================================
2
- // MORPH-SPEC - Container App
3
- // Azure Container Apps with ingress and auto-scaling
4
- // ==============================================================================
5
-
6
- @description('App name')
7
- param name string
8
-
9
- @description('Location')
10
- param location string
11
-
12
- @description('Tags')
13
- param tags object = {}
14
-
15
- @description('Container App Environment ID')
16
- param environmentId string
17
-
18
- @description('Container image')
19
- param containerImage string
20
-
21
- @description('App Insights connection string')
22
- param appInsightsConnectionString string = ''
23
-
24
- @description('CPU cores (0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0)')
25
- param cpu string = '0.25'
26
-
27
- @description('Memory (0.5Gi, 1Gi, 1.5Gi, 2Gi, 3Gi, 4Gi)')
28
- param memory string = '0.5Gi'
29
-
30
- @description('Minimum replicas (0 = scale to zero)')
31
- param minReplicas int = 0
32
-
33
- @description('Maximum replicas')
34
- param maxReplicas int = 3
35
-
36
- @description('Target port')
37
- param targetPort int = 8080
38
-
39
- @description('Environment variables')
40
- param envVars array = []
41
-
42
- // ==============================================================================
43
- // CONTAINER APP
44
- // ==============================================================================
45
-
46
- var secrets = appInsightsConnectionString != '' ? [
47
- {
48
- name: 'appinsights-connection-string'
49
- value: appInsightsConnectionString
50
- }
51
- ] : []
52
-
53
- var defaultEnvVars = appInsightsConnectionString != '' ? [
54
- {
55
- name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
56
- secretRef: 'appinsights-connection-string'
57
- }
58
- {
59
- name: 'ASPNETCORE_ENVIRONMENT'
60
- value: 'Production'
61
- }
62
- ] : [
63
- {
64
- name: 'ASPNETCORE_ENVIRONMENT'
65
- value: 'Production'
66
- }
67
- ]
68
-
69
- resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
70
- name: name
71
- location: location
72
- tags: tags
73
- properties: {
74
- managedEnvironmentId: environmentId
75
- configuration: {
76
- ingress: {
77
- external: true
78
- targetPort: targetPort
79
- transport: 'http'
80
- allowInsecure: false
81
- traffic: [
82
- {
83
- latestRevision: true
84
- weight: 100
85
- }
86
- ]
87
- }
88
- secrets: secrets
89
- }
90
- template: {
91
- containers: [
92
- {
93
- name: name
94
- image: containerImage
95
- resources: {
96
- cpu: json(cpu)
97
- memory: memory
98
- }
99
- env: concat(defaultEnvVars, envVars)
100
- probes: [
101
- {
102
- type: 'Liveness'
103
- httpGet: {
104
- path: '/health'
105
- port: targetPort
106
- }
107
- initialDelaySeconds: 10
108
- periodSeconds: 30
109
- failureThreshold: 3
110
- }
111
- {
112
- type: 'Readiness'
113
- httpGet: {
114
- path: '/health/ready'
115
- port: targetPort
116
- }
117
- initialDelaySeconds: 5
118
- periodSeconds: 10
119
- failureThreshold: 3
120
- }
121
- ]
122
- }
123
- ]
124
- scale: {
125
- minReplicas: minReplicas
126
- maxReplicas: maxReplicas
127
- rules: [
128
- {
129
- name: 'http-scale'
130
- http: {
131
- metadata: {
132
- concurrentRequests: '100'
133
- }
134
- }
135
- }
136
- ]
137
- }
138
- }
139
- }
140
- }
141
-
142
- // ==============================================================================
143
- // OUTPUTS
144
- // ==============================================================================
145
-
146
- @description('Container App ID')
147
- output id string = containerApp.id
148
-
149
- @description('Container App name')
150
- output name string = containerApp.name
151
-
152
- @description('Container App URL')
153
- output url string = 'https://${containerApp.properties.configuration.ingress.fqdn}'
154
-
155
- @description('Container App FQDN')
156
- output fqdn string = containerApp.properties.configuration.ingress.fqdn