@alchemy.run/kubernetes 0.0.0 → 2.0.0-beta.85

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 (94) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +41 -4
  3. package/lib/BuiltinAdapters.d.ts +43 -0
  4. package/lib/BuiltinAdapters.d.ts.map +1 -0
  5. package/lib/BuiltinAdapters.js +129 -0
  6. package/lib/BuiltinAdapters.js.map +1 -0
  7. package/lib/Client.d.ts +97 -0
  8. package/lib/Client.d.ts.map +1 -0
  9. package/lib/Client.js +312 -0
  10. package/lib/Client.js.map +1 -0
  11. package/lib/ClusterAdapter.d.ts +324 -0
  12. package/lib/ClusterAdapter.d.ts.map +1 -0
  13. package/lib/ClusterAdapter.js +65 -0
  14. package/lib/ClusterAdapter.js.map +1 -0
  15. package/lib/Connection.d.ts +210 -0
  16. package/lib/Connection.d.ts.map +1 -0
  17. package/lib/Connection.js +58 -0
  18. package/lib/Connection.js.map +1 -0
  19. package/lib/Deployment.d.ts +401 -0
  20. package/lib/Deployment.d.ts.map +1 -0
  21. package/lib/Deployment.js +550 -0
  22. package/lib/Deployment.js.map +1 -0
  23. package/lib/HelmChart.d.ts +147 -0
  24. package/lib/HelmChart.d.ts.map +1 -0
  25. package/lib/HelmChart.js +248 -0
  26. package/lib/HelmChart.js.map +1 -0
  27. package/lib/Job.d.ts +333 -0
  28. package/lib/Job.d.ts.map +1 -0
  29. package/lib/Job.js +443 -0
  30. package/lib/Job.js.map +1 -0
  31. package/lib/LocalCluster.d.ts +243 -0
  32. package/lib/LocalCluster.d.ts.map +1 -0
  33. package/lib/LocalCluster.js +359 -0
  34. package/lib/LocalCluster.js.map +1 -0
  35. package/lib/Manifest.d.ts +157 -0
  36. package/lib/Manifest.d.ts.map +1 -0
  37. package/lib/Manifest.js +205 -0
  38. package/lib/Manifest.js.map +1 -0
  39. package/lib/Objects.d.ts +60 -0
  40. package/lib/Objects.d.ts.map +1 -0
  41. package/lib/Objects.js +132 -0
  42. package/lib/Objects.js.map +1 -0
  43. package/lib/Providers.d.ts +24 -0
  44. package/lib/Providers.d.ts.map +1 -0
  45. package/lib/Providers.js +36 -0
  46. package/lib/Providers.js.map +1 -0
  47. package/lib/index.d.ts +10 -0
  48. package/lib/index.d.ts.map +1 -0
  49. package/lib/index.js +10 -0
  50. package/lib/index.js.map +1 -0
  51. package/lib/internal/declared.d.ts +19 -0
  52. package/lib/internal/declared.d.ts.map +1 -0
  53. package/lib/internal/declared.js +435 -0
  54. package/lib/internal/declared.js.map +1 -0
  55. package/lib/internal/helm.d.ts +65 -0
  56. package/lib/internal/helm.d.ts.map +1 -0
  57. package/lib/internal/helm.js +173 -0
  58. package/lib/internal/helm.js.map +1 -0
  59. package/lib/internal/kind.d.ts +17 -0
  60. package/lib/internal/kind.d.ts.map +1 -0
  61. package/lib/internal/kind.js +31 -0
  62. package/lib/internal/kind.js.map +1 -0
  63. package/lib/internal/kubeconfig.d.ts +79 -0
  64. package/lib/internal/kubeconfig.d.ts.map +1 -0
  65. package/lib/internal/kubeconfig.js +222 -0
  66. package/lib/internal/kubeconfig.js.map +1 -0
  67. package/lib/internal/registry.d.ts +44 -0
  68. package/lib/internal/registry.d.ts.map +1 -0
  69. package/lib/internal/registry.js +72 -0
  70. package/lib/internal/registry.js.map +1 -0
  71. package/lib/internal/workload.d.ts +127 -0
  72. package/lib/internal/workload.d.ts.map +1 -0
  73. package/lib/internal/workload.js +411 -0
  74. package/lib/internal/workload.js.map +1 -0
  75. package/package.json +55 -3
  76. package/src/BuiltinAdapters.ts +202 -0
  77. package/src/Client.ts +496 -0
  78. package/src/ClusterAdapter.ts +373 -0
  79. package/src/Connection.ts +234 -0
  80. package/src/Deployment.ts +872 -0
  81. package/src/HelmChart.ts +388 -0
  82. package/src/Job.ts +709 -0
  83. package/src/LocalCluster.ts +631 -0
  84. package/src/Manifest.ts +301 -0
  85. package/src/Objects.ts +213 -0
  86. package/src/Providers.ts +52 -0
  87. package/src/globals.d.ts +2 -0
  88. package/src/index.ts +9 -0
  89. package/src/internal/declared.ts +471 -0
  90. package/src/internal/helm.ts +245 -0
  91. package/src/internal/kind.ts +43 -0
  92. package/src/internal/kubeconfig.ts +364 -0
  93. package/src/internal/registry.ts +108 -0
  94. package/src/internal/workload.ts +504 -0
