@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
package/lib/Job.d.ts ADDED
@@ -0,0 +1,333 @@
1
+ import type { DockerfileBuildOptions } from "@alchemy.run/docker/ImageSource";
2
+ import type * as Bundle from "alchemy/Bundle/Bundle";
3
+ import { Platform, type PlatformProps, type PlatformServices } from "alchemy/Platform";
4
+ import * as Provider from "alchemy/Provider";
5
+ import { Resource } from "alchemy/Resource";
6
+ import type { HostRuntimeContext } from "alchemy/Runtime/Process";
7
+ import { RuntimeContext } from "alchemy/RuntimeContext";
8
+ import { Stack } from "alchemy/Stack";
9
+ import * as Effect from "effect/Effect";
10
+ import type { Scope } from "effect/Scope";
11
+ import { type IdentityState, type RegistryState, type WorkloadBindingContract, type WorkloadIdentityOptions, type WorkloadImageSource, type WorkloadServices } from "./ClusterAdapter.ts";
12
+ import { type ClusterLike, type Connection } from "./Connection.ts";
13
+ import type { KubernetesObjectRef } from "./Objects.ts";
14
+ import type { Providers } from "./Providers.ts";
15
+ export declare const isJob: (value: any) => value is Job;
16
+ export interface JobPropsBase extends PlatformProps {
17
+ /**
18
+ * Target cluster the job runs on: a cluster resource
19
+ * (`Kubernetes.LocalCluster`, `AWS.EKS.Cluster`), a
20
+ * `Kubernetes.KubeConfig(...)`, or a raw `Kubernetes.Connection`. The
21
+ * connection supplies authentication and the registry `main` / `context`
22
+ * images are pushed to.
23
+ */
24
+ cluster: ClusterLike;
25
+ /**
26
+ * Base name for the generated Job / ServiceAccount. If omitted, a
27
+ * deterministic name is derived from the stack, stage, and logical id.
28
+ */
29
+ name?: string;
30
+ /**
31
+ * Kubernetes namespace to run in. The namespace must already exist.
32
+ * @default "default"
33
+ */
34
+ namespace?: string;
35
+ /**
36
+ * Number of retries before the Job is marked failed (Kubernetes
37
+ * `backoffLimit`).
38
+ */
39
+ backoffLimit?: number;
40
+ /**
41
+ * Cron schedule (standard 5-field cron, e.g. `"0 3 * * *"`). When set, a
42
+ * Kubernetes `CronJob` is synthesized instead of a plain `Job`.
43
+ */
44
+ schedule?: string;
45
+ /**
46
+ * Restart policy for the job's pods.
47
+ * @default "Never"
48
+ */
49
+ restartPolicy?: "Never" | "OnFailure";
50
+ /**
51
+ * Seconds after completion before the finished Job is garbage-collected
52
+ * (Kubernetes `ttlSecondsAfterFinished`).
53
+ */
54
+ ttlSecondsAfterFinished?: number;
55
+ /**
56
+ * Container entrypoint override (Kubernetes `command`). Mostly useful with
57
+ * `image` / `context` sources.
58
+ */
59
+ command?: string[];
60
+ /**
61
+ * Container arguments (Kubernetes `args`).
62
+ */
63
+ args?: string[];
64
+ /**
65
+ * Container CPU/memory requests + limits (Kubernetes resource quantities).
66
+ */
67
+ resources?: {
68
+ requests?: {
69
+ cpu?: string;
70
+ memory?: string;
71
+ };
72
+ limits?: {
73
+ cpu?: string;
74
+ memory?: string;
75
+ };
76
+ };
77
+ /**
78
+ * Additional environment variables for the container.
79
+ */
80
+ env?: Record<string, any>;
81
+ /**
82
+ * Container image build architecture.
83
+ * @default the connection's `architecture`, else "amd64"
84
+ */
85
+ architecture?: "amd64" | "arm64";
86
+ /**
87
+ * Deep-partial Kubernetes Pod template merged into the synthesized
88
+ * template (objects merge recursively; arrays and primitives replace) —
89
+ * a literal object in the shape of `PodTemplateSpec`, e.g.
90
+ * `{ spec: { tolerations: [...], nodeSelector: {...} } }`.
91
+ */
92
+ podTemplate?: Record<string, unknown>;
93
+ /**
94
+ * Cloud-specific workload-identity options, consumed by the cluster
95
+ * platform's identity adapter (on EKS: `{ managedPolicyArns: [...] }`
96
+ * attaches extra managed policies to the generated pod-identity role; on
97
+ * GKE: `{ gcpServiceAccount }` runs the pods as an existing Google
98
+ * service account instead of the ServiceAccount's own principal).
99
+ */
100
+ identity?: WorkloadIdentityOptions;
101
+ /**
102
+ * Job / pod labels, merged over the generated `app.kubernetes.io/name`
103
+ * label.
104
+ */
105
+ labels?: Record<string, string>;
106
+ /**
107
+ * User-defined tags applied to workload-owned cloud resources (identity
108
+ * roles, image repositories).
109
+ */
110
+ tags?: Record<string, string>;
111
+ }
112
+ /** Bundle an inline Effect program (`main`) into a generated image. */
113
+ export interface BundledJobProps extends JobPropsBase {
114
+ /**
115
+ * Module entrypoint for the bundled program. This should typically be
116
+ * `import.meta.url` from an inline Effect program.
117
+ */
118
+ main: string;
119
+ /**
120
+ * Environment image used as the generated Dockerfile's `FROM`; must be
121
+ * able to run the bun runtime.
122
+ * @default "oven/bun:1"
123
+ */
124
+ image?: string;
125
+ /** Named export to load from `main`. @default "default" */
126
+ handler?: string;
127
+ /** Bundler configuration for the entrypoint. */
128
+ build?: Bundle.BundleConfig;
129
+ /** Environment Dockerfile (path or inline content). */
130
+ dockerfile?: WorkloadImageSource["dockerfile"];
131
+ /** Build context for a path {@link dockerfile} environment. */
132
+ context?: string;
133
+ }
134
+ /** Build the user's own Dockerfile (`context` + optional `dockerfile` path). */
135
+ export interface DockerfileJobProps extends JobPropsBase, DockerfileBuildOptions {
136
+ /** Docker build context directory. */
137
+ context?: string;
138
+ /**
139
+ * Path to the Dockerfile (relative to the cwd), or inline content.
140
+ * @default `${context}/Dockerfile`
141
+ */
142
+ dockerfile?: WorkloadImageSource["dockerfile"];
143
+ }
144
+ /** Run a pre-built registry image. */
145
+ export interface ImageJobProps extends JobPropsBase {
146
+ /**
147
+ * A pre-built image reference, e.g. `ghcr.io/acme/migrator:v3`, pulled
148
+ * by the nodes as written. EKS clusters mirror it into ECR first.
149
+ */
150
+ image: string;
151
+ }
152
+ export type JobProps = BundledJobProps | DockerfileJobProps | ImageJobProps;
153
+ export interface Job extends Resource<"Kubernetes.Job", JobProps, {
154
+ /** The connection of the cluster the job runs on. */
155
+ connection: Connection;
156
+ /** The Kubernetes namespace the job's objects live in. */
157
+ namespace: string;
158
+ /** The Kubernetes kind synthesized for the workload (`Job`, or `CronJob` when `schedule` is set). */
159
+ kind: "Job" | "CronJob";
160
+ /** The name of the Kubernetes Job/CronJob object. */
161
+ jobName: string;
162
+ /** The cron schedule, when the workload is a CronJob. */
163
+ schedule: string | undefined;
164
+ /** The name of the service account the pods run as. */
165
+ serviceAccountName: string;
166
+ /** The URI of the container image the job runs. */
167
+ imageUri: string;
168
+ /**
169
+ * Workload-identity state provisioned by the cluster platform's
170
+ * adapter (on EKS: the pod-identity role + association; on GKE: the
171
+ * Workload Identity principal and the IAM grants applied to it).
172
+ */
173
+ identity: IdentityState | undefined;
174
+ /**
175
+ * Image-registry state provisioned by the cluster platform's adapter
176
+ * (on EKS: the ECR repository).
177
+ */
178
+ registry: RegistryState | undefined;
179
+ /** References to the Kubernetes objects created for the job. */
180
+ kubernetesObjects: KubernetesObjectRef[];
181
+ /** The content hash of the container image source. */
182
+ code: {
183
+ hash: string;
184
+ };
185
+ }, WorkloadBindingContract, Providers> {
186
+ }
187
+ export type JobServices = WorkloadServices;
188
+ /**
189
+ * The impl shape: `{ run, ...rpc }`. `run` executes to completion inside
190
+ * the pod; the process exits when it returns.
191
+ */
192
+ export type JobMain<InitServices = never> = void | {
193
+ run?: Effect.Effect<void, never, InitServices | PlatformServices | RuntimeContext | Scope>;
194
+ };
195
+ export type JobShape = JobMain<JobServices>;
196
+ export interface JobRuntimeContext extends HostRuntimeContext {
197
+ readonly Type: "Kubernetes.Job";
198
+ }
199
+ /**
200
+ * Run-to-completion work on any Kubernetes cluster, as a container image
201
+ * or an Effect program.
202
+ *
203
+ * `Job` provisions a Kubernetes `Job` (or `CronJob` when `schedule` is
204
+ * set) via server-side apply and a ServiceAccount, plus — through the
205
+ * target cluster's platform adapter — workload identity and a container
206
+ * image from exactly one of three sources flat on props: `main` (bundle an
207
+ * inline Effect program whose impl returns `{ run }`), `context` (build
208
+ * your own Dockerfile), or `image` (a pre-built registry reference).
209
+ * `main` and `context` images are built on the deploying machine and
210
+ * pushed to the connection's registry (`Kubernetes.LocalCluster` includes
211
+ * one; EKS uses ECR; GKE uses Artifact Registry). On `AWS.EKS.Cluster`
212
+ * targets, bindings attach IAM policy statements to a generated
213
+ * pod-identity role; on `GCP.Container.Cluster` targets, GCP bindings grant
214
+ * their IAM roles to the Kubernetes ServiceAccount's Workload Identity
215
+ * Federation principal — exactly like `Kubernetes.Deployment`.
216
+ * ### Creating a Job
217
+ * **Example:** Remote image (external — no Effect runtime in the container)
218
+ * ```typescript
219
+ * const migrate = yield* Kubernetes.Job("DbMigrate", {
220
+ * cluster,
221
+ * image: "ghcr.io/acme/migrator:v3",
222
+ * backoffLimit: 2,
223
+ * });
224
+ * ```
225
+ *
226
+ * **Example:** Your own Dockerfile with build args and secrets
227
+ * ```typescript
228
+ * // Dockerfile:
229
+ * // ARG NODE_ENV
230
+ * // RUN --mount=type=secret,id=NPM_TOKEN,env=NPM_TOKEN npm ci
231
+ * const migrate = yield* Kubernetes.Job("DbMigrate", {
232
+ * cluster,
233
+ * context: "./migrator",
234
+ * build: {
235
+ * args: { NODE_ENV: "production" },
236
+ * // Mounted only into the RUN step that asks for it; never in the image.
237
+ * secrets: { NPM_TOKEN: Config.Redacted("NPM_TOKEN") },
238
+ * },
239
+ * backoffLimit: 2,
240
+ * });
241
+ * ```
242
+ *
243
+ * **Example:** Inline Effect program
244
+ * ```typescript
245
+ * const cluster = yield* Kubernetes.LocalCluster("Cluster", {
246
+ * name: "alchemy",
247
+ * });
248
+ *
249
+ * const hello = yield* Kubernetes.Job(
250
+ * "Hello",
251
+ * { cluster, main: import.meta.url, backoffLimit: 2 },
252
+ * Effect.gen(function* () {
253
+ * return {
254
+ * run: Effect.log("hello from a Job"),
255
+ * };
256
+ * }),
257
+ * );
258
+ * ```
259
+ *
260
+ * **Example:** Inline Effect program with a DynamoDB binding (EKS)
261
+ * ```typescript
262
+ * const seed = yield* Kubernetes.Job(
263
+ * "SeedData",
264
+ * { cluster, main: import.meta.url },
265
+ * Effect.gen(function* () {
266
+ * const putItem = yield* AWS.DynamoDB.PutItem(table);
267
+ * return {
268
+ * run: Effect.gen(function* () {
269
+ * yield* putItem({ Item: { id: { S: "seed" } } });
270
+ * }),
271
+ * };
272
+ * }).pipe(Effect.provide(AWS.DynamoDB.PutItemHttp)),
273
+ * );
274
+ * ```
275
+ *
276
+ * **Example:** Tagged Effect program
277
+ * ```typescript
278
+ * export class Backfill extends Kubernetes.Job<Backfill, {
279
+ * progress: () => Effect.Effect<number>;
280
+ * }>()("Backfill") {}
281
+ *
282
+ * export default Backfill.make(
283
+ * { cluster, main: import.meta.url, backoffLimit: 1 },
284
+ * Effect.gen(function* () {
285
+ * return {
286
+ * run: Effect.gen(function* () { }),
287
+ * progress: () => Effect.succeed(0),
288
+ * };
289
+ * }),
290
+ * );
291
+ * ```
292
+ *
293
+ * ### Bundling & Tree-shaking
294
+ * `main` is bundled with rolldown at deploy time. Unused code is
295
+ * tree-shaken. `effect`, alchemy, and `@distilled.cloud` are marked
296
+ * pure so unused parts prune more aggressively. Your app is not
297
+ * marked pure.
298
+ *
299
+ * **Example:** Mark additional packages as pure
300
+ * Only list packages with no top-level side effects.
301
+ * ```typescript
302
+ * {
303
+ * main: import.meta.url,
304
+ * build: {
305
+ * pure: { packages: ["my-lib", "@my-scope/*"] },
306
+ * },
307
+ * }
308
+ * ```
309
+ *
310
+ * **Example:** Turn it off
311
+ * ```typescript
312
+ * {
313
+ * main: import.meta.url,
314
+ * build: { pure: false },
315
+ * }
316
+ * ```
317
+ *
318
+ * ### Scheduling
319
+ * **Example:** Nightly CronJob
320
+ * ```typescript
321
+ * const nightly = yield* Kubernetes.Job("NightlyBackfill", {
322
+ * cluster,
323
+ * main: import.meta.url,
324
+ * schedule: "0 3 * * *",
325
+ * });
326
+ * ```
327
+ *
328
+ * @resource
329
+ * @product Workloads
330
+ */
331
+ export declare const Job: Platform<Job, JobServices, JobShape, JobRuntimeContext>;
332
+ export declare const JobProvider: () => import("effect/Layer").Layer<Provider.Provider<Job>, never, import("alchemy/AlchemyContext").AlchemyContext | import("@alchemy.run/docker/Docker").Docker | import("effect/FileSystem").FileSystem | import("effect/Path").Path | Stack | import("alchemy/Stage").Stage>;
333
+ //# sourceMappingURL=Job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Job.d.ts","sourceRoot":"","sources":["../src/Job.ts"],"names":[],"mappings":"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"}