1import * as Alchemy from "alchemy";
2import { Stage } from "alchemy";
3import * as Kubernetes from "alchemy/Kubernetes";
4import * as Effect from "effect/Effect";
5import HealthCheck from "./src/HealthCheck.ts";
6import SmokeTest from "./src/SmokeTest.ts";
7import { Cluster, Web } from "./src/infra.ts";
8
9export default Alchemy.Stack(
10 "MyCluster",
11 {
12 providers: Kubernetes.providers(),
13 state: Alchemy.localState(),
14 },
15 Effect.gen(function* () {
16 const cluster = yield* Cluster;
17 const web = yield* Web;
18 const smokeTest = yield* SmokeTest;
19 yield* HealthCheck;
20
21 const stage = yield* Stage;
22 if (stage !== "prod") {
23 yield* Kubernetes.HelmChart("MetricsServer", {
24 cluster,
25 chart: "metrics-server",
26 repo: "https://kubernetes-sigs.github.io/metrics-server/",
27 version: "3.14.0",
28 releaseName: "metrics-server",
29 namespace: "kube-system",
30 values: {
31 args: ["--kubelet-insecure-tls"],
32 },
33 });
34 }
35
36 return {
37 namespace: web.namespace,
38 service: web.serviceName,
39 smokeTest: smokeTest.jobName,
40 };
41 }),
42);