@polymorphism-tech/morph-spec 4.11.1 → 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 (317) 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 +226 -1454
  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/agent-complete.js +122 -0
  30. package/framework/hooks/claude-code/post-tool-use/validator-feedback.js +4 -6
  31. package/framework/hooks/claude-code/pre-compact/save-morph-context.js +12 -7
  32. package/framework/hooks/claude-code/pre-tool-use/enforce-phase-writes.js +2 -2
  33. package/framework/hooks/claude-code/pre-tool-use/protect-spec-files.js +2 -2
  34. package/framework/hooks/claude-code/pre-tool-use/task-tracking-guard.js +5 -10
  35. package/framework/hooks/claude-code/session-start/inject-morph-context.js +63 -30
  36. package/framework/hooks/claude-code/session-start/resume-context.js +77 -0
  37. package/framework/hooks/claude-code/statusline.py +4 -5
  38. package/framework/hooks/claude-code/stop/validate-completion.js +4 -4
  39. package/framework/hooks/claude-code/user-prompt/enrich-prompt.js +8 -8
  40. package/framework/hooks/shared/compact-restore.js +28 -5
  41. package/framework/hooks/shared/dispatch-helpers.js +17 -0
  42. package/framework/hooks/shared/phase-utils.js +4 -8
  43. package/framework/hooks/shared/state-reader.js +34 -3
  44. package/framework/phases.json +7 -45
  45. package/framework/rules/ai-agents-standards.md +15 -0
  46. package/framework/rules/asaas-standards.md +13 -0
  47. package/framework/rules/clerk-standards.md +13 -0
  48. package/framework/rules/csharp-standards.md +8 -4
  49. package/framework/rules/data-standards.md +18 -0
  50. package/framework/rules/dotnet-templates.md +87 -0
  51. package/framework/rules/frontend-standards.md +13 -13
  52. package/framework/rules/hangfire-standards.md +13 -0
  53. package/framework/rules/infrastructure-standards.md +27 -16
  54. package/framework/rules/morph-workflow.md +73 -13
  55. package/framework/rules/nextjs-standards.md +1 -0
  56. package/framework/rules/nextjs-templates.md +40 -0
  57. package/framework/rules/resend-standards.md +12 -0
  58. package/framework/rules/supabase-standards.md +29 -0
  59. package/framework/skills/README.md +6 -8
  60. package/framework/skills/level-0-meta/mcp-registry.json +21 -99
  61. package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
  62. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
  63. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  64. package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
  65. package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
  66. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
  67. package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
  68. package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
  69. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
  70. package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
  71. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
  72. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
  73. package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
  74. package/framework/skills/level-1-workflows/README.md +1 -1
  75. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
  76. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +58 -124
  77. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
  78. package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
  79. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
  80. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/implementer-prompt.md +4 -3
  81. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/spec-reviewer-prompt.md +2 -2
  82. package/framework/skills/level-1-workflows/morph-phase-implement/references/recap-example.md +1 -1
  83. package/framework/skills/level-1-workflows/morph-phase-plan/SKILL.md +17 -13
  84. package/framework/skills/level-1-workflows/morph-phase-tasks/SKILL.md +22 -40
  85. package/framework/skills/level-1-workflows/morph-phase-tasks/references/task-planning-patterns.md +0 -2
  86. package/framework/skills/level-1-workflows/morph-phase-tasks/references/tasks-example.md +5 -5
  87. package/framework/skills/level-1-workflows/morph-phase-uiux/SKILL.md +275 -61
  88. package/framework/skills/level-1-workflows/morph-scope-escalation/SKILL.md +1 -1
  89. package/framework/squad-templates/backend-only.json +6 -6
  90. package/framework/squad-templates/frontend-only.json +17 -8
  91. package/framework/squad-templates/full-stack.json +29 -24
  92. package/framework/standards/STANDARDS.json +1021 -2338
  93. package/framework/standards/backend/dotnet/fluent-validation-vsa.md +200 -0
  94. package/framework/standards/backend/dotnet/result-pattern.md +213 -0
  95. package/framework/standards/backend/dotnet/scalar-ui.md +172 -0
  96. package/framework/standards/backend/dotnet/scrutor.md +158 -0
  97. package/framework/standards/backend/dotnet/vsa-handler-patterns.md +274 -0
  98. package/framework/standards/frontend/nextjs/motion-patterns.md +1 -1
  99. package/framework/standards/infrastructure/supabase/mcp-setup.md +83 -193
  100. package/framework/standards/integration/mcp/mcp-tools.md +91 -77
  101. package/framework/templates/IDE-SNIPPETS.md +2 -6
  102. package/framework/templates/README.md +709 -814
  103. package/framework/templates/REGISTRY.json +223 -762
  104. package/framework/templates/code/dotnet/abstractions/api-endpoint.cs +7 -0
  105. package/framework/templates/code/dotnet/abstractions/error.cs +60 -0
  106. package/framework/templates/code/dotnet/abstractions/handler.cs +12 -0
  107. package/framework/templates/code/dotnet/abstractions/result.cs +74 -0
  108. package/framework/templates/code/dotnet/backend/repository.cs +148 -141
  109. package/framework/templates/code/dotnet/constants/api-tags.cs +6 -0
  110. package/framework/templates/code/dotnet/exceptions/exception-handler.cs +32 -0
  111. package/framework/templates/code/dotnet/extensions/database-extensions.cs +20 -0
  112. package/framework/templates/code/dotnet/extensions/handler-registration.cs +38 -0
  113. package/framework/templates/code/dotnet/extensions/health-checks.cs +24 -0
  114. package/framework/templates/code/dotnet/extensions/map-endpoints.cs +35 -0
  115. package/framework/templates/code/dotnet/extensions/result-extensions.cs +29 -0
  116. package/framework/templates/code/dotnet/feature/endpoint.cs.hbs +21 -0
  117. package/framework/templates/code/dotnet/feature/entity.cs.hbs +8 -0
  118. package/framework/templates/code/dotnet/feature/errors.cs.hbs +8 -0
  119. package/framework/templates/code/dotnet/feature/handler.cs.hbs +24 -0
  120. package/framework/templates/code/dotnet/feature/request.cs.hbs +4 -0
  121. package/framework/templates/code/dotnet/feature/response.cs.hbs +4 -0
  122. package/framework/templates/code/dotnet/feature/validator.cs.hbs +15 -0
  123. package/framework/templates/code/dotnet/jobs/job.cs +21 -17
  124. package/framework/templates/code/dotnet/pipelines/logging-decorator.cs +31 -0
  125. package/framework/templates/code/dotnet/pipelines/validation-decorator.cs +97 -0
  126. package/framework/templates/code/dotnet/test.cs +192 -106
  127. package/framework/templates/context/ARCHITECTURE.md +89 -0
  128. package/framework/templates/context/CONTEXT-FEATURE.md +2 -2
  129. package/framework/templates/context/CONTEXT.md +180 -181
  130. package/framework/templates/context/design-system.md +342 -211
  131. package/framework/templates/docs/onboarding.md +2 -3
  132. package/framework/templates/docs/proposal.md +171 -182
  133. package/framework/templates/docs/spec.md +1 -3
  134. package/framework/templates/docs/ui-components.md +0 -72
  135. package/framework/templates/examples/design-system-examples.md +4 -4
  136. package/framework/templates/feature/decisions.md +0 -66
  137. package/framework/templates/feature/recap.md +1 -2
  138. package/framework/templates/infrastructure/github/README.md +56 -593
  139. package/framework/templates/integrations/clerk-config.cs +0 -41
  140. package/framework/templates/meta-prompts/parallel-workers/parallel-worker.md +2 -2
  141. package/framework/templates/meta-prompts/squad-leaders/backend-squad.md +1 -2
  142. package/framework/templates/meta-prompts/squad-leaders/frontend-squad.md +83 -126
  143. package/framework/templates/meta-prompts/validators/pre-commit-validator.md +2 -2
  144. package/framework/templates/project/validate.js +2 -4
  145. package/framework/templates/ui/design-system.css +1 -1
  146. package/framework/workflows/README.md +8 -8
  147. package/framework/workflows/configs/fast-track.json +51 -0
  148. package/framework/workflows/configs/full.json +68 -0
  149. package/framework/workflows/configs/standard.json +7 -3
  150. package/framework/workflows/docs/STORY-DRIVEN-DEVELOPMENT.md +1 -1
  151. package/framework/workflows/docs/enforcement-pipeline.md +18 -19
  152. package/framework/workflows/docs/full-morph.md +69 -76
  153. package/framework/workflows/docs/standard.md +49 -44
  154. package/framework/workflows/docs/ui-refresh.md +1 -1
  155. package/package.json +3 -3
  156. package/src/commands/agents/dispatch-agents.js +55 -116
  157. package/src/commands/context/context-refresh.js +79 -0
  158. package/src/commands/mcp/mcp-setup.js +28 -6
  159. package/src/commands/phase/phase-reset.js +1 -1
  160. package/src/commands/project/doctor.js +10 -32
  161. package/src/commands/project/init.js +32 -1
  162. package/src/commands/project/status.js +6 -12
  163. package/src/commands/scaffold/scaffold.js +131 -0
  164. package/src/commands/scope/escalate.js +1 -1
  165. package/src/commands/state/advance-phase.js +15 -29
  166. package/src/commands/state/state.js +20 -5
  167. package/src/commands/tasks/task.js +0 -30
  168. package/src/commands/validation/validate-feature.js +3 -10
  169. package/src/core/paths/output-schema.js +12 -13
  170. package/src/core/state/phase-state-machine.js +211 -217
  171. package/src/core/state/state-manager.js +9 -9
  172. package/src/lib/agents/agents-manager.js +2 -2
  173. package/src/lib/agents/output-collector.js +1 -2
  174. package/src/lib/detectors/design-system-detector.js +4 -4
  175. package/src/lib/detectors/index.js +1 -11
  176. package/src/lib/generators/architecture-scanner.js +640 -0
  177. package/src/lib/generators/context-generator.js +3 -3
  178. package/src/lib/generators/design-system-generator.js +508 -298
  179. package/src/lib/generators/index.js +12 -10
  180. package/src/lib/generators/metadata-extractor.js +386 -387
  181. package/src/lib/generators/recap-generator.js +4 -4
  182. package/src/lib/generators/scaffold-generator.js +317 -0
  183. package/src/lib/generators/settings-generator.js +0 -1
  184. package/src/lib/phase-chain/phase-validator.js +64 -42
  185. package/src/lib/stack/stack-profile.js +2 -2
  186. package/src/lib/standards/digest-builder.js +72 -285
  187. package/src/lib/tasks/task-parser.js +11 -5
  188. package/src/lib/validators/architecture/architecture-validator.js +259 -387
  189. package/src/lib/validators/content/content-validator.js +287 -287
  190. package/src/lib/validators/css/css-validator.js +340 -352
  191. package/src/lib/validators/design-system/design-system-validator.js +11 -5
  192. package/src/lib/validators/packages/package-validator.js +347 -360
  193. package/src/lib/validators/shared/issue-counter.js +14 -18
  194. package/src/lib/validators/validation-runner.js +3 -19
  195. package/src/scripts/setup-infra.js +1 -1
  196. package/src/utils/agents-installer.js +24 -3
  197. package/src/utils/file-copier.js +1 -0
  198. package/src/utils/hooks-installer.js +21 -19
  199. package/src/utils/skills-installer.js +178 -178
  200. package/framework/agents/architecture/prompt-engineer.md +0 -195
  201. package/framework/agents/backend/api-designer.md +0 -106
  202. package/framework/agents/frontend/blazor-builder.md +0 -229
  203. package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
  204. package/framework/agents/infrastructure/azure-architect.md +0 -150
  205. package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
  206. package/framework/agents/infrastructure/bicep-architect.md +0 -132
  207. package/framework/agents/infrastructure/container-specialist.md +0 -137
  208. package/framework/agents/infrastructure/devops-engineer.md +0 -126
  209. package/framework/agents/integrations/azure-identity.md +0 -148
  210. package/framework/agents/quality/code-analyzer.md +0 -239
  211. package/framework/agents/quality/testing-specialist.md +0 -130
  212. package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
  213. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
  214. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
  215. package/framework/index/troubleshooting-index.json +0 -184
  216. package/framework/rules/testing-standards.md +0 -14
  217. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
  218. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
  219. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
  220. package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
  221. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
  222. package/framework/standards/ai-agents/blazor-ui.md +0 -364
  223. package/framework/standards/architecture/ddd/aggregates.md +0 -120
  224. package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  225. package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  226. package/framework/standards/architecture/ddd/entities.md +0 -99
  227. package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  228. package/framework/standards/architecture/ddd/value-objects.md +0 -124
  229. package/framework/standards/backend/api/minimal-api.md +0 -494
  230. package/framework/standards/backend/api/rest.md +0 -492
  231. package/framework/standards/backend/authentication/passkeys.md +0 -428
  232. package/framework/standards/backend/database/ef-core.md +0 -199
  233. package/framework/standards/backend/database/migrations.md +0 -393
  234. package/framework/standards/backend/database/repository-patterns.md +0 -528
  235. package/framework/standards/backend/dotnet/async.md +0 -366
  236. package/framework/standards/backend/dotnet/core.md +0 -117
  237. package/framework/standards/backend/dotnet/di.md +0 -439
  238. package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  239. package/framework/standards/context/analytics.md +0 -96
  240. package/framework/standards/context/bundles.md +0 -110
  241. package/framework/standards/context/priming.md +0 -78
  242. package/framework/standards/core/architecture.md +0 -185
  243. package/framework/standards/core/coding.md +0 -214
  244. package/framework/standards/core/git-branching-strategy.md +0 -403
  245. package/framework/standards/core/git.md +0 -185
  246. package/framework/standards/core/testing.md +0 -295
  247. package/framework/standards/data/nosql/blob-storage.md +0 -102
  248. package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  249. package/framework/standards/frontend/blazor/design-checklist.md +0 -222
  250. package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  251. package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  252. package/framework/standards/frontend/blazor/html-conversion.md +0 -184
  253. package/framework/standards/frontend/blazor/lifecycle.md +0 -195
  254. package/framework/standards/frontend/blazor/pitfalls.md +0 -198
  255. package/framework/standards/frontend/blazor/state.md +0 -191
  256. package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -213
  257. package/framework/standards/infrastructure/azure/azure.md +0 -624
  258. package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  259. package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  260. package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  261. package/framework/standards/infrastructure/azure/services/functions.md +0 -486
  262. package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  263. package/framework/standards/infrastructure/azure/services/storage.md +0 -407
  264. package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
  265. package/framework/standards/integration/api/graphql.md +0 -91
  266. package/framework/standards/integration/api/grpc.md +0 -114
  267. package/framework/standards/integration/api/rest-design.md +0 -95
  268. package/framework/standards/integration/event-driven/cqrs.md +0 -101
  269. package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  270. package/framework/standards/integration/event-driven/service-bus.md +0 -95
  271. package/framework/standards/observability/logging.md +0 -131
  272. package/framework/standards/observability/metrics.md +0 -121
  273. package/framework/standards/observability/monitoring.md +0 -114
  274. package/framework/standards/observability/tracing.md +0 -132
  275. package/framework/standards/workflows/parallel-execution.md +0 -112
  276. package/framework/standards/workflows/thread-management.md +0 -113
  277. package/framework/templates/code/dotnet/backend/service.cs +0 -139
  278. package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  279. package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  280. package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  281. package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  282. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  283. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  284. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  285. package/framework/templates/code/dotnet/frontend/component.razor +0 -239
  286. package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  287. package/framework/templates/infrastructure/azure/README.md +0 -286
  288. package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  289. package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  290. package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  291. package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  292. package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  293. package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  294. package/framework/templates/infrastructure/azure/deploy.sh +0 -208
  295. package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  296. package/framework/templates/infrastructure/azure/main.bicep +0 -189
  297. package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  298. package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  299. package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  300. package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  301. package/framework/templates/infrastructure/azure/storage.bicep +0 -106
  302. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  303. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  304. package/framework/templates/integrations/azure-identity-config.cs +0 -288
  305. package/framework/templates/project-structure/dotnet-ddd.md +0 -70
  306. package/framework/templates/saas/subscription.cs +0 -347
  307. package/framework/templates/saas/tenant.cs +0 -338
  308. package/framework/templates/ui/FluentDesignTheme.cs +0 -149
  309. package/framework/templates/ui/MudTheme.cs +0 -281
  310. package/framework/workflows/configs/nodejs-cli.json +0 -40
  311. package/src/commands/standards/context-budget.js +0 -89
  312. package/src/lib/standards/index.js +0 -7
  313. package/src/lib/standards/standards-context-injector.js +0 -302
  314. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
  315. package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
  316. package/src/lib/validators/blazor/blazor-validator.js +0 -369
  317. package/src/lib/validators/blazor/index.js +0 -9
