@microagi/alchemy-gcp 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/lib/Container/NodePool.d.ts +10 -0
  2. package/lib/Container/NodePool.d.ts.map +1 -1
  3. package/lib/Container/NodePool.js +4 -0
  4. package/lib/Container/NodePool.js.map +1 -1
  5. package/lib/Iam/ServiceAccount.d.ts.map +1 -1
  6. package/lib/Iam/ServiceAccount.js +21 -2
  7. package/lib/Iam/ServiceAccount.js.map +1 -1
  8. package/lib/Iam/ServiceAccountKey.d.ts +72 -0
  9. package/lib/Iam/ServiceAccountKey.d.ts.map +1 -0
  10. package/lib/Iam/ServiceAccountKey.js +164 -0
  11. package/lib/Iam/ServiceAccountKey.js.map +1 -0
  12. package/lib/Iam/index.d.ts +2 -0
  13. package/lib/Iam/index.d.ts.map +1 -1
  14. package/lib/Iam/index.js +1 -0
  15. package/lib/Iam/index.js.map +1 -1
  16. package/lib/Kubernetes/Helm.d.ts +132 -0
  17. package/lib/Kubernetes/Helm.d.ts.map +1 -0
  18. package/lib/Kubernetes/Helm.js +314 -0
  19. package/lib/Kubernetes/Helm.js.map +1 -0
  20. package/lib/Kubernetes/index.d.ts +1 -0
  21. package/lib/Kubernetes/index.d.ts.map +1 -1
  22. package/lib/Kubernetes/index.js +1 -0
  23. package/lib/Kubernetes/index.js.map +1 -1
  24. package/lib/Providers.d.ts +1 -1
  25. package/lib/Providers.d.ts.map +1 -1
  26. package/lib/Providers.js +7 -1
  27. package/lib/Providers.js.map +1 -1
  28. package/lib/Storage/Bucket.d.ts +117 -0
  29. package/lib/Storage/Bucket.d.ts.map +1 -0
  30. package/lib/Storage/Bucket.js +239 -0
  31. package/lib/Storage/Bucket.js.map +1 -0
  32. package/lib/Storage/BucketIamMember.d.ts +29 -0
  33. package/lib/Storage/BucketIamMember.d.ts.map +1 -0
  34. package/lib/Storage/BucketIamMember.js +26 -0
  35. package/lib/Storage/BucketIamMember.js.map +1 -0
  36. package/lib/Storage/index.d.ts +4 -0
  37. package/lib/Storage/index.d.ts.map +1 -0
  38. package/lib/Storage/index.js +3 -0
  39. package/lib/Storage/index.js.map +1 -0
  40. package/lib/index.d.ts +1 -0
  41. package/lib/index.d.ts.map +1 -1
  42. package/lib/index.js +1 -0
  43. package/lib/index.js.map +1 -1
  44. package/package.json +2 -2
  45. package/src/Container/NodePool.ts +12 -0
  46. package/src/Iam/ServiceAccount.ts +21 -2
  47. package/src/Iam/ServiceAccountKey.ts +284 -0
  48. package/src/Iam/index.ts +5 -0
  49. package/src/Kubernetes/Helm.ts +536 -0
  50. package/src/Kubernetes/index.ts +1 -0
  51. package/src/Providers.ts +18 -0
  52. package/src/Storage/Bucket.ts +439 -0
  53. package/src/Storage/BucketIamMember.ts +33 -0
  54. package/src/Storage/index.ts +10 -0
  55. package/src/index.ts +1 -0