@@ -0,0 +1,401 @@
1
+ import type { DockerfileBuildOptions } from "@alchemy.run/docker/ImageSource";
2
+ import type * as Bundle from "alchemy/Bundle/Bundle";
3
+ import type { Input } from "alchemy/Input";
4
+ import { Platform, type Main, type PlatformProps } from "alchemy/Platform";
5
+ import * as Provider from "alchemy/Provider";
6
+ import { Resource } from "alchemy/Resource";
7
+ import { type HostRuntimeContext, type ServerHost as ServerHostService } from "alchemy/Runtime/Process";
8
+ import { Stack } from "alchemy/Stack";
9
+ import * as Effect from "effect/Effect";
10
+ import { type IdentityState, type RegistryState, type WorkloadBindingContract, type WorkloadIdentityOptions, type WorkloadImageSource, type WorkloadServices } from "./ClusterAdapter.ts";
11
+ import { type ClusterLike, type Connection } from "./Connection.ts";
12
+ import { type KubernetesObjectRef } from "./Objects.ts";
13
+ import type { Providers } from "./Providers.ts";
14
+ export declare const isDeployment: (value: any) => value is Deployment;
15
+ /**
16
+ * The image-source props shared by the workload platforms. Exactly one of
17
+ * `main` (bundle an inline Effect program), `context`/`dockerfile` (build
18
+ * the user's own Dockerfile), or `image` (a pre-built registry reference).
19
+ */
20
+ export interface DeploymentPropsBase extends PlatformProps {
21
+ /**
22
+ * Target cluster the workload is deployed onto: a cluster resource
23
+ * (`Kubernetes.LocalCluster`, `AWS.EKS.Cluster`), a
24
+ * `Kubernetes.KubeConfig(...)`, or a raw `Kubernetes.Connection`. The
25
+ * connection supplies authentication and the registry `main` / `context`
26
+ * images are pushed to. Also accepts an Effect that produces any of
27
+ * these, so `{ cluster: Cluster }` and `{ cluster: yield* Cluster }`
28
+ * both type-check.
29
+ */
30
+ cluster: ClusterLike | Effect.Effect<Input<ClusterLike>, never, any>;
31
+ /**
32
+ * Base name for the generated Deployment / Service / ServiceAccount. If
33
+ * omitted, a deterministic name is derived from the stack, stage, and
34
+ * logical id.
35
+ */
36
+ name?: string;
37
+ /**
38
+ * Kubernetes namespace to deploy into. The namespace must already exist.
39
+ * @default "default"
40
+ */
41
+ namespace?: string;
42
+ /**
43
+ * HTTP port exposed by the container and the Service.
44
+ * @default 3000
45
+ */
46
+ port?: number;
47
+ /**
48
+ * Replica count for the Deployment.
49
+ * @default 1
50
+ */
51
+ replicas?: number;
52
+ /**
53
+ * Kubernetes Service type. `LoadBalancer` provisions the platform's
54
+ * cloud load balancer and exposes its hostname as the Deployment `url`.
55
+ * @default "LoadBalancer"
56
+ */
57
+ serviceType?: "ClusterIP" | "NodePort" | "LoadBalancer";
58
+ /**
59
+ * Annotations applied to the Service (e.g. load-balancer scheme /
60
+ * target-type hints).
61
+ */
62
+ serviceAnnotations?: Record<string, string>;
63
+ /**
64
+ * Container entrypoint override (Kubernetes `command`). Mostly useful with
65
+ * `image` / `context` sources.
66
+ */
67
+ command?: string[];
68
+ /**
69
+ * Container arguments (Kubernetes `args`).
70
+ */
71
+ args?: string[];
72
+ /**
73
+ * Container CPU/memory requests + limits (Kubernetes resource quantities).
74
+ */
75
+ resources?: {
76
+ requests?: {
77
+ cpu?: string;
78
+ memory?: string;
79
+ };
80
+ limits?: {
81
+ cpu?: string;
82
+ memory?: string;
83
+ };
84
+ };
85
+ /**
86
+ * Additional environment variables for the container.
87
+ */
88
+ env?: Record<string, any>;
89
+ /**
90
+ * Container image build architecture.
91
+ * @default the connection's `architecture`, else "amd64"
92
+ */
93
+ architecture?: "amd64" | "arm64";
94
+ /**
95
+ * Deep-partial Kubernetes Pod template merged into the synthesized
96
+ * template (objects merge recursively; arrays and primitives replace) —
97
+ * a literal object in the shape of `PodTemplateSpec`, e.g.
98
+ * `{ spec: { tolerations: [...], nodeSelector: {...} } }`.
99
+ */
100
+ podTemplate?: Record<string, unknown>;
101
+ /**
102
+ * Cloud-specific workload-identity options, consumed by the cluster
103
+ * platform's identity adapter (on EKS: `{ managedPolicyArns: [...] }`
104
+ * attaches extra managed policies to the generated pod-identity role; on
105
+ * GKE: `{ gcpServiceAccount }` runs the pods as an existing Google
106
+ * service account instead of the ServiceAccount's own principal).
107
+ */
108
+ identity?: WorkloadIdentityOptions;
109
+ /**
110
+ * Deployment / pod labels, merged over the generated
111
+ * `app.kubernetes.io/name` label. Also used as the Service selector.
112
+ */
113
+ labels?: Record<string, string>;
114
+ /**
115
+ * User-defined tags applied to workload-owned cloud resources (identity
116
+ * roles, image repositories).
117
+ */
118
+ tags?: Record<string, string>;
119
+ }
120
+ /** Bundle an inline Effect program (`main`) into a generated image. */
121
+ export interface BundledDeploymentProps extends DeploymentPropsBase {
122
+ /**
123
+ * Module entrypoint for the bundled program. This should typically be
124
+ * `import.meta.url` from an inline Effect program.
125
+ */
126
+ main: string;
127
+ /**
128
+ * Environment image used as the generated Dockerfile's `FROM`; must be
129
+ * able to run the bun runtime.
130
+ * @default "oven/bun:1"
131
+ */
132
+ image?: string;
133
+ /** Named export to load from `main`. @default "default" */
134
+ handler?: string;
135
+ /** Bundler configuration for the entrypoint. */
136
+ build?: Bundle.BundleConfig;
137
+ /** Environment Dockerfile (path or inline content). */
138
+ dockerfile?: WorkloadImageSource["dockerfile"];
139
+ /** Build context for a path {@link dockerfile} environment. */
140
+ context?: string;
141
+ }
142
+ /** Build the user's own Dockerfile (`context` + optional `dockerfile` path). */
143
+ export interface DockerfileDeploymentProps extends DeploymentPropsBase, DockerfileBuildOptions {
144
+ /** Docker build context directory. */
145
+ context?: string;
146
+ /**
147
+ * Path to the Dockerfile (relative to the cwd), or inline content.
148
+ * @default `${context}/Dockerfile`
149
+ */
150
+ dockerfile?: WorkloadImageSource["dockerfile"];
151
+ }
152
+ /** Run a pre-built registry image. */
153
+ export interface ImageDeploymentProps extends DeploymentPropsBase {
154
+ /**
155
+ * A pre-built image reference, e.g. `nginx:1.27`, pulled by the nodes as
156
+ * written. EKS clusters mirror it into ECR first.
157
+ */
158
+ image: string;
159
+ }
160
+ export type DeploymentProps = BundledDeploymentProps | DockerfileDeploymentProps | ImageDeploymentProps;
161
+ export interface Deployment extends Resource<"Kubernetes.Deployment", DeploymentProps, {
162
+ /** The connection of the cluster the deployment runs on. */
163
+ connection: Connection;
164
+ /** The Kubernetes namespace the deployment's objects live in. */
165
+ namespace: string;
166
+ /** The name of the Kubernetes Deployment. */
167
+ deploymentName: string;
168
+ /** The name of the Kubernetes Service exposing the deployment. */
169
+ serviceName: string;
170
+ /** The name of the service account the pods run as. */
171
+ serviceAccountName: string;
172
+ /** The container port the server listens on. */
173
+ port: number;
174
+ /** The URI of the container image the deployment runs. */
175
+ imageUri: string;
176
+ /**
177
+ * Workload-identity state provisioned by the cluster platform's
178
+ * adapter (on EKS: the pod-identity role + association; on GKE: the
179
+ * Workload Identity principal and the IAM grants applied to it).
180
+ */
181
+ identity: IdentityState | undefined;
182
+ /**
183
+ * Image-registry state provisioned by the cluster platform's adapter
184
+ * (on EKS: the ECR repository).
185
+ */
186
+ registry: RegistryState | undefined;
187
+ /**
188
+ * The LoadBalancer URL (`http://<hostname>[:port]` — the cloud load
189
+ * balancer listens on the Service `port`, so a non-80 port is part of
190
+ * the URL) when `serviceType` is `LoadBalancer`, otherwise
191
+ * `undefined`. May be `undefined` immediately after a create while
192
+ * the cloud load balancer is still provisioning.
193
+ */
194
+ url: string | undefined;
195
+ /** References to the Kubernetes objects created for the deployment. */
196
+ kubernetesObjects: KubernetesObjectRef[];
197
+ /** The content hash of the container image source. */
198
+ code: {
199
+ hash: string;
200
+ };
201
+ }, WorkloadBindingContract, Providers> {
202
+ }
203
+ export type DeploymentServices = ServerHostService | WorkloadServices;
204
+ export type DeploymentShape = Main<DeploymentServices>;
205
+ export interface DeploymentRuntimeContext extends HostRuntimeContext {
206
+ readonly Type: "Kubernetes.Deployment";
207
+ }
208
+ /**
209
+ * A replicated Kubernetes server on any cluster, running a container image
210
+ * or an HTTP server written in Effect.
211
+ *
212
+ * `Deployment` provisions a Kubernetes `Deployment` + `Service` (+
213
+ * `ServiceAccount`) via server-side apply, with the container image from
214
+ * exactly one of three sources flat on props: `main` (bundle an inline
215
+ * Effect program), `context` (build your own Dockerfile), or `image` (a
216
+ * pre-built registry reference). `main` and `context` images are built on
217
+ * the deploying machine and pushed to the connection's registry
218
+ * (`Kubernetes.LocalCluster` includes one; EKS uses ECR; GKE uses
219
+ * Artifact Registry). Bindings attach environment variables on any
220
+ * cluster; cloud credential grants need a platform with workload identity.
221
+ * On `AWS.EKS.Cluster` targets it accepts the `{ env, policyStatements }`
222
+ * contract of `AWS.Lambda.Function`: IAM policy statements go to a
223
+ * generated pod-identity role. On `GCP.Container.Cluster` targets it
224
+ * accepts the `{ env, iam }` contract of `GCP.Run.Service`: IAM roles are
225
+ * granted to the Kubernetes ServiceAccount's Workload Identity Federation
226
+ * principal.
227
+ * ### Creating a Deployment
228
+ * **Example:** Run an image on a local cluster
229
+ * ```typescript
230
+ * const cluster = yield* Kubernetes.LocalCluster("Cluster", {
231
+ * name: "alchemy",
232
+ * });
233
+ *
234
+ * const web = yield* Kubernetes.Deployment("Web", {
235
+ * cluster,
236
+ * image: "ghcr.io/stefanprodan/podinfo:6.15.0",
237
+ * replicas: 2,
238
+ * port: 9898,
239
+ * serviceType: "ClusterIP",
240
+ * });
241
+ * web.serviceName; // K8s-native attrs
242
+ * ```
243
+ *
244
+ * **Example:** Any cluster via kubeconfig
245
+ * ```typescript
246
+ * const cluster = Kubernetes.KubeConfig({ context: "prod-east" });
247
+ *
248
+ * const nginx = yield* Kubernetes.Deployment("Nginx", {
249
+ * cluster,
250
+ * image: "nginx:1.27",
251
+ * replicas: 3,
252
+ * port: 80,
253
+ * serviceType: "LoadBalancer",
254
+ * });
255
+ * nginx.url; // the load balancer's address
256
+ * ```
257
+ *
258
+ * **Example:** Build your own Dockerfile
259
+ * ```typescript
260
+ * const legacy = yield* Kubernetes.Deployment("LegacyApp", {
261
+ * cluster,
262
+ * context: "./legacy",
263
+ * replicas: 2,
264
+ * port: 8080,
265
+ * });
266
+ * ```
267
+ *
268
+ * **Example:** Build args and secrets
269
+ * ```typescript
270
+ * // Dockerfile:
271
+ * // ARG NODE_ENV
272
+ * // RUN --mount=type=secret,id=NPM_TOKEN,env=NPM_TOKEN npm ci
273
+ * const api = yield* Kubernetes.Deployment("Api", {
274
+ * cluster,
275
+ * context: "./api",
276
+ * build: {
277
+ * args: { NODE_ENV: "production" },
278
+ * // Mounted only into the RUN step that asks for it; never in the image.
279
+ * secrets: { NPM_TOKEN: Config.Redacted("NPM_TOKEN") },
280
+ * },
281
+ * port: 8080,
282
+ * });
283
+ * ```
284
+ *
285
+ * ### Effect Servers
286
+ * **Example:** Inline Effect server
287
+ * ```typescript
288
+ * const api = yield* Kubernetes.Deployment(
289
+ * "Api",
290
+ * { cluster, main: import.meta.url, port: 3000, replicas: 2 },
291
+ * Effect.gen(function* () {
292
+ * return {
293
+ * fetch: Effect.succeed(HttpServerResponse.text("ok")),
294
+ * };
295
+ * }),
296
+ * );
297
+ * ```
298
+ *
299
+ * **Example:** Push to your own registry
300
+ * ```typescript
301
+ * const cluster = Kubernetes.KubeConfig({
302
+ * context: "prod-east",
303
+ * registry: { server: "ghcr.io/acme" },
304
+ * });
305
+ *
306
+ * const api = yield* Kubernetes.Deployment(
307
+ * "Api",
308
+ * { cluster, main: import.meta.url, port: 3000 },
309
+ * Effect.gen(function* () {
310
+ * return {
311
+ * fetch: Effect.succeed(HttpServerResponse.text("ok")),
312
+ * };
313
+ * }),
314
+ * );
315
+ * ```
316
+ *
317
+ * **Example:** DynamoDB binding on EKS
318
+ * ```typescript
319
+ * const cluster = yield* AWS.EKS.Cluster("Cluster", { compute: "auto" });
320
+ *
321
+ * const api = yield* Kubernetes.Deployment(
322
+ * "Api",
323
+ * { cluster, main: import.meta.url, port: 3000 },
324
+ * Effect.gen(function* () {
325
+ * const putItem = yield* AWS.DynamoDB.PutItem(table);
326
+ * return {
327
+ * fetch: Effect.gen(function* () {
328
+ * yield* putItem({ Item: { id: { S: "1" } } });
329
+ * return HttpServerResponse.text("ok");
330
+ * }),
331
+ * };
332
+ * }).pipe(Effect.provide(AWS.DynamoDB.PutItemHttp)),
333
+ * );
334
+ * ```
335
+ *
336
+ * **Example:** Tagged Effect server
337
+ * ```typescript
338
+ * export class Api extends Kubernetes.Deployment<Api, {
339
+ * health: () => Effect.Effect<string>;
340
+ * }>()("Api") {}
341
+ *
342
+ * export default Api.make(
343
+ * { cluster, main: import.meta.url, port: 3000 },
344
+ * Effect.gen(function* () {
345
+ * return {
346
+ * fetch: Effect.gen(function* () {
347
+ * return HttpServerResponse.text("ok");
348
+ * }),
349
+ * health: () => Effect.succeed("ok"),
350
+ * };
351
+ * }),
352
+ * );
353
+ * ```
354
+ *
355
+ * ### Bundling & Tree-shaking
356
+ * `main` is bundled with rolldown at deploy time. Unused code is
357
+ * tree-shaken. `effect`, alchemy, and `@distilled.cloud` are marked
358
+ * pure so unused parts prune more aggressively. Your app is not
359
+ * marked pure.
360
+ *
361
+ * **Example:** Mark additional packages as pure
362
+ * Only list packages with no top-level side effects.
363
+ * ```typescript
364
+ * {
365
+ * main: import.meta.url,
366
+ * build: {
367
+ * pure: { packages: ["my-lib", "@my-scope/*"] },
368
+ * },
369
+ * }
370
+ * ```
371
+ *
372
+ * **Example:** Turn it off
373
+ * ```typescript
374
+ * {
375
+ * main: import.meta.url,
376
+ * build: { pure: false },
377
+ * }
378
+ * ```
379
+ *
380
+ * ### Kubernetes Escape Hatch
381
+ * **Example:** Tune the synthesized pod template
382
+ * ```typescript
383
+ * const tuned = yield* Kubernetes.Deployment("Api", {
384
+ * cluster,
385
+ * main: import.meta.url,
386
+ * port: 3000,
387
+ * podTemplate: {
388
+ * spec: {
389
+ * tolerations: [{ key: "gpu", operator: "Exists" }],
390
+ * nodeSelector: { pool: "arm" },
391
+ * },
392
+ * },
393
+ * });
394
+ * ```
395
+ *
396
+ * @resource
397
+ * @product Workloads
398
+ */
399
+ export declare const Deployment: Platform<Deployment, DeploymentServices, DeploymentShape, DeploymentRuntimeContext>;
400
+ export declare const DeploymentProvider: () => import("effect/Layer").Layer<Provider.Provider<Deployment>, never, import("alchemy/AlchemyContext").AlchemyContext | import("@alchemy.run/docker/Docker").Docker | import("effect/FileSystem").FileSystem | import("effect/Path").Path | Stack | import("alchemy/Stage").Stage>;
401
+ //# sourceMappingURL=Deployment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Deployment.d.ts","sourceRoot":"","sources":["../src/Deployment.ts"],"names":[],"mappings":"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"}