@polymorphism-tech/morph-spec 4.12.0 → 4.14.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 (316) hide show
  1. package/CLAUDE.md +7 -7
  2. package/README.md +28 -34
  3. package/bin/morph-spec.js +41 -24
  4. package/bin/task-manager.js +962 -1341
  5. package/bin/validate.js +1 -1
  6. package/claude-plugin.json +1 -1
  7. package/docs/CHEATSHEET.md +14 -16
  8. package/docs/QUICKSTART.md +15 -15
  9. package/framework/CLAUDE.md +5 -2
  10. package/framework/agents/README.md +3 -4
  11. package/framework/agents/ai-agents/ai-system-architect.md +6 -10
  12. package/framework/agents/architecture/seo-growth-hacker.md +166 -326
  13. package/framework/agents/architecture/standards-architect.md +21 -31
  14. package/framework/agents/backend/dotnet-senior.md +160 -86
  15. package/framework/agents/backend/ef-modeler.md +2 -6
  16. package/framework/agents/backend/hangfire-orchestrator.md +8 -9
  17. package/framework/agents/backend/ms-agent-expert.md +1 -1
  18. package/framework/agents/frontend/nextjs-expert.md +198 -133
  19. package/framework/agents/frontend/ui-ux-designer.md +226 -267
  20. package/framework/agents/infrastructure/infra-architect.md +191 -27
  21. package/framework/agents/integrations/clerk-auth.md +19 -26
  22. package/framework/agents/integrations/hangfire-integration.md +1 -4
  23. package/framework/agents.json +1084 -2278
  24. package/framework/commands/morph-apply.md +4 -6
  25. package/framework/commands/morph-preflight.md +192 -269
  26. package/framework/commands/morph-proposal.md +210 -238
  27. package/framework/commands/morph-status.md +72 -92
  28. package/framework/commands/morph-troubleshoot.md +6 -13
  29. package/framework/hooks/README.md +1 -6
  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/phase-utils.js +4 -8
  42. package/framework/hooks/shared/state-reader.js +34 -3
  43. package/framework/phases.json +162 -200
  44. package/framework/rules/ai-agents-standards.md +15 -0
  45. package/framework/rules/asaas-standards.md +13 -0
  46. package/framework/rules/clerk-standards.md +13 -0
  47. package/framework/rules/csharp-standards.md +8 -4
  48. package/framework/rules/data-standards.md +18 -0
  49. package/framework/rules/dotnet-templates.md +87 -0
  50. package/framework/rules/frontend-standards.md +13 -13
  51. package/framework/rules/hangfire-standards.md +13 -0
  52. package/framework/rules/infrastructure-standards.md +27 -16
  53. package/framework/rules/morph-workflow.md +73 -13
  54. package/framework/rules/nextjs-standards.md +1 -0
  55. package/framework/rules/nextjs-templates.md +40 -0
  56. package/framework/rules/resend-standards.md +12 -0
  57. package/framework/rules/supabase-standards.md +29 -0
  58. package/framework/skills/README.md +6 -8
  59. package/framework/skills/level-0-meta/mcp-registry.json +21 -99
  60. package/framework/{standards/ai-agents/team-orchestration.md → skills/level-0-meta/morph-agent-teams/SKILL.md} +472 -479
  61. package/framework/skills/level-0-meta/morph-brainstorming/SKILL.md +28 -1
  62. package/framework/skills/level-0-meta/morph-checklist/SKILL.md +2 -2
  63. package/framework/skills/level-0-meta/morph-code-review/SKILL.md +1 -5
  64. package/framework/skills/level-0-meta/morph-code-review/scripts/scan-csharp.mjs +1 -1
  65. package/framework/skills/level-0-meta/morph-frontend-review/SKILL.md +23 -41
  66. package/framework/skills/level-0-meta/morph-init/SKILL.md +18 -14
  67. package/framework/skills/level-0-meta/morph-parallel-dispatch/SKILL.md +225 -0
  68. package/framework/skills/level-0-meta/morph-post-implementation/SKILL.md +20 -0
  69. package/framework/skills/level-0-meta/morph-tool-usage-guide/SKILL.md +4 -8
  70. package/framework/skills/level-0-meta/morph-tool-usage-guide/references/tools-per-phase.md +15 -59
  71. package/framework/skills/level-0-meta/morph-verification-before-completion/SKILL.md +7 -19
  72. package/framework/skills/level-0-meta/morph-verification-before-completion/scripts/check-phase-outputs.mjs +8 -8
  73. package/framework/skills/level-1-workflows/README.md +1 -1
  74. package/framework/skills/level-1-workflows/morph-phase-codebase-analysis/SKILL.md +49 -50
  75. package/framework/skills/level-1-workflows/morph-phase-design/SKILL.md +57 -123
  76. package/framework/skills/level-1-workflows/morph-phase-design/references/architecture-analysis-guide.md +5 -50
  77. package/framework/skills/level-1-workflows/morph-phase-design/references/spec-example.md +1 -1
  78. package/framework/skills/level-1-workflows/morph-phase-implement/SKILL.md +127 -159
  79. package/framework/skills/level-1-workflows/morph-phase-implement/prompts/code-quality-reviewer-prompt.md +1 -1
  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 +143 -172
  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 +57 -77
  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 -2369
  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 +1 -5
  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/phase/phase-reset.js +1 -1
  159. package/src/commands/project/doctor.js +10 -32
  160. package/src/commands/project/init.js +12 -0
  161. package/src/commands/project/status.js +6 -12
  162. package/src/commands/scaffold/scaffold.js +131 -0
  163. package/src/commands/scope/escalate.js +1 -1
  164. package/src/commands/state/advance-phase.js +15 -29
  165. package/src/commands/state/state.js +20 -5
  166. package/src/commands/tasks/task.js +0 -30
  167. package/src/commands/validation/validate-feature.js +3 -10
  168. package/src/core/paths/output-schema.js +12 -13
  169. package/src/core/state/phase-state-machine.js +211 -217
  170. package/src/core/state/state-manager.js +9 -9
  171. package/src/lib/agents/agents-manager.js +2 -2
  172. package/src/lib/agents/output-collector.js +1 -2
  173. package/src/lib/detectors/design-system-detector.js +4 -4
  174. package/src/lib/detectors/index.js +1 -11
  175. package/src/lib/generators/architecture-scanner.js +640 -0
  176. package/src/lib/generators/context-generator.js +3 -3
  177. package/src/lib/generators/design-system-generator.js +508 -587
  178. package/src/lib/generators/index.js +12 -10
  179. package/src/lib/generators/metadata-extractor.js +386 -387
  180. package/src/lib/generators/recap-generator.js +4 -4
  181. package/src/lib/generators/scaffold-generator.js +317 -0
  182. package/src/lib/generators/settings-generator.js +0 -1
  183. package/src/lib/phase-chain/phase-validator.js +64 -42
  184. package/src/lib/stack/stack-profile.js +2 -2
  185. package/src/lib/standards/digest-builder.js +72 -285
  186. package/src/lib/tasks/task-parser.js +11 -5
  187. package/src/lib/validators/architecture/architecture-validator.js +259 -387
  188. package/src/lib/validators/content/content-validator.js +287 -287
  189. package/src/lib/validators/css/css-validator.js +340 -352
  190. package/src/lib/validators/packages/package-validator.js +347 -360
  191. package/src/lib/validators/shared/issue-counter.js +14 -18
  192. package/src/lib/validators/validation-runner.js +3 -19
  193. package/src/scripts/setup-infra.js +1 -1
  194. package/src/utils/agents-installer.js +61 -10
  195. package/src/utils/file-copier.js +1 -0
  196. package/src/utils/hooks-installer.js +11 -19
  197. package/src/utils/skills-installer.js +178 -178
  198. package/framework/agents/architecture/prompt-engineer.md +0 -195
  199. package/framework/agents/backend/api-designer.md +0 -106
  200. package/framework/agents/frontend/blazor-builder.md +0 -229
  201. package/framework/agents/frontend/nextjs-ui-specialist.md +0 -218
  202. package/framework/agents/infrastructure/azure-architect.md +0 -150
  203. package/framework/agents/infrastructure/azure-deploy-specialist.md +0 -707
  204. package/framework/agents/infrastructure/bicep-architect.md +0 -132
  205. package/framework/agents/infrastructure/container-specialist.md +0 -137
  206. package/framework/agents/infrastructure/devops-engineer.md +0 -126
  207. package/framework/agents/integrations/azure-identity.md +0 -148
  208. package/framework/agents/quality/code-analyzer.md +0 -239
  209. package/framework/agents/quality/testing-specialist.md +0 -130
  210. package/framework/hooks/claude-code/notification/approval-reminder.js +0 -57
  211. package/framework/hooks/claude-code/post-tool-use/context-refresh.js +0 -109
  212. package/framework/hooks/claude-code/post-tool-use/skill-reminder.js +0 -78
  213. package/framework/index/troubleshooting-index.json +0 -184
  214. package/framework/rules/testing-standards.md +0 -14
  215. package/framework/skills/level-0-meta/morph-replicate/SKILL.md +0 -230
  216. package/framework/skills/level-0-meta/morph-replicate/references/blazor-html-mapping.md +0 -70
  217. package/framework/skills/level-1-workflows/morph-phase-clarify/SKILL.md +0 -256
  218. package/framework/skills/level-1-workflows/morph-phase-clarify/references/clarifications-example.md +0 -117
  219. package/framework/skills/level-1-workflows/morph-phase-setup/SKILL.md +0 -269
  220. package/framework/standards/ai-agents/blazor-ui.md +0 -364
  221. package/framework/standards/architecture/ddd/aggregates.md +0 -120
  222. package/framework/standards/architecture/ddd/bounded-contexts.md +0 -105
  223. package/framework/standards/architecture/ddd/complexity-levels.md +0 -108
  224. package/framework/standards/architecture/ddd/entities.md +0 -99
  225. package/framework/standards/architecture/ddd/ubiquitous-language.md +0 -58
  226. package/framework/standards/architecture/ddd/value-objects.md +0 -124
  227. package/framework/standards/backend/api/minimal-api.md +0 -494
  228. package/framework/standards/backend/api/rest.md +0 -492
  229. package/framework/standards/backend/authentication/passkeys.md +0 -428
  230. package/framework/standards/backend/database/ef-core.md +0 -199
  231. package/framework/standards/backend/database/migrations.md +0 -393
  232. package/framework/standards/backend/database/repository-patterns.md +0 -528
  233. package/framework/standards/backend/dotnet/async.md +0 -366
  234. package/framework/standards/backend/dotnet/core.md +0 -117
  235. package/framework/standards/backend/dotnet/di.md +0 -439
  236. package/framework/standards/backend/dotnet/program-cs-checklist.md +0 -92
  237. package/framework/standards/context/analytics.md +0 -96
  238. package/framework/standards/context/bundles.md +0 -110
  239. package/framework/standards/context/priming.md +0 -78
  240. package/framework/standards/core/architecture.md +0 -185
  241. package/framework/standards/core/coding.md +0 -214
  242. package/framework/standards/core/git-branching-strategy.md +0 -403
  243. package/framework/standards/core/git.md +0 -185
  244. package/framework/standards/core/testing.md +0 -295
  245. package/framework/standards/data/nosql/blob-storage.md +0 -102
  246. package/framework/standards/data/vector-search/azure-ai-search.md +0 -121
  247. package/framework/standards/frontend/blazor/design-checklist.md +0 -222
  248. package/framework/standards/frontend/blazor/fluent-ui-setup.md +0 -595
  249. package/framework/standards/frontend/blazor/fluent-ui.md +0 -137
  250. package/framework/standards/frontend/blazor/html-conversion.md +0 -184
  251. package/framework/standards/frontend/blazor/lifecycle.md +0 -195
  252. package/framework/standards/frontend/blazor/pitfalls.md +0 -198
  253. package/framework/standards/frontend/blazor/state.md +0 -191
  254. package/framework/standards/frontend/design-system/aesthetic-direction.md +0 -266
  255. package/framework/standards/frontend/design-system/design-trends.md +0 -171
  256. package/framework/standards/infrastructure/azure/azure.md +0 -624
  257. package/framework/standards/infrastructure/azure/bicep/bicep-patterns.md +0 -422
  258. package/framework/standards/infrastructure/azure/devops/azure-devops-setup.md +0 -516
  259. package/framework/standards/infrastructure/azure/devops/local-development.md +0 -520
  260. package/framework/standards/infrastructure/azure/services/functions.md +0 -486
  261. package/framework/standards/infrastructure/azure/services/service-bus.md +0 -459
  262. package/framework/standards/infrastructure/azure/services/storage.md +0 -407
  263. package/framework/standards/infrastructure/vercel/vercel-database.md +0 -106
  264. package/framework/standards/integration/api/graphql.md +0 -91
  265. package/framework/standards/integration/api/grpc.md +0 -114
  266. package/framework/standards/integration/api/rest-design.md +0 -95
  267. package/framework/standards/integration/event-driven/cqrs.md +0 -101
  268. package/framework/standards/integration/event-driven/event-sourcing.md +0 -124
  269. package/framework/standards/integration/event-driven/service-bus.md +0 -95
  270. package/framework/standards/observability/logging.md +0 -131
  271. package/framework/standards/observability/metrics.md +0 -121
  272. package/framework/standards/observability/monitoring.md +0 -114
  273. package/framework/standards/observability/tracing.md +0 -132
  274. package/framework/standards/workflows/parallel-execution.md +0 -112
  275. package/framework/standards/workflows/thread-management.md +0 -113
  276. package/framework/templates/code/dotnet/backend/service.cs +0 -139
  277. package/framework/templates/code/dotnet/contracts/Commands.cs +0 -74
  278. package/framework/templates/code/dotnet/contracts/Entities.cs +0 -25
  279. package/framework/templates/code/dotnet/contracts/Queries.cs +0 -74
  280. package/framework/templates/code/dotnet/contracts/api-contracts.cs +0 -173
  281. package/framework/templates/code/dotnet/contracts/contracts-level1.cs +0 -69
  282. package/framework/templates/code/dotnet/contracts/contracts-level2.cs +0 -86
  283. package/framework/templates/code/dotnet/contracts/contracts-level3.cs +0 -41
  284. package/framework/templates/code/dotnet/frontend/component.razor +0 -239
  285. package/framework/templates/infrastructure/azure/Dockerfile.example +0 -82
  286. package/framework/templates/infrastructure/azure/README.md +0 -286
  287. package/framework/templates/infrastructure/azure/app-insights.bicep +0 -63
  288. package/framework/templates/infrastructure/azure/app-service.bicep +0 -164
  289. package/framework/templates/infrastructure/azure/container-app-env.bicep +0 -49
  290. package/framework/templates/infrastructure/azure/container-app.bicep +0 -156
  291. package/framework/templates/infrastructure/azure/deploy-checklist.md +0 -426
  292. package/framework/templates/infrastructure/azure/deploy.ps1 +0 -229
  293. package/framework/templates/infrastructure/azure/deploy.sh +0 -208
  294. package/framework/templates/infrastructure/azure/key-vault.bicep +0 -91
  295. package/framework/templates/infrastructure/azure/main.bicep +0 -189
  296. package/framework/templates/infrastructure/azure/parameters.dev.json +0 -29
  297. package/framework/templates/infrastructure/azure/parameters.prod.json +0 -29
  298. package/framework/templates/infrastructure/azure/parameters.staging.json +0 -29
  299. package/framework/templates/infrastructure/azure/sql-database.bicep +0 -103
  300. package/framework/templates/infrastructure/azure/storage.bicep +0 -106
  301. package/framework/templates/infrastructure/github/actions/azure-auth/action.yml.hbs +0 -22
  302. package/framework/templates/infrastructure/github/workflows/deploy-azure-app-service.yml.hbs +0 -61
  303. package/framework/templates/integrations/azure-identity-config.cs +0 -288
  304. package/framework/templates/project-structure/dotnet-ddd.md +0 -70
  305. package/framework/templates/saas/subscription.cs +0 -347
  306. package/framework/templates/saas/tenant.cs +0 -338
  307. package/framework/templates/ui/FluentDesignTheme.cs +0 -149
  308. package/framework/templates/ui/MudTheme.cs +0 -281
  309. package/framework/workflows/configs/nodejs-cli.json +0 -40
  310. package/src/commands/standards/context-budget.js +0 -89
  311. package/src/lib/standards/index.js +0 -7
  312. package/src/lib/standards/standards-context-injector.js +0 -302
  313. package/src/lib/validators/blazor/blazor-concurrency-analyzer.js +0 -316
  314. package/src/lib/validators/blazor/blazor-state-validator.js +0 -279
  315. package/src/lib/validators/blazor/blazor-validator.js +0 -369
  316. 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