@@ -0,0 +1,132 @@
1
+ import { Credentials } from "@distilled.cloud/gcp";
2
+ import { Resource } from "alchemy";
3
+ import * as Provider from "alchemy/Provider";
4
+ import * as FileSystem from "effect/FileSystem";
5
+ import * as Path from "effect/Path";
6
+ import type * as GCP from "../Providers.ts";
7
+ /**
8
+ * Install or upgrade a **Helm release** in a GKE cluster.
9
+ *
10
+ * Shells out to the `helm` CLI (v3.8+, required for OCI chart support) with a
11
+ * temporary kubeconfig minted from the GKE cluster's endpoint + CA + an ADC
12
+ * bearer token. The release is branded with alchemy-internal labels
13
+ * (`alchemy_app` / `alchemy_stage` / `alchemy_id`) via `--labels`, so adoption
14
+ * gating works the same as labelled GCP resources and K8s manifests — a
15
+ * release created out of band reads back as {@link Unowned} until adopted.
16
+ *
17
+ * **Reconcile** runs `helm upgrade --install` (idempotent for both first
18
+ * install and subsequent upgrades). **Delete** runs `helm uninstall`. **Read**
19
+ * runs `helm status -o json` and checks the release's labels for ownership.
20
+ *
21
+ * Both OCI charts (`oci://…`) and repository charts (`repo/chart` with an
22
+ * optional `repoUrl`) are supported. Inline `values` are serialized to a
23
+ * temporary JSON file and passed via `--values`.
24
+ *
25
+ * @section Installing a chart
26
+ * @example OCI chart with inline values
27
+ * ```typescript
28
+ * yield* GCP.HelmRelease("ArchilCsi", {
29
+ * endpoint: cluster.endpoint,
30
+ * caCertificate: cluster.clusterCaCertificate,
31
+ * name: "archil-csi-driver",
32
+ * namespace: "archil-system",
33
+ * chart: "oci://registry-1.docker.io/archildata/csi-driver-chart",
34
+ * createNamespace: true,
35
+ * values: {
36
+ * tolerations: [
37
+ * { key: "nvidia.com/gpu", operator: "Equal", value: "present", effect: "NoSchedule" },
38
+ * ],
39
+ * },
40
+ * });
41
+ * ```
42
+ */
43
+ export type HelmReleaseProps = {
44
+ /**
45
+ * GKE control-plane endpoint (IP or hostname, no scheme) — typically
46
+ * `cluster.endpoint`. A change points at a different cluster → replace.
47
+ */
48
+ endpoint: string;
49
+ /**
50
+ * Base64-encoded cluster CA certificate (PEM) — typically
51
+ * `cluster.clusterCaCertificate`. Mutable (can rotate on the same cluster).
52
+ */
53
+ caCertificate: string;
54
+ /** Release name (helm `--name`). Immutable — replace if changed. */
55
+ name: string;
56
+ /** Target namespace. Immutable — replace if changed. */
57
+ namespace: string;
58
+ /**
59
+ * Chart reference as you'd pass to `helm install`: an OCI URL
60
+ * (`oci://registry…/chart`), a `repo/chart` pair, or a local path.
61
+ * Immutable — replace if changed.
62
+ */
63
+ chart: string;
64
+ /**
65
+ * Chart version to pin. Mutable (upgrading the chart version is an
66
+ * in-place `helm upgrade`).
67
+ */
68
+ version?: string;
69
+ /**
70
+ * Inline Helm values (serialized to a temp JSON file and passed via
71
+ * `--values`). Mutable.
72
+ */
73
+ values?: Record<string, unknown>;
74
+ /**
75
+ * Create the namespace if it doesn't exist (`--create-namespace`).
76
+ * @default false
77
+ */
78
+ createNamespace?: boolean;
79
+ /**
80
+ * Helm repository URL to add before install (`helm repo add`). Only used
81
+ * when `chart` is a `repo/chart` reference (not OCI). The repo name is
82
+ * derived from the first segment of `chart`.
83
+ */
84
+ repoUrl?: string;
85
+ /**
86
+ * Wait for all Kubernetes resources to be ready before returning
87
+ * (`--wait --atomic`). Rolls back on failure.
88
+ * @default false
89
+ */
90
+ wait?: boolean;
91
+ /**
92
+ * Timeout for `--wait` (Helm duration format, e.g. `"5m"`, `"300s"`).
93
+ * @default "5m"
94
+ */
95
+ timeout?: string;
96
+ /** Extra labels (alchemy ownership labels merge on top). Mutable. */
97
+ labels?: Record<string, string>;
98
+ };
99
+ export type HelmReleaseAttributes = {
100
+ /** Release name. */
101
+ name: string;
102
+ /** Namespace. */
103
+ namespace: string;
104
+ /** Chart reference (as declared). */
105
+ chart: string;
106
+ /** Resolved chart version (from `helm status`). */
107
+ version: string | undefined;
108
+ /** Release status (`"deployed"`, `"failed"`, `"pending-rollout"`, …). */
109
+ status: string | undefined;
110
+ /** Release revision number (increments on each upgrade). */
111
+ revision: number | undefined;
112
+ /** Control-plane endpoint, threaded through for delete/read. */
113
+ endpoint: string;
114
+ /** Cluster CA certificate, threaded through for delete/read. */
115
+ caCertificate: string;
116
+ };
117
+ export type HelmRelease = Resource<"GCP.HelmRelease", HelmReleaseProps, HelmReleaseAttributes, never, GCP.Providers>;
118
+ export declare const HelmRelease: import("alchemy").ResourceClass<HelmRelease>;
119
+ declare const HelmError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
120
+ readonly _tag: "HelmError";
121
+ } & Readonly<A>;
122
+ /** Error from a `helm` CLI invocation. */
123
+ export declare class HelmError extends HelmError_base<{
124
+ command: string;
125
+ exitCode: number;
126
+ stderr: string;
127
+ stdout: string;
128
+ }> {
129
+ }
130
+ export declare const HelmReleaseProvider: () => import("effect/Layer").Layer<Provider.Provider<HelmRelease>, never, import("alchemy").Stack | import("alchemy").Stage | Credentials | FileSystem.FileSystem | Path.Path | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>;
131
+ export {};
132
+ //# sourceMappingURL=Helm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Helm.d.ts","sourceRoot":"","sources":["../../src/Kubernetes/Helm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAIpC,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAG5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,yEAAyE;IACzE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,QAAQ,CAChC,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,KAAK,EACL,GAAG,CAAC,SAAS,CACd,CAAC;AACF,eAAO,MAAM,WAAW,8CAEvB,CAAC;;;;AAEF,0CAA0C;AAC1C,qBAAa,SAAU,SAAQ,eAA8B;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;CAAG;AAsDL,eAAO,MAAM,mBAAmB,4PAiV7B,CAAC"}
@@ -0,0 +1,314 @@
1
+ import { Credentials } from "@distilled.cloud/gcp";
2
+ import { Resource } from "alchemy";
3
+ import { Unowned } from "alchemy/AdoptPolicy";
4
+ import { isResolved, somePropsAreDifferent } from "alchemy/Diff";
5
+ import * as Provider from "alchemy/Provider";
6
+ import * as Data from "effect/Data";
7
+ import * as Effect from "effect/Effect";
8
+ import * as FileSystem from "effect/FileSystem";
9
+ import * as Path from "effect/Path";
10
+ import * as Redacted from "effect/Redacted";
11
+ import * as Stream from "effect/Stream";
12
+ import { ChildProcess } from "effect/unstable/process";
13
+ import { gcpInternalLabels, hasAlchemyLabels } from "../Tags.js";
14
+ export const HelmRelease = Resource("GCP.HelmRelease");
15
+ /** Error from a `helm` CLI invocation. */
16
+ export class HelmError extends Data.TaggedError("HelmError") {
17
+ }
18
+ const toAttributes = (status, parent) => ({
19
+ name: status?.name ?? parent.name,
20
+ namespace: status?.namespace ?? parent.namespace,
21
+ chart: parent.chart,
22
+ version: status?.chart?.metadata?.version,
23
+ status: status?.info?.status,
24
+ revision: status?.revision,
25
+ endpoint: parent.endpoint,
26
+ caCertificate: parent.caCertificate,
27
+ });
28
+ /** Mint a fresh GKE connection (bearer token) from props + ADC credentials. */
29
+ const connect = Effect.fn("helm.connect")(function* (props) {
30
+ const { accessToken } = yield* yield* Credentials;
31
+ return {
32
+ endpoint: props.endpoint,
33
+ caCertificate: props.caCertificate,
34
+ token: Redacted.value(accessToken),
35
+ };
36
+ });
37
+ export const HelmReleaseProvider = () => Provider.effect(HelmRelease, Effect.gen(function* () {
38
+ const fs = yield* FileSystem.FileSystem;
39
+ const path = yield* Path.Path;
40
+ /**
41
+ * Write a temp kubeconfig (and optional values file) to a temp dir,
42
+ * returning the paths. The temp dir is tied to a Scope via
43
+ * `acquireRelease` — if any step after `makeTempDirectory` fails, the
44
+ * dir (which contains the sensitive kubeconfig with an ADC bearer
45
+ * token) is removed immediately. Callers wrap their body in
46
+ * `Effect.scoped` so the dir also cleans up on success/interruption.
47
+ */
48
+ const prepare = (props) => Effect.acquireRelease(Effect.gen(function* () {
49
+ const connection = yield* connect(props);
50
+ const dir = yield* fs.makeTempDirectory({
51
+ prefix: "helm-alchemy-",
52
+ });
53
+ const kubeconfigPath = path.join(dir, "kubeconfig.json");
54
+ const valuesPath = props.values
55
+ ? path.join(dir, "values.json")
56
+ : undefined;
57
+ // Kubeconfig with the cluster's CA + the ADC bearer token. The CA
58
+ // is already base64-encoded (as GKE returns it), so it goes
59
+ // straight into `certificate-authority-data`.
60
+ const kubeconfig = JSON.stringify({
61
+ apiVersion: "v1",
62
+ kind: "Config",
63
+ clusters: [
64
+ {
65
+ name: "gke",
66
+ cluster: {
67
+ "certificate-authority-data": props.caCertificate,
68
+ server: `https://${props.endpoint}`,
69
+ },
70
+ },
71
+ ],
72
+ contexts: [
73
+ {
74
+ name: "gke",
75
+ context: { cluster: "gke", user: "gke-user" },
76
+ },
77
+ ],
78
+ "current-context": "gke",
79
+ users: [
80
+ {
81
+ name: "gke-user",
82
+ user: { token: connection.token },
83
+ },
84
+ ],
85
+ });
86
+ yield* fs.writeFileString(kubeconfigPath, kubeconfig);
87
+ if (valuesPath && props.values) {
88
+ // JSON is valid YAML — helm accepts it for --values.
89
+ yield* fs.writeFileString(valuesPath, JSON.stringify(props.values));
90
+ }
91
+ return { dir, kubeconfigPath, valuesPath, connection };
92
+ }),
93
+ // Release: always remove the temp dir, even on success.
94
+ ({ dir }) => fs.remove(dir, { recursive: true }).pipe(Effect.ignore));
95
+ /**
96
+ * Run a `helm` command with `KUBECONFIG` pointing at the temp file and
97
+ * `HELM_CONFIG_HOME`/`HELM_CACHE_HOME` isolated to the temp dir so
98
+ * `helm repo add`/`helm repo update` don't mutate the user's global
99
+ * Helm config. Returns stdout/stderr/exitCode. Scoped so the child
100
+ * process is cleaned up even on interruption.
101
+ */
102
+ const runHelm = Effect.fn("helm.run")(function* (args) {
103
+ const cmd = ChildProcess.make("helm", args.helmArgs, {
104
+ shell: false,
105
+ env: {
106
+ ...process.env,
107
+ KUBECONFIG: args.kubeconfigPath,
108
+ // Isolate helm config/cache to the temp dir so parallel
109
+ // reconciles or CI jobs don't race on the shared repository
110
+ // index (~/.config/helm/repositories.yaml).
111
+ HELM_CONFIG_HOME: args.dir,
112
+ HELM_CACHE_HOME: args.dir,
113
+ },
114
+ });
115
+ const handle = yield* cmd;
116
+ const [exitCode, stdout, stderr] = yield* Effect.all([
117
+ handle.exitCode,
118
+ Stream.mkString(Stream.decodeText(handle.stdout)),
119
+ Stream.mkString(Stream.decodeText(handle.stderr)),
120
+ ], { concurrency: 3 });
121
+ return { exitCode, stdout, stderr };
122
+ });
123
+ /** Run a helm command, mapping a non-zero exit to a HelmError. */
124
+ const runHelmOrFail = Effect.fn("helm.runOrFail")(function* (args) {
125
+ const result = yield* runHelm(args);
126
+ if (result.exitCode !== 0) {
127
+ return yield* Effect.fail(new HelmError({
128
+ command: `helm ${args.helmArgs.join(" ")}`,
129
+ exitCode: result.exitCode,
130
+ stderr: result.stderr,
131
+ stdout: result.stdout,
132
+ }));
133
+ }
134
+ return result;
135
+ });
136
+ return {
137
+ // Identity (name/namespace/chart) and endpoint are unchanged by an
138
+ // in-place upgrade. revision increments on every upgrade — it is NOT
139
+ // stable (an update must persist the new revision).
140
+ stables: ["name", "namespace", "chart", "endpoint"],
141
+ diff: Effect.fn(function* ({ news, olds = {} }) {
142
+ if (!isResolved(news))
143
+ return undefined;
144
+ const o = olds;
145
+ // endpoint points at a specific cluster, and name/namespace/chart
146
+ // are the release's identity — any change orphans the old release.
147
+ if (somePropsAreDifferent(o, news, [
148
+ "name",
149
+ "namespace",
150
+ "chart",
151
+ "endpoint",
152
+ ])) {
153
+ return { action: "replace" };
154
+ }
155
+ return undefined;
156
+ }),
157
+ reconcile: Effect.fn(function* ({ id, news, session }) {
158
+ return yield* Effect.scoped(Effect.gen(function* () {
159
+ const { dir, kubeconfigPath, valuesPath } = yield* prepare(news);
160
+ // Add helm repo if needed (non-OCI charts with repoUrl).
161
+ if (news.repoUrl && !news.chart.startsWith("oci://")) {
162
+ const repoName = news.chart.split("/")[0];
163
+ yield* session.note(`Adding helm repo: ${repoName}`);
164
+ yield* runHelmOrFail({
165
+ dir,
166
+ kubeconfigPath,
167
+ helmArgs: [
168
+ "repo",
169
+ "add",
170
+ repoName,
171
+ news.repoUrl,
172
+ "--force-update",
173
+ ],
174
+ });
175
+ yield* runHelmOrFail({
176
+ dir,
177
+ kubeconfigPath,
178
+ helmArgs: ["repo", "update"],
179
+ });
180
+ }
181
+ // Build alchemy ownership labels.
182
+ const labels = {
183
+ ...(news.labels ?? {}),
184
+ ...(yield* gcpInternalLabels(id)),
185
+ };
186
+ const labelsFlag = Object.entries(labels)
187
+ .map(([k, v]) => `${k}=${v}`)
188
+ .join(",");
189
+ // helm upgrade --install is idempotent for both first install
190
+ // and subsequent upgrades. --reset-values makes the declared
191
+ // `values` authoritative: if a key is removed from `values`,
192
+ // the next upgrade reverts it to the chart default rather than
193
+ // silently retaining the prior release's value.
194
+ const helmArgs = [
195
+ "upgrade",
196
+ "--install",
197
+ "--reset-values",
198
+ news.name,
199
+ news.chart,
200
+ "--namespace",
201
+ news.namespace,
202
+ ...(news.createNamespace ? ["--create-namespace"] : []),
203
+ ...(news.version ? ["--version", news.version] : []),
204
+ ...(valuesPath ? ["--values", valuesPath] : []),
205
+ ...(labelsFlag ? ["--labels", labelsFlag] : []),
206
+ ...(news.wait
207
+ ? ["--wait", "--atomic", "--timeout", news.timeout ?? "5m"]
208
+ : []),
209
+ ];
210
+ yield* session.note(`Running helm upgrade --install ${news.name} ${news.chart}`);
211
+ yield* runHelmOrFail({ dir, kubeconfigPath, helmArgs });
212
+ // Read the release status to return fresh attributes.
213
+ const statusResult = yield* runHelmOrFail({
214
+ dir,
215
+ kubeconfigPath,
216
+ helmArgs: [
217
+ "status",
218
+ news.name,
219
+ "--namespace",
220
+ news.namespace,
221
+ "-o",
222
+ "json",
223
+ ],
224
+ });
225
+ const status = JSON.parse(statusResult.stdout);
226
+ return toAttributes(status, {
227
+ name: news.name,
228
+ namespace: news.namespace,
229
+ chart: news.chart,
230
+ endpoint: news.endpoint,
231
+ caCertificate: news.caCertificate,
232
+ });
233
+ }));
234
+ }),
235
+ delete: Effect.fn(function* ({ output }) {
236
+ yield* Effect.scoped(Effect.gen(function* () {
237
+ const { dir, kubeconfigPath } = yield* prepare(output);
238
+ const result = yield* runHelm({
239
+ dir,
240
+ kubeconfigPath,
241
+ helmArgs: [
242
+ "uninstall",
243
+ output.name,
244
+ "--namespace",
245
+ output.namespace,
246
+ ],
247
+ });
248
+ // "release: not found" is success (idempotent teardown).
249
+ if (result.exitCode !== 0 &&
250
+ !/not found/i.test(result.stderr)) {
251
+ return yield* Effect.fail(new HelmError({
252
+ command: `helm uninstall ${output.name}`,
253
+ exitCode: result.exitCode,
254
+ stderr: result.stderr,
255
+ stdout: result.stdout,
256
+ }));
257
+ }
258
+ }));
259
+ }),
260
+ read: Effect.fn(function* ({ id, output, olds }) {
261
+ const endpoint = output?.endpoint ?? olds?.endpoint;
262
+ const caCertificate = output?.caCertificate ?? olds?.caCertificate;
263
+ const name = output?.name ?? olds?.name;
264
+ const namespace = output?.namespace ?? olds?.namespace;
265
+ const chart = output?.chart ?? olds?.chart;
266
+ if (!endpoint || !caCertificate || !name || !namespace || !chart) {
267
+ return undefined;
268
+ }
269
+ return yield* Effect.scoped(Effect.gen(function* () {
270
+ const { dir, kubeconfigPath } = yield* prepare({
271
+ endpoint,
272
+ caCertificate,
273
+ });
274
+ const result = yield* runHelm({
275
+ dir,
276
+ kubeconfigPath,
277
+ helmArgs: [
278
+ "status",
279
+ name,
280
+ "--namespace",
281
+ namespace,
282
+ "-o",
283
+ "json",
284
+ ],
285
+ });
286
+ // Release not found → absent.
287
+ if (result.exitCode !== 0 &&
288
+ /not found/i.test(result.stderr)) {
289
+ return undefined;
290
+ }
291
+ if (result.exitCode !== 0) {
292
+ return yield* Effect.fail(new HelmError({
293
+ command: `helm status ${name}`,
294
+ exitCode: result.exitCode,
295
+ stderr: result.stderr,
296
+ stdout: result.stdout,
297
+ }));
298
+ }
299
+ const status = JSON.parse(result.stdout);
300
+ const attrs = toAttributes(status, {
301
+ name,
302
+ namespace,
303
+ chart,
304
+ endpoint,
305
+ caCertificate,
306
+ });
307
+ return (yield* hasAlchemyLabels(id, status.labels))
308
+ ? attrs
309
+ : Unowned(attrs);
310
+ }));
311
+ }),
312
+ };
313
+ }));
314
+ //# sourceMappingURL=Helm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Helm.js","sourceRoot":"","sources":["../../src/Kubernetes/Helm.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ export * from "./Helm.ts";
1
2
  export * from "./KubernetesManifest.ts";
