@stacksjs/ts-cloud-core 0.1.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.
Files changed (251) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +321 -0
  3. package/package.json +31 -0
  4. package/src/advanced-features.test.ts +465 -0
  5. package/src/aws/cloudformation.ts +421 -0
  6. package/src/aws/cloudfront.ts +158 -0
  7. package/src/aws/credentials.test.ts +132 -0
  8. package/src/aws/credentials.ts +545 -0
  9. package/src/aws/index.ts +87 -0
  10. package/src/aws/s3.test.ts +188 -0
  11. package/src/aws/s3.ts +1088 -0
  12. package/src/aws/signature.test.ts +670 -0
  13. package/src/aws/signature.ts +1155 -0
  14. package/src/backup/disaster-recovery.test.ts +726 -0
  15. package/src/backup/disaster-recovery.ts +500 -0
  16. package/src/backup/index.ts +34 -0
  17. package/src/backup/manager.test.ts +498 -0
  18. package/src/backup/manager.ts +432 -0
  19. package/src/cicd/circleci.ts +430 -0
  20. package/src/cicd/github-actions.ts +424 -0
  21. package/src/cicd/gitlab-ci.ts +255 -0
  22. package/src/cicd/index.ts +8 -0
  23. package/src/cli/history.ts +396 -0
  24. package/src/cli/index.ts +10 -0
  25. package/src/cli/progress.ts +458 -0
  26. package/src/cli/repl.ts +454 -0
  27. package/src/cli/suggestions.ts +327 -0
  28. package/src/cli/table.test.ts +319 -0
  29. package/src/cli/table.ts +332 -0
  30. package/src/cloudformation/builder.test.ts +327 -0
  31. package/src/cloudformation/builder.ts +378 -0
  32. package/src/cloudformation/builders/api-gateway.ts +449 -0
  33. package/src/cloudformation/builders/cache.ts +334 -0
  34. package/src/cloudformation/builders/cdn.ts +278 -0
  35. package/src/cloudformation/builders/compute.ts +485 -0
  36. package/src/cloudformation/builders/database.ts +392 -0
  37. package/src/cloudformation/builders/functions.ts +343 -0
  38. package/src/cloudformation/builders/messaging.ts +140 -0
  39. package/src/cloudformation/builders/monitoring.ts +300 -0
  40. package/src/cloudformation/builders/network.ts +264 -0
  41. package/src/cloudformation/builders/queue.ts +147 -0
  42. package/src/cloudformation/builders/security.ts +399 -0
  43. package/src/cloudformation/builders/storage.ts +285 -0
  44. package/src/cloudformation/index.ts +30 -0
  45. package/src/cloudformation/types.ts +173 -0
  46. package/src/compliance/aws-config.ts +543 -0
  47. package/src/compliance/cloudtrail.ts +376 -0
  48. package/src/compliance/compliance.test.ts +423 -0
  49. package/src/compliance/guardduty.ts +446 -0
  50. package/src/compliance/index.ts +66 -0
  51. package/src/compliance/security-hub.ts +456 -0
  52. package/src/containers/build-optimization.ts +416 -0
  53. package/src/containers/containers.test.ts +508 -0
  54. package/src/containers/image-scanning.ts +360 -0
  55. package/src/containers/index.ts +9 -0
  56. package/src/containers/registry.ts +293 -0
  57. package/src/containers/service-mesh.ts +520 -0
  58. package/src/database/database.test.ts +762 -0
  59. package/src/database/index.ts +9 -0
  60. package/src/database/migrations.ts +444 -0
  61. package/src/database/performance.ts +528 -0
  62. package/src/database/replicas.ts +534 -0
  63. package/src/database/users.ts +494 -0
  64. package/src/dependency-graph.ts +143 -0
  65. package/src/deployment/ab-testing.ts +582 -0
  66. package/src/deployment/blue-green.ts +452 -0
  67. package/src/deployment/canary.ts +500 -0
  68. package/src/deployment/deployment.test.ts +526 -0
  69. package/src/deployment/index.ts +61 -0
  70. package/src/deployment/progressive.ts +62 -0
  71. package/src/dns/dns.test.ts +641 -0
  72. package/src/dns/dnssec.ts +315 -0
  73. package/src/dns/index.ts +8 -0
  74. package/src/dns/resolver.ts +496 -0
  75. package/src/dns/routing.ts +593 -0
  76. package/src/email/advanced/analytics.ts +445 -0
  77. package/src/email/advanced/index.ts +11 -0
  78. package/src/email/advanced/rules.ts +465 -0
  79. package/src/email/advanced/scheduling.ts +352 -0
  80. package/src/email/advanced/search.ts +412 -0
  81. package/src/email/advanced/shared-mailboxes.ts +404 -0
  82. package/src/email/advanced/templates.ts +455 -0
  83. package/src/email/advanced/threading.ts +281 -0
  84. package/src/email/analytics.ts +467 -0
  85. package/src/email/bounce-handling.ts +425 -0
  86. package/src/email/email.test.ts +431 -0
  87. package/src/email/handlers/__tests__/inbound.test.ts +38 -0
  88. package/src/email/handlers/__tests__/outbound.test.ts +37 -0
  89. package/src/email/handlers/converter.ts +227 -0
  90. package/src/email/handlers/feedback.ts +228 -0
  91. package/src/email/handlers/inbound.ts +169 -0
  92. package/src/email/handlers/outbound.ts +178 -0
  93. package/src/email/index.ts +15 -0
  94. package/src/email/reputation.ts +303 -0
  95. package/src/email/templates.ts +352 -0
  96. package/src/errors/index.test.ts +434 -0
  97. package/src/errors/index.ts +416 -0
  98. package/src/health-checks/index.ts +40 -0
  99. package/src/index.ts +360 -0
  100. package/src/intrinsic-functions.ts +118 -0
  101. package/src/lambda/concurrency.ts +330 -0
  102. package/src/lambda/destinations.ts +345 -0
  103. package/src/lambda/dlq.ts +425 -0
  104. package/src/lambda/index.ts +11 -0
  105. package/src/lambda/lambda.test.ts +840 -0
  106. package/src/lambda/layers.ts +263 -0
  107. package/src/lambda/versions.ts +376 -0
  108. package/src/lambda/vpc.ts +399 -0
  109. package/src/local/config.ts +114 -0
  110. package/src/local/index.ts +6 -0
  111. package/src/local/mock-aws.ts +351 -0
  112. package/src/modules/ai.ts +340 -0
  113. package/src/modules/api.ts +478 -0
  114. package/src/modules/auth.ts +805 -0
  115. package/src/modules/cache.ts +417 -0
  116. package/src/modules/cdn.ts +1062 -0
  117. package/src/modules/communication.ts +1094 -0
  118. package/src/modules/compute.ts +3348 -0
  119. package/src/modules/database.ts +554 -0
  120. package/src/modules/deployment.ts +1079 -0
  121. package/src/modules/dns.ts +337 -0
  122. package/src/modules/email.ts +1538 -0
  123. package/src/modules/filesystem.ts +515 -0
  124. package/src/modules/index.ts +32 -0
  125. package/src/modules/messaging.ts +486 -0
  126. package/src/modules/monitoring.ts +2086 -0
  127. package/src/modules/network.ts +664 -0
  128. package/src/modules/parameter-store.ts +325 -0
  129. package/src/modules/permissions.ts +1081 -0
  130. package/src/modules/phone.ts +494 -0
  131. package/src/modules/queue.ts +1260 -0
  132. package/src/modules/redirects.ts +464 -0
  133. package/src/modules/registry.ts +699 -0
  134. package/src/modules/search.ts +401 -0
  135. package/src/modules/secrets.ts +416 -0
  136. package/src/modules/security.ts +731 -0
  137. package/src/modules/sms.ts +389 -0
  138. package/src/modules/storage.ts +1120 -0
  139. package/src/modules/workflow.ts +680 -0
  140. package/src/multi-account/config.ts +521 -0
  141. package/src/multi-account/index.ts +7 -0
  142. package/src/multi-account/manager.ts +427 -0
  143. package/src/multi-region/cross-region.ts +410 -0
  144. package/src/multi-region/index.ts +8 -0
  145. package/src/multi-region/manager.ts +483 -0
  146. package/src/multi-region/regions.ts +435 -0
  147. package/src/network-security/index.ts +48 -0
  148. package/src/observability/index.ts +9 -0
  149. package/src/observability/logs.ts +522 -0
  150. package/src/observability/metrics.ts +460 -0
  151. package/src/observability/observability.test.ts +782 -0
  152. package/src/observability/synthetics.ts +568 -0
  153. package/src/observability/xray.ts +358 -0
  154. package/src/phone/advanced/analytics.ts +349 -0
  155. package/src/phone/advanced/callbacks.ts +428 -0
  156. package/src/phone/advanced/index.ts +8 -0
  157. package/src/phone/advanced/ivr-builder.ts +504 -0
  158. package/src/phone/advanced/recording.ts +310 -0
  159. package/src/phone/handlers/__tests__/incoming-call.test.ts +40 -0
  160. package/src/phone/handlers/incoming-call.ts +117 -0
  161. package/src/phone/handlers/missed-call.ts +116 -0
  162. package/src/phone/handlers/voicemail.ts +179 -0
  163. package/src/phone/index.ts +9 -0
  164. package/src/presets/api-backend.ts +134 -0
  165. package/src/presets/data-pipeline.ts +204 -0
  166. package/src/presets/extend.test.ts +295 -0
  167. package/src/presets/extend.ts +297 -0
  168. package/src/presets/fullstack-app.ts +144 -0
  169. package/src/presets/index.ts +27 -0
  170. package/src/presets/jamstack.ts +135 -0
  171. package/src/presets/microservices.ts +167 -0
  172. package/src/presets/ml-api.ts +208 -0
  173. package/src/presets/nodejs-server.ts +104 -0
  174. package/src/presets/nodejs-serverless.ts +114 -0
  175. package/src/presets/realtime-app.ts +184 -0
  176. package/src/presets/static-site.ts +64 -0
  177. package/src/presets/traditional-web-app.ts +339 -0
  178. package/src/presets/wordpress.ts +138 -0
  179. package/src/preview/github.test.ts +249 -0
  180. package/src/preview/github.ts +297 -0
  181. package/src/preview/index.ts +37 -0
  182. package/src/preview/manager.test.ts +440 -0
  183. package/src/preview/manager.ts +326 -0
  184. package/src/preview/notifications.test.ts +582 -0
  185. package/src/preview/notifications.ts +341 -0
  186. package/src/queue/batch-processing.ts +402 -0
  187. package/src/queue/dlq-monitoring.ts +402 -0
  188. package/src/queue/fifo.ts +342 -0
  189. package/src/queue/index.ts +9 -0
  190. package/src/queue/management.ts +428 -0
  191. package/src/queue/queue.test.ts +429 -0
  192. package/src/resource-mgmt/index.ts +39 -0
  193. package/src/resource-naming.ts +62 -0
  194. package/src/s3/index.ts +523 -0
  195. package/src/schema/cloud-config.schema.json +554 -0
  196. package/src/schema/index.ts +68 -0
  197. package/src/security/certificate-manager.ts +492 -0
  198. package/src/security/index.ts +9 -0
  199. package/src/security/scanning.ts +545 -0
  200. package/src/security/secrets-manager.ts +476 -0
  201. package/src/security/secrets-rotation.ts +456 -0
  202. package/src/security/security.test.ts +738 -0
  203. package/src/sms/advanced/ab-testing.ts +389 -0
  204. package/src/sms/advanced/analytics.ts +336 -0
  205. package/src/sms/advanced/campaigns.ts +523 -0
  206. package/src/sms/advanced/chatbot.ts +224 -0
  207. package/src/sms/advanced/index.ts +10 -0
  208. package/src/sms/advanced/link-tracking.ts +248 -0
  209. package/src/sms/advanced/mms.ts +308 -0
  210. package/src/sms/handlers/__tests__/send.test.ts +40 -0
  211. package/src/sms/handlers/delivery-status.ts +133 -0
  212. package/src/sms/handlers/receive.ts +162 -0
  213. package/src/sms/handlers/send.ts +174 -0
  214. package/src/sms/index.ts +9 -0
  215. package/src/stack-diff.ts +389 -0
  216. package/src/static-site/index.ts +85 -0
  217. package/src/template-builder.ts +110 -0
  218. package/src/template-validator.ts +574 -0
  219. package/src/utils/cache.ts +291 -0
  220. package/src/utils/diff.ts +269 -0
  221. package/src/utils/hash.ts +227 -0
  222. package/src/utils/index.ts +8 -0
  223. package/src/utils/parallel.ts +294 -0
  224. package/src/validators/credentials.test.ts +274 -0
  225. package/src/validators/credentials.ts +233 -0
  226. package/src/validators/quotas.test.ts +434 -0
  227. package/src/validators/quotas.ts +217 -0
  228. package/test/ai.test.ts +327 -0
  229. package/test/api.test.ts +511 -0
  230. package/test/auth.test.ts +632 -0
  231. package/test/cache.test.ts +406 -0
  232. package/test/cdn.test.ts +247 -0
  233. package/test/compute.test.ts +861 -0
  234. package/test/database.test.ts +523 -0
  235. package/test/deployment.test.ts +499 -0
  236. package/test/dns.test.ts +270 -0
  237. package/test/email.test.ts +439 -0
  238. package/test/filesystem.test.ts +382 -0
  239. package/test/integration.test.ts +350 -0
  240. package/test/messaging.test.ts +514 -0
  241. package/test/monitoring.test.ts +634 -0
  242. package/test/network.test.ts +425 -0
  243. package/test/permissions.test.ts +488 -0
  244. package/test/queue.test.ts +484 -0
  245. package/test/registry.test.ts +306 -0
  246. package/test/security.test.ts +462 -0
  247. package/test/storage.test.ts +463 -0
  248. package/test/template-validator.test.ts +559 -0
  249. package/test/workflow.test.ts +592 -0
  250. package/tsconfig.json +16 -0
  251. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,424 @@
