@swovohq/fuel 0.2.2-alpha.87 → 0.2.2-alpha.89
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/README.md +65 -2
- package/dist/bin/fuel.js +10 -31
- package/dist/bin/fuel.js.map +1 -1
- package/dist/commands/config-verify.d.ts.map +1 -1
- package/dist/commands/config-verify.js +14 -6
- package/dist/commands/config-verify.js.map +1 -1
- package/dist/commands/create-app.d.ts.map +1 -1
- package/dist/commands/create-app.js +10 -3
- package/dist/commands/create-app.js.map +1 -1
- package/dist/commands/infra-deploy.d.ts +4 -0
- package/dist/commands/infra-deploy.d.ts.map +1 -1
- package/dist/commands/infra-deploy.js +75 -43
- package/dist/commands/infra-deploy.js.map +1 -1
- package/dist/commands/infra-destroy.js +3 -3
- package/dist/commands/infra-destroy.js.map +1 -1
- package/dist/commands/infra-init.d.ts +91 -0
- package/dist/commands/infra-init.d.ts.map +1 -1
- package/dist/commands/infra-init.js +510 -80
- package/dist/commands/infra-init.js.map +1 -1
- package/dist/commands/infra-pull.d.ts.map +1 -1
- package/dist/commands/infra-pull.js +6 -5
- package/dist/commands/infra-pull.js.map +1 -1
- package/dist/infra/azure-defaults.d.ts +49 -0
- package/dist/infra/azure-defaults.d.ts.map +1 -0
- package/dist/infra/azure-defaults.js +52 -0
- package/dist/infra/azure-defaults.js.map +1 -0
- package/dist/infra/azure-keyvault-client.d.ts +4 -0
- package/dist/infra/azure-keyvault-client.d.ts.map +1 -0
- package/dist/infra/azure-keyvault-client.js +57 -0
- package/dist/infra/azure-keyvault-client.js.map +1 -0
- package/dist/infra/azure-rbac.d.ts +11 -0
- package/dist/infra/azure-rbac.d.ts.map +1 -0
- package/dist/infra/azure-rbac.js +47 -0
- package/dist/infra/azure-rbac.js.map +1 -0
- package/dist/infra/azure-state-storage.d.ts +20 -0
- package/dist/infra/azure-state-storage.d.ts.map +1 -0
- package/dist/infra/azure-state-storage.js +229 -0
- package/dist/infra/azure-state-storage.js.map +1 -0
- package/dist/infra/credentials.d.ts +2 -2
- package/dist/infra/credentials.d.ts.map +1 -1
- package/dist/infra/credentials.js +8 -4
- package/dist/infra/credentials.js.map +1 -1
- package/dist/infra/deployment-detect.d.ts +9 -0
- package/dist/infra/deployment-detect.d.ts.map +1 -0
- package/dist/infra/deployment-detect.js +53 -0
- package/dist/infra/deployment-detect.js.map +1 -0
- package/dist/infra/github-client.d.ts +6 -0
- package/dist/infra/github-client.d.ts.map +1 -1
- package/dist/infra/github-client.js +31 -4
- package/dist/infra/github-client.js.map +1 -1
- package/dist/infra/github-token-link.d.ts +4 -0
- package/dist/infra/github-token-link.d.ts.map +1 -0
- package/dist/infra/github-token-link.js +28 -0
- package/dist/infra/github-token-link.js.map +1 -0
- package/dist/infra/orchestrator.d.ts +4 -1
- package/dist/infra/orchestrator.d.ts.map +1 -1
- package/dist/infra/orchestrator.js +203 -66
- package/dist/infra/orchestrator.js.map +1 -1
- package/dist/infra/preflight.d.ts.map +1 -1
- package/dist/infra/preflight.js +17 -9
- package/dist/infra/preflight.js.map +1 -1
- package/dist/infra/remote-secret.d.ts +14 -0
- package/dist/infra/remote-secret.d.ts.map +1 -0
- package/dist/infra/remote-secret.js +42 -0
- package/dist/infra/remote-secret.js.map +1 -0
- package/dist/infra/template-engine.d.ts +13 -4
- package/dist/infra/template-engine.d.ts.map +1 -1
- package/dist/infra/template-engine.js +141 -49
- package/dist/infra/template-engine.js.map +1 -1
- package/dist/infra/tofu-runner.d.ts +4 -3
- package/dist/infra/tofu-runner.d.ts.map +1 -1
- package/dist/infra/tofu-runner.js +36 -27
- package/dist/infra/tofu-runner.js.map +1 -1
- package/dist/infra/types.d.ts +239 -16
- package/dist/infra/types.d.ts.map +1 -1
- package/dist/infra/types.js +206 -18
- package/dist/infra/types.js.map +1 -1
- package/dist/infra-templates/TODO-azure-prod.md +119 -0
- package/dist/infra-templates/modules/azure-container-app/main.tf +124 -0
- package/dist/infra-templates/modules/azure-container-app/outputs.tf +24 -0
- package/dist/infra-templates/modules/azure-container-app/variables.tf +80 -0
- package/dist/infra-templates/modules/azure-container-apps-environment/main.tf +18 -0
- package/dist/infra-templates/modules/azure-container-apps-environment/outputs.tf +14 -0
- package/dist/infra-templates/modules/azure-container-apps-environment/variables.tf +24 -0
- package/dist/infra-templates/modules/azure-container-registry/main.tf +10 -0
- package/dist/infra-templates/modules/azure-container-registry/outputs.tf +14 -0
- package/dist/infra-templates/modules/azure-container-registry/variables.tf +20 -0
- package/dist/infra-templates/modules/azure-front-door/main.tf +80 -0
- package/dist/infra-templates/modules/azure-front-door/outputs.tf +20 -0
- package/dist/infra-templates/modules/azure-front-door/variables.tf +26 -0
- package/dist/infra-templates/modules/azure-github-oidc/main.tf +48 -0
- package/dist/infra-templates/modules/azure-github-oidc/outputs.tf +9 -0
- package/dist/infra-templates/modules/azure-github-oidc/variables.tf +69 -0
- package/dist/infra-templates/modules/azure-key-vault/main.tf +21 -0
- package/dist/infra-templates/modules/azure-key-vault/outputs.tf +11 -0
- package/dist/infra-templates/modules/azure-key-vault/variables.tf +43 -0
- package/dist/infra-templates/modules/azure-monitor/main.tf +29 -0
- package/dist/infra-templates/modules/azure-monitor/outputs.tf +17 -0
- package/dist/infra-templates/modules/azure-monitor/variables.tf +32 -0
- package/dist/infra-templates/modules/azure-network/main.tf +134 -0
- package/dist/infra-templates/modules/azure-network/outputs.tf +44 -0
- package/dist/infra-templates/modules/azure-network/variables.tf +56 -0
- package/dist/infra-templates/modules/azure-postgresql-flexible/main.tf +34 -0
- package/dist/infra-templates/modules/azure-postgresql-flexible/outputs.tf +20 -0
- package/dist/infra-templates/modules/azure-postgresql-flexible/variables.tf +54 -0
- package/dist/infra-templates/modules/azure-redis-cache/main.tf +32 -0
- package/dist/infra-templates/modules/azure-redis-cache/outputs.tf +15 -0
- package/dist/infra-templates/modules/azure-redis-cache/variables.tf +30 -0
- package/dist/infra-templates/modules/azure-resource-group/main.tf +5 -0
- package/dist/infra-templates/modules/azure-resource-group/outputs.tf +11 -0
- package/dist/infra-templates/modules/azure-resource-group/variables.tf +16 -0
- package/dist/infra-templates/modules/azure-sql-database/main.tf +63 -0
- package/dist/infra-templates/modules/azure-sql-database/outputs.tf +20 -0
- package/dist/infra-templates/modules/azure-sql-database/variables.tf +78 -0
- package/dist/infra-templates/modules/azure-storage-account/main.tf +13 -0
- package/dist/infra-templates/modules/azure-storage-account/outputs.tf +16 -0
- package/dist/infra-templates/modules/azure-storage-account/variables.tf +38 -0
- package/dist/infra-templates/modules/cloud-watch/event-bridge.tf +15 -0
- package/dist/infra-templates/modules/cloud-watch/lambda.tf +84 -0
- package/dist/infra-templates/modules/cloud-watch/lambda_function.zip +0 -0
- package/dist/infra-templates/modules/cloud-watch/lambda_function_deploy.zip +0 -0
- package/dist/infra-templates/modules/cloud-watch/main.tf +156 -0
- package/dist/infra-templates/modules/cloud-watch/sns.tf +3 -0
- package/dist/infra-templates/modules/cloud-watch/variables.tf +38 -0
- package/dist/infra-templates/modules/ecs-core/alb.tf +126 -0
- package/dist/infra-templates/modules/ecs-core/cloudwatch.tf +48 -0
- package/dist/infra-templates/modules/ecs-core/iam.tf +95 -0
- package/dist/infra-templates/modules/ecs-core/main.tf +12 -0
- package/dist/infra-templates/modules/ecs-core/outputs.tf +44 -0
- package/dist/infra-templates/modules/ecs-core/secrets.tf +9 -0
- package/dist/infra-templates/modules/ecs-core/security_groups.tf +73 -0
- package/dist/infra-templates/modules/ecs-core/variables.tf +96 -0
- package/dist/infra-templates/modules/ecs-service/ecs_autoscaling.tf +51 -0
- package/dist/infra-templates/modules/ecs-service/ecs_service.tf +39 -0
- package/dist/infra-templates/modules/ecs-service/ecs_task_definition.tf +56 -0
- package/dist/infra-templates/modules/ecs-service/variables.tf +170 -0
- package/dist/infra-templates/modules/elastic-container-registry/main.tf +32 -0
- package/dist/infra-templates/modules/elastic-container-registry/outputs.tf +9 -0
- package/dist/infra-templates/modules/elastic-container-registry/variables.tf +25 -0
- package/dist/infra-templates/modules/github-oidc-role/main.tf +46 -0
- package/dist/infra-templates/modules/github-oidc-role/outputs.tf +4 -0
- package/dist/infra-templates/modules/github-oidc-role/variables.tf +11 -0
- package/dist/infra-templates/modules/guardduty/main.tf +8 -0
- package/dist/infra-templates/modules/iam/main.tf +205 -0
- package/dist/infra-templates/modules/iam/outputs.tf +3 -0
- package/dist/infra-templates/modules/iam/variables.tf +4 -0
- package/dist/infra-templates/modules/random-key/main.tf +11 -0
- package/dist/infra-templates/modules/random-key/outputs.tf +4 -0
- package/dist/infra-templates/modules/random-key/variables.tf +10 -0
- package/dist/infra-templates/modules/redis/main.tf +47 -0
- package/dist/infra-templates/modules/redis/outputs.tf +8 -0
- package/dist/infra-templates/modules/redis/variables.tf +20 -0
- package/dist/infra-templates/modules/relational-database-service/main.tf +44 -0
- package/dist/infra-templates/modules/relational-database-service/outputs.tf +13 -0
- package/dist/infra-templates/modules/relational-database-service/security-group.tf +15 -0
- package/dist/infra-templates/modules/relational-database-service/variables.tf +50 -0
- package/dist/infra-templates/modules/secret/main.tf +14 -0
- package/dist/infra-templates/modules/secret/outputs.tf +3 -0
- package/dist/infra-templates/modules/secret/variables.tf +8 -0
- package/dist/infra-templates/modules/simple-storage-service/main.tf +28 -0
- package/dist/infra-templates/modules/simple-storage-service/variables.tf +4 -0
- package/dist/infra-templates/modules/vpc/data.tf +2 -0
- package/dist/infra-templates/modules/vpc/main.tf +76 -0
- package/dist/infra-templates/modules/vpc/outputs.tf +23 -0
- package/dist/infra-templates/modules/vpc/variables.tf +5 -0
- package/dist/infra-templates/package.json +6 -0
- package/dist/infra-templates/templates/azure/MANUAL_DEPLOY.md +168 -0
- package/dist/infra-templates/templates/azure/backend.tf +8 -0
- package/dist/infra-templates/templates/azure/data.tf +21 -0
- package/dist/infra-templates/templates/azure/default.tfvars +0 -0
- package/dist/infra-templates/templates/azure/locals.tf +116 -0
- package/dist/infra-templates/templates/azure/main.tf +421 -0
- package/dist/infra-templates/templates/azure/outputs.tf +40 -0
- package/dist/infra-templates/templates/azure/providers.tf +65 -0
- package/dist/infra-templates/templates/azure/variables.tf +69 -0
- package/dist/infra-templates/templates/azure/workflows/build_and_deploy.yml +155 -0
- package/dist/infra-templates/templates/azure/workflows/tests.yml +63 -0
- package/dist/infra-templates/templates/ecs/README.md +225 -0
- package/dist/infra-templates/templates/ecs/backend.tf +7 -0
- package/dist/infra-templates/templates/ecs/data.tf +6 -0
- package/dist/infra-templates/templates/ecs/default.tfvars +1 -0
- package/dist/infra-templates/templates/ecs/locals.tf +97 -0
- package/dist/infra-templates/templates/ecs/main.tf +185 -0
- package/dist/infra-templates/templates/ecs/outputs.tf +42 -0
- package/dist/infra-templates/templates/ecs/providers.tf +21 -0
- package/dist/infra-templates/templates/ecs/variables.tf +105 -0
- package/dist/infra-templates/templates/ecs/workflows/build_and_deploy.yml +188 -0
- package/dist/infra-templates/templates/ecs/workflows/tests.yml +65 -0
- package/package.json +10 -2
- package/schema/fuel.schema.json +570 -91
package/dist/infra/types.d.ts
CHANGED
|
@@ -2,13 +2,10 @@ import { z } from 'zod';
|
|
|
2
2
|
declare const WorkerSchema: z.ZodObject<{
|
|
3
3
|
name: z.ZodString;
|
|
4
4
|
dockerfile: z.ZodString;
|
|
5
|
-
}, z.core.$
|
|
5
|
+
}, z.core.$loose>;
|
|
6
6
|
export declare const AppSchema: z.ZodObject<{
|
|
7
7
|
name: z.ZodString;
|
|
8
|
-
technology: z.
|
|
9
|
-
nest: "nest";
|
|
10
|
-
react: "react";
|
|
11
|
-
}>;
|
|
8
|
+
technology: z.ZodString;
|
|
12
9
|
dockerfile: z.ZodString;
|
|
13
10
|
health_check_path: z.ZodString;
|
|
14
11
|
domain: z.ZodString;
|
|
@@ -22,24 +19,22 @@ export declare const AppSchema: z.ZodObject<{
|
|
|
22
19
|
workers: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
23
20
|
name: z.ZodString;
|
|
24
21
|
dockerfile: z.ZodString;
|
|
25
|
-
}, z.core.$
|
|
22
|
+
}, z.core.$loose>>>>;
|
|
26
23
|
cpu_units: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
27
24
|
memory_units: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
28
25
|
db_instance_type: z.ZodOptional<z.ZodString>;
|
|
29
26
|
db_allocated_storage: z.ZodOptional<z.ZodNumber>;
|
|
30
27
|
redis_instance_type: z.ZodOptional<z.ZodString>;
|
|
31
|
-
}, z.core.$
|
|
32
|
-
export declare const
|
|
28
|
+
}, z.core.$loose>;
|
|
29
|
+
export declare const EcsInfraConfigSchema: z.ZodObject<{
|
|
33
30
|
name: z.ZodString;
|
|
34
31
|
slack_webhook_url: z.ZodOptional<z.ZodString>;
|
|
32
|
+
github_repo_name: z.ZodOptional<z.ZodString>;
|
|
35
33
|
deployment: z.ZodLiteral<"ecs">;
|
|
36
34
|
ssl: z.ZodString;
|
|
37
35
|
apps: z.ZodArray<z.ZodObject<{
|
|
38
36
|
name: z.ZodString;
|
|
39
|
-
technology: z.
|
|
40
|
-
nest: "nest";
|
|
41
|
-
react: "react";
|
|
42
|
-
}>;
|
|
37
|
+
technology: z.ZodString;
|
|
43
38
|
dockerfile: z.ZodString;
|
|
44
39
|
health_check_path: z.ZodString;
|
|
45
40
|
domain: z.ZodString;
|
|
@@ -53,18 +48,246 @@ export declare const InfraConfigSchema: z.ZodObject<{
|
|
|
53
48
|
workers: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
54
49
|
name: z.ZodString;
|
|
55
50
|
dockerfile: z.ZodString;
|
|
56
|
-
}, z.core.$
|
|
51
|
+
}, z.core.$loose>>>>;
|
|
57
52
|
cpu_units: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
58
53
|
memory_units: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
59
54
|
db_instance_type: z.ZodOptional<z.ZodString>;
|
|
60
55
|
db_allocated_storage: z.ZodOptional<z.ZodNumber>;
|
|
61
56
|
redis_instance_type: z.ZodOptional<z.ZodString>;
|
|
62
|
-
}, z.core.$
|
|
63
|
-
}, z.core.$
|
|
57
|
+
}, z.core.$loose>>;
|
|
58
|
+
}, z.core.$loose>;
|
|
59
|
+
export declare const AzureAppSchema: z.ZodObject<{
|
|
60
|
+
name: z.ZodString;
|
|
61
|
+
technology: z.ZodString;
|
|
62
|
+
dockerfile: z.ZodString;
|
|
63
|
+
health_check_path: z.ZodString;
|
|
64
|
+
domain: z.ZodString;
|
|
65
|
+
port: z.ZodNumber;
|
|
66
|
+
branch: z.ZodDefault<z.ZodString>;
|
|
67
|
+
template_repo_branch: z.ZodDefault<z.ZodString>;
|
|
68
|
+
variables: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
69
|
+
build_env: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
70
|
+
workers: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
71
|
+
name: z.ZodString;
|
|
72
|
+
dockerfile: z.ZodString;
|
|
73
|
+
}, z.core.$loose>>>>;
|
|
74
|
+
database: z.ZodDefault<z.ZodObject<{
|
|
75
|
+
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
76
|
+
engine: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
77
|
+
mssql: "mssql";
|
|
78
|
+
postgres: "postgres";
|
|
79
|
+
}>>>;
|
|
80
|
+
sku_name: z.ZodOptional<z.ZodString>;
|
|
81
|
+
storage_account_type: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
82
|
+
Local: "Local";
|
|
83
|
+
Zone: "Zone";
|
|
84
|
+
Geo: "Geo";
|
|
85
|
+
GeoZone: "GeoZone";
|
|
86
|
+
}>>>;
|
|
87
|
+
pitr_retention_days: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
88
|
+
ltr_weekly_retention: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
89
|
+
allocated_storage_mb: z.ZodOptional<z.ZodNumber>;
|
|
90
|
+
}, z.core.$loose>>;
|
|
91
|
+
redis: z.ZodDefault<z.ZodObject<{
|
|
92
|
+
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
93
|
+
sku_name: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
94
|
+
}, z.core.$loose>>;
|
|
95
|
+
container_app: z.ZodDefault<z.ZodObject<{
|
|
96
|
+
cpu: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
97
|
+
memory: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
98
|
+
concurrent_requests: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
99
|
+
min_replicas: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
100
|
+
max_replicas: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
101
|
+
}, z.core.$loose>>;
|
|
102
|
+
}, z.core.$loose>;
|
|
103
|
+
export declare const AzureInfraConfigSchema: z.ZodObject<{
|
|
104
|
+
name: z.ZodString;
|
|
105
|
+
slack_webhook_url: z.ZodOptional<z.ZodString>;
|
|
106
|
+
github_repo_name: z.ZodOptional<z.ZodString>;
|
|
107
|
+
deployment: z.ZodLiteral<"azure">;
|
|
108
|
+
location: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
109
|
+
monitor: z.ZodDefault<z.ZodObject<{
|
|
110
|
+
daily_data_cap_gb: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
111
|
+
retention_days: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
112
|
+
dashboard_count: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
113
|
+
}, z.core.$loose>>;
|
|
114
|
+
front_door: z.ZodDefault<z.ZodObject<{
|
|
115
|
+
sku_name: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"Standard_AzureFrontDoor">>>;
|
|
116
|
+
}, z.core.$loose>>;
|
|
117
|
+
storage_account: z.ZodDefault<z.ZodObject<{
|
|
118
|
+
account_kind: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"BlockBlobStorage">>>;
|
|
119
|
+
account_tier: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"Premium">>>;
|
|
120
|
+
account_replication_type: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"LRS">>>;
|
|
121
|
+
access_tier: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"Hot">>>;
|
|
122
|
+
}, z.core.$loose>>;
|
|
123
|
+
key_vault: z.ZodDefault<z.ZodObject<{
|
|
124
|
+
sku_name: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"standard">>>;
|
|
125
|
+
}, z.core.$loose>>;
|
|
126
|
+
github_oidc: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
127
|
+
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
128
|
+
existing_client_id: z.ZodOptional<z.ZodString>;
|
|
129
|
+
existing_principal_id: z.ZodOptional<z.ZodString>;
|
|
130
|
+
manage_role_assignment: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
131
|
+
}, z.core.$loose>>>;
|
|
132
|
+
apps: z.ZodArray<z.ZodObject<{
|
|
133
|
+
name: z.ZodString;
|
|
134
|
+
technology: z.ZodString;
|
|
135
|
+
dockerfile: z.ZodString;
|
|
136
|
+
health_check_path: z.ZodString;
|
|
137
|
+
domain: z.ZodString;
|
|
138
|
+
port: z.ZodNumber;
|
|
139
|
+
branch: z.ZodDefault<z.ZodString>;
|
|
140
|
+
template_repo_branch: z.ZodDefault<z.ZodString>;
|
|
141
|
+
variables: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
142
|
+
build_env: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
143
|
+
workers: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
144
|
+
name: z.ZodString;
|
|
145
|
+
dockerfile: z.ZodString;
|
|
146
|
+
}, z.core.$loose>>>>;
|
|
147
|
+
database: z.ZodDefault<z.ZodObject<{
|
|
148
|
+
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
149
|
+
engine: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
150
|
+
mssql: "mssql";
|
|
151
|
+
postgres: "postgres";
|
|
152
|
+
}>>>;
|
|
153
|
+
sku_name: z.ZodOptional<z.ZodString>;
|
|
154
|
+
storage_account_type: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
155
|
+
Local: "Local";
|
|
156
|
+
Zone: "Zone";
|
|
157
|
+
Geo: "Geo";
|
|
158
|
+
GeoZone: "GeoZone";
|
|
159
|
+
}>>>;
|
|
160
|
+
pitr_retention_days: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
161
|
+
ltr_weekly_retention: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
162
|
+
allocated_storage_mb: z.ZodOptional<z.ZodNumber>;
|
|
163
|
+
}, z.core.$loose>>;
|
|
164
|
+
redis: z.ZodDefault<z.ZodObject<{
|
|
165
|
+
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
166
|
+
sku_name: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
167
|
+
}, z.core.$loose>>;
|
|
168
|
+
container_app: z.ZodDefault<z.ZodObject<{
|
|
169
|
+
cpu: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
170
|
+
memory: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
171
|
+
concurrent_requests: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
172
|
+
min_replicas: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
173
|
+
max_replicas: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
174
|
+
}, z.core.$loose>>;
|
|
175
|
+
}, z.core.$loose>>;
|
|
176
|
+
}, z.core.$loose>;
|
|
177
|
+
export declare const InfraConfigSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
178
|
+
name: z.ZodString;
|
|
179
|
+
slack_webhook_url: z.ZodOptional<z.ZodString>;
|
|
180
|
+
github_repo_name: z.ZodOptional<z.ZodString>;
|
|
181
|
+
deployment: z.ZodLiteral<"ecs">;
|
|
182
|
+
ssl: z.ZodString;
|
|
183
|
+
apps: z.ZodArray<z.ZodObject<{
|
|
184
|
+
name: z.ZodString;
|
|
185
|
+
technology: z.ZodString;
|
|
186
|
+
dockerfile: z.ZodString;
|
|
187
|
+
health_check_path: z.ZodString;
|
|
188
|
+
domain: z.ZodString;
|
|
189
|
+
port: z.ZodNumber;
|
|
190
|
+
branch: z.ZodDefault<z.ZodString>;
|
|
191
|
+
template_repo_branch: z.ZodDefault<z.ZodString>;
|
|
192
|
+
postgres: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
193
|
+
redis: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
194
|
+
variables: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
195
|
+
build_env: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
196
|
+
workers: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
197
|
+
name: z.ZodString;
|
|
198
|
+
dockerfile: z.ZodString;
|
|
199
|
+
}, z.core.$loose>>>>;
|
|
200
|
+
cpu_units: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
201
|
+
memory_units: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
202
|
+
db_instance_type: z.ZodOptional<z.ZodString>;
|
|
203
|
+
db_allocated_storage: z.ZodOptional<z.ZodNumber>;
|
|
204
|
+
redis_instance_type: z.ZodOptional<z.ZodString>;
|
|
205
|
+
}, z.core.$loose>>;
|
|
206
|
+
}, z.core.$loose>, z.ZodObject<{
|
|
207
|
+
name: z.ZodString;
|
|
208
|
+
slack_webhook_url: z.ZodOptional<z.ZodString>;
|
|
209
|
+
github_repo_name: z.ZodOptional<z.ZodString>;
|
|
210
|
+
deployment: z.ZodLiteral<"azure">;
|
|
211
|
+
location: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
212
|
+
monitor: z.ZodDefault<z.ZodObject<{
|
|
213
|
+
daily_data_cap_gb: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
214
|
+
retention_days: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
215
|
+
dashboard_count: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
216
|
+
}, z.core.$loose>>;
|
|
217
|
+
front_door: z.ZodDefault<z.ZodObject<{
|
|
218
|
+
sku_name: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"Standard_AzureFrontDoor">>>;
|
|
219
|
+
}, z.core.$loose>>;
|
|
220
|
+
storage_account: z.ZodDefault<z.ZodObject<{
|
|
221
|
+
account_kind: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"BlockBlobStorage">>>;
|
|
222
|
+
account_tier: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"Premium">>>;
|
|
223
|
+
account_replication_type: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"LRS">>>;
|
|
224
|
+
access_tier: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"Hot">>>;
|
|
225
|
+
}, z.core.$loose>>;
|
|
226
|
+
key_vault: z.ZodDefault<z.ZodObject<{
|
|
227
|
+
sku_name: z.ZodDefault<z.ZodOptional<z.ZodLiteral<"standard">>>;
|
|
228
|
+
}, z.core.$loose>>;
|
|
229
|
+
github_oidc: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
230
|
+
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
231
|
+
existing_client_id: z.ZodOptional<z.ZodString>;
|
|
232
|
+
existing_principal_id: z.ZodOptional<z.ZodString>;
|
|
233
|
+
manage_role_assignment: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
234
|
+
}, z.core.$loose>>>;
|
|
235
|
+
apps: z.ZodArray<z.ZodObject<{
|
|
236
|
+
name: z.ZodString;
|
|
237
|
+
technology: z.ZodString;
|
|
238
|
+
dockerfile: z.ZodString;
|
|
239
|
+
health_check_path: z.ZodString;
|
|
240
|
+
domain: z.ZodString;
|
|
241
|
+
port: z.ZodNumber;
|
|
242
|
+
branch: z.ZodDefault<z.ZodString>;
|
|
243
|
+
template_repo_branch: z.ZodDefault<z.ZodString>;
|
|
244
|
+
variables: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
245
|
+
build_env: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>>;
|
|
246
|
+
workers: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
247
|
+
name: z.ZodString;
|
|
248
|
+
dockerfile: z.ZodString;
|
|
249
|
+
}, z.core.$loose>>>>;
|
|
250
|
+
database: z.ZodDefault<z.ZodObject<{
|
|
251
|
+
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
252
|
+
engine: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
253
|
+
mssql: "mssql";
|
|
254
|
+
postgres: "postgres";
|
|
255
|
+
}>>>;
|
|
256
|
+
sku_name: z.ZodOptional<z.ZodString>;
|
|
257
|
+
storage_account_type: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
258
|
+
Local: "Local";
|
|
259
|
+
Zone: "Zone";
|
|
260
|
+
Geo: "Geo";
|
|
261
|
+
GeoZone: "GeoZone";
|
|
262
|
+
}>>>;
|
|
263
|
+
pitr_retention_days: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
264
|
+
ltr_weekly_retention: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
265
|
+
allocated_storage_mb: z.ZodOptional<z.ZodNumber>;
|
|
266
|
+
}, z.core.$loose>>;
|
|
267
|
+
redis: z.ZodDefault<z.ZodObject<{
|
|
268
|
+
enabled: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
269
|
+
sku_name: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
270
|
+
}, z.core.$loose>>;
|
|
271
|
+
container_app: z.ZodDefault<z.ZodObject<{
|
|
272
|
+
cpu: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
273
|
+
memory: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
274
|
+
concurrent_requests: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
275
|
+
min_replicas: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
276
|
+
max_replicas: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
277
|
+
}, z.core.$loose>>;
|
|
278
|
+
}, z.core.$loose>>;
|
|
279
|
+
}, z.core.$loose>], "deployment">;
|
|
64
280
|
export type AppConfig = z.infer<typeof AppSchema>;
|
|
281
|
+
export type AzureAppConfig = z.infer<typeof AzureAppSchema>;
|
|
282
|
+
export type EcsInfraConfig = z.infer<typeof EcsInfraConfigSchema>;
|
|
283
|
+
export type AzureInfraConfig = z.infer<typeof AzureInfraConfigSchema>;
|
|
65
284
|
export type InfraConfig = z.infer<typeof InfraConfigSchema>;
|
|
285
|
+
export type Deployment = InfraConfig['deployment'];
|
|
66
286
|
export { WorkerSchema };
|
|
67
|
-
export declare const
|
|
287
|
+
export declare const AWS_REQUIRED_CREDENTIAL_KEYS: readonly ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_REGION", "GITHUB_TOKEN", "GITHUB_USERNAME", "GITHUB_ORGANIZATION"];
|
|
288
|
+
export declare const AZURE_REQUIRED_CREDENTIAL_KEYS: readonly ["AZURE_SUBSCRIPTION_ID", "AZURE_TENANT_ID", "AZURE_CLIENT_ID", "AZURE_CLIENT_SECRET", "GITHUB_TOKEN", "GITHUB_USERNAME", "GITHUB_ORGANIZATION"];
|
|
289
|
+
export declare const REQUIRED_CREDENTIAL_KEYS: readonly ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_REGION", "GITHUB_TOKEN", "GITHUB_USERNAME", "GITHUB_ORGANIZATION", "AZURE_SUBSCRIPTION_ID", "AZURE_TENANT_ID", "AZURE_CLIENT_ID", "AZURE_CLIENT_SECRET", "GITHUB_TOKEN", "GITHUB_USERNAME", "GITHUB_ORGANIZATION"];
|
|
68
290
|
export type CredentialKey = typeof REQUIRED_CREDENTIAL_KEYS[number];
|
|
69
291
|
export type Credentials = Record<CredentialKey, string>;
|
|
292
|
+
export declare function requiredCredentialKeysFor(deployment: Deployment): readonly CredentialKey[];
|
|
70
293
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/infra/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/infra/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAwBvB,QAAA,MAAM,YAAY;;;iBAQqB,CAAA;AAEvC,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;iBAuBiB,CAAA;AAEvC,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4B/B,CAAA;AAqCF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCc,CAAA;AAEzC,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiES,CAAA;AAE5C,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAG5B,CAAA;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAA;AACjD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAC3D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACjE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AACrE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;AAClD,OAAO,EAAE,YAAY,EAAE,CAAA;AAEvB,eAAO,MAAM,4BAA4B,iIAO/B,CAAA;AAEV,eAAO,MAAM,8BAA8B,2JAQjC,CAAA;AAKV,eAAO,MAAM,wBAAwB,iRAG3B,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;AAEvD,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,aAAa,EAAE,CAE1F"}
|
package/dist/infra/types.js
CHANGED
|
@@ -1,40 +1,209 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.REQUIRED_CREDENTIAL_KEYS = exports.WorkerSchema = exports.InfraConfigSchema = exports.AppSchema = void 0;
|
|
3
|
+
exports.REQUIRED_CREDENTIAL_KEYS = exports.AZURE_REQUIRED_CREDENTIAL_KEYS = exports.AWS_REQUIRED_CREDENTIAL_KEYS = exports.WorkerSchema = exports.InfraConfigSchema = exports.AzureInfraConfigSchema = exports.AzureAppSchema = exports.EcsInfraConfigSchema = exports.AppSchema = void 0;
|
|
4
|
+
exports.requiredCredentialKeysFor = requiredCredentialKeysFor;
|
|
4
5
|
const zod_1 = require("zod");
|
|
6
|
+
const azure_defaults_1 = require("./azure-defaults");
|
|
7
|
+
// AWS resource naming: lowercase letters, numbers, and hyphens only; must start and
|
|
8
|
+
// end with an alphanumeric character. This is the strictest common denominator among
|
|
9
|
+
// the AWS resources these names flow into (S3 bucket names, ALB/target group names).
|
|
10
|
+
const AWS_NAME_PATTERN = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;
|
|
11
|
+
const AWS_NAME_MESSAGE = 'must contain only lowercase letters, numbers, and hyphens, and cannot start or end with a hyphen';
|
|
12
|
+
// "<name>-TargetGroup" must fit AWS's 32-character ALB target group name limit.
|
|
13
|
+
const PROJECT_NAME_MAX_LENGTH = 20;
|
|
14
|
+
// Per-app ALB target group names use the app name literally, with no suffix — also capped at 32 by AWS.
|
|
15
|
+
const APP_NAME_MAX_LENGTH = 32;
|
|
16
|
+
// Azure Container App naming: 2-32 characters, must start with a letter, contain only
|
|
17
|
+
// lowercase letters, numbers, and hyphens, end with an alphanumeric character, and never
|
|
18
|
+
// contain consecutive hyphens.
|
|
19
|
+
const AZURE_APP_NAME_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
|
|
20
|
+
const AZURE_APP_NAME_MESSAGE = 'must start with a letter, contain only lowercase letters, numbers, and hyphens, end with an alphanumeric character, and not contain consecutive hyphens';
|
|
21
|
+
const AZURE_APP_NAME_MIN_LENGTH = 2;
|
|
22
|
+
const AZURE_APP_NAME_MAX_LENGTH = 32;
|
|
5
23
|
const WorkerSchema = zod_1.z.object({
|
|
6
|
-
name: zod_1.z
|
|
7
|
-
|
|
8
|
-
|
|
24
|
+
name: zod_1.z
|
|
25
|
+
.string()
|
|
26
|
+
.min(1)
|
|
27
|
+
.max(APP_NAME_MAX_LENGTH, `worker name must be ${APP_NAME_MAX_LENGTH} characters or fewer (AWS resource naming limit)`)
|
|
28
|
+
.regex(AWS_NAME_PATTERN, `worker name ${AWS_NAME_MESSAGE}`)
|
|
29
|
+
.describe('Worker name. Used as the ECS service name.'),
|
|
30
|
+
dockerfile: zod_1.z.string().min(1).describe("Path to the worker's Dockerfile relative to the project root."),
|
|
31
|
+
}).passthrough().meta({ id: 'worker' });
|
|
9
32
|
exports.WorkerSchema = WorkerSchema;
|
|
10
33
|
exports.AppSchema = zod_1.z.object({
|
|
11
|
-
name: zod_1.z
|
|
12
|
-
|
|
34
|
+
name: zod_1.z
|
|
35
|
+
.string()
|
|
36
|
+
.min(1)
|
|
37
|
+
.max(APP_NAME_MAX_LENGTH, `app name must be ${APP_NAME_MAX_LENGTH} characters or fewer (AWS ALB target group name limit)`)
|
|
38
|
+
.regex(AWS_NAME_PATTERN, `app name ${AWS_NAME_MESSAGE}`),
|
|
39
|
+
technology: zod_1.z.string().min(1).describe("Application role/framework. 'nest' and 'react' get framework-specific env var injection (see docs); any other value deploys as a plain container with no extra env vars — pass everything explicitly via variables/build_env."),
|
|
13
40
|
dockerfile: zod_1.z.string().min(1),
|
|
14
41
|
health_check_path: zod_1.z.string().min(1),
|
|
15
42
|
domain: zod_1.z.string().min(1),
|
|
16
43
|
port: zod_1.z.number().int().positive(),
|
|
17
44
|
branch: zod_1.z.string().default('main'),
|
|
18
45
|
template_repo_branch: zod_1.z.string().default('main'),
|
|
19
|
-
postgres: zod_1.z.boolean().optional().default(false),
|
|
20
|
-
redis: zod_1.z.boolean().optional().default(false),
|
|
46
|
+
postgres: zod_1.z.boolean().optional().default(false).describe('Provision an RDS PostgreSQL instance for this app.'),
|
|
47
|
+
redis: zod_1.z.boolean().optional().default(false).describe('Provision an ElastiCache Redis instance for this app.'),
|
|
21
48
|
variables: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional().default({}),
|
|
22
49
|
build_env: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional().default({}),
|
|
23
50
|
workers: zod_1.z.array(WorkerSchema).optional().default([]),
|
|
24
|
-
cpu_units: zod_1.z.number().int().positive().optional().default(1024),
|
|
25
|
-
memory_units: zod_1.z.number().int().positive().optional().default(2048),
|
|
26
|
-
db_instance_type: zod_1.z.string().optional(),
|
|
27
|
-
db_allocated_storage: zod_1.z.number().int().positive().optional(),
|
|
28
|
-
redis_instance_type: zod_1.z.string().optional(),
|
|
29
|
-
});
|
|
30
|
-
exports.
|
|
31
|
-
name: zod_1.z
|
|
51
|
+
cpu_units: zod_1.z.number().int().positive().optional().default(1024).describe('ECS task CPU units (1024 = 1 vCPU).'),
|
|
52
|
+
memory_units: zod_1.z.number().int().positive().optional().default(2048).describe('ECS task memory in MB.'),
|
|
53
|
+
db_instance_type: zod_1.z.string().optional().describe('RDS instance type, e.g. db.t3.small. Only used when postgres is true.'),
|
|
54
|
+
db_allocated_storage: zod_1.z.number().int().positive().optional().describe('RDS allocated storage in GB. Only used when postgres is true.'),
|
|
55
|
+
redis_instance_type: zod_1.z.string().optional().describe('ElastiCache node type, e.g. cache.t3.small. Only used when redis is true.'),
|
|
56
|
+
}).passthrough().meta({ id: 'ecsApp' });
|
|
57
|
+
exports.EcsInfraConfigSchema = zod_1.z.object({
|
|
58
|
+
name: zod_1.z
|
|
59
|
+
.string()
|
|
60
|
+
.min(1)
|
|
61
|
+
.max(PROJECT_NAME_MAX_LENGTH, `name must be ${PROJECT_NAME_MAX_LENGTH} characters or fewer — AWS caps the "<name>-TargetGroup" load balancer resource name at 32 characters`)
|
|
62
|
+
.regex(AWS_NAME_PATTERN, `name ${AWS_NAME_MESSAGE}`),
|
|
32
63
|
slack_webhook_url: zod_1.z.string().optional(),
|
|
64
|
+
github_repo_name: zod_1.z.string().optional().describe('Name of the GitHub repository to create/use. Defaults to "${name}-monorepo". Set this ' +
|
|
65
|
+
'explicitly when this fuel.yml should target a repo already used by another environment ' +
|
|
66
|
+
"(e.g. a separate prod fuel.yml with its own `name` pointing at the same repo as dev)."),
|
|
33
67
|
deployment: zod_1.z.literal('ecs'),
|
|
34
|
-
ssl: zod_1.z.string().min(1),
|
|
68
|
+
ssl: zod_1.z.string().min(1).describe('ACM certificate ARN attached to the ALB HTTPS listener, e.g. arn:aws:acm:us-east-1:ACCOUNT_ID:certificate/CERTIFICATE_ID.'),
|
|
35
69
|
apps: zod_1.z.array(exports.AppSchema).min(1),
|
|
70
|
+
}).passthrough().meta({ id: 'ecsConfig' }).superRefine((config, ctx) => {
|
|
71
|
+
const names = config.apps.map((app) => app.name);
|
|
72
|
+
const duplicates = [...new Set(names.filter((name, i) => names.indexOf(name) !== i))];
|
|
73
|
+
if (duplicates.length > 0) {
|
|
74
|
+
ctx.addIssue({
|
|
75
|
+
code: 'custom',
|
|
76
|
+
message: `app.name must be unique — duplicate: ${duplicates.join(', ')}`,
|
|
77
|
+
path: ['apps'],
|
|
78
|
+
});
|
|
79
|
+
}
|
|
36
80
|
});
|
|
37
|
-
|
|
81
|
+
// --- Azure ---
|
|
82
|
+
const AzureDatabaseSchema = zod_1.z.object({
|
|
83
|
+
enabled: zod_1.z.boolean().optional().default(false),
|
|
84
|
+
engine: zod_1.z.enum(['mssql', 'postgres']).optional().default(azure_defaults_1.AZURE_DEFAULTS.database.engine).describe("Database engine: 'mssql' provisions Azure SQL Database, 'postgres' provisions Azure Database for PostgreSQL Flexible Server."),
|
|
85
|
+
sku_name: zod_1.z.string().optional().describe('SKU name — e.g. GP_S_Gen5_4 for mssql, GP_Standard_D4s_v3 for postgres.'),
|
|
86
|
+
storage_account_type: zod_1.z.enum(['Local', 'Zone', 'Geo', 'GeoZone']).optional().default(azure_defaults_1.AZURE_DEFAULTS.database.storageAccountType).describe('Backup storage redundancy (mssql only).'),
|
|
87
|
+
pitr_retention_days: zod_1.z.number().int().min(1).max(35).optional().default(azure_defaults_1.AZURE_DEFAULTS.database.pitrRetentionDays).describe('Point-in-time restore retention in days (mssql only).'),
|
|
88
|
+
ltr_weekly_retention: zod_1.z.string().optional().default(azure_defaults_1.AZURE_DEFAULTS.database.ltrWeeklyRetention).describe('Long-term retention ISO 8601 duration, e.g. P21W (mssql only).'),
|
|
89
|
+
allocated_storage_mb: zod_1.z.number().int().positive().optional().describe('Allocated storage in MB (postgres only).'),
|
|
90
|
+
}).passthrough();
|
|
91
|
+
const AzureRedisSchema = zod_1.z.object({
|
|
92
|
+
enabled: zod_1.z.boolean().optional().default(false),
|
|
93
|
+
sku_name: zod_1.z.string().optional().default(azure_defaults_1.AZURE_DEFAULTS.redis.skuName).describe("Azure Managed Redis 'Balanced' tier SKU, e.g. Balanced_B0, Balanced_B1, Balanced_B5."),
|
|
94
|
+
}).passthrough();
|
|
95
|
+
const AzureContainerAppSchema = zod_1.z.object({
|
|
96
|
+
cpu: zod_1.z.number().positive().optional().default(azure_defaults_1.AZURE_DEFAULTS.containerApp.cpu),
|
|
97
|
+
memory: zod_1.z.string().optional().default(azure_defaults_1.AZURE_DEFAULTS.containerApp.memory).describe('CPU:memory ratio is fixed at 1:2 by the platform.'),
|
|
98
|
+
concurrent_requests: zod_1.z.number().int().positive().optional().default(azure_defaults_1.AZURE_DEFAULTS.containerApp.concurrentRequests).describe('HTTP concurrency threshold that triggers scale-out.'),
|
|
99
|
+
min_replicas: zod_1.z.number().int().nonnegative().optional().default(azure_defaults_1.AZURE_DEFAULTS.containerApp.minReplicas),
|
|
100
|
+
max_replicas: zod_1.z.number().int().positive().optional().default(azure_defaults_1.AZURE_DEFAULTS.containerApp.maxReplicas),
|
|
101
|
+
}).passthrough();
|
|
102
|
+
const AzureWorkerSchema = zod_1.z.object({
|
|
103
|
+
name: zod_1.z
|
|
104
|
+
.string()
|
|
105
|
+
.min(AZURE_APP_NAME_MIN_LENGTH, `worker name must be at least ${AZURE_APP_NAME_MIN_LENGTH} characters (Azure Container App naming requirement)`)
|
|
106
|
+
.max(AZURE_APP_NAME_MAX_LENGTH, `worker name must be ${AZURE_APP_NAME_MAX_LENGTH} characters or fewer (Azure Container App naming limit)`)
|
|
107
|
+
.regex(AZURE_APP_NAME_PATTERN, `worker name ${AZURE_APP_NAME_MESSAGE}`)
|
|
108
|
+
.describe('Worker name. Used as the Container App name.'),
|
|
109
|
+
dockerfile: zod_1.z.string().min(1).describe("Path to the worker's Dockerfile relative to the project root."),
|
|
110
|
+
}).passthrough().meta({ id: 'azureWorker' });
|
|
111
|
+
exports.AzureAppSchema = zod_1.z.object({
|
|
112
|
+
name: zod_1.z
|
|
113
|
+
.string()
|
|
114
|
+
.min(AZURE_APP_NAME_MIN_LENGTH, `app name must be at least ${AZURE_APP_NAME_MIN_LENGTH} characters (Azure Container App naming requirement)`)
|
|
115
|
+
.max(AZURE_APP_NAME_MAX_LENGTH, `app name must be ${AZURE_APP_NAME_MAX_LENGTH} characters or fewer (Azure Container App naming limit)`)
|
|
116
|
+
.regex(AZURE_APP_NAME_PATTERN, `app name ${AZURE_APP_NAME_MESSAGE}`),
|
|
117
|
+
technology: zod_1.z.string().min(1).describe("Application role/framework. 'nest' and 'react' get framework-specific env var injection (see docs); any other value deploys as a plain Container App with no extra env vars — pass everything explicitly via variables/build_env."),
|
|
118
|
+
dockerfile: zod_1.z.string().min(1),
|
|
119
|
+
health_check_path: zod_1.z.string().min(1),
|
|
120
|
+
domain: zod_1.z.string().min(1).describe('Custom domain for this app. A managed TLS certificate is issued automatically via Front Door once DNS validation completes (see the custom_domain_validation deploy output).'),
|
|
121
|
+
port: zod_1.z.number().int().positive(),
|
|
122
|
+
branch: zod_1.z.string().default('main'),
|
|
123
|
+
template_repo_branch: zod_1.z.string().default('main'),
|
|
124
|
+
variables: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional().default({}),
|
|
125
|
+
build_env: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional().default({}),
|
|
126
|
+
workers: zod_1.z.array(AzureWorkerSchema).optional().default([]),
|
|
127
|
+
database: AzureDatabaseSchema.default({
|
|
128
|
+
enabled: false,
|
|
129
|
+
engine: azure_defaults_1.AZURE_DEFAULTS.database.engine,
|
|
130
|
+
storage_account_type: azure_defaults_1.AZURE_DEFAULTS.database.storageAccountType,
|
|
131
|
+
pitr_retention_days: azure_defaults_1.AZURE_DEFAULTS.database.pitrRetentionDays,
|
|
132
|
+
ltr_weekly_retention: azure_defaults_1.AZURE_DEFAULTS.database.ltrWeeklyRetention,
|
|
133
|
+
}).describe('Azure SQL Database or PostgreSQL Flexible Server for this app.'),
|
|
134
|
+
redis: AzureRedisSchema.default({
|
|
135
|
+
enabled: false,
|
|
136
|
+
sku_name: azure_defaults_1.AZURE_DEFAULTS.redis.skuName,
|
|
137
|
+
}).describe('Azure Managed Redis for this app.'),
|
|
138
|
+
container_app: AzureContainerAppSchema.default({
|
|
139
|
+
cpu: azure_defaults_1.AZURE_DEFAULTS.containerApp.cpu,
|
|
140
|
+
memory: azure_defaults_1.AZURE_DEFAULTS.containerApp.memory,
|
|
141
|
+
concurrent_requests: azure_defaults_1.AZURE_DEFAULTS.containerApp.concurrentRequests,
|
|
142
|
+
min_replicas: azure_defaults_1.AZURE_DEFAULTS.containerApp.minReplicas,
|
|
143
|
+
max_replicas: azure_defaults_1.AZURE_DEFAULTS.containerApp.maxReplicas,
|
|
144
|
+
}).describe('Azure Container Apps (Consumption plan) sizing. Every app runs as a Container App.'),
|
|
145
|
+
}).passthrough().meta({ id: 'azureApp' });
|
|
146
|
+
exports.AzureInfraConfigSchema = zod_1.z.object({
|
|
147
|
+
name: zod_1.z.string().min(1),
|
|
148
|
+
slack_webhook_url: zod_1.z.string().optional(),
|
|
149
|
+
github_repo_name: zod_1.z.string().optional().describe('Name of the GitHub repository to create/use. Defaults to "${name}-monorepo". Set this ' +
|
|
150
|
+
'explicitly when this fuel.yml should target a repo already used by another environment ' +
|
|
151
|
+
"(e.g. a separate prod fuel.yml with its own `name` pointing at the same repo as dev)."),
|
|
152
|
+
deployment: zod_1.z.literal('azure'),
|
|
153
|
+
location: zod_1.z.string().optional().default(azure_defaults_1.AZURE_DEFAULTS.location).describe('Azure region for all resources.'),
|
|
154
|
+
monitor: zod_1.z.object({
|
|
155
|
+
daily_data_cap_gb: zod_1.z.number().positive().optional().default(azure_defaults_1.AZURE_DEFAULTS.monitor.dailyDataCapGb),
|
|
156
|
+
retention_days: zod_1.z.number().int().positive().optional().default(azure_defaults_1.AZURE_DEFAULTS.monitor.retentionDays),
|
|
157
|
+
dashboard_count: zod_1.z.number().int().nonnegative().optional().default(azure_defaults_1.AZURE_DEFAULTS.monitor.dashboardCount),
|
|
158
|
+
}).passthrough().default({
|
|
159
|
+
daily_data_cap_gb: azure_defaults_1.AZURE_DEFAULTS.monitor.dailyDataCapGb,
|
|
160
|
+
retention_days: azure_defaults_1.AZURE_DEFAULTS.monitor.retentionDays,
|
|
161
|
+
dashboard_count: azure_defaults_1.AZURE_DEFAULTS.monitor.dashboardCount,
|
|
162
|
+
}).describe('Application Insights / Log Analytics settings shared across all apps.'),
|
|
163
|
+
front_door: zod_1.z.object({
|
|
164
|
+
sku_name: zod_1.z.literal('Standard_AzureFrontDoor').optional().default(azure_defaults_1.AZURE_DEFAULTS.frontDoor.skuName),
|
|
165
|
+
}).passthrough().default({ sku_name: azure_defaults_1.AZURE_DEFAULTS.frontDoor.skuName }),
|
|
166
|
+
storage_account: zod_1.z.object({
|
|
167
|
+
account_kind: zod_1.z.literal('BlockBlobStorage').optional().default(azure_defaults_1.AZURE_DEFAULTS.storageAccount.accountKind),
|
|
168
|
+
account_tier: zod_1.z.literal('Premium').optional().default(azure_defaults_1.AZURE_DEFAULTS.storageAccount.accountTier),
|
|
169
|
+
account_replication_type: zod_1.z.literal('LRS').optional().default(azure_defaults_1.AZURE_DEFAULTS.storageAccount.accountReplicationType),
|
|
170
|
+
access_tier: zod_1.z.literal('Hot').optional().default(azure_defaults_1.AZURE_DEFAULTS.storageAccount.accessTier),
|
|
171
|
+
}).passthrough().default({
|
|
172
|
+
account_kind: azure_defaults_1.AZURE_DEFAULTS.storageAccount.accountKind,
|
|
173
|
+
account_tier: azure_defaults_1.AZURE_DEFAULTS.storageAccount.accountTier,
|
|
174
|
+
account_replication_type: azure_defaults_1.AZURE_DEFAULTS.storageAccount.accountReplicationType,
|
|
175
|
+
access_tier: azure_defaults_1.AZURE_DEFAULTS.storageAccount.accessTier,
|
|
176
|
+
}).describe('Shared app storage account, used for app file uploads (not the Terraform state storage account).'),
|
|
177
|
+
key_vault: zod_1.z.object({
|
|
178
|
+
sku_name: zod_1.z.literal('standard').optional().default(azure_defaults_1.AZURE_DEFAULTS.keyVault.skuName),
|
|
179
|
+
}).passthrough().default({ sku_name: azure_defaults_1.AZURE_DEFAULTS.keyVault.skuName }),
|
|
180
|
+
github_oidc: zod_1.z.object({
|
|
181
|
+
enabled: zod_1.z.boolean().optional().default(true).describe('Set to false to skip GitHub Actions OIDC entirely — no app registration, no role assignment ' +
|
|
182
|
+
'for CI. Use this to unblock testing the rest of the stack while waiting on a tenant admin.'),
|
|
183
|
+
existing_client_id: zod_1.z.string().optional().describe('Client ID of an app registration + service principal + federated identity credential(s) already ' +
|
|
184
|
+
'created out-of-band by a tenant admin. Set this when the deploying SP lacks the Entra ID ' +
|
|
185
|
+
'"Application Administrator" role (creating an app registration requires it, regardless of ' +
|
|
186
|
+
'subscription-level RBAC) — the module then reuses that identity instead of creating a new one. ' +
|
|
187
|
+
'The Contributor role assignment is still managed by Terraform either way, since that only needs ' +
|
|
188
|
+
'"User Access Administrator" on the subscription.'),
|
|
189
|
+
existing_principal_id: zod_1.z.string().optional().describe('Object ID (principal ID) of the service principal identified by existing_client_id, when ' +
|
|
190
|
+
'already known. Strongly recommended whenever existing_client_id is set: without it, ' +
|
|
191
|
+
'Terraform looks the object ID up via Microsoft Graph, which needs Directory.Read.All or ' +
|
|
192
|
+
'Application.Read.All on the deploying SP — permissions many tenant admins won\'t grant just ' +
|
|
193
|
+
'to resolve one known object. Whoever created the app out-of-band can get this by running ' +
|
|
194
|
+
'`az ad sp show --id <existing_client_id> --query id -o tsv`.'),
|
|
195
|
+
manage_role_assignment: zod_1.z.boolean().optional().default(true).describe('Whether Terraform should create/manage the Contributor role assignment for this identity. ' +
|
|
196
|
+
'Set to false when it was already granted out-of-band alongside existing_client_id (e.g. a ' +
|
|
197
|
+
'tenant admin\'s onboarding runbook already ran the role assignment) — otherwise Terraform ' +
|
|
198
|
+
'tries to create it again on every apply and fails with RoleAssignmentExists.'),
|
|
199
|
+
}).passthrough().optional().default({ enabled: true, manage_role_assignment: true }).describe('GitHub Actions OIDC identity used to push images and redeploy Container Apps.'),
|
|
200
|
+
apps: zod_1.z.array(exports.AzureAppSchema).min(1),
|
|
201
|
+
}).passthrough().meta({ id: 'azureConfig' });
|
|
202
|
+
exports.InfraConfigSchema = zod_1.z.discriminatedUnion('deployment', [
|
|
203
|
+
exports.EcsInfraConfigSchema,
|
|
204
|
+
exports.AzureInfraConfigSchema,
|
|
205
|
+
]);
|
|
206
|
+
exports.AWS_REQUIRED_CREDENTIAL_KEYS = [
|
|
38
207
|
'AWS_ACCESS_KEY_ID',
|
|
39
208
|
'AWS_SECRET_ACCESS_KEY',
|
|
40
209
|
'AWS_REGION',
|
|
@@ -42,4 +211,23 @@ exports.REQUIRED_CREDENTIAL_KEYS = [
|
|
|
42
211
|
'GITHUB_USERNAME',
|
|
43
212
|
'GITHUB_ORGANIZATION',
|
|
44
213
|
];
|
|
214
|
+
exports.AZURE_REQUIRED_CREDENTIAL_KEYS = [
|
|
215
|
+
'AZURE_SUBSCRIPTION_ID',
|
|
216
|
+
'AZURE_TENANT_ID',
|
|
217
|
+
'AZURE_CLIENT_ID',
|
|
218
|
+
'AZURE_CLIENT_SECRET',
|
|
219
|
+
'GITHUB_TOKEN',
|
|
220
|
+
'GITHUB_USERNAME',
|
|
221
|
+
'GITHUB_ORGANIZATION',
|
|
222
|
+
];
|
|
223
|
+
// Union of every credential key across providers — `resolveCredentials` only
|
|
224
|
+
// requires the subset matching the target deployment, but the type covers both
|
|
225
|
+
// so a single Credentials object can be read/written regardless of provider.
|
|
226
|
+
exports.REQUIRED_CREDENTIAL_KEYS = [
|
|
227
|
+
...exports.AWS_REQUIRED_CREDENTIAL_KEYS,
|
|
228
|
+
...exports.AZURE_REQUIRED_CREDENTIAL_KEYS,
|
|
229
|
+
];
|
|
230
|
+
function requiredCredentialKeysFor(deployment) {
|
|
231
|
+
return deployment === 'azure' ? exports.AZURE_REQUIRED_CREDENTIAL_KEYS : exports.AWS_REQUIRED_CREDENTIAL_KEYS;
|
|
232
|
+
}
|
|
45
233
|
//# sourceMappingURL=types.js.map
|
package/dist/infra/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/infra/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/infra/types.ts"],"names":[],"mappings":"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"}
|