2
3
  export * from "./Secret.ts";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Kubernetes/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Kubernetes/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC"}
@@ -1,3 +1,4 @@
1
+ export * from "./Helm.js";
1
2
  export * from "./KubernetesManifest.js";
2
3
  export * from "./Secret.js";
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Kubernetes/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Kubernetes/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC"}
@@ -19,6 +19,6 @@ export type ProviderRequirements = Layer.Services<ReturnType<typeof providers>>;
19
19
  * re-provide it here, mirroring `AWS/Providers.ts` and
20
20
  * `Cloudflare/Providers.ts`.
21
21
  */
22
- export declare const providers: () => Layer.Layer<import("@distilled.cloud/gcp").Credentials | Providers, never, import("alchemy").Stack | import("alchemy").Stage | import("effect/unstable/http/HttpClient").HttpClient | import("alchemy").AuthProviders | import("alchemy/Auth/Profile").AlchemyProfile>;
22
+ export declare const providers: () => Layer.Layer<import("@distilled.cloud/gcp").Credentials | Providers, never, import("alchemy").Stack | import("alchemy").Stage | import("effect/unstable/http/HttpClient").HttpClient | import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner | import("alchemy").AuthProviders | import("alchemy/Auth/Profile").AlchemyProfile>;
23
23
  export {};