1
+ /**
2
+ * GitHub Actions Workflow Generator
3
+ * Generate CI/CD workflows for GitHub Actions
4
+ */
5
+
6
+ export interface GitHubActionsOptions {
7
+ workflowName?: string
8
+ trigger?: 'push' | 'pull_request' | 'workflow_dispatch' | 'schedule'
9
+ branches?: string[]
10
+ schedule?: string // Cron expression
11
+ environments?: string[]
12
+ awsRegion?: string
13
+ awsRole?: string // OIDC role ARN
14
+ nodeVersion?: string
15
+ bunVersion?: string
16
+ deployCommand?: string
17
+ testCommand?: string
18
+ buildCommand?: string
19
+ lintCommand?: string
20
+ }
21
+
22
+ /**
23
+ * Generate deployment workflow
24
+ */
25
+ export function generateDeploymentWorkflow(options: GitHubActionsOptions = {}): string {
26
+ const {
27
+ workflowName = 'Deploy',
28
+ trigger = 'push',
29
+ branches = ['main'],
30
+ environments = ['production'],
31
+ awsRegion = 'us-east-1',
32
+ awsRole,
33
+ bunVersion = 'latest',
34
+ deployCommand = 'bun run cloud deploy',
35
+ testCommand = 'bun test',
36
+ buildCommand = 'bun run build',
37
+ } = options
38
+
39
+ const usesOIDC = !!awsRole
40
+
41
+ return `name: ${workflowName}
42
+
43
+ on:
44
+ ${trigger}:
45
+ branches:
46
+ ${branches.map(b => ` - ${b}`).join('\n')}
47
+
48
+ env:
49
+ AWS_REGION: ${awsRegion}
50
+ BUN_VERSION: ${bunVersion}
51
+
52
+ jobs:
53
+ test:
54
+ runs-on: ubuntu-latest
55
+ steps:
56
+ - name: Checkout code
57
+ uses: actions/checkout@v4
58
+
59
+ - name: Setup Bun
60
+ uses: oven-sh/setup-bun@v1
61
+ with:
62
+ bun-version: \${{ env.BUN_VERSION }}
63
+
64
+ - name: Install dependencies
65
+ run: bun install
66
+
67
+ - name: Run tests
68
+ run: ${testCommand}
69
+
70
+ - name: Build
71
+ run: ${buildCommand}
72
+
73
+ deploy:
74
+ needs: test
75
+ runs-on: ubuntu-latest
76
+ ${environments.length > 0 ? `environment: ${environments[0]}` : ''}
77
+ permissions:
78
+ id-token: write
79
+ contents: read
80
+
81
+ steps:
82
+ - name: Checkout code
83
+ uses: actions/checkout@v4
84
+
85
+ - name: Setup Bun
86
+ uses: oven-sh/setup-bun@v1
87
+ with:
88
+ bun-version: \${{ env.BUN_VERSION }}
89
+
90
+ - name: Install dependencies
91
+ run: bun install
92
+
93
+ ${usesOIDC
94
+ ? `- name: Configure AWS credentials (OIDC)
95
+ uses: aws-actions/configure-aws-credentials@v4
96
+ with:
97
+ role-to-assume: ${awsRole}
98
+ aws-region: \${{ env.AWS_REGION }}`
99
+ : `- name: Configure AWS credentials
100
+ uses: aws-actions/configure-aws-credentials@v4
101
+ with:
102
+ aws-access-key-id: \${{ secrets.AWS_ACCESS_KEY_ID }}
103
+ aws-secret-access-key: \${{ secrets.AWS_SECRET_ACCESS_KEY }}
104
+ aws-region: \${{ env.AWS_REGION }}`}
105
+
106
+ - name: Deploy to AWS
107
+ run: ${deployCommand}
108
+
109
+ - name: Post-deployment tests
110
+ run: bun run cloud test:smoke
111
+ `
112
+ }
113
+
114
+ /**
115
+ * Generate multi-environment deployment workflow
116
+ */
117
+ export function generateMultiEnvWorkflow(options: {
118
+ environments: Array<{ name: string; branch: string }>
119
+ awsRegion?: string
120
+ awsRole?: string
121
+ }): string {
122
+ const { environments, awsRegion = 'us-east-1', awsRole } = options
123
+ const usesOIDC = !!awsRole
124
+
125
+ return `name: Multi-Environment Deploy
126
+
127
+ on:
128
+ push:
129
+ branches:
130
+ ${environments.map(env => ` - ${env.branch}`).join('\n')}
131
+
132
+ env:
133
+ AWS_REGION: ${awsRegion}
134
+
135
+ jobs:
136
+ determine-environment:
137
+ runs-on: ubuntu-latest
138
+ outputs:
139
+ environment: \${{ steps.set-env.outputs.environment }}
140
+ steps:
141
+ - name: Determine environment
142
+ id: set-env
143
+ run: |
144
+ ${environments.map((env, i) => ` ${i > 0 ? 'elif' : 'if'} [[ "\${{ github.ref }}" == "refs/heads/${env.branch}" ]]; then
145
+ echo "environment=${env.name}" >> $GITHUB_OUTPUT`).join('\n')}
146
+ fi
147
+
148
+ deploy:
149
+ needs: determine-environment
150
+ runs-on: ubuntu-latest
151
+ environment: \${{ needs.determine-environment.outputs.environment }}
152
+ permissions:
153
+ id-token: write
154
+ contents: read
155
+
156
+ steps:
157
+ - name: Checkout code
158
+ uses: actions/checkout@v4
159
+
160
+ - name: Setup Bun
161
+ uses: oven-sh/setup-bun@v1
162
+
163
+ - name: Install dependencies
164
+ run: bun install
165
+
166
+ ${usesOIDC
167
+ ? `- name: Configure AWS credentials (OIDC)
168
+ uses: aws-actions/configure-aws-credentials@v4
169
+ with:
170
+ role-to-assume: ${awsRole}
171
+ aws-region: \${{ env.AWS_REGION }}`
172
+ : `- name: Configure AWS credentials
173
+ uses: aws-actions/configure-aws-credentials@v4
174
+ with:
175
+ aws-access-key-id: \${{ secrets.AWS_ACCESS_KEY_ID }}
176
+ aws-secret-access-key: \${{ secrets.AWS_SECRET_ACCESS_KEY }}
177
+ aws-region: \${{ env.AWS_REGION }}`}
178
+
179
+ - name: Deploy
180
+ run: bun run cloud deploy --env=\${{ needs.determine-environment.outputs.environment }}
181
+ `
182
+ }
183
+
184
+ /**
185
+ * Generate PR preview workflow
186
+ */
187
+ export function generatePRPreviewWorkflow(options: {
188
+ awsRegion?: string
189
+ awsRole?: string
190
+ ttl?: number
191
+ } = {}): string {
192
+ const { awsRegion = 'us-east-1', awsRole, ttl = 24 } = options
193
+ const usesOIDC = !!awsRole
194
+
195
+ return `name: PR Preview Environment
196
+
197
+ on:
198
+ pull_request:
199
+ types: [opened, synchronize, reopened, closed]
200
+
201
+ env:
202
+ AWS_REGION: ${awsRegion}
203
+ TTL_HOURS: ${ttl}
204
+
205
+ jobs:
206
+ preview:
207
+ if: github.event.action != 'closed'
208
+ runs-on: ubuntu-latest
209
+ permissions:
210
+ id-token: write
211
+ contents: read
212
+ pull-requests: write
213
+
214
+ steps:
215
+ - name: Checkout code
216
+ uses: actions/checkout@v4
217
+
218
+ - name: Setup Bun
219
+ uses: oven-sh/setup-bun@v1
220
+
221
+ - name: Install dependencies
222
+ run: bun install
223
+
224
+ ${usesOIDC
225
+ ? `- name: Configure AWS credentials (OIDC)
226
+ uses: aws-actions/configure-aws-credentials@v4
227
+ with:
228
+ role-to-assume: ${awsRole}
229
+ aws-region: \${{ env.AWS_REGION }}`
230
+ : `- name: Configure AWS credentials
231
+ uses: aws-actions/configure-aws-credentials@v4
232
+ with:
233
+ aws-access-key-id: \${{ secrets.AWS_ACCESS_KEY_ID }}
234
+ aws-secret-access-key: \${{ secrets.AWS_SECRET_ACCESS_KEY }}
235
+ aws-region: \${{ env.AWS_REGION }}`}
236
+
237
+ - name: Deploy preview environment
238
+ id: deploy
239
+ run: |
240
+ bun run cloud env:preview \\
241
+ --branch=\${{ github.head_ref }} \\
242
+ --pr=\${{ github.event.pull_request.number }} \\
243
+ --commit=\${{ github.event.pull_request.head.sha }} \\
244
+ --ttl=\${{ env.TTL_HOURS }}
245
+
246
+ PREVIEW_URL=\$(bun run cloud env:preview --get-url \${{ github.head_ref }})
247
+ echo "preview_url=\$PREVIEW_URL" >> $GITHUB_OUTPUT
248
+
249
+ - name: Comment PR with preview URL
250
+ if: steps.deploy.outputs.preview_url
251
+ uses: actions/github-script@v7
252
+ with:
253
+ script: |
254
+ const previewUrl = '\${{ steps.deploy.outputs.preview_url }}';
255
+ const body = \`:rocket: Preview environment deployed!\\n\\n\` +
256
+ \`**URL:** \${previewUrl}\\n\\n\` +
257
+ \`**Branch:** \${{ github.head_ref }}\\n\` +
258
+ \`**Commit:** \${{ github.event.pull_request.head.sha }}\\n\` +
259
+ \`**Expires:** \${{ env.TTL_HOURS }} hours from now\\n\\n\` +
260
+ \`_This preview will be automatically destroyed after \${{ env.TTL_HOURS }} hours or when the PR is closed._\`;
261
+
262
+ github.rest.issues.createComment({
263
+ issue_number: context.issue.number,
264
+ owner: context.repo.owner,
265
+ repo: context.repo.repo,
266
+ body: body
267
+ });
268
+
269
+ cleanup:
270
+ if: github.event.action == 'closed'
271
+ runs-on: ubuntu-latest
272
+ permissions:
273
+ id-token: write
274
+ contents: read
275
+
276
+ steps:
277
+ - name: Checkout code
278
+ uses: actions/checkout@v4
279
+
280
+ - name: Setup Bun
281
+ uses: oven-sh/setup-bun@v1
282
+
283
+ - name: Install dependencies
284
+ run: bun install
285
+
286
+ ${usesOIDC
287
+ ? `- name: Configure AWS credentials (OIDC)
288
+ uses: aws-actions/configure-aws-credentials@v4
289
+ with:
290
+ role-to-assume: ${awsRole}
291
+ aws-region: \${{ env.AWS_REGION }}`
292
+ : `- name: Configure AWS credentials
293
+ uses: aws-actions/configure-aws-credentials@v4
294
+ with:
295
+ aws-access-key-id: \${{ secrets.AWS_ACCESS_KEY_ID }}
296
+ aws-secret-access-key: \${{ secrets.AWS_SECRET_ACCESS_KEY }}
297
+ aws-region: \${{ env.AWS_REGION }}`}
298
+
299
+ - name: Destroy preview environment
300
+ run: |
301
+ bun run cloud env:preview --destroy \\
302
+ --branch=\${{ github.head_ref }} \\
303
+ --pr=\${{ github.event.pull_request.number }}
304
+ `
305
+ }
306
+
307
+ /**
308
+ * Generate scheduled deployment workflow
309
+ */
310
+ export function generateScheduledWorkflow(options: {
311
+ schedule: string
312
+ environment: string
313
+ awsRegion?: string
314
+ awsRole?: string
315
+ }): string {
316
+ const { schedule, environment, awsRegion = 'us-east-1', awsRole } = options
317
+ const usesOIDC = !!awsRole
318
+
319
+ return `name: Scheduled Deployment
320
+
321
+ on:
322
+ schedule:
323
+ - cron: '${schedule}'
324
+ workflow_dispatch:
325
+
326
+ env:
327
+ AWS_REGION: ${awsRegion}
328
+ ENVIRONMENT: ${environment}
329
+
330
+ jobs:
331
+ deploy:
332
+ runs-on: ubuntu-latest
333
+ environment: \${{ env.ENVIRONMENT }}
334
+ permissions:
335
+ id-token: write
336
+ contents: read
337
+
338
+ steps:
339
+ - name: Checkout code
340
+ uses: actions/checkout@v4
341
+
342
+ - name: Setup Bun
343
+ uses: oven-sh/setup-bun@v1
344
+
345
+ - name: Install dependencies
346
+ run: bun install
347
+
348
+ ${usesOIDC
349
+ ? `- name: Configure AWS credentials (OIDC)
350
+ uses: aws-actions/configure-aws-credentials@v4
351
+ with:
352
+ role-to-assume: ${awsRole}
353
+ aws-region: \${{ env.AWS_REGION }}`
354
+ : `- name: Configure AWS credentials
355
+ uses: aws-actions/configure-aws-credentials@v4
356
+ with:
357
+ aws-access-key-id: \${{ secrets.AWS_ACCESS_KEY_ID }}
358
+ aws-secret-access-key: \${{ secrets.AWS_SECRET_ACCESS_KEY }}
359
+ aws-region: \${{ env.AWS_REGION }}`}
360
+
361
+ - name: Deploy
362
+ run: bun run cloud deploy --env=\${{ env.ENVIRONMENT }}
363
+ `
364
+ }
365
+
366
+ /**
367
+ * Generate matrix deployment workflow (multiple regions/accounts)
368
+ */
369
+ export function generateMatrixWorkflow(options: {
370
+ matrix: Array<{ environment: string; region: string; account?: string }>
371
+ awsRole?: string
372
+ }): string {
373
+ const { matrix, awsRole } = options
374
+ const usesOIDC = !!awsRole
375
+
376
+ return `name: Matrix Deployment
377
+
378
+ on:
379
+ workflow_dispatch:
380
+ inputs:
381
+ environments:
382
+ description: 'Environments to deploy (comma-separated)'
383
+ required: false
384
+ default: 'all'
385
+
386
+ jobs:
387
+ deploy:
388
+ runs-on: ubuntu-latest
389
+ strategy:
390
+ matrix:
391
+ include:
392
+ ${matrix.map(m => ` - environment: ${m.environment}
393
+ region: ${m.region}${m.account ? `\n account: ${m.account}` : ''}`).join('\n')}
394
+ permissions:
395
+ id-token: write
396
+ contents: read
397
+
398
+ steps:
399
+ - name: Checkout code
400
+ uses: actions/checkout@v4
401
+
402
+ - name: Setup Bun
403
+ uses: oven-sh/setup-bun@v1
404
+
405
+ - name: Install dependencies
406
+ run: bun install
407
+
408
+ ${usesOIDC
409
+ ? `- name: Configure AWS credentials (OIDC)
410
+ uses: aws-actions/configure-aws-credentials@v4
411
+ with:
412
+ role-to-assume: ${awsRole}
413
+ aws-region: \${{ matrix.region }}`
414
+ : `- name: Configure AWS credentials
415
+ uses: aws-actions/configure-aws-credentials@v4
416
+ with:
417
+ aws-access-key-id: \${{ secrets.AWS_ACCESS_KEY_ID }}
418
+ aws-secret-access-key: \${{ secrets.AWS_SECRET_ACCESS_KEY }}
419
+ aws-region: \${{ matrix.region }}`}
420
+
421
+ - name: Deploy to \${{ matrix.environment }} (\${{ matrix.region }})
422
+ run: bun run cloud deploy --env=\${{ matrix.environment }} --region=\${{ matrix.region }}
423
+ `
424
+ }
@@ -0,0 +1,255 @@
1
+ /**
2
+ * GitLab CI/CD Pipeline Generator
3
+ * Generate CI/CD pipelines for GitLab
4
+ */
5
+
6
+ export interface GitLabCIOptions {
7
+ stages?: string[]
8
+ environments?: string[]
9
+ awsRegion?: string
10
+ dockerImage?: string
11
+ bunVersion?: string
12
+ deployCommand?: string
13
+ testCommand?: string
14
+ buildCommand?: string
15
+ }
16
+
17
+ /**
18
+ * Generate deployment pipeline
19
+ */
20
+ export function generateDeploymentPipeline(options: GitLabCIOptions = {}): string {
21
+ const {
22
+ stages = ['test', 'build', 'deploy'],
23
+ environments = ['production'],
24
+ awsRegion = 'us-east-1',
25
+ dockerImage = 'oven/bun:latest',
26
+ deployCommand = 'bun run cloud deploy',
27
+ testCommand = 'bun test',
28
+ buildCommand = 'bun run build',
29
+ } = options
30
+
31
+ return `stages:
32
+ ${stages.map(s => ` - ${s}`).join('\n')}
33
+
34
+ variables:
35
+ AWS_DEFAULT_REGION: ${awsRegion}
36
+ AWS_REGION: ${awsRegion}
37
+
38
+ default:
39
+ image: ${dockerImage}
40
+ cache:
41
+ paths:
42
+ - node_modules/
43
+ - .bun/
44
+
45
+ before_script:
46
+ - bun install
47
+
48
+ test:
49
+ stage: test
50
+ script:
51
+ - ${testCommand}
52
+ only:
53
+ - merge_requests
54
+ - main
55
+
56
+ build:
57
+ stage: build
58
+ script:
59
+ - ${buildCommand}
60
+ artifacts:
61
+ paths:
62
+ - dist/
63
+ expire_in: 1 day
64
+ only:
65
+ - merge_requests
66
+ - main
67
+
68
+ deploy:
69
+ stage: deploy
70
+ script:
71
+ - ${deployCommand}
72
+ environment:
73
+ name: ${environments[0]}
74
+ url: https://\${CI_PROJECT_NAME}.example.com
75
+ only:
76
+ - main
77
+ when: manual
78
+ `
79
+ }
80
+
81
+ /**
82
+ * Generate multi-environment pipeline
83
+ */
84
+ export function generateMultiEnvPipeline(options: {
85
+ environments: Array<{ name: string; branch: string; manual?: boolean }>
86
+ awsRegion?: string
87
+ }): string {
88
+ const { environments, awsRegion = 'us-east-1' } = options
89
+
90
+ const deployJobs = environments.map(env => `
91
+ deploy:${env.name}:
92
+ stage: deploy
93
+ script:
94
+ - bun run cloud deploy --env=${env.name}
95
+ environment:
96
+ name: ${env.name}
97
+ url: https://${env.name}.example.com
98
+ only:
99
+ - ${env.branch}
100
+ ${env.manual ? 'when: manual' : ''}
101
+ `).join('\n')
102
+
103
+ return `stages:
104
+ - test
105
+ - build
106
+ - deploy
107
+
108
+ variables:
109
+ AWS_DEFAULT_REGION: ${awsRegion}
110
+
111
+ default:
112
+ image: oven/bun:latest
113
+ cache:
114
+ paths:
115
+ - node_modules/
116
+
117
+ test:
118
+ stage: test
119
+ script:
120
+ - bun install
121
+ - bun test
122
+
123
+ build:
124
+ stage: build
125
+ script:
126
+ - bun install
127
+ - bun run build
128
+ artifacts:
129
+ paths:
130
+ - dist/
131
+ ${deployJobs}
132
+ `
133
+ }
134
+
135
+ /**
136
+ * Generate PR/MR preview pipeline
137
+ */
138
+ export function generatePreviewPipeline(options: {
139
+ awsRegion?: string
140
+ ttl?: number
141
+ } = {}): string {
142
+ const { awsRegion = 'us-east-1', ttl = 24 } = options
143
+
144
+ return `stages:
145
+ - build
146
+ - deploy
147
+ - cleanup
148
+
149
+ variables:
150
+ AWS_DEFAULT_REGION: ${awsRegion}
151
+ TTL_HOURS: ${ttl}
152
+
153
+ default:
154
+ image: oven/bun:latest
155
+
156
+ deploy:preview:
157
+ stage: deploy
158
+ script:
159
+ - bun install
160
+ - |
161
+ bun run cloud env:preview \\
162
+ --branch=\${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} \\
163
+ --pr=\${CI_MERGE_REQUEST_IID} \\
164
+ --commit=\${CI_COMMIT_SHA} \\
165
+ --ttl=\${TTL_HOURS}
166
+ - PREVIEW_URL=\$(bun run cloud env:preview --get-url \${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME})
167
+ - echo "Preview URL: \$PREVIEW_URL"
168
+ environment:
169
+ name: preview/\${CI_MERGE_REQUEST_IID}
170
+ url: \${PREVIEW_URL}
171
+ on_stop: cleanup:preview
172
+ only:
173
+ - merge_requests
174
+
175
+ cleanup:preview:
176
+ stage: cleanup
177
+ script:
178
+ - bun install
179
+ - |
180
+ bun run cloud env:preview --destroy \\
181
+ --branch=\${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME} \\
182
+ --pr=\${CI_MERGE_REQUEST_IID}
183
+ environment:
184
+ name: preview/\${CI_MERGE_REQUEST_IID}
185
+ action: stop
186
+ when: manual
187
+ only:
188
+ - merge_requests
189
+ `
190
+ }
191
+
192
+ /**
193
+ * Generate scheduled pipeline
194
+ */
195
+ export function generateScheduledPipeline(options: {
196
+ environment: string
197
+ awsRegion?: string
198
+ }): string {
199
+ const { environment, awsRegion = 'us-east-1' } = options
200
+
201
+ return `stages:
202
+ - deploy
203
+
204
+ variables:
205
+ AWS_DEFAULT_REGION: ${awsRegion}
206
+ ENVIRONMENT: ${environment}
207
+
208
+ default:
209
+ image: oven/bun:latest
210
+
211
+ deploy:scheduled:
212
+ stage: deploy
213
+ script:
214
+ - bun install
215
+ - bun run cloud deploy --env=\${ENVIRONMENT}
216
+ environment:
217
+ name: \${ENVIRONMENT}
218
+ only:
219
+ - schedules
220
+ `
221
+ }
222
+
223
+ /**
224
+ * Generate manual deployment pipeline
225
+ */
226
+ export function generateManualPipeline(options: {
227
+ environments: string[]
228
+ awsRegion?: string
229
+ }): string {
230
+ const { environments, awsRegion = 'us-east-1' } = options
231
+
232
+ const deployJobs = environments.map(env => `
233
+ deploy:${env}:
234
+ stage: deploy
235
+ script:
236
+ - bun install
237
+ - bun run cloud deploy --env=${env}
238
+ environment:
239
+ name: ${env}
240
+ when: manual
241
+ only:
242
+ - main
243
+ `).join('\n')
244
+
245
+ return `stages:
246
+ - deploy
247
+
248
+ variables:
249
+ AWS_DEFAULT_REGION: ${awsRegion}
250
+
251
+ default:
252
+ image: oven/bun:latest
253
+ ${deployJobs}
254
+ `
255
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CI/CD Integration
3
+ * Generate workflows for popular CI/CD platforms
4
+ */
5
+
6
+ export * from './github-actions'
7
+ export * from './gitlab-ci'
8
+ export * from './circleci'