@@ -1,593 +1,56 @@
1
- # GitHub Actions Templates for MORPH-SPEC
2
-
3
- > **Framework-Level CI/CD Templates for Azure App Service & EasyPanel Deployments**
4
-
5
- ## Overview
6
-
7
- This directory contains reusable GitHub Actions workflows and composite actions that enable CI/CD automation for both **blazor-azure** (Azure App Service) and **nextjs-supabase** (EasyPanel/Docker) stacks.
8
-
9
- **Key Features:**
10
- - ✅ Framework-level reusability across stacks
11
- - ✅ Handlebars v2.0 templating with helpers
12
- - ✅ OIDC authentication for Azure (no long-lived secrets)
13
- - ✅ Composite actions for shared logic
14
- - ✅ Stack-specific override mechanism
15
-
16
- ---
17
-
18
- ## 📁 Structure
19
-
20
- ```
21
- infrastructure/github/
22
- ├── workflows/ # Reusable workflow templates
23
- │ ├── dotnet-build.yml.hbs # .NET restore, build, test, coverage
24
- │ ├── docker-build-push.yml.hbs # Docker build & push to registry
25
- │ ├── deploy-azure-app-service.yml.hbs # Azure App Service deployment
26
- │ └── deploy-easypanel.yml.hbs # EasyPanel deployment via webhook
27
- │
28
- └── actions/ # Composite action templates
29
- ├── docker-build-push/action.yml.hbs # Build & push Docker image
30
- ├── health-check/action.yml.hbs # Poll health endpoint
31
- └── azure-auth/action.yml.hbs # Azure OIDC login
32
- ```
33
-
34
- ---
35
-
36
- ## 🔄 Reusable Workflows vs Composite Actions
37
-
38
- | Type | Purpose | When to Use | Example |
39
- |------|---------|-------------|---------|
40
- | **Reusable Workflows** | Complete CI/CD pipeline (multiple jobs) | Build + test + deploy | `dotnet-build.yml.hbs`, `deploy-azure-app-service.yml.hbs` |
41
- | **Composite Actions** | Single responsibility (grouped steps) | Reusable task across workflows | `azure-auth/action.yml.hbs`, `health-check/action.yml.hbs` |
42
-
43
- ### Reusable Workflows
44
-
45
- **Characteristics:**
46
- - Defined with `on: workflow_call`
47
- - Can have multiple jobs
48
- - Accept inputs and secrets via `with:` and `secrets: inherit`
49
- - Called from other workflows using `uses:` at job level
50
-
51
- **Example Usage:**
52
- ```yaml
53
- jobs:
54
- build:
55
- uses: ./.github/workflows/dotnet-build.yml
56
- with:
57
- dotnet-version: '10.0'
58
- run-tests: true
59
- secrets: inherit
60
- ```
61
-
62
- ### Composite Actions
63
-
64
- **Characteristics:**
65
- - Defined with `runs: using: 'composite'`
66
- - Bundle related shell commands
67
- - Lightweight (no containerization needed)
68
- - Called using `uses:` at step level
69
-
70
- **Example Usage:**
71
- ```yaml
72
- steps:
73
- - name: Azure Login
74
- uses: ./.github/actions/azure-auth
75
- with:
76
- client-id: ${{ secrets.AZURE_CLIENT_ID }}
77
- tenant-id: ${{ secrets.AZURE_TENANT_ID }}
78
- subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
79
- ```
80
-
81
- ---
82
-
83
- ## 🏗️ Deployment Architectures
84
-
85
- ### Blazor-Azure (Azure App Service)
86
-
87
- **Deployment Flow:**
88
- 1. **Build:** `dotnet restore` → `dotnet build` → `dotnet test`
89
- 2. **Publish:** `dotnet publish -c Release -o ./publish`
90
- 3. **Infrastructure:** Deploy Bicep (App Service Plan + App Service)
91
- 4. **Deploy:** `azure/webapps-deploy@v2` with publish folder
92
- 5. **Health Check:** Poll `/health` endpoint
93
-
94
- **Key Characteristics:**
95
- - ✅ Direct .NET publish (no Docker)
96
- - ✅ OIDC authentication (Federated Identity)
97
- - ✅ Bicep IaC for infrastructure
98
- - ✅ App Service deployment slots for blue-green
99
-
100
- **GitHub Secrets Required:**
101
- - `AZURE_CLIENT_ID` - Entra ID app registration client ID
102
- - `AZURE_TENANT_ID` - Azure AD tenant ID
103
- - `AZURE_SUBSCRIPTION_ID` - Azure subscription ID
104
-
105
- **Workflows:**
106
- - Framework: `deploy-azure-app-service.yml.hbs`
107
- - Stack: `stacks/blazor-azure/.morph/framework/templates/infrastructure/github/workflows/cd-prod.yml.hbs`
108
-
109
- ### NextJS-Supabase (EasyPanel/Docker)
110
-
111
- **Deployment Flow:**
112
- 1. **Build Backend:** `dotnet restore` → `dotnet build` → `dotnet test`
113
- 2. **Build Frontend:** `npm ci` → `npm run build` → `npm test`
114
- 3. **Docker:** Multi-stage build for API + Web
115
- 4. **Push:** Docker image to GitHub Container Registry (ghcr.io)
116
- 5. **Deploy:** Trigger EasyPanel webhook with image tag
117
- 6. **Health Check:** Poll `/health` endpoint
118
-
119
- **Key Characteristics:**
120
- - ✅ Docker-based deployment
121
- - ✅ Multi-service (API + Web)
122
- - ✅ GitHub Container Registry (ghcr.io)
123
- - ✅ EasyPanel webhook deployment
124
-
125
- **GitHub Secrets Required:**
126
- - `GITHUB_TOKEN` - Auto-provided for ghcr.io
127
- - `EASYPANEL_WEBHOOK_URL` - EasyPanel deployment webhook
128
- - `EASYPANEL_API_TOKEN` - EasyPanel API authentication
129
- - `APP_URL` - Application URL for health checks
130
-
131
- **Workflows:**
132
- - Framework: `docker-build-push.yml.hbs`, `deploy-easypanel.yml.hbs`
133
- - Stack: `stacks/nextjs-supabase/.morph/framework/templates/infrastructure/github/workflows/cd-prod.yml.hbs`
134
-
135
- ---
136
-
137
- ## 🔐 Authentication & Security
138
-
139
- ### Azure OIDC (Blazor-Azure)
140
-
141
- **Setup Steps:**
142
-
143
- 1. **Create Entra ID App Registration:**
144
- ```bash
145
- az ad app create --display-name "GitHub-Blazor-Azure-OIDC"
146
- ```
147
-
148
- 2. **Configure Federated Credentials:**
149
- ```bash
150
- az ad app federated-credential create \
151
- --id <APP_ID> \
152
- --parameters '{
153
- "name": "github-prod",
154
- "issuer": "https://token.actions.githubusercontent.com",
155
- "subject": "repo:<ORG>/<REPO>:environment:production",
156
- "audiences": ["api://AzureADTokenExchange"]
157
- }'
158
- ```
159
-
160
- 3. **Assign RBAC Roles:**
161
- ```bash
162
- az role assignment create \
163
- --assignee <APP_ID> \
164
- --role "Contributor" \
165
- --scope /subscriptions/<SUBSCRIPTION_ID>
166
- ```
167
-
168
- 4. **Configure GitHub Secrets:**
169
- - `AZURE_CLIENT_ID` - App registration client ID
170
- - `AZURE_TENANT_ID` - Tenant ID
171
- - `AZURE_SUBSCRIPTION_ID` - Subscription ID
172
-
173
- **Workflow Usage:**
174
- ```yaml
175
- - name: Azure Login (OIDC)
176
- uses: azure/login@v1
177
- with:
178
- client-id: ${{ secrets.AZURE_CLIENT_ID }}
179
- tenant-id: ${{ secrets.AZURE_TENANT_ID }}
180
- subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
181
- ```
182
-
183
- ### GitHub Container Registry (NextJS-Supabase)
184
-
185
- **Setup:**
186
-
187
- 1. **Enable GHCR:**
188
- - No additional setup needed - `GITHUB_TOKEN` is auto-provided
189
-
190
- 2. **Workflow Usage:**
191
- ```yaml
192
- - name: Login to GHCR
193
- uses: docker/login-action@v3
194
- with:
195
- registry: ghcr.io
196
- username: ${{ github.actor }}
197
- password: ${{ secrets.GITHUB_TOKEN }}
198
- ```
199
-
200
- 3. **Image Naming:**
201
- ```yaml
202
- image: ghcr.io/${{ github.repository_owner }}/myapp:${{ github.sha }}
203
- ```
204
-
205
- ---
206
-
207
- ## 📝 Handlebars Variables & Helpers
208
-
209
- ### Auto-Injected Variables
210
-
211
- | Variable | Example | Source |
212
- |----------|---------|--------|
213
- | `{{APP_NAME}}` | `myapp` | config.json → project.name |
214
- | `{{DOTNET_VERSION}}` | `10.0` | config.json → dotnet.version |
215
- | `{{GITHUB_OWNER}}` | `myorg` | config.json → repository.owner |
216
- | `{{DATE}}` | `2026-02-18` | Generated at render time |
217
- | `{{YEAR}}` | `2026` | Generated at render time |
218
-
219
- ### Handlebars Helpers
220
-
221
- | Helper | Input | Output | Use Case |
222
- |--------|-------|--------|----------|
223
- | `{{kebabCase str}}` | `MyApp` | `my-app` | Docker image names, Azure resources |
224
- | `{{pascalCase str}}` | `my-app` | `MyApp` | Class names (rarely needed in YAML) |
225
- | `{{camelCase str}}` | `my-app` | `myApp` | Variables (rarely needed in YAML) |
226
-
227
- ### Escaping GitHub Actions Syntax
228
-
229
- **Problem:** GitHub Actions uses `${{ }}` syntax, which conflicts with Handlebars.
230
-
231
- **Solution:** Use `{{{{raw}}}}` blocks to preserve GitHub Actions syntax:
232
-
233
- ```yaml
234
- # WRONG (Handlebars will interpret this)
235
- dotnet-version: ${{ inputs.dotnet-version }}
236
-
237
- # CORRECT (Escaped for GitHub Actions)
238
- dotnet-version: {{{{raw}}}}${{ inputs.dotnet-version }}{{{{/raw}}}}
239
- ```
240
-
241
- **In Templates:**
242
- ```handlebars
243
- {{#if run-tests}}
244
- - name: Test
245
- run: dotnet test --configuration {{{{raw}}}}${{ inputs.build-configuration }}{{{{/raw}}}}
246
- {{/if}}
247
- ```
248
-
249
- ---
250
-
251
- ## 🚀 Template Rendering Process
252
-
253
- ### GitHub Actions Constraint
254
-
255
- ❌ **GitHub Actions CANNOT reference parent directories**
256
- - Example: `uses: ../../../../framework/templates/...` ❌ NOT SUPPORTED
257
-
258
- ✅ **Solution:** Render framework templates into each stack's `.github/` directory
259
-
260
- **Rendering Flow:**
261
- ```
262
- framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs
263
- ↓ (render with Handlebars)
264
- stacks/blazor-azure/.github/workflows/dotnet-build.yml
265
- ↓ (commit to repo)
266
- GitHub Actions execution
267
- ```
268
-
269
- ### Rendering Command (Manual for Now)
270
-
271
- **Current Approach:**
272
- ```bash
273
- # Manual rendering using Node.js script (future: CLI command)
274
- node scripts/render-github-workflows.js \
275
- --stack blazor-azure \
276
- --app-name myapp \
277
- --dotnet-version 10.0 \
278
- --output stacks/blazor-azure/.github/
279
- ```
280
-
281
- **Future CLI Command:**
282
- ```bash
283
- # Planned (not yet implemented)
284
- morph-spec template render github-workflows \
285
- --stack blazor-azure \
286
- --environment prod \
287
- --output stacks/blazor-azure/.github/
288
- ```
289
-
290
- ### What Gets Committed
291
-
292
- ✅ **Commit:** Rendered `.yml` files in `.github/workflows/` and `.github/actions/`
293
- ❌ **Don't Commit:** Template sources (`.yml.hbs` files) - these stay in `.morph/framework/templates/`
294
-
295
- **Example:**
296
- ```
297
- # Committed to repo:
298
- .github/
299
- ├── workflows/
300
- │ ├── ci-build.yml # Rendered from template
301
- │ ├── cd-staging.yml # Rendered from template
302
- │ └── cd-prod.yml # Rendered from template
303
- └── actions/
304
- └── azure-auth/
305
- └── action.yml # Rendered from template
306
-
307
- # NOT committed (template sources):
308
- .morph/framework/templates/infrastructure/github/
309
- ├── workflows/
310
- │ ├── ci-build.yml.hbs # Template source
311
- │ └── ...
312
- ```
313
-
314
- ---
315
-
316
- ## 🔀 Stack Override Mechanism
317
-
318
- Templates follow the 3-tier resolution hierarchy:
319
-
320
- 1. **Project-local** (highest priority)
321
- - `.morph/framework/templates/infrastructure/github/workflows/ci-build.yml.hbs`
322
- - Use for project-specific customizations
323
-
324
- 2. **Stack default** (medium priority)
325
- - `stacks/blazor-azure/.morph/framework/templates/infrastructure/github/workflows/ci-build.yml.hbs`
326
- - Stack-specific workflows (production, staging, CI)
327
-
328
- 3. **Framework fallback** (lowest priority)
329
- - `framework/templates/infrastructure/github/workflows/dotnet-build.yml.hbs`
330
- - Reusable fragments called by stack workflows
331
-
332
- **Example:**
333
-
334
- Stack workflow `cd-prod.yml.hbs` **calls** framework workflow `dotnet-build.yml.hbs`:
335
- ```yaml
336
- # Stack: stacks/blazor-azure/.morph/framework/templates/.../cd-prod.yml.hbs
337
- jobs:
338
- build:
339
- uses: ./.github/workflows/dotnet-build.yml # Framework template (rendered)
340
- with:
341
- dotnet-version: '{{DOTNET_VERSION}}'
342
- ```
343
-
344
- ---
345
-
346
- ## 🧪 Testing & Validation
347
-
348
- ### Local Testing with `act`
349
-
350
- Use [act](https://github.com/nektos/act) to test GitHub Actions locally:
351
-
352
- ```bash
353
- # Install act
354
- brew install act # macOS
355
- # or: choco install act # Windows
356
-
357
- # List all workflows
358
- cd stacks/blazor-azure
359
- act -l
360
-
361
- # Dry run (validate syntax)
362
- act --dry-run
363
-
364
- # Run specific workflow
365
- act push -W .github/workflows/ci-build.yml
366
-
367
- # Run with secrets (from .secrets file)
368
- act push --secret-file .secrets
369
- ```
370
-
371
- ### Syntax Validation
372
-
373
- **Validate YAML syntax:**
374
- ```bash
375
- # Using yamllint
376
- yamllint .github/workflows/*.yml
377
-
378
- # Using actionlint (GitHub Actions-specific)
379
- actionlint .github/workflows/*.yml
380
- ```
381
-
382
- ### Integration Testing
383
-
384
- **Test in Staging First:**
385
- 1. Push to `staging` branch
386
- 2. Monitor workflow execution in GitHub Actions tab
387
- 3. Verify deployment to staging environment
388
- 4. Test health endpoints
389
- 5. Once validated, merge to `main` for production
390
-
391
- ---
392
-
393
- ## 📊 Workflow Examples
394
-
395
- ### Example 1: CI Build (Blazor-Azure)
396
-
397
- **Stack Template:** `stacks/blazor-azure/.morph/framework/templates/infrastructure/github/workflows/ci-build.yml.hbs`
398
-
399
- ```yaml
400
- name: CI Build
401
-
402
- on:
403
- pull_request:
404
- branches: [main, staging]
405
- push:
406
- branches: [main, staging]
407
-
408
- jobs:
409
- build:
410
- uses: ./.github/workflows/dotnet-build.yml
411
- with:
412
- dotnet-version: '{{DOTNET_VERSION}}'
413
- build-configuration: 'Release'
414
- run-tests: true
415
-
416
- security:
417
- runs-on: ubuntu-latest
418
- steps:
419
- - uses: actions/checkout@v4
420
-
421
- - name: Check vulnerable packages
422
- run: dotnet list package --vulnerable --include-transitive
423
- ```
424
-
425
- ### Example 2: Production Deployment (NextJS-Supabase)
426
-
427
- **Stack Template:** `stacks/nextjs-supabase/.morph/framework/templates/infrastructure/github/workflows/cd-prod.yml.hbs`
428
-
429
- ```yaml
430
- name: Deploy to Production
431
-
432
- on:
433
- push:
434
- branches: [main]
435
-
436
- jobs:
437
- build-docker:
438
- uses: ./.github/workflows/docker-build-push.yml
439
- with:
440
- registry: 'ghcr.io'
441
- image-name: '{{GITHUB_OWNER}}/{{kebabCase APP_NAME}}'
442
- dockerfile-path: 'Dockerfile'
443
- secrets: inherit
444
-
445
- deploy:
446
- needs: build-docker
447
- uses: ./.github/workflows/deploy-easypanel.yml
448
- with:
449
- environment: 'production'
450
- image: {{{{raw}}}}${{ needs.build-docker.outputs.image-tag }}{{{{/raw}}}}
451
- secrets: inherit
452
- ```
453
-
454
- ---
455
-
456
- ## 🔧 Customization Guide
457
-
458
- ### Creating Stack-Specific Workflows
459
-
460
- 1. **Create override template:**
461
- ```bash
462
- mkdir -p stacks/blazor-azure/.morph/framework/templates/infrastructure/github/workflows
463
- ```
464
-
465
- 2. **Copy framework template:**
466
- ```bash
467
- cp framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs \
468
- stacks/blazor-azure/.morph/framework/templates/infrastructure/github/workflows/
469
- ```
470
-
471
- 3. **Customize:**
472
- - Add stack-specific jobs (e.g., blue-green deployment)
473
- - Modify environment variables
474
- - Add security scanning steps
475
-
476
- 4. **Render:**
477
- ```bash
478
- # Manual rendering (future: CLI command)
479
- node scripts/render-github-workflows.js --stack blazor-azure
480
- ```
481
-
482
- ### Adding Custom Composite Actions
483
-
484
- 1. **Create action directory:**
485
- ```bash
486
- mkdir -p framework/templates/infrastructure/github/actions/my-action
487
- ```
488
-
489
- 2. **Create `action.yml.hbs`:**
490
- ```yaml
491
- name: 'My Custom Action'
492
- description: 'Description here'
493
- inputs:
494
- my-input:
495
- description: 'Input description'
496
- required: true
497
-
498
- runs:
499
- using: 'composite'
500
- steps:
501
- - name: Do something
502
- shell: bash
503
- run: |
504
- echo "Input: {{{{raw}}}}${{ inputs.my-input }}{{{{/raw}}}}"
505
- ```
506
-
507
- 3. **Register in REGISTRY.json:**
508
- ```json
509
- {
510
- "id": "github-action-my-action",
511
- "name": "My Custom Action",
512
- "path": "infrastructure/github/actions/my-action/action.yml.hbs",
513
- "location": "framework",
514
- "category": "infrastructure",
515
- "technology": "github-actions",
516
- "engine": "handlebars"
517
- }
518
- ```
519
-
520
- ---
521
-
522
- ## 📚 Resources
523
-
524
- - [GitHub Actions Documentation](https://docs.github.com/en/actions)
525
- - [Reusable Workflows](https://docs.github.com/en/actions/using-workflows/reusing-workflows)
526
- - [Composite Actions](https://docs.github.com/en/actions/creating-actions/creating-a-composite-action)
527
- - [Azure Login Action](https://github.com/Azure/login)
528
- - [Docker Login Action](https://github.com/docker/login-action)
529
- - [OIDC in Azure](https://docs.microsoft.com/en-us/azure/active-directory/develop/workload-identity-federation)
530
-
531
- ---
532
-
533
- ## 🐛 Troubleshooting
534
-
535
- ### Common Issues
536
-
537
- **Issue 1: "uses: path is not valid"**
538
- ```yaml
539
- # WRONG
540
- uses: ../../../../framework/templates/.../workflow.yml
541
-
542
- # CORRECT
543
- uses: ./.github/workflows/workflow.yml # Rendered template
544
- ```
545
-
546
- **Issue 2: Handlebars placeholders in rendered YAML**
547
- ```yaml
548
- # Check for unreplaced placeholders
549
- grep -r "{{" .github/workflows/
550
-
551
- # If found, ensure rendering process completed successfully
552
- ```
553
-
554
- **Issue 3: OIDC authentication fails**
555
- ```
556
- Error: Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable
557
- ```
558
-
559
- **Fix:** Ensure federated credentials are configured correctly in Azure AD:
560
- ```bash
561
- # Verify federated credential
562
- az ad app federated-credential show \
563
- --id <APP_ID> \
564
- --federated-credential-id github-prod
565
- ```
566
-
567
- **Issue 4: Health check fails**
568
- ```
569
- curl: (7) Failed to connect to app-myapp-prod.azurewebsites.net
570
- ```
571
-
572
- **Fix:** Add startup delay before health check:
573
- ```yaml
574
- - name: Wait for app startup
575
- run: sleep 30
576
-
577
- - name: Health Check
578
- run: curl --retry 10 --retry-delay 5 ...
579
- ```
580
-
581
- ---
582
-
583
- ## 🎯 Summary
584
-
585
- - ✅ **Framework-level reusability** across blazor-azure and nextjs-supabase stacks
586
- - ✅ **Handlebars v2.0 templating** with helpers (kebabCase, pascalCase, etc.)
587
- - ✅ **OIDC authentication** for Azure (modern, secure, no long-lived secrets)
588
- - ✅ **Composite actions** for shared logic (docker-build-push, health-check, azure-auth)
589
- - ✅ **Reusable workflows** for complete pipelines (dotnet-build, deploy-azure-app-service)
590
- - ✅ **Stack override mechanism** for customization (3-tier resolution)
591
- - ✅ **Rendered outputs committed** to `.github/` (GitHub Actions constraint)
592
-
593
- For questions or issues, see [framework/templates/README.md](../README.md) or open a GitHub issue.
1
+ # GitHub Actions Templates for MORPH-SPEC
2
+
3
+ > **Framework-Level CI/CD Templates for EasyPanel/Docker Deployments**
4
+
5
+ ## Overview
6
+
7
+ Reusable GitHub Actions workflows and composite actions for the **nextjs-supabase** stack (EasyPanel/Docker deployment).
8
+
9
+ **Key Features:**
10
+ - Handlebars v2.0 templating with helpers
11
+ - Composite actions for shared logic
12
+ - Docker multi-stage builds (.NET API + Next.js Web)
13
+ - EasyPanel webhook deployment
14
+
15
+ ---
16
+
17
+ ## Structure
18
+
19
+ ```
20
+ infrastructure/github/
21
+ ├── workflows/
22
+ │ ├── dotnet-build.yml.hbs # .NET restore, build, test, coverage
23
+ │ ├── docker-build-push.yml.hbs # Docker build & push to registry
24
+ │ └── deploy-easypanel.yml.hbs # EasyPanel deployment via webhook
25
+ │
26
+ └── actions/
27
+ ├── docker-build-push/action.yml.hbs # Build & push Docker image
28
+ └── health-check/action.yml.hbs # Poll health endpoint
29
+ ```
30
+
31
+ ## Workflows
32
+
33
+ ### .NET Build (`dotnet-build.yml.hbs`)
34
+ - Restore, build, test with coverage
35
+ - Uploads test results and coverage artifacts
36
+
37
+ ### Docker Build & Push (`docker-build-push.yml.hbs`)
38
+ - Multi-stage Docker build
39
+ - Push to container registry (GHCR or Docker Hub)
40
+
41
+ ### Deploy EasyPanel (`deploy-easypanel.yml.hbs`)
42
+ - Triggers EasyPanel webhook after Docker push
43
+ - Runs health check after deployment
44
+ - Supports staging + production environments
45
+
46
+ ## Usage
47
+
48
+ Templates are rendered during `morph-spec init` based on project stack configuration.
49
+
50
+ ```bash
51
+ morph-spec init --stack nextjs-supabase
52
+ ```
53
+
54
+ ---
55
+
56
+ *MORPH-SPEC by Polymorphism Tech*
@@ -4,7 +4,6 @@
4
4
  // ==============================================================================
5
5
 
6
6
  using Microsoft.AspNetCore.Authentication;
7
- using Microsoft.AspNetCore.Components.Authorization;
8
7
  using System.Security.Claims;
9
8
 
10
9
  namespace {{Namespace}}.Infrastructure.Auth;
@@ -74,44 +73,6 @@ public static class ClerkServiceExtensions
74
73
  return services;
75
74
  }
76
75
 
77
- /// <summary>
78
- /// Adiciona Clerk para Blazor Server
79
- /// </summary>
80
- public static IServiceCollection AddClerkBlazor(
81
- this IServiceCollection services,
82
- IConfiguration configuration)
83
- {
84
- services.AddClerkAuthentication(configuration);
85
- services.AddScoped<AuthenticationStateProvider, ClerkAuthenticationStateProvider>();
86
- services.AddCascadingAuthenticationState();
87
-
88
- return services;
89
- }
90
- }
91
-
92
- // ==============================================================================
93
- // AUTHENTICATION STATE PROVIDER (Blazor)
94
- // ==============================================================================
95
-
96
- public class ClerkAuthenticationStateProvider : AuthenticationStateProvider
97
- {
98
- private readonly IHttpContextAccessor _httpContextAccessor;
99
-
100
- public ClerkAuthenticationStateProvider(IHttpContextAccessor httpContextAccessor)
101
- {
102
- _httpContextAccessor = httpContextAccessor;
103
- }
104
-
105
- public override Task<AuthenticationState> GetAuthenticationStateAsync()
106
- {
107
- var user = _httpContextAccessor.HttpContext?.User ?? new ClaimsPrincipal();
108
- return Task.FromResult(new AuthenticationState(user));
109
- }
110
-
111
- public void NotifyAuthenticationStateChanged()
112
- {
113
- NotifyAuthenticationStateChanged(GetAuthenticationStateAsync());
114
- }
115
76
  }
116
77
 
117
78
  // ==============================================================================
@@ -245,8 +206,6 @@ var builder = WebApplication.CreateBuilder(args);
245
206
 
246
207
  // Add Clerk authentication
247
208
  builder.Services.AddClerkAuthentication(builder.Configuration);
248
- // Or for Blazor:
249
- // builder.Services.AddClerkBlazor(builder.Configuration);
250
209
 
251
210
  var app = builder.Build();
252
211