24
24
  //# sourceMappingURL=Providers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Providers.d.ts","sourceRoot":"","sources":["../src/Providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;;AAmDtC,qBAAa,SAAU,SAAQ,cAA+C;CAAG;AAEjF,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC;AAEhF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,8QA+DnB,CAAC"}
1
+ {"version":3,"file":"Providers.d.ts","sourceRoot":"","sources":["../src/Providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;;AA+DtC,qBAAa,SAAU,SAAQ,cAA+C;CAAG;AAEjF,MAAM,MAAM,oBAAoB,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC,CAAC;AAEhF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,gaAqEnB,CAAC"}
package/lib/Providers.js CHANGED
@@ -15,12 +15,15 @@ import { Subnetwork, SubnetworkProvider } from "./Compute/Subnetwork.js";
15
15
  import { Cluster, ClusterProvider } from "./Container/Cluster.js";
16
16
  import { NodePool, NodePoolProvider } from "./Container/NodePool.js";
17
17
  import { ServiceAccount, ServiceAccountProvider, } from "./Iam/ServiceAccount.js";
18
+ import { ServiceAccountKey, ServiceAccountKeyProvider, } from "./Iam/ServiceAccountKey.js";
19
+ import { HelmRelease, HelmReleaseProvider, } from "./Kubernetes/Helm.js";
18
20
  import { KubernetesManifest, KubernetesManifestProvider, } from "./Kubernetes/KubernetesManifest.js";
19
21
  import { KubernetesSecret, KubernetesSecretProvider, } from "./Kubernetes/Secret.js";
20
22
  import { ManagedLustreInstance, ManagedLustreInstanceProvider, } from "./ManagedLustre/Instance.js";
21
23
  import { Job, JobProvider } from "./Run/Job.js";
22
24
  import { Service, ServiceProvider } from "./Run/Service.js";
23
25
  import { PsaConnection, PsaConnectionProvider, } from "./ServiceNetworking/PsaConnection.js";
26
+ import { StorageBucket, StorageBucketProvider, } from "./Storage/Bucket.js";
24
27
  import { ApiEnable, ApiEnableProvider } from "./ServiceUsage/ApiEnable.js";
25
28
  import { SqlDatabase, SqlDatabaseProvider } from "./Sqladmin/Database.js";
26
29
  import { SqlInstance, SqlInstanceProvider } from "./Sqladmin/Instance.js";
@@ -57,6 +60,7 @@ export const providers = () => Layer.effect(Providers, Provider.collection([
57
60
  SharedVpcServiceProject,
58
61
  PsaConnection,
59
62
  ManagedLustreInstance,
63
+ StorageBucket,
60
64
  Service,
61
65
  Job,
62
66
  SqlInstance,
@@ -64,9 +68,11 @@ export const providers = () => Layer.effect(Providers, Provider.collection([
64
68
  SqlUser,
65
69
  ArtifactRegistryRepository,
66
70
  ServiceAccount,
71
+ ServiceAccountKey,
67
72
  KubernetesSecret,
68
73
  KubernetesManifest,
69
- ])).pipe(Layer.provide(Layer.mergeAll(ProjectProvider(), ClusterProvider(), NodePoolProvider(), ApiEnableProvider(), NetworkProvider(), SubnetworkProvider(), FirewallProvider(), AddressProvider(), ForwardingRuleProvider(), GlobalAddressProvider(), SharedVpcHostProvider(), SharedVpcServiceProjectProvider(), PsaConnectionProvider(), ManagedLustreInstanceProvider(), ServiceProvider(), JobProvider(), SqlInstanceProvider(), SqlDatabaseProvider(), SqlUserProvider(), ArtifactRegistryRepositoryProvider(), ServiceAccountProvider(), KubernetesSecretProvider(), KubernetesManifestProvider())), Layer.provideMerge(fromAuthProvider()), Layer.provideMerge(GCPAuth),
74
+ HelmRelease,
75
+ ])).pipe(Layer.provide(Layer.mergeAll(ProjectProvider(), ClusterProvider(), NodePoolProvider(), ApiEnableProvider(), NetworkProvider(), SubnetworkProvider(), FirewallProvider(), AddressProvider(), ForwardingRuleProvider(), GlobalAddressProvider(), SharedVpcHostProvider(), SharedVpcServiceProjectProvider(), PsaConnectionProvider(), ManagedLustreInstanceProvider(), StorageBucketProvider(), ServiceProvider(), JobProvider(), SqlInstanceProvider(), SqlDatabaseProvider(), SqlUserProvider(), ArtifactRegistryRepositoryProvider(), ServiceAccountProvider(), ServiceAccountKeyProvider(), KubernetesSecretProvider(), KubernetesManifestProvider(), HelmReleaseProvider())), Layer.provideMerge(fromAuthProvider()), Layer.provideMerge(GCPAuth),
70
76
  // Auth/config failures (missing ADC, malformed profile) become
71
77
  // unrecoverable defects rather than typed errors — mirrors
72
78
  // `AWS/Providers.ts` and `Cloudflare/Providers.ts`. Resource lifecycle
@@ -1 +1 @@
1
- {"version":3,"file":"Providers.js","sourceRoot":"","sources":["../src/Providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Providers.js","sourceRoot":"","sources":["../src/Providers.ts"],"names":[],"mappings":"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"}