@rulebricks/cli 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +62 -0
  2. package/dist/commands/clone.d.ts +6 -0
  3. package/dist/commands/clone.js +60 -0
  4. package/dist/commands/deploy.d.ts +8 -0
  5. package/dist/commands/deploy.js +409 -0
  6. package/dist/commands/destroy.d.ts +8 -0
  7. package/dist/commands/destroy.js +298 -0
  8. package/dist/commands/init.d.ts +7 -0
  9. package/dist/commands/init.js +201 -0
  10. package/dist/commands/logs.d.ts +9 -0
  11. package/dist/commands/logs.js +222 -0
  12. package/dist/commands/open.d.ts +7 -0
  13. package/dist/commands/open.js +139 -0
  14. package/dist/commands/status.d.ts +5 -0
  15. package/dist/commands/status.js +125 -0
  16. package/dist/commands/upgrade.d.ts +7 -0
  17. package/dist/commands/upgrade.js +239 -0
  18. package/dist/components/DNSWaitScreen.d.ts +9 -0
  19. package/dist/components/DNSWaitScreen.js +73 -0
  20. package/dist/components/Wizard/WizardContext.d.ts +176 -0
  21. package/dist/components/Wizard/WizardContext.js +346 -0
  22. package/dist/components/Wizard/index.d.ts +2 -0
  23. package/dist/components/Wizard/index.js +2 -0
  24. package/dist/components/Wizard/steps/CloudProviderStep.d.ts +6 -0
  25. package/dist/components/Wizard/steps/CloudProviderStep.js +210 -0
  26. package/dist/components/Wizard/steps/CredentialsStep.d.ts +6 -0
  27. package/dist/components/Wizard/steps/CredentialsStep.js +22 -0
  28. package/dist/components/Wizard/steps/DatabaseStep.d.ts +6 -0
  29. package/dist/components/Wizard/steps/DatabaseStep.js +80 -0
  30. package/dist/components/Wizard/steps/DeploymentModeStep.d.ts +5 -0
  31. package/dist/components/Wizard/steps/DeploymentModeStep.js +26 -0
  32. package/dist/components/Wizard/steps/DomainStep.d.ts +6 -0
  33. package/dist/components/Wizard/steps/DomainStep.js +126 -0
  34. package/dist/components/Wizard/steps/FeatureConfigStep.d.ts +6 -0
  35. package/dist/components/Wizard/steps/FeatureConfigStep.js +765 -0
  36. package/dist/components/Wizard/steps/FeaturesStep.d.ts +6 -0
  37. package/dist/components/Wizard/steps/FeaturesStep.js +119 -0
  38. package/dist/components/Wizard/steps/ReviewStep.d.ts +6 -0
  39. package/dist/components/Wizard/steps/ReviewStep.js +56 -0
  40. package/dist/components/Wizard/steps/SMTPStep.d.ts +6 -0
  41. package/dist/components/Wizard/steps/SMTPStep.js +191 -0
  42. package/dist/components/Wizard/steps/SupabaseCredentialsStep.d.ts +6 -0
  43. package/dist/components/Wizard/steps/SupabaseCredentialsStep.js +76 -0
  44. package/dist/components/Wizard/steps/TierStep.d.ts +6 -0
  45. package/dist/components/Wizard/steps/TierStep.js +29 -0
  46. package/dist/components/Wizard/steps/VersionStep.d.ts +6 -0
  47. package/dist/components/Wizard/steps/VersionStep.js +113 -0
  48. package/dist/components/Wizard/steps/index.d.ts +12 -0
  49. package/dist/components/Wizard/steps/index.js +12 -0
  50. package/dist/components/common/AppShell.d.ts +31 -0
  51. package/dist/components/common/AppShell.js +31 -0
  52. package/dist/components/common/Box.d.ts +20 -0
  53. package/dist/components/common/Box.js +20 -0
  54. package/dist/components/common/Logo.d.ts +7 -0
  55. package/dist/components/common/Logo.js +22 -0
  56. package/dist/components/common/Spinner.d.ts +12 -0
  57. package/dist/components/common/Spinner.js +28 -0
  58. package/dist/components/common/index.d.ts +6 -0
  59. package/dist/components/common/index.js +5 -0
  60. package/dist/index.d.ts +2 -0
  61. package/dist/index.js +202 -0
  62. package/dist/lib/cloudCli.d.ts +156 -0
  63. package/dist/lib/cloudCli.js +691 -0
  64. package/dist/lib/config.d.ts +91 -0
  65. package/dist/lib/config.js +278 -0
  66. package/dist/lib/dns.d.ts +41 -0
  67. package/dist/lib/dns.js +235 -0
  68. package/dist/lib/dockerHub.d.ts +57 -0
  69. package/dist/lib/dockerHub.js +128 -0
  70. package/dist/lib/helm.d.ts +53 -0
  71. package/dist/lib/helm.js +209 -0
  72. package/dist/lib/helmValues.d.ts +17 -0
  73. package/dist/lib/helmValues.js +693 -0
  74. package/dist/lib/kubernetes.d.ts +161 -0
  75. package/dist/lib/kubernetes.js +755 -0
  76. package/dist/lib/terraform.d.ts +44 -0
  77. package/dist/lib/terraform.js +230 -0
  78. package/dist/lib/theme.d.ts +81 -0
  79. package/dist/lib/theme.js +115 -0
  80. package/dist/lib/validation.d.ts +47 -0
  81. package/dist/lib/validation.js +164 -0
  82. package/dist/lib/versions.d.ts +69 -0
  83. package/dist/lib/versions.js +139 -0
  84. package/dist/types/index.d.ts +718 -0
  85. package/dist/types/index.js +556 -0
  86. package/email-templates/email_change.html +325 -0
  87. package/email-templates/invite.html +383 -0
  88. package/email-templates/password_change.html +414 -0
  89. package/email-templates/verify.html +396 -0
  90. package/package.json +78 -0
  91. package/terraform/aws/main.tf +327 -0
  92. package/terraform/azure/main.tf +326 -0
  93. package/terraform/gcp/main.tf +369 -0
