@alchemy.run/kubernetes 2.0.0-beta.84 → 2.0.0-beta.86
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/lib/BuiltinAdapters.d.ts +20 -0
- package/lib/BuiltinAdapters.d.ts.map +1 -1
- package/lib/BuiltinAdapters.js +8 -3
- package/lib/BuiltinAdapters.js.map +1 -1
- package/lib/Client.d.ts +24 -7
- package/lib/Client.d.ts.map +1 -1
- package/lib/Client.js +22 -6
- package/lib/Client.js.map +1 -1
- package/lib/ClusterAdapter.d.ts +7 -4
- package/lib/ClusterAdapter.d.ts.map +1 -1
- package/lib/ClusterAdapter.js.map +1 -1
- package/lib/Connection.d.ts.map +1 -1
- package/lib/Connection.js.map +1 -1
- package/lib/Deployment.d.ts +75 -3
- package/lib/Deployment.d.ts.map +1 -1
- package/lib/Deployment.js +64 -2
- package/lib/Deployment.js.map +1 -1
- package/lib/HelmChart.d.ts.map +1 -1
- package/lib/HelmChart.js +1 -1
- package/lib/HelmChart.js.map +1 -1
- package/lib/Job.d.ts +62 -3
- package/lib/Job.d.ts.map +1 -1
- package/lib/Job.js +51 -1
- package/lib/Job.js.map +1 -1
- package/lib/LocalCluster.d.ts +22 -1
- package/lib/LocalCluster.d.ts.map +1 -1
- package/lib/LocalCluster.js +26 -4
- package/lib/LocalCluster.js.map +1 -1
- package/lib/Manifest.d.ts +42 -1
- package/lib/Manifest.d.ts.map +1 -1
- package/lib/Manifest.js +33 -2
- package/lib/Manifest.js.map +1 -1
- package/lib/Objects.d.ts.map +1 -1
- package/lib/Objects.js.map +1 -1
- package/lib/Providers.d.ts.map +1 -1
- package/lib/Providers.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/internal/declared.d.ts.map +1 -1
- package/lib/internal/declared.js.map +1 -1
- package/lib/internal/helm.d.ts.map +1 -1
- package/lib/internal/helm.js +1 -1
- package/lib/internal/helm.js.map +1 -1
- package/lib/internal/kind.d.ts.map +1 -1
- package/lib/internal/kind.js.map +1 -1
- package/lib/internal/kubeconfig.d.ts.map +1 -1
- package/lib/internal/kubeconfig.js +17 -8
- package/lib/internal/kubeconfig.js.map +1 -1
- package/lib/internal/registry.d.ts +1 -1
- package/lib/internal/registry.d.ts.map +1 -1
- package/lib/internal/registry.js.map +1 -1
- package/lib/internal/workload.d.ts +1 -1
- package/lib/internal/workload.d.ts.map +1 -1
- package/lib/internal/workload.js +4 -0
- package/lib/internal/workload.js.map +1 -1
- package/package.json +9 -9
- package/src/BuiltinAdapters.ts +11 -3
- package/src/Client.ts +39 -8
- package/src/ClusterAdapter.ts +8 -4
- package/src/Deployment.ts +80 -5
- package/src/HelmChart.ts +1 -1
- package/src/Job.ts +66 -4
- package/src/LocalCluster.ts +39 -5
- package/src/Manifest.ts +58 -6
- package/src/internal/helm.ts +1 -1
- package/src/internal/kubeconfig.ts +17 -8
- package/src/internal/workload.ts +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","
|
|
1
|
+
{"version":3,"file":"registry.js","sources":["../../src/internal/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ export declare const deepMerge: <T>(base: T, override: unknown) => T;
|
|
|
22
22
|
* The image build platform of a workload: its own `architecture`, else the
|
|
23
23
|
* connection's node architecture, else `linux/amd64`.
|
|
24
24
|
*/
|
|
25
|
-
export declare const imagePlatformOf: (architecture: "amd64" | "arm64" | undefined, connection?: Connection
|
|
25
|
+
export declare const imagePlatformOf: (architecture: "amd64" | "arm64" | undefined, connection?: Connection) => string;
|
|
26
26
|
/**
|
|
27
27
|
* Best-effort {@link Connection} of a `cluster` prop value — `undefined`
|
|
28
28
|
* instead of throwing, for plan-time diffs where the referenced resource
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workload.d.ts","
|
|
1
|
+
{"version":3,"file":"workload.d.ts","sources":["../../src/internal/workload.ts"],"names":[],"mappings":"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"}
|
package/lib/internal/workload.js
CHANGED
|
@@ -254,6 +254,7 @@ import * as Context from "effect/Context";
|
|
|
254
254
|
import * as Config from "effect/Config";
|
|
255
255
|
import * as ConfigProvider from "effect/ConfigProvider";
|
|
256
256
|
import * as Effect from "effect/Effect";
|
|
257
|
+
import * as SecureRandom from "effect/crypto/SecureRandom";
|
|
257
258
|
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
258
259
|
import * as Layer from "effect/Layer";
|
|
259
260
|
import * as Logger from "effect/Logger";
|
|
@@ -271,6 +272,7 @@ const layer = makeEntrypointLayer(tag, entrypoint);
|
|
|
271
272
|
const platform = Layer.mergeAll(
|
|
272
273
|
BunServices.layer,
|
|
273
274
|
FetchHttpClient.layer,
|
|
275
|
+
SecureRandom.layerWebCrypto,
|
|
274
276
|
Logger.layer([Logger.consolePretty()]),
|
|
275
277
|
);
|
|
276
278
|
|
|
@@ -340,6 +342,7 @@ import * as Context from "effect/Context";
|
|
|
340
342
|
import * as Config from "effect/Config";
|
|
341
343
|
import * as ConfigProvider from "effect/ConfigProvider";
|
|
342
344
|
import * as Effect from "effect/Effect";
|
|
345
|
+
import * as SecureRandom from "effect/crypto/SecureRandom";
|
|
343
346
|
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
344
347
|
import * as Layer from "effect/Layer";
|
|
345
348
|
import * as Logger from "effect/Logger";
|
|
@@ -353,6 +356,7 @@ const layer = makeEntrypointLayer(tag, entrypoint);
|
|
|
353
356
|
const platform = Layer.mergeAll(
|
|
354
357
|
BunServices.layer,
|
|
355
358
|
FetchHttpClient.layer,
|
|
359
|
+
SecureRandom.layerWebCrypto,
|
|
356
360
|
Logger.layer([Logger.consolePretty()]),
|
|
357
361
|
);
|
|
358
362
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workload.js","
|
|
1
|
+
{"version":3,"file":"workload.js","sources":["../../src/internal/workload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD;;;;;GAKG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAU5C;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,IAAO,EAAE,QAAiB,EAAK,EAAE;IAC5D,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACxC,IACE,IAAI,KAAK,IAAI;QACb,QAAQ,KAAK,IAAI;QACjB,OAAO,IAAI,KAAK,QAAQ;QACxB,OAAO,QAAQ,KAAK,QAAQ;QAC5B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EACvB,CAAC;QACD,OAAO,QAAa,CAAC;IACvB,CAAC;IACD,MAAM,GAAG,GAA4B,EAAE,GAAI,IAAgC,EAAE,CAAC;IAC9E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,GAAG,CAAC;YACN,GAAG,IAAK,IAAgC;gBACtC,CAAC,CAAC,SAAS,CAAE,IAAgC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC;gBAC1D,CAAC,CAAC,KAAK,CAAC;IACd,CAAC;IACD,OAAO,GAAQ,CAAC;AAClB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,YAA2C,EAC3C,UAAuB,EACf,EAAE,CACV,CAAC,YAAY,IAAI,UAAU,EAAE,YAAY,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;AAEzF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAgC,EAA0B,EAAE;IAC1F,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IACpE,IAAI,YAAY,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAChE,OAAO,OAAO,CAAC,UAAU,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAW,EAAE;IAC/C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAC1C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAkC,EAAsB,EAAE,CAC3F,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAEvF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA+B,EAA0B,EAAE;IAC5F,MAAM,UAAU,GAAG,MAAM,CAAC,UAAoC,CAAC;IAC/D,IAAI,UAAU,EAAE,IAAI,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC;IACtD,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO;YACL,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAA+B;SACxF,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,QAAoD,EACD,EAAE;IACrD,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CACpC,CAAC,OAAuE,EAAE,EAAE,CAC1E,OAAO,CAAC,MAAM,KAAK,QAAQ,CAC9B,CAAC;IAEF,MAAM,GAAG,GAAG,cAAc;SACvB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC;SACpC,MAAM,CAAsB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3E,MAAM,SAAS,GAAG;QAChB,GAAG,IAAI,GAAG,CACR,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACjC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CACrC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,IAAK,OAAO,CAAC,IAAgC,CAAC,GAAG,CAAC,KAAK,SAAS,CACvF,CACF,CACF;KACF,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAC5B,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAsC,EAAE;IACtF,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/E,CAAC,CAAC;AAIF,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAA2B,EAA+B,EAAE,CAC1F,MAAM,CAAC,IAAI,KAAK,SAAS;IACvB,CAAC,CAAC,MAAM;IACR,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS;QAC1B,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;YAC/D,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,SAAS,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAC/D,MAA2B,EAC3B,QAAgB;IAEhB,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7E,IAAI,OAAO,MAAM,CAAC,UAAU,CAAC,OAAO,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CACrF,CAAC,EACD,EAAE,CACH,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;QACpD,MAAM,UAAU,GACd,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACnC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;YACjC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACvC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;YACpE,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3D,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAC1F,CAAC,EACD,EAAE,CACH,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC,CAAC;AAoBH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAoC;IAC3F,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACpC,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;YACrC,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM;YACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,8BAA8B,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAE,CAAC;QACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACjE,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;IAC7C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAC/C,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,QAAQ;YACR,MAAM;YACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACtB,IAAI,KAAK,CACP,IAAI,OAAO,CAAC,EAAE,sDAAsD;QAClE,kEAAkE;QAClE,iDAAiD;QACjD,+EAA+E;QAC/E,8DAA8D;QAC9D,mDAAmD,CACtD,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,OASrD;IACC,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;QAC5F,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC;YAC5C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,8BAA8B,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjF,CAAC,CAAC,CAAC;AAMH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,CAAC,OAAe,EAAE,EAAE,CACpB,CAAC,UAAkB,EAAU,EAAE,CAC7B;;;;;;;;;;;;;;;;WAgBO,OAAO,yBAAyB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;;;;;;;+BAOtC,IAAI,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DtC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,CAAC,OAAe,EAAE,EAAE,CACpB,CAAC,UAAkB,EAAU,EAAE,CAC7B;;;;;;;;;;;;;;;WAeO,OAAO,yBAAyB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;;;+BAGtC,IAAI,CAAC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DtC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alchemy.run/kubernetes",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.86",
|
|
4
4
|
"description": "Kubernetes deployments, jobs, Helm charts, manifests and local clusters for Alchemy.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"alchemy",
|
|
@@ -44,21 +44,21 @@
|
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@alchemy.run/docker": "2.0.0-beta.
|
|
47
|
+
"@alchemy.run/docker": "2.0.0-beta.86",
|
|
48
48
|
"yaml": "^2.9.1"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@effect/platform-bun": "^4.
|
|
51
|
+
"@effect/platform-bun": "^4.1.4",
|
|
52
52
|
"@types/bun": "1.4.3",
|
|
53
53
|
"@types/node": "26.6.5",
|
|
54
|
-
"alchemy": "2.0.0-beta.
|
|
55
|
-
"effect": "^4.
|
|
56
|
-
"typescript": "^7.0.
|
|
54
|
+
"alchemy": "2.0.0-beta.86",
|
|
55
|
+
"effect": "^4.1.4",
|
|
56
|
+
"typescript": "^7.1.0-dev.20261105.1"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
|
-
"@effect/platform-bun": "^4.
|
|
60
|
-
"alchemy": "2.0.0-beta.
|
|
61
|
-
"effect": "^4.
|
|
59
|
+
"@effect/platform-bun": "^4.1.4",
|
|
60
|
+
"alchemy": "2.0.0-beta.86",
|
|
61
|
+
"effect": "^4.1.4"
|
|
62
62
|
},
|
|
63
63
|
"peerDependenciesMeta": {
|
|
64
64
|
"@effect/platform-bun": {
|
package/src/BuiltinAdapters.ts
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* and run pre-built `image` references (or images pushed by the user's own
|
|
10
10
|
* pipeline).
|
|
11
11
|
*/
|
|
12
|
+
|
|
13
|
+
import * as Data from "effect/Data";
|
|
12
14
|
import * as Effect from "effect/Effect";
|
|
13
15
|
import * as FileSystem from "effect/FileSystem";
|
|
14
16
|
import * as Layer from "effect/Layer";
|
|
@@ -27,6 +29,11 @@ import {
|
|
|
27
29
|
type MintedCredentials,
|
|
28
30
|
} from "./internal/kubeconfig.ts";
|
|
29
31
|
|
|
32
|
+
export class BuiltinAdaptersInvalidProps extends Data.TaggedError("BuiltinAdaptersInvalidProps")<{
|
|
33
|
+
readonly message: string;
|
|
34
|
+
readonly cause?: unknown;
|
|
35
|
+
}> {}
|
|
36
|
+
|
|
30
37
|
const toAuthHeaders = (credentials: MintedCredentials): Record<string, string> =>
|
|
31
38
|
credentials.token ? { Authorization: `Bearer ${credentials.token}` } : {};
|
|
32
39
|
|
|
@@ -34,11 +41,12 @@ const requireEndpoint = (connection: Connection) =>
|
|
|
34
41
|
connection.endpoint !== undefined
|
|
35
42
|
? Effect.succeed(connection.endpoint)
|
|
36
43
|
: Effect.fail(
|
|
37
|
-
new
|
|
38
|
-
|
|
44
|
+
new BuiltinAdaptersInvalidProps({
|
|
45
|
+
message:
|
|
46
|
+
`A '${connection.auth.kind}' Kubernetes connection requires an ` +
|
|
39
47
|
"explicit `endpoint` (only kubeconfig-backed and managed-cloud " +
|
|
40
48
|
"connections can discover it)",
|
|
41
|
-
),
|
|
49
|
+
}),
|
|
42
50
|
);
|
|
43
51
|
|
|
44
52
|
/**
|
package/src/Client.ts
CHANGED
|
@@ -36,6 +36,13 @@ import {
|
|
|
36
36
|
type KubernetesObjectRef,
|
|
37
37
|
} from "./Objects.ts";
|
|
38
38
|
|
|
39
|
+
export class KubernetesClientOperationFailed extends Data.TaggedError(
|
|
40
|
+
"KubernetesClientOperationFailed",
|
|
41
|
+
)<{
|
|
42
|
+
readonly message: string;
|
|
43
|
+
readonly cause?: unknown;
|
|
44
|
+
}> {}
|
|
45
|
+
|
|
39
46
|
export class KubernetesApiError extends Data.TaggedError("KubernetesApiError")<{
|
|
40
47
|
method: string;
|
|
41
48
|
path: string;
|
|
@@ -49,6 +56,12 @@ export class KubernetesApiError extends Data.TaggedError("KubernetesApiError")<{
|
|
|
49
56
|
}
|
|
50
57
|
}
|
|
51
58
|
|
|
59
|
+
/** An object ref that cannot be mapped to a REST path (e.g. a namespaced kind without a namespace). */
|
|
60
|
+
export class KubernetesObjectPathError extends Data.TaggedError("KubernetesObjectPathError")<{
|
|
61
|
+
message: string;
|
|
62
|
+
cause?: unknown;
|
|
63
|
+
}> {}
|
|
64
|
+
|
|
52
65
|
const fieldManager = "alchemy";
|
|
53
66
|
|
|
54
67
|
/** Deadline for auth-header minting and for each HTTP attempt. */
|
|
@@ -81,7 +94,7 @@ export class KubernetesNotFound extends Data.TaggedError("KubernetesNotFound")<{
|
|
|
81
94
|
* becomes `undefined`; auth and HTTP failures stay failures.
|
|
82
95
|
*/
|
|
83
96
|
export const ifClusterExists = <A, E, R>(effect: Effect.Effect<A, ClusterNotFoundError | E, R>) =>
|
|
84
|
-
effect.pipe(Effect.catchTag("Kubernetes.ClusterNotFoundError", () => Effect.
|
|
97
|
+
effect.pipe(Effect.catchTag("Kubernetes.ClusterNotFoundError", () => Effect.undefined));
|
|
85
98
|
|
|
86
99
|
const requestJson = Effect.fn(function* ({
|
|
87
100
|
transport,
|
|
@@ -156,13 +169,21 @@ const requestJson = Effect.fn(function* ({
|
|
|
156
169
|
resume(Effect.fail(error));
|
|
157
170
|
});
|
|
158
171
|
incoming.on("aborted", () => {
|
|
159
|
-
resume(
|
|
172
|
+
resume(
|
|
173
|
+
Effect.fail(
|
|
174
|
+
new KubernetesClientOperationFailed({
|
|
175
|
+
message: `Kubernetes ${method} ${path} response aborted`,
|
|
176
|
+
}),
|
|
177
|
+
),
|
|
178
|
+
);
|
|
160
179
|
});
|
|
161
180
|
incoming.on("end", () => {
|
|
162
181
|
if (incoming.complete === false) {
|
|
163
182
|
resume(
|
|
164
183
|
Effect.fail(
|
|
165
|
-
new
|
|
184
|
+
new KubernetesClientOperationFailed({
|
|
185
|
+
message: `Kubernetes ${method} ${path} response ended before completion`,
|
|
186
|
+
}),
|
|
166
187
|
),
|
|
167
188
|
);
|
|
168
189
|
return;
|
|
@@ -178,7 +199,13 @@ const requestJson = Effect.fn(function* ({
|
|
|
178
199
|
},
|
|
179
200
|
);
|
|
180
201
|
request.on("error", (error) => {
|
|
181
|
-
resume(
|
|
202
|
+
resume(
|
|
203
|
+
Effect.fail(
|
|
204
|
+
error instanceof Error
|
|
205
|
+
? error
|
|
206
|
+
: new KubernetesClientOperationFailed({ message: String(error) }),
|
|
207
|
+
),
|
|
208
|
+
);
|
|
182
209
|
});
|
|
183
210
|
if (prepared.payload !== undefined) request.write(prepared.payload);
|
|
184
211
|
request.end();
|
|
@@ -193,9 +220,9 @@ const requestJson = Effect.fn(function* ({
|
|
|
193
220
|
Effect.timeout(requestTimeout),
|
|
194
221
|
Effect.mapError(
|
|
195
222
|
(error) =>
|
|
196
|
-
new
|
|
197
|
-
`Failed Kubernetes ${method} ${path}: ${error instanceof Error ? error.message : String(error)}`,
|
|
198
|
-
),
|
|
223
|
+
new KubernetesClientOperationFailed({
|
|
224
|
+
message: `Failed Kubernetes ${method} ${path}: ${error instanceof Error ? error.message : String(error)}`,
|
|
225
|
+
}),
|
|
199
226
|
),
|
|
200
227
|
// Transport-level failures (ECONNREFUSED/ECONNRESET/ETIMEDOUT/DNS,
|
|
201
228
|
// the per-attempt deadline) are transient — a fresh managed endpoint's
|
|
@@ -310,7 +337,11 @@ const buildPath = Effect.fn(function* ({
|
|
|
310
337
|
const spec = yield* resolveKindSpec({ transport, input: object });
|
|
311
338
|
return yield* Effect.try({
|
|
312
339
|
try: () => buildKubernetesObjectPathWithSpec(object, spec),
|
|
313
|
-
catch: (error) =>
|
|
340
|
+
catch: (error) =>
|
|
341
|
+
new KubernetesObjectPathError({
|
|
342
|
+
message: error instanceof Error ? error.message : String(error),
|
|
343
|
+
cause: error,
|
|
344
|
+
}),
|
|
314
345
|
});
|
|
315
346
|
});
|
|
316
347
|
|
package/src/ClusterAdapter.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { InlineDockerfile } from "@alchemy.run/docker/Dockerfile";
|
|
2
|
+
import type { DockerfileBuild } from "@alchemy.run/docker/ImageSource";
|
|
2
3
|
import type * as Bundle from "alchemy/Bundle/Bundle";
|
|
4
|
+
import type { ProviderError } from "alchemy/Provider";
|
|
3
5
|
import type { ResourceBinding } from "alchemy/Resource";
|
|
4
6
|
import type { ResourceContext } from "alchemy/ResourceContext";
|
|
5
7
|
import type { Stack } from "alchemy/Stack";
|
|
@@ -70,7 +72,7 @@ export interface ClusterTransport {
|
|
|
70
72
|
/** Skip TLS verification (self-signed local clusters). */
|
|
71
73
|
insecureSkipTlsVerify?: boolean;
|
|
72
74
|
/** Mint the auth headers for one request. */
|
|
73
|
-
headers: Effect.Effect<Record<string, string>,
|
|
75
|
+
headers: Effect.Effect<Record<string, string>, ProviderError>;
|
|
74
76
|
/** PEM client certificate credentials for mutual TLS. */
|
|
75
77
|
clientCert?: { certificate: string; key: string };
|
|
76
78
|
}
|
|
@@ -170,12 +172,13 @@ export interface WorkloadImageSource {
|
|
|
170
172
|
main?: string;
|
|
171
173
|
handler?: string;
|
|
172
174
|
/**
|
|
173
|
-
* Bundler configuration for `main
|
|
175
|
+
* Bundler configuration for `main`, or Docker build args and secrets for
|
|
176
|
+
* a `context`/`dockerfile` build. Unused bundled code is tree-shaken.
|
|
174
177
|
* `effect`, alchemy, and `@distilled.cloud` are marked pure so unused
|
|
175
178
|
* parts prune more aggressively. List extra packages with
|
|
176
179
|
* `pure.packages`, or disable with `pure: false`.
|
|
177
180
|
*/
|
|
178
|
-
build?: Bundle.BundleConfig;
|
|
181
|
+
build?: Bundle.BundleConfig & DockerfileBuild;
|
|
179
182
|
context?: string;
|
|
180
183
|
dockerfile?: string | InlineDockerfile;
|
|
181
184
|
image?: string;
|
|
@@ -210,6 +213,7 @@ export interface WorkloadIdentityResult {
|
|
|
210
213
|
/** Annotations to stamp on the workload's ServiceAccount object. */
|
|
211
214
|
serviceAccountAnnotations?: Record<string, string>;
|
|
212
215
|
/** Serializable state persisted on the workload's attributes. */
|
|
216
|
+
// oxlint-disable-next-line typescript/no-redundant-type-constituents -- registry type is `never` until cloud packages augment it
|
|
213
217
|
state: IdentityState | undefined;
|
|
214
218
|
}
|
|
215
219
|
|
|
@@ -283,7 +287,7 @@ export interface ClusterAdapterService {
|
|
|
283
287
|
*/
|
|
284
288
|
readonly connect: (
|
|
285
289
|
connection: Connection,
|
|
286
|
-
) => Effect.Effect<ClusterTransport, ClusterNotFoundError |
|
|
290
|
+
) => Effect.Effect<ClusterTransport, ClusterNotFoundError | ProviderError>;
|
|
287
291
|
/** Workload identity provisioning (Pod Identity on EKS, Workload Identity Federation on GKE). */
|
|
288
292
|
readonly identity?: {
|
|
289
293
|
readonly reconcile: (
|
package/src/Deployment.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import type { BuildCacheOptions } from "@alchemy.run/docker/BuildCache";
|
|
2
|
+
import type { DockerfileBuildOptions } from "@alchemy.run/docker/ImageSource";
|
|
3
|
+
import type * as Bundle from "alchemy/Bundle/Bundle";
|
|
1
4
|
import { isResolved } from "alchemy/Diff";
|
|
2
5
|
import type { Input } from "alchemy/Input";
|
|
3
6
|
import { createPhysicalName } from "alchemy/PhysicalName";
|
|
@@ -131,6 +134,14 @@ export interface DeploymentPropsBase extends PlatformProps {
|
|
|
131
134
|
* @default the connection's `architecture`, else "amd64"
|
|
132
135
|
*/
|
|
133
136
|
architecture?: "amd64" | "arm64";
|
|
137
|
+
/**
|
|
138
|
+
* Kubernetes `RuntimeClass` the pods run under. On EKS, `isolated-sandbox`
|
|
139
|
+
* runs each pod in its own Nitro Sandbox, a lightweight VM isolated by the
|
|
140
|
+
* AWS Nitro hypervisor, and `confidential-sandbox` also hides the pod's
|
|
141
|
+
* memory from the node. EKS Auto Mode needs no other setup. Any other
|
|
142
|
+
* RuntimeClass on the cluster (gVisor, Kata) works too.
|
|
143
|
+
*/
|
|
144
|
+
runtimeClassName?: "isolated-sandbox" | "confidential-sandbox" | (string & {});
|
|
134
145
|
/**
|
|
135
146
|
* Deep-partial Kubernetes Pod template merged into the synthesized
|
|
136
147
|
* template (objects merge recursively; arrays and primitives replace) —
|
|
@@ -173,8 +184,8 @@ export interface BundledDeploymentProps extends DeploymentPropsBase {
|
|
|
173
184
|
image?: string;
|
|
174
185
|
/** Named export to load from `main`. @default "default" */
|
|
175
186
|
handler?: string;
|
|
176
|
-
/** Bundler configuration for the entrypoint
|
|
177
|
-
build?:
|
|
187
|
+
/** Bundler configuration for the entrypoint, and the image build's layer `cache`. */
|
|
188
|
+
build?: Bundle.BundleConfig & BuildCacheOptions;
|
|
178
189
|
/** Environment Dockerfile (path or inline content). */
|
|
179
190
|
dockerfile?: WorkloadImageSource["dockerfile"];
|
|
180
191
|
/** Build context for a path {@link dockerfile} environment. */
|
|
@@ -182,7 +193,7 @@ export interface BundledDeploymentProps extends DeploymentPropsBase {
|
|
|
182
193
|
}
|
|
183
194
|
|
|
184
195
|
/** Build the user's own Dockerfile (`context` + optional `dockerfile` path). */
|
|
185
|
-
export interface DockerfileDeploymentProps extends DeploymentPropsBase {
|
|
196
|
+
export interface DockerfileDeploymentProps extends DeploymentPropsBase, DockerfileBuildOptions {
|
|
186
197
|
/** Docker build context directory. */
|
|
187
198
|
context?: string;
|
|
188
199
|
/**
|
|
@@ -229,6 +240,7 @@ export interface Deployment extends Resource<
|
|
|
229
240
|
* adapter (on EKS: the pod-identity role + association; on GKE: the
|
|
230
241
|
* Workload Identity principal and the IAM grants applied to it).
|
|
231
242
|
*/
|
|
243
|
+
// oxlint-disable-next-line typescript/no-redundant-type-constituents -- registry type is `never` until cloud packages augment it
|
|
232
244
|
identity: IdentityState | undefined;
|
|
233
245
|
/**
|
|
234
246
|
* Image-registry state provisioned by the cluster platform's adapter
|
|
@@ -252,6 +264,7 @@ export interface Deployment extends Resource<
|
|
|
252
264
|
Providers
|
|
253
265
|
> {}
|
|
254
266
|
|
|
267
|
+
// oxlint-disable-next-line typescript/no-redundant-type-constituents -- registry type is `never` until cloud packages augment it
|
|
255
268
|
export type DeploymentServices = ServerHostService | WorkloadServices;
|
|
256
269
|
|
|
257
270
|
export type DeploymentShape = Main<DeploymentServices>;
|
|
@@ -320,6 +333,23 @@ export interface DeploymentRuntimeContext extends HostRuntimeContext {
|
|
|
320
333
|
* });
|
|
321
334
|
* ```
|
|
322
335
|
*
|
|
336
|
+
* **Example:** Build args and secrets
|
|
337
|
+
* ```typescript
|
|
338
|
+
* // Dockerfile:
|
|
339
|
+
* // ARG NODE_ENV
|
|
340
|
+
* // RUN --mount=type=secret,id=NPM_TOKEN,env=NPM_TOKEN npm ci
|
|
341
|
+
* const api = yield* Kubernetes.Deployment("Api", {
|
|
342
|
+
* cluster,
|
|
343
|
+
* context: "./api",
|
|
344
|
+
* build: {
|
|
345
|
+
* args: { NODE_ENV: "production" },
|
|
346
|
+
* // Mounted only into the RUN step that asks for it; never in the image.
|
|
347
|
+
* secrets: { NPM_TOKEN: Config.Redacted("NPM_TOKEN") },
|
|
348
|
+
* },
|
|
349
|
+
* port: 8080,
|
|
350
|
+
* });
|
|
351
|
+
* ```
|
|
352
|
+
*
|
|
323
353
|
* ### Effect Servers
|
|
324
354
|
* **Example:** Inline Effect server
|
|
325
355
|
* ```typescript
|
|
@@ -390,6 +420,39 @@ export interface DeploymentRuntimeContext extends HostRuntimeContext {
|
|
|
390
420
|
* );
|
|
391
421
|
* ```
|
|
392
422
|
*
|
|
423
|
+
* ### Caching Build Layers
|
|
424
|
+
* Builds reuse the local BuildKit cache of the machine they run on, and
|
|
425
|
+
* nothing but the image is pushed. A builder that has never built the image,
|
|
426
|
+
* such as a fresh CI runner, reruns every step. Set `build.cache: true` to keep
|
|
427
|
+
* every stage's layers at the image repository's `:buildcache` tag, so fresh
|
|
428
|
+
* builders skip unchanged steps. For another backend, pass BuildKit's own
|
|
429
|
+
* `--cache-from` / `--cache-to` values as `from` and `to`.
|
|
430
|
+
*
|
|
431
|
+
* **Example:** Cache layers in the image repository
|
|
432
|
+
* ```typescript
|
|
433
|
+
* const api = yield* Kubernetes.Deployment("Api", {
|
|
434
|
+
* cluster,
|
|
435
|
+
* context: "./api",
|
|
436
|
+
* port: 8080,
|
|
437
|
+
* build: { cache: true },
|
|
438
|
+
* });
|
|
439
|
+
* ```
|
|
440
|
+
*
|
|
441
|
+
* **Example:** Cache layers in GitHub Actions
|
|
442
|
+
* ```typescript
|
|
443
|
+
* const api = yield* Kubernetes.Deployment("Api", {
|
|
444
|
+
* cluster,
|
|
445
|
+
* context: "./api",
|
|
446
|
+
* port: 8080,
|
|
447
|
+
* build: {
|
|
448
|
+
* cache: {
|
|
449
|
+
* from: ["type=gha,scope=api"],
|
|
450
|
+
* to: ["type=gha,scope=api,mode=max"],
|
|
451
|
+
* },
|
|
452
|
+
* },
|
|
453
|
+
* });
|
|
454
|
+
* ```
|
|
455
|
+
*
|
|
393
456
|
* ### Bundling & Tree-shaking
|
|
394
457
|
* `main` is bundled with rolldown at deploy time. Unused code is
|
|
395
458
|
* tree-shaken. `effect`, alchemy, and `@distilled.cloud` are marked
|
|
@@ -415,6 +478,17 @@ export interface DeploymentRuntimeContext extends HostRuntimeContext {
|
|
|
415
478
|
* }
|
|
416
479
|
* ```
|
|
417
480
|
*
|
|
481
|
+
* ### Isolate pods in Nitro Sandboxes
|
|
482
|
+
* **Example:** Run each pod in its own VM on EKS
|
|
483
|
+
* ```typescript
|
|
484
|
+
* const agent = yield* Kubernetes.Deployment("Agent", {
|
|
485
|
+
* cluster,
|
|
486
|
+
* main: import.meta.url,
|
|
487
|
+
* port: 3000,
|
|
488
|
+
* runtimeClassName: "isolated-sandbox",
|
|
489
|
+
* });
|
|
490
|
+
* ```
|
|
491
|
+
*
|
|
418
492
|
* ### Kubernetes Escape Hatch
|
|
419
493
|
* **Example:** Tune the synthesized pod template
|
|
420
494
|
* ```typescript
|
|
@@ -538,7 +612,7 @@ export const DeploymentProvider = () =>
|
|
|
538
612
|
hostname ? Effect.succeed(hostname) : Effect.fail(new ServiceNotReady()),
|
|
539
613
|
),
|
|
540
614
|
retryUntilServiceReady,
|
|
541
|
-
Effect.catchTag("Kubernetes.ServiceNotReady", () => Effect.
|
|
615
|
+
Effect.catchTag("Kubernetes.ServiceNotReady", () => Effect.undefined),
|
|
542
616
|
);
|
|
543
617
|
|
|
544
618
|
return {
|
|
@@ -613,7 +687,7 @@ export const DeploymentProvider = () =>
|
|
|
613
687
|
const anchor = (output.kubernetesObjects ?? [])[0];
|
|
614
688
|
if (!anchor) return output;
|
|
615
689
|
const observed = yield* readObject({ transport, object: anchor }).pipe(
|
|
616
|
-
Effect.catchTag("KubernetesNotFound", () => Effect.
|
|
690
|
+
Effect.catchTag("KubernetesNotFound", () => Effect.undefined),
|
|
617
691
|
);
|
|
618
692
|
if (observed === undefined) return undefined;
|
|
619
693
|
return output;
|
|
@@ -716,6 +790,7 @@ export const DeploymentProvider = () =>
|
|
|
716
790
|
metadata: { labels },
|
|
717
791
|
spec: {
|
|
718
792
|
serviceAccountName,
|
|
793
|
+
...(news.runtimeClassName ? { runtimeClassName: news.runtimeClassName } : {}),
|
|
719
794
|
containers: [
|
|
720
795
|
{
|
|
721
796
|
name: baseName,
|
package/src/HelmChart.ts
CHANGED
|
@@ -355,7 +355,7 @@ export const HelmChartProvider = () =>
|
|
|
355
355
|
Effect.gen(function* () {
|
|
356
356
|
const key = kubernetesObjectKey(object);
|
|
357
357
|
const observed = yield* readObject({ transport, object }).pipe(
|
|
358
|
-
Effect.catchTag("KubernetesNotFound", () => Effect.
|
|
358
|
+
Effect.catchTag("KubernetesNotFound", () => Effect.undefined),
|
|
359
359
|
);
|
|
360
360
|
if (!observed) return `missing:${key}`;
|
|
361
361
|
// Older rows stored no selection. Re-rendering the chart is
|
package/src/Job.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import type { BuildCacheOptions } from "@alchemy.run/docker/BuildCache";
|
|
2
|
+
import type { DockerfileBuildOptions } from "@alchemy.run/docker/ImageSource";
|
|
3
|
+
import type * as Bundle from "alchemy/Bundle/Bundle";
|
|
1
4
|
import { isResolved } from "alchemy/Diff";
|
|
2
5
|
import * as Output from "alchemy/Output";
|
|
3
6
|
import { createPhysicalName } from "alchemy/PhysicalName";
|
|
@@ -112,6 +115,14 @@ export interface JobPropsBase extends PlatformProps {
|
|
|
112
115
|
* @default the connection's `architecture`, else "amd64"
|
|
113
116
|
*/
|
|
114
117
|
architecture?: "amd64" | "arm64";
|
|
118
|
+
/**
|
|
119
|
+
* Kubernetes `RuntimeClass` the pods run under. On EKS, `isolated-sandbox`
|
|
120
|
+
* runs each pod in its own Nitro Sandbox, a lightweight VM isolated by the
|
|
121
|
+
* AWS Nitro hypervisor, and `confidential-sandbox` also hides the pod's
|
|
122
|
+
* memory from the node. EKS Auto Mode needs no other setup. Any other
|
|
123
|
+
* RuntimeClass on the cluster (gVisor, Kata) works too.
|
|
124
|
+
*/
|
|
125
|
+
runtimeClassName?: "isolated-sandbox" | "confidential-sandbox" | (string & {});
|
|
115
126
|
/**
|
|
116
127
|
* Deep-partial Kubernetes Pod template merged into the synthesized
|
|
117
128
|
* template (objects merge recursively; arrays and primitives replace) —
|
|
@@ -154,8 +165,8 @@ export interface BundledJobProps extends JobPropsBase {
|
|
|
154
165
|
image?: string;
|
|
155
166
|
/** Named export to load from `main`. @default "default" */
|
|
156
167
|
handler?: string;
|
|
157
|
-
/** Bundler configuration for the entrypoint
|
|
158
|
-
build?:
|
|
168
|
+
/** Bundler configuration for the entrypoint, and the image build's layer `cache`. */
|
|
169
|
+
build?: Bundle.BundleConfig & BuildCacheOptions;
|
|
159
170
|
/** Environment Dockerfile (path or inline content). */
|
|
160
171
|
dockerfile?: WorkloadImageSource["dockerfile"];
|
|
161
172
|
/** Build context for a path {@link dockerfile} environment. */
|
|
@@ -163,7 +174,7 @@ export interface BundledJobProps extends JobPropsBase {
|
|
|
163
174
|
}
|
|
164
175
|
|
|
165
176
|
/** Build the user's own Dockerfile (`context` + optional `dockerfile` path). */
|
|
166
|
-
export interface DockerfileJobProps extends JobPropsBase {
|
|
177
|
+
export interface DockerfileJobProps extends JobPropsBase, DockerfileBuildOptions {
|
|
167
178
|
/** Docker build context directory. */
|
|
168
179
|
context?: string;
|
|
169
180
|
/**
|
|
@@ -207,6 +218,7 @@ export interface Job extends Resource<
|
|
|
207
218
|
* adapter (on EKS: the pod-identity role + association; on GKE: the
|
|
208
219
|
* Workload Identity principal and the IAM grants applied to it).
|
|
209
220
|
*/
|
|
221
|
+
// oxlint-disable-next-line typescript/no-redundant-type-constituents -- registry type is `never` until cloud packages augment it
|
|
210
222
|
identity: IdentityState | undefined;
|
|
211
223
|
/**
|
|
212
224
|
* Image-registry state provisioned by the cluster platform's adapter
|
|
@@ -267,6 +279,23 @@ export interface JobRuntimeContext extends HostRuntimeContext {
|
|
|
267
279
|
* });
|
|
268
280
|
* ```
|
|
269
281
|
*
|
|
282
|
+
* **Example:** Your own Dockerfile with build args and secrets
|
|
283
|
+
* ```typescript
|
|
284
|
+
* // Dockerfile:
|
|
285
|
+
* // ARG NODE_ENV
|
|
286
|
+
* // RUN --mount=type=secret,id=NPM_TOKEN,env=NPM_TOKEN npm ci
|
|
287
|
+
* const migrate = yield* Kubernetes.Job("DbMigrate", {
|
|
288
|
+
* cluster,
|
|
289
|
+
* context: "./migrator",
|
|
290
|
+
* build: {
|
|
291
|
+
* args: { NODE_ENV: "production" },
|
|
292
|
+
* // Mounted only into the RUN step that asks for it; never in the image.
|
|
293
|
+
* secrets: { NPM_TOKEN: Config.Redacted("NPM_TOKEN") },
|
|
294
|
+
* },
|
|
295
|
+
* backoffLimit: 2,
|
|
296
|
+
* });
|
|
297
|
+
* ```
|
|
298
|
+
*
|
|
270
299
|
* **Example:** Inline Effect program
|
|
271
300
|
* ```typescript
|
|
272
301
|
* const cluster = yield* Kubernetes.LocalCluster("Cluster", {
|
|
@@ -317,6 +346,37 @@ export interface JobRuntimeContext extends HostRuntimeContext {
|
|
|
317
346
|
* );
|
|
318
347
|
* ```
|
|
319
348
|
*
|
|
349
|
+
* ### Caching Build Layers
|
|
350
|
+
* Builds reuse the local BuildKit cache of the machine they run on, and
|
|
351
|
+
* nothing but the image is pushed. A builder that has never built the image,
|
|
352
|
+
* such as a fresh CI runner, reruns every step. Set `build.cache: true` to keep
|
|
353
|
+
* every stage's layers at the image repository's `:buildcache` tag, so fresh
|
|
354
|
+
* builders skip unchanged steps. For another backend, pass BuildKit's own
|
|
355
|
+
* `--cache-from` / `--cache-to` values as `from` and `to`.
|
|
356
|
+
*
|
|
357
|
+
* **Example:** Cache layers in the image repository
|
|
358
|
+
* ```typescript
|
|
359
|
+
* const migrate = yield* Kubernetes.Job("Migrate", {
|
|
360
|
+
* cluster,
|
|
361
|
+
* context: "./migrate",
|
|
362
|
+
* build: { cache: true },
|
|
363
|
+
* });
|
|
364
|
+
* ```
|
|
365
|
+
*
|
|
366
|
+
* **Example:** Cache layers in GitHub Actions
|
|
367
|
+
* ```typescript
|
|
368
|
+
* const migrate = yield* Kubernetes.Job("Migrate", {
|
|
369
|
+
* cluster,
|
|
370
|
+
* context: "./migrate",
|
|
371
|
+
* build: {
|
|
372
|
+
* cache: {
|
|
373
|
+
* from: ["type=gha,scope=migrate"],
|
|
374
|
+
* to: ["type=gha,scope=migrate,mode=max"],
|
|
375
|
+
* },
|
|
376
|
+
* },
|
|
377
|
+
* });
|
|
378
|
+
* ```
|
|
379
|
+
*
|
|
320
380
|
* ### Bundling & Tree-shaking
|
|
321
381
|
* `main` is bundled with rolldown at deploy time. Unused code is
|
|
322
382
|
* tree-shaken. `effect`, alchemy, and `@distilled.cloud` are marked
|
|
@@ -376,6 +436,7 @@ export const Job: Platform<Job, JobServices, JobShape, JobRuntimeContext> = Plat
|
|
|
376
436
|
env[key] = output.pipe(Output.map(packEnvValue));
|
|
377
437
|
return key;
|
|
378
438
|
}),
|
|
439
|
+
// oxlint-disable-next-line effecttsgo/process-env-in-effect -- runtime ctx.get must read raw env, never Config (see unpackEnvValue)
|
|
379
440
|
get: <T>(key: string) => Effect.sync(() => unpackEnvValue<T>(process.env[key]) as T),
|
|
380
441
|
run: (effect: Effect.Effect<void, never, any>) =>
|
|
381
442
|
Effect.sync(() => {
|
|
@@ -477,7 +538,7 @@ export const JobProvider = () =>
|
|
|
477
538
|
const observed = yield* readObject({
|
|
478
539
|
transport,
|
|
479
540
|
object: anchor,
|
|
480
|
-
}).pipe(Effect.catchTag("KubernetesNotFound", () => Effect.
|
|
541
|
+
}).pipe(Effect.catchTag("KubernetesNotFound", () => Effect.undefined));
|
|
481
542
|
if (observed === undefined) return undefined;
|
|
482
543
|
return output;
|
|
483
544
|
}),
|
|
@@ -570,6 +631,7 @@ export const JobProvider = () =>
|
|
|
570
631
|
metadata: { labels },
|
|
571
632
|
spec: {
|
|
572
633
|
serviceAccountName,
|
|
634
|
+
...(news.runtimeClassName ? { runtimeClassName: news.runtimeClassName } : {}),
|
|
573
635
|
restartPolicy: news.restartPolicy ?? "Never",
|
|
574
636
|
containers: [
|
|
575
637
|
{
|