@polymorphism-tech/morph-spec 2.4.0 → 3.0.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.
- package/CLAUDE.md +158 -26
- package/LICENSE +72 -72
- package/bin/detect-agents.js +225 -225
- package/bin/morph-spec.js +8 -0
- package/bin/render-template.js +302 -302
- package/bin/semantic-detect-agents.js +246 -246
- package/bin/validate-agents-skills.js +251 -251
- package/bin/validate-agents.js +69 -69
- package/bin/validate-phase.js +263 -263
- package/content/.azure/README.md +293 -293
- package/content/.azure/docs/azure-devops-setup.md +454 -454
- package/content/.azure/docs/branch-strategy.md +398 -398
- package/content/.azure/docs/local-development.md +515 -515
- package/content/.azure/pipelines/pipeline-variables.yml +34 -34
- package/content/.azure/pipelines/prod-pipeline.yml +319 -319
- package/content/.azure/pipelines/staging-pipeline.yml +234 -234
- package/content/.azure/pipelines/templates/build-dotnet.yml +75 -75
- package/content/.azure/pipelines/templates/deploy-app-service.yml +94 -94
- package/content/.azure/pipelines/templates/deploy-container-app.yml +120 -120
- package/content/.azure/pipelines/templates/infra-deploy.yml +90 -90
- package/content/.claude/commands/morph-archive.md +79 -79
- package/content/.claude/commands/morph-deploy.md +529 -0
- package/content/.claude/commands/morph-infra.md +209 -209
- package/content/.claude/commands/morph-preflight.md +227 -227
- package/content/.claude/commands/morph-troubleshoot.md +122 -122
- package/content/.claude/settings.local.json +15 -15
- package/content/.claude/skills/infra/azure-deploy-specialist.md +699 -0
- package/content/.claude/skills/level-0-meta/README.md +7 -0
- package/content/.claude/skills/{checklists → level-0-meta}/morph-checklist.md +117 -117
- package/content/.claude/skills/level-1-workflows/README.md +7 -0
- package/content/.claude/skills/{workflows → level-1-workflows}/morph-replicate.md +213 -213
- package/content/.claude/skills/{workflows → level-1-workflows}/phase-clarify.md +131 -131
- package/content/.claude/skills/{workflows → level-1-workflows}/phase-design.md +213 -205
- package/content/.claude/skills/{workflows → level-1-workflows}/phase-setup.md +106 -92
- package/content/.claude/skills/{workflows → level-1-workflows}/phase-tasks.md +164 -164
- package/content/.claude/skills/{workflows → level-1-workflows}/phase-uiux.md +169 -138
- package/content/.claude/skills/level-2-domains/README.md +14 -0
- package/content/.claude/skills/{specialists → level-2-domains/quality}/testing-specialist.md +126 -126
- package/content/.claude/skills/level-3-technologies/README.md +7 -0
- package/content/.claude/skills/level-4-patterns/README.md +7 -0
- package/content/.claude/skills/specialists/prompt-engineer.md +189 -0
- package/content/.claude/skills/specialists/seo-growth-hacker.md +320 -0
- package/content/.morph/.morphversion +5 -5
- package/content/.morph/archive/.gitkeep +25 -25
- package/content/.morph/config/agents.json +742 -358
- package/content/.morph/config/config.template.json +33 -0
- package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -392
- package/content/.morph/docs/workflows/enforcement-pipeline.md +668 -0
- package/content/.morph/examples/api-nextjs/README.md +241 -241
- package/content/.morph/examples/api-nextjs/contracts.ts +307 -307
- package/content/.morph/examples/api-nextjs/spec.md +399 -399
- package/content/.morph/examples/api-nextjs/tasks.md +168 -168
- package/content/.morph/examples/micro-saas/README.md +125 -125
- package/content/.morph/examples/micro-saas/contracts.cs +358 -358
- package/content/.morph/examples/micro-saas/decisions.md +246 -246
- package/content/.morph/examples/micro-saas/spec.md +236 -236
- package/content/.morph/examples/micro-saas/tasks.md +150 -150
- package/content/.morph/examples/multi-agent/README.md +309 -309
- package/content/.morph/examples/multi-agent/contracts.cs +433 -433
- package/content/.morph/examples/multi-agent/spec.md +479 -479
- package/content/.morph/examples/multi-agent/tasks.md +185 -185
- package/content/.morph/examples/scheduled-reports/decisions.md +158 -158
- package/content/.morph/examples/scheduled-reports/proposal.md +95 -95
- package/content/.morph/examples/scheduled-reports/spec.md +267 -267
- package/content/.morph/examples/state-v3.json +188 -188
- package/content/.morph/features/.gitkeep +25 -25
- package/content/.morph/hooks/README.md +158 -0
- package/content/.morph/hooks/pre-commit-all.sh +48 -48
- package/content/.morph/hooks/pre-commit-specs.sh +49 -49
- package/content/.morph/hooks/pre-commit-tests.sh +60 -60
- package/content/.morph/hooks/task-completed.js +73 -0
- package/content/.morph/hooks/teammate-idle.js +68 -0
- package/content/.morph/project.md +160 -160
- package/content/.morph/schemas/agent.schema.json +296 -296
- package/content/.morph/schemas/tasks.schema.json +220 -220
- package/content/.morph/specs/.gitkeep +20 -20
- package/content/.morph/standards/agent-teams-workflow.md +474 -0
- package/content/.morph/standards/coding.md +377 -377
- package/content/.morph/standards/fluent-ui-setup.md +590 -590
- package/content/.morph/standards/migration-guide.md +514 -514
- package/content/.morph/standards/passkeys-auth.md +423 -423
- package/content/.morph/standards/vector-search-rag.md +536 -536
- package/content/.morph/state.json +17 -17
- package/content/.morph/templates/CONTEXT-FEATURE.md +276 -0
- package/content/.morph/templates/CONTEXT.md +170 -0
- package/content/.morph/templates/FluentDesignTheme.cs +149 -149
- package/content/.morph/templates/MudTheme.cs +281 -281
- package/content/.morph/templates/clarify-questions.md +159 -159
- package/content/.morph/templates/component.razor +239 -239
- package/content/.morph/templates/contracts/Commands.cs +74 -74
- package/content/.morph/templates/contracts/Entities.cs +25 -25
- package/content/.morph/templates/contracts/Queries.cs +74 -74
- package/content/.morph/templates/contracts/README.md +74 -74
- package/content/.morph/templates/contracts.cs +217 -217
- package/content/.morph/templates/design-system.css +226 -226
- package/content/.morph/templates/infra/.dockerignore.example +89 -89
- package/content/.morph/templates/infra/Dockerfile.example +82 -82
- package/content/.morph/templates/infra/README.md +286 -286
- package/content/.morph/templates/infra/app-insights.bicep +63 -63
- package/content/.morph/templates/infra/app-service.bicep +164 -164
- package/content/.morph/templates/infra/azure-pipelines-deploy.yml +480 -0
- package/content/.morph/templates/infra/container-app-env.bicep +49 -49
- package/content/.morph/templates/infra/container-app.bicep +156 -156
- package/content/.morph/templates/infra/deploy-checklist.md +426 -426
- package/content/.morph/templates/infra/deploy.ps1 +229 -229
- package/content/.morph/templates/infra/deploy.sh +208 -208
- package/content/.morph/templates/infra/key-vault.bicep +91 -91
- package/content/.morph/templates/infra/main.bicep +189 -189
- package/content/.morph/templates/infra/parameters.dev.json +29 -29
- package/content/.morph/templates/infra/parameters.prod.json +29 -29
- package/content/.morph/templates/infra/parameters.staging.json +29 -29
- package/content/.morph/templates/infra/sql-database.bicep +103 -103
- package/content/.morph/templates/infra/storage.bicep +106 -106
- package/content/.morph/templates/integrations/asaas-client.cs +387 -387
- package/content/.morph/templates/integrations/asaas-webhook.cs +351 -351
- package/content/.morph/templates/integrations/azure-identity-config.cs +288 -288
- package/content/.morph/templates/integrations/clerk-config.cs +258 -258
- package/content/.morph/templates/job.cs +171 -171
- package/content/.morph/templates/migration.cs +83 -83
- package/content/.morph/templates/repository.cs +141 -141
- package/content/.morph/templates/saas/subscription.cs +347 -347
- package/content/.morph/templates/saas/tenant.cs +338 -338
- package/content/.morph/templates/service.cs +139 -139
- package/content/.morph/templates/sprint-status.yaml +68 -68
- package/content/.morph/templates/story.md +143 -143
- package/content/.morph/templates/test.cs +239 -239
- package/content/.morph/templates/ui-design-system.md +286 -286
- package/content/.morph/templates/ui-flows.md +336 -336
- package/content/.morph/templates/ui-mockups.md +133 -133
- package/content/.morph/test-infra/example.bicep +59 -59
- package/content/README.md +79 -79
- package/detectors/config-detector.js +223 -223
- package/detectors/conversation-analyzer.js +163 -163
- package/detectors/index.js +84 -84
- package/detectors/standards-generator.js +275 -275
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +977 -977
- package/docs/api/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1048 -1048
- package/docs/api/scripts/collapse.js +38 -38
- package/docs/api/scripts/commonNav.js +28 -28
- package/docs/api/scripts/linenumber.js +25 -25
- package/docs/api/scripts/nav.js +12 -12
- package/docs/api/scripts/polyfill.js +3 -3
- package/docs/api/scripts/prettify/Apache-License-2.0.txt +202 -202
- package/docs/api/scripts/prettify/lang-css.js +2 -2
- package/docs/api/scripts/prettify/prettify.js +28 -28
- package/docs/api/scripts/search.js +98 -98
- package/docs/api/styles/jsdoc.css +776 -776
- package/docs/api/styles/prettify.css +80 -80
- package/docs/examples.md +328 -328
- package/docs/templates.md +418 -418
- package/package.json +1 -1
- package/scripts/postinstall.js +132 -132
- package/src/commands/advance-phase.js +83 -0
- package/src/commands/analyze-blazor-concurrency.js +193 -193
- package/src/commands/create-story.js +351 -351
- package/src/commands/deploy.js +780 -0
- package/src/commands/detect-agents.js +34 -6
- package/src/commands/detect.js +104 -104
- package/src/commands/generate-context.js +40 -0
- package/src/commands/generate.js +149 -149
- package/src/commands/lint-fluent.js +352 -352
- package/src/commands/rollback-phase.js +185 -185
- package/src/commands/session-summary.js +291 -291
- package/src/commands/shard-spec.js +224 -224
- package/src/commands/sprint-status.js +250 -250
- package/src/commands/state.js +333 -333
- package/src/commands/sync.js +167 -167
- package/src/commands/troubleshoot.js +222 -222
- package/src/commands/validate-blazor-state.js +210 -210
- package/src/commands/validate-blazor.js +156 -156
- package/src/commands/validate-css.js +84 -84
- package/src/commands/validate-phase.js +221 -221
- package/src/lib/blazor-concurrency-analyzer.js +288 -288
- package/src/lib/blazor-state-validator.js +291 -291
- package/src/lib/blazor-validator.js +374 -374
- package/src/lib/context-generator.js +513 -0
- package/src/lib/css-validator.js +352 -352
- package/src/lib/design-system-detector.js +187 -0
- package/src/lib/design-system-generator.js +298 -298
- package/src/lib/design-system-scaffolder.js +299 -0
- package/src/lib/hook-executor.js +256 -0
- package/src/lib/learning-system.js +520 -520
- package/src/lib/mockup-generator.js +366 -366
- package/src/lib/spec-validator.js +258 -0
- package/src/lib/standards-context-injector.js +287 -0
- package/src/lib/team-orchestrator.js +322 -0
- package/src/lib/troubleshoot-grep.js +194 -194
- package/src/lib/troubleshoot-index.js +144 -144
- package/src/lib/ui-detector.js +350 -350
- package/src/lib/validation-runner.js +65 -13
- package/src/lib/validators/architecture-validator.js +387 -387
- package/src/lib/validators/design-system-validator.js +231 -0
- package/src/lib/validators/package-validator.js +360 -360
- package/src/lib/validators/ui-contrast-validator.js +422 -422
- package/src/utils/file-copier.js +9 -1
- package/src/utils/logger.js +32 -32
- package/src/utils/version-checker.js +175 -175
- /package/content/.claude/skills/{checklists → level-0-meta}/code-review.md +0 -0
- /package/content/.claude/skills/{checklists → level-0-meta}/simulation-checklist.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/ai-agents}/ai-system-architect.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/architecture}/po-pm-advisor.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/architecture}/standards-architect.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/backend}/dotnet-senior.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/backend}/ef-modeler.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/backend}/hangfire-orchestrator.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/backend}/ms-agent-expert.md +0 -0
- /package/content/.claude/skills/{stacks/dotnet-blazor.md → level-2-domains/frontend/blazor-builder.md} +0 -0
- /package/content/.claude/skills/{stacks/dotnet-nextjs.md → level-2-domains/frontend/nextjs-expert.md} +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/frontend}/ui-ux-designer.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/infrastructure}/azure-architect.md +0 -0
- /package/content/.claude/skills/{infra → level-2-domains/infrastructure}/bicep-architect.md +0 -0
- /package/content/.claude/skills/{infra → level-2-domains/infrastructure}/container-specialist.md +0 -0
- /package/content/.claude/skills/{infra → level-2-domains/infrastructure}/devops-engineer.md +0 -0
- /package/content/.claude/skills/{integrations → level-2-domains/integrations}/asaas-financial.md +0 -0
- /package/content/.claude/skills/{integrations → level-2-domains/integrations}/azure-identity.md +0 -0
- /package/content/.claude/skills/{integrations → level-2-domains/integrations}/clerk-auth.md +0 -0
- /package/content/.claude/skills/{integrations → level-2-domains/integrations}/resend-email.md +0 -0
- /package/content/.claude/skills/{specialists → level-2-domains/quality}/code-analyzer.md +0 -0
|
@@ -1,227 +1,227 @@
|
|
|
1
|
-
# Pre-Flight Check for Azure Deployment
|
|
2
|
-
|
|
3
|
-
Validates project readiness before deploying to Azure.
|
|
4
|
-
|
|
5
|
-
## Uso
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
/morph-preflight azure
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Objetivo
|
|
12
|
-
|
|
13
|
-
Detectar problemas **antes** do deploy que causariam falhas em produção. Economiza tempo e evita debugging em ambiente Azure.
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
## Validações Executadas
|
|
18
|
-
|
|
19
|
-
### 1. Package Version Conflicts
|
|
20
|
-
|
|
21
|
-
**O que verifica:**
|
|
22
|
-
- `Azure.Identity` especificado explicitamente
|
|
23
|
-
- Sem conflitos de versão (NU1605, NU1608)
|
|
24
|
-
- Packages críticos com versões compatíveis
|
|
25
|
-
|
|
26
|
-
**Como verificar:**
|
|
27
|
-
```bash
|
|
28
|
-
dotnet restore --verbosity normal 2>&1 | grep -E "(NU1605|NU1608|warning)"
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
**Fix comum:**
|
|
32
|
-
```xml
|
|
33
|
-
<PackageReference Include="Azure.Identity" Version="1.14.2" />
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
### 2. EF Core Migrations
|
|
39
|
-
|
|
40
|
-
**O que verifica:**
|
|
41
|
-
- Sem pending model changes
|
|
42
|
-
- Migrations aplicáveis existem
|
|
43
|
-
- Migration scripts são válidos
|
|
44
|
-
|
|
45
|
-
**Como verificar:**
|
|
46
|
-
```bash
|
|
47
|
-
dotnet ef migrations has-pending-model-changes \
|
|
48
|
-
--project src/Infrastructure \
|
|
49
|
-
--startup-project src/Web
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
**Fix comum:**
|
|
53
|
-
```bash
|
|
54
|
-
dotnet ef migrations add <MigrationName> \
|
|
55
|
-
--project src/Infrastructure \
|
|
56
|
-
--startup-project src/Web
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
### 3. Dockerfile Validation (se Container Apps)
|
|
62
|
-
|
|
63
|
-
**O que verifica:**
|
|
64
|
-
- Dockerfile existe
|
|
65
|
-
- Base image é válida
|
|
66
|
-
- Multi-stage build configurado
|
|
67
|
-
- EXPOSE ports corretos
|
|
68
|
-
- ENTRYPOINT definido
|
|
69
|
-
|
|
70
|
-
**Como verificar:**
|
|
71
|
-
```bash
|
|
72
|
-
docker build --check .
|
|
73
|
-
# Ou validação manual do Dockerfile
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
### 4. Blazor .NET 10 Assets
|
|
79
|
-
|
|
80
|
-
**O que verifica:**
|
|
81
|
-
- `RequiresAspNetWebAssets` está `true` (se Blazor + .NET 10)
|
|
82
|
-
- Static web assets configurados corretamente
|
|
83
|
-
|
|
84
|
-
**Como verificar:**
|
|
85
|
-
```bash
|
|
86
|
-
grep -r "RequiresAspNetWebAssets" *.csproj
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
**Fix:**
|
|
90
|
-
```xml
|
|
91
|
-
<PropertyGroup>
|
|
92
|
-
<RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>
|
|
93
|
-
</PropertyGroup>
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
### 5. Bicep Syntax Validation
|
|
99
|
-
|
|
100
|
-
**O que verifica:**
|
|
101
|
-
- Arquivos `.bicep` sem erros de sintaxe
|
|
102
|
-
- Parâmetros obrigatórios definidos
|
|
103
|
-
- Resources com nomes válidos
|
|
104
|
-
|
|
105
|
-
**Como verificar:**
|
|
106
|
-
```bash
|
|
107
|
-
az bicep build --file infra/main.bicep --stdout > /dev/null
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
### 6. Key Vault Configuration
|
|
113
|
-
|
|
114
|
-
**O que verifica:**
|
|
115
|
-
- Key Vault URI configurado em `appsettings.json` ou environment
|
|
116
|
-
- Não condiciona Key Vault ao ambiente (bug comum)
|
|
117
|
-
- Managed Identity habilitada
|
|
118
|
-
|
|
119
|
-
**Como verificar:**
|
|
120
|
-
```bash
|
|
121
|
-
grep -r "KeyVaultUri\|AzureKeyVault" appsettings*.json
|
|
122
|
-
grep -r "IsDevelopment()" Program.cs | grep -i keyvault
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
**Anti-pattern a detectar:**
|
|
126
|
-
```csharp
|
|
127
|
-
// ❌ ERRADO - Não carrega Key Vault em dev!
|
|
128
|
-
if (!builder.Environment.IsDevelopment())
|
|
129
|
-
{
|
|
130
|
-
builder.Configuration.AddAzureKeyVault(...);
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
### 7. Connection Strings Security
|
|
137
|
-
|
|
138
|
-
**O que verifica:**
|
|
139
|
-
- Connection strings não hardcoded em código
|
|
140
|
-
- Secrets em Key Vault ou User Secrets
|
|
141
|
-
- Sem credentials em `appsettings.json` (exceto Development)
|
|
142
|
-
|
|
143
|
-
**Como verificar:**
|
|
144
|
-
```bash
|
|
145
|
-
# Detectar passwords em appsettings
|
|
146
|
-
grep -rE "(Password=|Pwd=|Secret=)" appsettings*.json | grep -v Development
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## Output Exemplo
|
|
152
|
-
|
|
153
|
-
```
|
|
154
|
-
🔍 MORPH Pre-Flight Check: Azure Deployment
|
|
155
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
156
|
-
|
|
157
|
-
✅ Packages: No version conflicts detected
|
|
158
|
-
✅ Migrations: No pending model changes
|
|
159
|
-
✅ Dockerfile: Valid multi-stage build
|
|
160
|
-
✅ Blazor Assets: RequiresAspNetWebAssets=true
|
|
161
|
-
✅ Bicep: Syntax valid
|
|
162
|
-
❌ Key Vault: URI not configured in appsettings.Production.json
|
|
163
|
-
⚠️ Connection Strings: Found password in appsettings.Staging.json
|
|
164
|
-
|
|
165
|
-
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
166
|
-
|
|
167
|
-
📋 Summary: 5 passed, 1 failed, 1 warning
|
|
168
|
-
|
|
169
|
-
❌ BLOCKED: Fix Key Vault configuration before deploy!
|
|
170
|
-
|
|
171
|
-
Recommended fixes:
|
|
172
|
-
1. Add KeyVaultUri to appsettings.Production.json
|
|
173
|
-
2. Move password from appsettings.Staging.json to Key Vault
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## Workflow de Uso
|
|
179
|
-
|
|
180
|
-
### Antes de criar PR para produção
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
/morph-preflight azure
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
### No pipeline CI/CD
|
|
187
|
-
|
|
188
|
-
```yaml
|
|
189
|
-
- script: |
|
|
190
|
-
# Package check
|
|
191
|
-
dotnet restore 2>&1 | grep -E "NU1605|NU1608" && exit 1
|
|
192
|
-
|
|
193
|
-
# Migration check
|
|
194
|
-
dotnet ef migrations has-pending-model-changes \
|
|
195
|
-
--project src/Infrastructure \
|
|
196
|
-
--startup-project src/Web
|
|
197
|
-
if [ $? -ne 0 ]; then exit 1; fi
|
|
198
|
-
|
|
199
|
-
# Bicep check
|
|
200
|
-
az bicep build --file infra/main.bicep --stdout > /dev/null
|
|
201
|
-
if [ $? -ne 0 ]; then exit 1; fi
|
|
202
|
-
|
|
203
|
-
echo "Pre-flight checks passed!"
|
|
204
|
-
displayName: 'Pre-flight validation'
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## Validações Futuras (Roadmap)
|
|
210
|
-
|
|
211
|
-
- [ ] Cost estimation validation (dentro do budget)
|
|
212
|
-
- [ ] RBAC permissions check
|
|
213
|
-
- [ ] Network security rules validation
|
|
214
|
-
- [ ] Health probe endpoint exists
|
|
215
|
-
- [ ] Application Insights configured
|
|
216
|
-
|
|
217
|
-
---
|
|
218
|
-
|
|
219
|
-
## Referências
|
|
220
|
-
|
|
221
|
-
- [azure.md](../../standards/azure.md) - Padrões Azure
|
|
222
|
-
- [dotnet10-migration.md](../../standards/dotnet10-migration.md) - Breaking changes .NET 10
|
|
223
|
-
- [blazor-efcore.md](../../../../framework/standards/blazor-efcore.md) - EF Core patterns
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
*MORPH-SPEC by Polymorphism Tech*
|
|
1
|
+
# Pre-Flight Check for Azure Deployment
|
|
2
|
+
|
|
3
|
+
Validates project readiness before deploying to Azure.
|
|
4
|
+
|
|
5
|
+
## Uso
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/morph-preflight azure
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Objetivo
|
|
12
|
+
|
|
13
|
+
Detectar problemas **antes** do deploy que causariam falhas em produção. Economiza tempo e evita debugging em ambiente Azure.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Validações Executadas
|
|
18
|
+
|
|
19
|
+
### 1. Package Version Conflicts
|
|
20
|
+
|
|
21
|
+
**O que verifica:**
|
|
22
|
+
- `Azure.Identity` especificado explicitamente
|
|
23
|
+
- Sem conflitos de versão (NU1605, NU1608)
|
|
24
|
+
- Packages críticos com versões compatíveis
|
|
25
|
+
|
|
26
|
+
**Como verificar:**
|
|
27
|
+
```bash
|
|
28
|
+
dotnet restore --verbosity normal 2>&1 | grep -E "(NU1605|NU1608|warning)"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Fix comum:**
|
|
32
|
+
```xml
|
|
33
|
+
<PackageReference Include="Azure.Identity" Version="1.14.2" />
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
### 2. EF Core Migrations
|
|
39
|
+
|
|
40
|
+
**O que verifica:**
|
|
41
|
+
- Sem pending model changes
|
|
42
|
+
- Migrations aplicáveis existem
|
|
43
|
+
- Migration scripts são válidos
|
|
44
|
+
|
|
45
|
+
**Como verificar:**
|
|
46
|
+
```bash
|
|
47
|
+
dotnet ef migrations has-pending-model-changes \
|
|
48
|
+
--project src/Infrastructure \
|
|
49
|
+
--startup-project src/Web
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Fix comum:**
|
|
53
|
+
```bash
|
|
54
|
+
dotnet ef migrations add <MigrationName> \
|
|
55
|
+
--project src/Infrastructure \
|
|
56
|
+
--startup-project src/Web
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### 3. Dockerfile Validation (se Container Apps)
|
|
62
|
+
|
|
63
|
+
**O que verifica:**
|
|
64
|
+
- Dockerfile existe
|
|
65
|
+
- Base image é válida
|
|
66
|
+
- Multi-stage build configurado
|
|
67
|
+
- EXPOSE ports corretos
|
|
68
|
+
- ENTRYPOINT definido
|
|
69
|
+
|
|
70
|
+
**Como verificar:**
|
|
71
|
+
```bash
|
|
72
|
+
docker build --check .
|
|
73
|
+
# Ou validação manual do Dockerfile
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### 4. Blazor .NET 10 Assets
|
|
79
|
+
|
|
80
|
+
**O que verifica:**
|
|
81
|
+
- `RequiresAspNetWebAssets` está `true` (se Blazor + .NET 10)
|
|
82
|
+
- Static web assets configurados corretamente
|
|
83
|
+
|
|
84
|
+
**Como verificar:**
|
|
85
|
+
```bash
|
|
86
|
+
grep -r "RequiresAspNetWebAssets" *.csproj
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Fix:**
|
|
90
|
+
```xml
|
|
91
|
+
<PropertyGroup>
|
|
92
|
+
<RequiresAspNetWebAssets>true</RequiresAspNetWebAssets>
|
|
93
|
+
</PropertyGroup>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 5. Bicep Syntax Validation
|
|
99
|
+
|
|
100
|
+
**O que verifica:**
|
|
101
|
+
- Arquivos `.bicep` sem erros de sintaxe
|
|
102
|
+
- Parâmetros obrigatórios definidos
|
|
103
|
+
- Resources com nomes válidos
|
|
104
|
+
|
|
105
|
+
**Como verificar:**
|
|
106
|
+
```bash
|
|
107
|
+
az bicep build --file infra/main.bicep --stdout > /dev/null
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### 6. Key Vault Configuration
|
|
113
|
+
|
|
114
|
+
**O que verifica:**
|
|
115
|
+
- Key Vault URI configurado em `appsettings.json` ou environment
|
|
116
|
+
- Não condiciona Key Vault ao ambiente (bug comum)
|
|
117
|
+
- Managed Identity habilitada
|
|
118
|
+
|
|
119
|
+
**Como verificar:**
|
|
120
|
+
```bash
|
|
121
|
+
grep -r "KeyVaultUri\|AzureKeyVault" appsettings*.json
|
|
122
|
+
grep -r "IsDevelopment()" Program.cs | grep -i keyvault
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Anti-pattern a detectar:**
|
|
126
|
+
```csharp
|
|
127
|
+
// ❌ ERRADO - Não carrega Key Vault em dev!
|
|
128
|
+
if (!builder.Environment.IsDevelopment())
|
|
129
|
+
{
|
|
130
|
+
builder.Configuration.AddAzureKeyVault(...);
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
### 7. Connection Strings Security
|
|
137
|
+
|
|
138
|
+
**O que verifica:**
|
|
139
|
+
- Connection strings não hardcoded em código
|
|
140
|
+
- Secrets em Key Vault ou User Secrets
|
|
141
|
+
- Sem credentials em `appsettings.json` (exceto Development)
|
|
142
|
+
|
|
143
|
+
**Como verificar:**
|
|
144
|
+
```bash
|
|
145
|
+
# Detectar passwords em appsettings
|
|
146
|
+
grep -rE "(Password=|Pwd=|Secret=)" appsettings*.json | grep -v Development
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Output Exemplo
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
🔍 MORPH Pre-Flight Check: Azure Deployment
|
|
155
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
156
|
+
|
|
157
|
+
✅ Packages: No version conflicts detected
|
|
158
|
+
✅ Migrations: No pending model changes
|
|
159
|
+
✅ Dockerfile: Valid multi-stage build
|
|
160
|
+
✅ Blazor Assets: RequiresAspNetWebAssets=true
|
|
161
|
+
✅ Bicep: Syntax valid
|
|
162
|
+
❌ Key Vault: URI not configured in appsettings.Production.json
|
|
163
|
+
⚠️ Connection Strings: Found password in appsettings.Staging.json
|
|
164
|
+
|
|
165
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
166
|
+
|
|
167
|
+
📋 Summary: 5 passed, 1 failed, 1 warning
|
|
168
|
+
|
|
169
|
+
❌ BLOCKED: Fix Key Vault configuration before deploy!
|
|
170
|
+
|
|
171
|
+
Recommended fixes:
|
|
172
|
+
1. Add KeyVaultUri to appsettings.Production.json
|
|
173
|
+
2. Move password from appsettings.Staging.json to Key Vault
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Workflow de Uso
|
|
179
|
+
|
|
180
|
+
### Antes de criar PR para produção
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
/morph-preflight azure
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### No pipeline CI/CD
|
|
187
|
+
|
|
188
|
+
```yaml
|
|
189
|
+
- script: |
|
|
190
|
+
# Package check
|
|
191
|
+
dotnet restore 2>&1 | grep -E "NU1605|NU1608" && exit 1
|
|
192
|
+
|
|
193
|
+
# Migration check
|
|
194
|
+
dotnet ef migrations has-pending-model-changes \
|
|
195
|
+
--project src/Infrastructure \
|
|
196
|
+
--startup-project src/Web
|
|
197
|
+
if [ $? -ne 0 ]; then exit 1; fi
|
|
198
|
+
|
|
199
|
+
# Bicep check
|
|
200
|
+
az bicep build --file infra/main.bicep --stdout > /dev/null
|
|
201
|
+
if [ $? -ne 0 ]; then exit 1; fi
|
|
202
|
+
|
|
203
|
+
echo "Pre-flight checks passed!"
|
|
204
|
+
displayName: 'Pre-flight validation'
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Validações Futuras (Roadmap)
|
|
210
|
+
|
|
211
|
+
- [ ] Cost estimation validation (dentro do budget)
|
|
212
|
+
- [ ] RBAC permissions check
|
|
213
|
+
- [ ] Network security rules validation
|
|
214
|
+
- [ ] Health probe endpoint exists
|
|
215
|
+
- [ ] Application Insights configured
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Referências
|
|
220
|
+
|
|
221
|
+
- [azure.md](../../standards/azure.md) - Padrões Azure
|
|
222
|
+
- [dotnet10-migration.md](../../standards/dotnet10-migration.md) - Breaking changes .NET 10
|
|
223
|
+
- [blazor-efcore.md](../../../../framework/standards/blazor-efcore.md) - EF Core patterns
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
*MORPH-SPEC by Polymorphism Tech*
|