@@ -0,0 +1,369 @@
1
+ # Google Cloud GKE Cluster for Rulebricks
2
+ # Meets minimum requirements: 4 nodes, 8 vCPU, 16GB RAM per node
3
+
4
+ terraform {
5
+ required_version = ">= 1.0.0"
6
+
7
+ required_providers {
8
+ google = {
9
+ source = "hashicorp/google"
10
+ version = "~> 5.0"
11
+ }
12
+ google-beta = {
13
+ source = "hashicorp/google-beta"
14
+ version = "~> 5.0"
15
+ }
16
+ }
17
+ }
18
+
19
+ provider "google" {
20
+ project = var.project_id
21
+ region = var.region
22
+ }
23
+
24
+ provider "google-beta" {
25
+ project = var.project_id
26
+ region = var.region
27
+ }
28
+
29
+ # Variables
30
+ variable "cluster_name" {
31
+ description = "Name of the GKE cluster"
32
+ type = string
33
+ default = "rulebricks-cluster"
34
+ }
35
+
36
+ variable "project_id" {
37
+ description = "GCP project ID"
38
+ type = string
39
+ }
40
+
41
+ variable "region" {
42
+ description = "GCP region"
43
+ type = string
44
+ default = "us-central1"
45
+ }
46
+
47
+ variable "tier" {
48
+ description = "Performance tier: small, medium, large"
49
+ type = string
50
+ default = "small"
51
+ }
52
+
53
+ variable "kubernetes_version" {
54
+ description = "Kubernetes version"
55
+ type = string
56
+ default = "1.29"
57
+ }
58
+
59
+ variable "enable_external_dns" {
60
+ description = "Enable service account for external-dns (Cloud DNS)"
61
+ type = bool
62
+ default = false
63
+ }
64
+
65
+ variable "enable_gcs_logging" {
66
+ description = "Enable service account for Vector GCS logging"
67
+ type = bool
68
+ default = false
69
+ }
70
+
71
+ variable "logging_gcs_bucket" {
72
+ description = "GCS bucket name for Vector logs"
73
+ type = string
74
+ default = ""
75
+ }
76
+
77
+ # Tier configurations
78
+ # Using Axion C4A (ARM64) instances for compatibility with arm64 container images
79
+ locals {
80
+ tier_configs = {
81
+ small = {
82
+ node_count = 4
83
+ machine_type = "c4a-standard-2" # 2 vCPU, 8GB (Google Axion ARM64)
84
+ min_nodes = 4
85
+ max_nodes = 4
86
+ disk_size = 50
87
+ }
88
+ medium = {
89
+ node_count = 4
90
+ machine_type = "c4a-standard-4" # 4 vCPU, 16GB (Google Axion ARM64)
91
+ min_nodes = 4
92
+ max_nodes = 8
93
+ disk_size = 100
94
+ }
95
+ large = {
96
+ node_count = 5
97
+ machine_type = "c4a-standard-8" # 8 vCPU, 32GB (Google Axion ARM64)
98
+ min_nodes = 5
99
+ max_nodes = 16
100
+ disk_size = 200
101
+ }
102
+ }
103
+
104
+ config = local.tier_configs[var.tier]
105
+ }
106
+
107
+ # Enable required APIs
108
+ resource "google_project_service" "compute" {
109
+ service = "compute.googleapis.com"
110
+ disable_on_destroy = false
111
+ }
112
+
113
+ resource "google_project_service" "container" {
114
+ service = "container.googleapis.com"
115
+ disable_on_destroy = false
116
+ }
117
+
118
+ resource "google_project_service" "dns" {
119
+ count = var.enable_external_dns ? 1 : 0
120
+ service = "dns.googleapis.com"
121
+ disable_on_destroy = false
122
+ }
123
+
124
+ # VPC Network
125
+ resource "google_compute_network" "vpc" {
126
+ name = "${var.cluster_name}-vpc"
127
+ auto_create_subnetworks = false
128
+
129
+ depends_on = [google_project_service.compute]
130
+ }
131
+
132
+ # Subnet
133
+ resource "google_compute_subnetwork" "subnet" {
134
+ name = "${var.cluster_name}-subnet"
135
+ region = var.region
136
+ network = google_compute_network.vpc.name
137
+ ip_cidr_range = "10.0.0.0/16"
138
+
139
+ secondary_ip_range {
140
+ range_name = "pods"
141
+ ip_cidr_range = "10.1.0.0/16"
142
+ }
143
+
144
+ secondary_ip_range {
145
+ range_name = "services"
146
+ ip_cidr_range = "10.2.0.0/16"
147
+ }
148
+
149
+ private_ip_google_access = true
150
+ }
151
+
152
+ # Cloud Router for NAT
153
+ resource "google_compute_router" "router" {
154
+ name = "${var.cluster_name}-router"
155
+ region = var.region
156
+ network = google_compute_network.vpc.id
157
+ }
158
+
159
+ # Cloud NAT
160
+ resource "google_compute_router_nat" "nat" {
161
+ name = "${var.cluster_name}-nat"
162
+ router = google_compute_router.router.name
163
+ region = var.region
164
+ nat_ip_allocate_option = "AUTO_ONLY"
165
+ source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
166
+ }
167
+
168
+ # GKE Cluster
169
+ resource "google_container_cluster" "cluster" {
170
+ provider = google-beta
171
+
172
+ name = var.cluster_name
173
+ location = var.region
174
+
175
+ # Use VPC-native cluster
176
+ network = google_compute_network.vpc.name
177
+ subnetwork = google_compute_subnetwork.subnet.name
178
+
179
+ # Remove default node pool
180
+ remove_default_node_pool = true
181
+ initial_node_count = 1
182
+
183
+ # Cluster configuration
184
+ min_master_version = var.kubernetes_version
185
+
186
+ # Enable Workload Identity
187
+ workload_identity_config {
188
+ workload_pool = "${var.project_id}.svc.id.goog"
189
+ }
190
+
191
+ # IP allocation policy for VPC-native
192
+ ip_allocation_policy {
193
+ cluster_secondary_range_name = "pods"
194
+ services_secondary_range_name = "services"
195
+ }
196
+
197
+ # Private cluster config
198
+ private_cluster_config {
199
+ enable_private_nodes = true
200
+ enable_private_endpoint = false
201
+ master_ipv4_cidr_block = "172.16.0.0/28"
202
+ }
203
+
204
+ # Master authorized networks
205
+ master_authorized_networks_config {
206
+ cidr_blocks {
207
+ cidr_block = "0.0.0.0/0"
208
+ display_name = "All"
209
+ }
210
+ }
211
+
212
+ # Release channel
213
+ release_channel {
214
+ channel = "REGULAR"
215
+ }
216
+
217
+ # Enable network policy
218
+ network_policy {
219
+ enabled = true
220
+ provider = "CALICO"
221
+ }
222
+
223
+ addons_config {
224
+ http_load_balancing {
225
+ disabled = false
226
+ }
227
+ horizontal_pod_autoscaling {
228
+ disabled = false
229
+ }
230
+ gce_persistent_disk_csi_driver_config {
231
+ enabled = true
232
+ }
233
+ }
234
+
235
+ depends_on = [google_project_service.container]
236
+ }
237
+
238
+ # Node Pool
239
+ resource "google_container_node_pool" "primary" {
240
+ name = "rulebricks-nodes"
241
+ location = var.region
242
+ cluster = google_container_cluster.cluster.name
243
+
244
+ node_count = var.tier == "small" ? local.config.node_count : null
245
+
246
+ dynamic "autoscaling" {
247
+ for_each = var.tier != "small" ? [1] : []
248
+ content {
249
+ min_node_count = local.config.min_nodes
250
+ max_node_count = local.config.max_nodes
251
+ }
252
+ }
253
+
254
+ node_config {
255
+ preemptible = false
256
+ machine_type = local.config.machine_type
257
+ disk_size_gb = local.config.disk_size
258
+ disk_type = "pd-ssd"
259
+
260
+ oauth_scopes = [
261
+ "https://www.googleapis.com/auth/cloud-platform"
262
+ ]
263
+
264
+ labels = {
265
+ environment = "rulebricks"
266
+ tier = var.tier
267
+ }
268
+
269
+ workload_metadata_config {
270
+ mode = "GKE_METADATA"
271
+ }
272
+ }
273
+
274
+ management {
275
+ auto_repair = true
276
+ auto_upgrade = true
277
+ }
278
+ }
279
+
280
+ # ============================================
281
+ # External DNS Service Account (Cloud DNS)
282
+ # ============================================
283
+ resource "google_service_account" "external_dns" {
284
+ count = var.enable_external_dns ? 1 : 0
285
+ account_id = "${var.cluster_name}-external-dns"
286
+ display_name = "External DNS for Rulebricks"
287
+ description = "Service account for external-dns to manage Cloud DNS records"
288
+ }
289
+
290
+ resource "google_project_iam_member" "external_dns" {
291
+ count = var.enable_external_dns ? 1 : 0
292
+ project = var.project_id
293
+ role = "roles/dns.admin"
294
+ member = "serviceAccount:${google_service_account.external_dns[0].email}"
295
+ }
296
+
297
+ resource "google_service_account_iam_member" "external_dns_workload_identity" {
298
+ count = var.enable_external_dns ? 1 : 0
299
+ service_account_id = google_service_account.external_dns[0].name
300
+ role = "roles/iam.workloadIdentityUser"
301
+ member = "serviceAccount:${var.project_id}.svc.id.goog[rulebricks/external-dns]"
302
+ }
303
+
304
+ # ============================================
305
+ # Vector GCS Logging Service Account
306
+ # ============================================
307
+ resource "google_service_account" "vector" {
308
+ count = var.enable_gcs_logging ? 1 : 0
309
+ account_id = "${var.cluster_name}-vector"
310
+ display_name = "Vector for Rulebricks"
311
+ description = "Service account for Vector to write logs to GCS"
312
+ }
313
+
314
+ resource "google_storage_bucket_iam_member" "vector_gcs" {
315
+ count = var.enable_gcs_logging && var.logging_gcs_bucket != "" ? 1 : 0
316
+ bucket = var.logging_gcs_bucket
317
+ role = "roles/storage.objectCreator"
318
+ member = "serviceAccount:${google_service_account.vector[0].email}"
319
+ }
320
+
321
+ resource "google_service_account_iam_member" "vector_workload_identity" {
322
+ count = var.enable_gcs_logging ? 1 : 0
323
+ service_account_id = google_service_account.vector[0].name
324
+ role = "roles/iam.workloadIdentityUser"
325
+ member = "serviceAccount:${var.project_id}.svc.id.goog[rulebricks/vector]"
326
+ }
327
+
328
+ # Outputs
329
+ output "cluster_name" {
330
+ value = google_container_cluster.cluster.name
331
+ description = "GKE cluster name"
332
+ }
333
+
334
+ output "cluster_endpoint" {
335
+ value = google_container_cluster.cluster.endpoint
336
+ description = "GKE cluster endpoint"
337
+ sensitive = true
338
+ }
339
+
340
+ output "cluster_ca_certificate" {
341
+ value = google_container_cluster.cluster.master_auth[0].cluster_ca_certificate
342
+ description = "Base64 encoded cluster CA certificate"
343
+ sensitive = true
344
+ }
345
+
346
+ output "region" {
347
+ value = var.region
348
+ description = "GCP region"
349
+ }
350
+
351
+ output "project_id" {
352
+ value = var.project_id
353
+ description = "GCP project ID"
354
+ }
355
+
356
+ output "kubeconfig_command" {
357
+ value = "gcloud container clusters get-credentials ${var.cluster_name} --region ${var.region} --project ${var.project_id}"
358
+ description = "Command to update kubeconfig"
359
+ }
360
+
361
+ output "external_dns_service_account" {
362
+ value = var.enable_external_dns ? google_service_account.external_dns[0].email : ""
363
+ description = "GCP service account email for external-dns"
364
+ }
365
+
366
+ output "vector_service_account" {
367
+ value = var.enable_gcs_logging ? google_service_account.vector[0].email : ""
368
+ description = "GCP service account email for Vector"
369
+ }