@polymorphism-tech/morph-spec 3.0.0 → 3.0.1
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 +75 -371
- package/LICENSE +72 -72
- package/bin/detect-agents.js +225 -225
- 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 -529
- 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/{specialists → level-2-domains/architecture}/prompt-engineer.md +189 -189
- package/content/.claude/skills/{specialists → level-2-domains/architecture}/seo-growth-hacker.md +320 -320
- package/content/.claude/skills/{infra → level-2-domains/infrastructure}/azure-deploy-specialist.md +699 -699
- package/content/.morph/.morphversion +5 -5
- package/content/.morph/archive/.gitkeep +25 -25
- package/content/.morph/config/agents.json +7 -5
- package/content/.morph/docs/STORY-DRIVEN-DEVELOPMENT.md +392 -392
- 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/state-v3.json +188 -188
- package/content/.morph/features/.gitkeep +25 -25
- 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/project.md +160 -160
- package/content/.morph/schemas/agent.schema.json +296 -296
- package/content/.morph/specs/.gitkeep +20 -20
- 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/FluentDesignTheme.cs +149 -149
- package/content/.morph/templates/MudTheme.cs +281 -281
- package/content/.morph/templates/component.razor +239 -239
- 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 -480
- 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/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 -2
- package/scripts/postinstall.js +132 -132
- package/scripts/reorganize-skills.cjs +175 -0
- package/scripts/validate-agents-structure.cjs +52 -0
- package/scripts/validate-skills.cjs +180 -0
- package/src/commands/analyze-blazor-concurrency.js +193 -193
- package/src/commands/create-story.js +351 -351
- package/src/commands/deploy.js +780 -780
- package/src/commands/detect-agents.js +9 -0
- package/src/commands/detect.js +104 -104
- 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 +334 -333
- package/src/commands/sync.js +167 -167
- package/src/commands/troubleshoot.js +222 -222
- package/src/commands/update.js +13 -1
- 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/css-validator.js +352 -352
- package/src/lib/design-system-generator.js +298 -298
- package/{detectors → src/lib/detectors}/config-detector.js +223 -223
- package/{detectors → src/lib/detectors}/conversation-analyzer.js +163 -163
- package/{detectors → src/lib/detectors}/index.js +84 -84
- package/{detectors → src/lib/detectors}/standards-generator.js +275 -275
- package/src/lib/learning-system.js +520 -520
- package/src/lib/mockup-generator.js +366 -366
- package/src/lib/state-manager.js +21 -4
- 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/validators/architecture-validator.js +387 -387
- package/src/lib/validators/package-validator.js +360 -360
- package/src/lib/validators/ui-contrast-validator.js +422 -422
- package/src/utils/logger.js +32 -32
- package/src/utils/version-checker.js +175 -175
- /package/{detectors → src/lib/detectors}/structure-detector.js +0 -0
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
// ==============================================================================
|
|
2
|
-
// MORPH-SPEC - Container Apps Environment
|
|
3
|
-
// Azure Container Apps managed environment
|
|
4
|
-
// ==============================================================================
|
|
5
|
-
|
|
6
|
-
@description('Environment name')
|
|
7
|
-
param name string
|
|
8
|
-
|
|
9
|
-
@description('Location')
|
|
10
|
-
param location string
|
|
11
|
-
|
|
12
|
-
@description('Tags')
|
|
13
|
-
param tags object = {}
|
|
14
|
-
|
|
15
|
-
@description('Log Analytics Workspace ID')
|
|
16
|
-
param logAnalyticsWorkspaceId string
|
|
17
|
-
|
|
18
|
-
// ==============================================================================
|
|
19
|
-
// CONTAINER APPS ENVIRONMENT
|
|
20
|
-
// ==============================================================================
|
|
21
|
-
|
|
22
|
-
resource containerAppEnv 'Microsoft.App/managedEnvironments@2023-05-01' = {
|
|
23
|
-
name: name
|
|
24
|
-
location: location
|
|
25
|
-
tags: tags
|
|
26
|
-
properties: {
|
|
27
|
-
appLogsConfiguration: {
|
|
28
|
-
destination: 'log-analytics'
|
|
29
|
-
logAnalyticsConfiguration: {
|
|
30
|
-
customerId: reference(logAnalyticsWorkspaceId, '2022-10-01').customerId
|
|
31
|
-
sharedKey: listKeys(logAnalyticsWorkspaceId, '2022-10-01').primarySharedKey
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
zoneRedundant: false
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// ==============================================================================
|
|
39
|
-
// OUTPUTS
|
|
40
|
-
// ==============================================================================
|
|
41
|
-
|
|
42
|
-
@description('Container Apps Environment ID')
|
|
43
|
-
output id string = containerAppEnv.id
|
|
44
|
-
|
|
45
|
-
@description('Container Apps Environment name')
|
|
46
|
-
output name string = containerAppEnv.name
|
|
47
|
-
|
|
48
|
-
@description('Default domain')
|
|
49
|
-
output defaultDomain string = containerAppEnv.properties.defaultDomain
|
|
1
|
+
// ==============================================================================
|
|
2
|
+
// MORPH-SPEC - Container Apps Environment
|
|
3
|
+
// Azure Container Apps managed environment
|
|
4
|
+
// ==============================================================================
|
|
5
|
+
|
|
6
|
+
@description('Environment name')
|
|
7
|
+
param name string
|
|
8
|
+
|
|
9
|
+
@description('Location')
|
|
10
|
+
param location string
|
|
11
|
+
|
|
12
|
+
@description('Tags')
|
|
13
|
+
param tags object = {}
|
|
14
|
+
|
|
15
|
+
@description('Log Analytics Workspace ID')
|
|
16
|
+
param logAnalyticsWorkspaceId string
|
|
17
|
+
|
|
18
|
+
// ==============================================================================
|
|
19
|
+
// CONTAINER APPS ENVIRONMENT
|
|
20
|
+
// ==============================================================================
|
|
21
|
+
|
|
22
|
+
resource containerAppEnv 'Microsoft.App/managedEnvironments@2023-05-01' = {
|
|
23
|
+
name: name
|
|
24
|
+
location: location
|
|
25
|
+
tags: tags
|
|
26
|
+
properties: {
|
|
27
|
+
appLogsConfiguration: {
|
|
28
|
+
destination: 'log-analytics'
|
|
29
|
+
logAnalyticsConfiguration: {
|
|
30
|
+
customerId: reference(logAnalyticsWorkspaceId, '2022-10-01').customerId
|
|
31
|
+
sharedKey: listKeys(logAnalyticsWorkspaceId, '2022-10-01').primarySharedKey
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
zoneRedundant: false
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// ==============================================================================
|
|
39
|
+
// OUTPUTS
|
|
40
|
+
// ==============================================================================
|
|
41
|
+
|
|
42
|
+
@description('Container Apps Environment ID')
|
|
43
|
+
output id string = containerAppEnv.id
|
|
44
|
+
|
|
45
|
+
@description('Container Apps Environment name')
|
|
46
|
+
output name string = containerAppEnv.name
|
|
47
|
+
|
|
48
|
+
@description('Default domain')
|
|
49
|
+
output defaultDomain string = containerAppEnv.properties.defaultDomain
|
|
@@ -1,156 +1,156 @@
|
|
|
1
|
-
// ==============================================================================
|
|
2
|
-
// MORPH-SPEC - Container App
|
|
3
|
-
// Azure Container Apps with ingress and auto-scaling
|
|
4
|
-
// ==============================================================================
|
|
5
|
-
|
|
6
|
-
@description('App name')
|
|
7
|
-
param name string
|
|
8
|
-
|
|
9
|
-
@description('Location')
|
|
10
|
-
param location string
|
|
11
|
-
|
|
12
|
-
@description('Tags')
|
|
13
|
-
param tags object = {}
|
|
14
|
-
|
|
15
|
-
@description('Container App Environment ID')
|
|
16
|
-
param environmentId string
|
|
17
|
-
|
|
18
|
-
@description('Container image')
|
|
19
|
-
param containerImage string
|
|
20
|
-
|
|
21
|
-
@description('App Insights connection string')
|
|
22
|
-
param appInsightsConnectionString string = ''
|
|
23
|
-
|
|
24
|
-
@description('CPU cores (0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0)')
|
|
25
|
-
param cpu string = '0.25'
|
|
26
|
-
|
|
27
|
-
@description('Memory (0.5Gi, 1Gi, 1.5Gi, 2Gi, 3Gi, 4Gi)')
|
|
28
|
-
param memory string = '0.5Gi'
|
|
29
|
-
|
|
30
|
-
@description('Minimum replicas (0 = scale to zero)')
|
|
31
|
-
param minReplicas int = 0
|
|
32
|
-
|
|
33
|
-
@description('Maximum replicas')
|
|
34
|
-
param maxReplicas int = 3
|
|
35
|
-
|
|
36
|
-
@description('Target port')
|
|
37
|
-
param targetPort int = 8080
|
|
38
|
-
|
|
39
|
-
@description('Environment variables')
|
|
40
|
-
param envVars array = []
|
|
41
|
-
|
|
42
|
-
// ==============================================================================
|
|
43
|
-
// CONTAINER APP
|
|
44
|
-
// ==============================================================================
|
|
45
|
-
|
|
46
|
-
var secrets = appInsightsConnectionString != '' ? [
|
|
47
|
-
{
|
|
48
|
-
name: 'appinsights-connection-string'
|
|
49
|
-
value: appInsightsConnectionString
|
|
50
|
-
}
|
|
51
|
-
] : []
|
|
52
|
-
|
|
53
|
-
var defaultEnvVars = appInsightsConnectionString != '' ? [
|
|
54
|
-
{
|
|
55
|
-
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
|
|
56
|
-
secretRef: 'appinsights-connection-string'
|
|
57
|
-
}
|
|
58
|
-
{
|
|
59
|
-
name: 'ASPNETCORE_ENVIRONMENT'
|
|
60
|
-
value: 'Production'
|
|
61
|
-
}
|
|
62
|
-
] : [
|
|
63
|
-
{
|
|
64
|
-
name: 'ASPNETCORE_ENVIRONMENT'
|
|
65
|
-
value: 'Production'
|
|
66
|
-
}
|
|
67
|
-
]
|
|
68
|
-
|
|
69
|
-
resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
|
|
70
|
-
name: name
|
|
71
|
-
location: location
|
|
72
|
-
tags: tags
|
|
73
|
-
properties: {
|
|
74
|
-
managedEnvironmentId: environmentId
|
|
75
|
-
configuration: {
|
|
76
|
-
ingress: {
|
|
77
|
-
external: true
|
|
78
|
-
targetPort: targetPort
|
|
79
|
-
transport: 'http'
|
|
80
|
-
allowInsecure: false
|
|
81
|
-
traffic: [
|
|
82
|
-
{
|
|
83
|
-
latestRevision: true
|
|
84
|
-
weight: 100
|
|
85
|
-
}
|
|
86
|
-
]
|
|
87
|
-
}
|
|
88
|
-
secrets: secrets
|
|
89
|
-
}
|
|
90
|
-
template: {
|
|
91
|
-
containers: [
|
|
92
|
-
{
|
|
93
|
-
name: name
|
|
94
|
-
image: containerImage
|
|
95
|
-
resources: {
|
|
96
|
-
cpu: json(cpu)
|
|
97
|
-
memory: memory
|
|
98
|
-
}
|
|
99
|
-
env: concat(defaultEnvVars, envVars)
|
|
100
|
-
probes: [
|
|
101
|
-
{
|
|
102
|
-
type: 'Liveness'
|
|
103
|
-
httpGet: {
|
|
104
|
-
path: '/health'
|
|
105
|
-
port: targetPort
|
|
106
|
-
}
|
|
107
|
-
initialDelaySeconds: 10
|
|
108
|
-
periodSeconds: 30
|
|
109
|
-
failureThreshold: 3
|
|
110
|
-
}
|
|
111
|
-
{
|
|
112
|
-
type: 'Readiness'
|
|
113
|
-
httpGet: {
|
|
114
|
-
path: '/health/ready'
|
|
115
|
-
port: targetPort
|
|
116
|
-
}
|
|
117
|
-
initialDelaySeconds: 5
|
|
118
|
-
periodSeconds: 10
|
|
119
|
-
failureThreshold: 3
|
|
120
|
-
}
|
|
121
|
-
]
|
|
122
|
-
}
|
|
123
|
-
]
|
|
124
|
-
scale: {
|
|
125
|
-
minReplicas: minReplicas
|
|
126
|
-
maxReplicas: maxReplicas
|
|
127
|
-
rules: [
|
|
128
|
-
{
|
|
129
|
-
name: 'http-scale'
|
|
130
|
-
http: {
|
|
131
|
-
metadata: {
|
|
132
|
-
concurrentRequests: '100'
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
]
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// ==============================================================================
|
|
143
|
-
// OUTPUTS
|
|
144
|
-
// ==============================================================================
|
|
145
|
-
|
|
146
|
-
@description('Container App ID')
|
|
147
|
-
output id string = containerApp.id
|
|
148
|
-
|
|
149
|
-
@description('Container App name')
|
|
150
|
-
output name string = containerApp.name
|
|
151
|
-
|
|
152
|
-
@description('Container App URL')
|
|
153
|
-
output url string = 'https://${containerApp.properties.configuration.ingress.fqdn}'
|
|
154
|
-
|
|
155
|
-
@description('Container App FQDN')
|
|
156
|
-
output fqdn string = containerApp.properties.configuration.ingress.fqdn
|
|
1
|
+
// ==============================================================================
|
|
2
|
+
// MORPH-SPEC - Container App
|
|
3
|
+
// Azure Container Apps with ingress and auto-scaling
|
|
4
|
+
// ==============================================================================
|
|
5
|
+
|
|
6
|
+
@description('App name')
|
|
7
|
+
param name string
|
|
8
|
+
|
|
9
|
+
@description('Location')
|
|
10
|
+
param location string
|
|
11
|
+
|
|
12
|
+
@description('Tags')
|
|
13
|
+
param tags object = {}
|
|
14
|
+
|
|
15
|
+
@description('Container App Environment ID')
|
|
16
|
+
param environmentId string
|
|
17
|
+
|
|
18
|
+
@description('Container image')
|
|
19
|
+
param containerImage string
|
|
20
|
+
|
|
21
|
+
@description('App Insights connection string')
|
|
22
|
+
param appInsightsConnectionString string = ''
|
|
23
|
+
|
|
24
|
+
@description('CPU cores (0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0)')
|
|
25
|
+
param cpu string = '0.25'
|
|
26
|
+
|
|
27
|
+
@description('Memory (0.5Gi, 1Gi, 1.5Gi, 2Gi, 3Gi, 4Gi)')
|
|
28
|
+
param memory string = '0.5Gi'
|
|
29
|
+
|
|
30
|
+
@description('Minimum replicas (0 = scale to zero)')
|
|
31
|
+
param minReplicas int = 0
|
|
32
|
+
|
|
33
|
+
@description('Maximum replicas')
|
|
34
|
+
param maxReplicas int = 3
|
|
35
|
+
|
|
36
|
+
@description('Target port')
|
|
37
|
+
param targetPort int = 8080
|
|
38
|
+
|
|
39
|
+
@description('Environment variables')
|
|
40
|
+
param envVars array = []
|
|
41
|
+
|
|
42
|
+
// ==============================================================================
|
|
43
|
+
// CONTAINER APP
|
|
44
|
+
// ==============================================================================
|
|
45
|
+
|
|
46
|
+
var secrets = appInsightsConnectionString != '' ? [
|
|
47
|
+
{
|
|
48
|
+
name: 'appinsights-connection-string'
|
|
49
|
+
value: appInsightsConnectionString
|
|
50
|
+
}
|
|
51
|
+
] : []
|
|
52
|
+
|
|
53
|
+
var defaultEnvVars = appInsightsConnectionString != '' ? [
|
|
54
|
+
{
|
|
55
|
+
name: 'APPLICATIONINSIGHTS_CONNECTION_STRING'
|
|
56
|
+
secretRef: 'appinsights-connection-string'
|
|
57
|
+
}
|
|
58
|
+
{
|
|
59
|
+
name: 'ASPNETCORE_ENVIRONMENT'
|
|
60
|
+
value: 'Production'
|
|
61
|
+
}
|
|
62
|
+
] : [
|
|
63
|
+
{
|
|
64
|
+
name: 'ASPNETCORE_ENVIRONMENT'
|
|
65
|
+
value: 'Production'
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
|
|
69
|
+
resource containerApp 'Microsoft.App/containerApps@2023-05-01' = {
|
|
70
|
+
name: name
|
|
71
|
+
location: location
|
|
72
|
+
tags: tags
|
|
73
|
+
properties: {
|
|
74
|
+
managedEnvironmentId: environmentId
|
|
75
|
+
configuration: {
|
|
76
|
+
ingress: {
|
|
77
|
+
external: true
|
|
78
|
+
targetPort: targetPort
|
|
79
|
+
transport: 'http'
|
|
80
|
+
allowInsecure: false
|
|
81
|
+
traffic: [
|
|
82
|
+
{
|
|
83
|
+
latestRevision: true
|
|
84
|
+
weight: 100
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
secrets: secrets
|
|
89
|
+
}
|
|
90
|
+
template: {
|
|
91
|
+
containers: [
|
|
92
|
+
{
|
|
93
|
+
name: name
|
|
94
|
+
image: containerImage
|
|
95
|
+
resources: {
|
|
96
|
+
cpu: json(cpu)
|
|
97
|
+
memory: memory
|
|
98
|
+
}
|
|
99
|
+
env: concat(defaultEnvVars, envVars)
|
|
100
|
+
probes: [
|
|
101
|
+
{
|
|
102
|
+
type: 'Liveness'
|
|
103
|
+
httpGet: {
|
|
104
|
+
path: '/health'
|
|
105
|
+
port: targetPort
|
|
106
|
+
}
|
|
107
|
+
initialDelaySeconds: 10
|
|
108
|
+
periodSeconds: 30
|
|
109
|
+
failureThreshold: 3
|
|
110
|
+
}
|
|
111
|
+
{
|
|
112
|
+
type: 'Readiness'
|
|
113
|
+
httpGet: {
|
|
114
|
+
path: '/health/ready'
|
|
115
|
+
port: targetPort
|
|
116
|
+
}
|
|
117
|
+
initialDelaySeconds: 5
|
|
118
|
+
periodSeconds: 10
|
|
119
|
+
failureThreshold: 3
|
|
120
|
+
}
|
|
121
|
+
]
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
scale: {
|
|
125
|
+
minReplicas: minReplicas
|
|
126
|
+
maxReplicas: maxReplicas
|
|
127
|
+
rules: [
|
|
128
|
+
{
|
|
129
|
+
name: 'http-scale'
|
|
130
|
+
http: {
|
|
131
|
+
metadata: {
|
|
132
|
+
concurrentRequests: '100'
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
// ==============================================================================
|
|
143
|
+
// OUTPUTS
|
|
144
|
+
// ==============================================================================
|
|
145
|
+
|
|
146
|
+
@description('Container App ID')
|
|
147
|
+
output id string = containerApp.id
|
|
148
|
+
|
|
149
|
+
@description('Container App name')
|
|
150
|
+
output name string = containerApp.name
|
|
151
|
+
|
|
152
|
+
@description('Container App URL')
|
|
153
|
+
output url string = 'https://${containerApp.properties.configuration.ingress.fqdn}'
|
|
154
|
+
|
|
155
|
+
@description('Container App FQDN')
|
|
156
|
+
output fqdn string = containerApp.properties.configuration.ingress.fqdn
|