@kinwan/infrascript 0.1.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 (72) hide show
  1. package/README.md +291 -0
  2. package/dist/actions/Job.d.ts +36 -0
  3. package/dist/actions/Job.d.ts.map +1 -0
  4. package/dist/actions/Job.js +93 -0
  5. package/dist/actions/Job.js.map +1 -0
  6. package/dist/actions/Step.d.ts +25 -0
  7. package/dist/actions/Step.d.ts.map +1 -0
  8. package/dist/actions/Step.js +72 -0
  9. package/dist/actions/Step.js.map +1 -0
  10. package/dist/actions/Workflow.d.ts +27 -0
  11. package/dist/actions/Workflow.d.ts.map +1 -0
  12. package/dist/actions/Workflow.js +77 -0
  13. package/dist/actions/Workflow.js.map +1 -0
  14. package/dist/actions/types.d.ts +34 -0
  15. package/dist/actions/types.d.ts.map +1 -0
  16. package/dist/actions/types.js +3 -0
  17. package/dist/actions/types.js.map +1 -0
  18. package/dist/cli/index.d.ts +3 -0
  19. package/dist/cli/index.d.ts.map +1 -0
  20. package/dist/cli/index.js +160 -0
  21. package/dist/cli/index.js.map +1 -0
  22. package/dist/config.d.ts +40 -0
  23. package/dist/config.d.ts.map +1 -0
  24. package/dist/config.js +29 -0
  25. package/dist/config.js.map +1 -0
  26. package/dist/core/Builder.d.ts +12 -0
  27. package/dist/core/Builder.d.ts.map +1 -0
  28. package/dist/core/Builder.js +11 -0
  29. package/dist/core/Builder.js.map +1 -0
  30. package/dist/core/FileWriter.d.ts +10 -0
  31. package/dist/core/FileWriter.d.ts.map +1 -0
  32. package/dist/core/FileWriter.js +79 -0
  33. package/dist/core/FileWriter.js.map +1 -0
  34. package/dist/core/YamlSerializer.d.ts +2 -0
  35. package/dist/core/YamlSerializer.d.ts.map +1 -0
  36. package/dist/core/YamlSerializer.js +46 -0
  37. package/dist/core/YamlSerializer.js.map +1 -0
  38. package/dist/index.d.ts +16 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +32 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/k8s/Deployment.d.ts +41 -0
  43. package/dist/k8s/Deployment.d.ts.map +1 -0
  44. package/dist/k8s/Deployment.js +135 -0
  45. package/dist/k8s/Deployment.js.map +1 -0
  46. package/dist/k8s/EKSCluster.d.ts +77 -0
  47. package/dist/k8s/EKSCluster.d.ts.map +1 -0
  48. package/dist/k8s/EKSCluster.js +80 -0
  49. package/dist/k8s/EKSCluster.js.map +1 -0
  50. package/dist/k8s/K8sApp.d.ts +71 -0
  51. package/dist/k8s/K8sApp.d.ts.map +1 -0
  52. package/dist/k8s/K8sApp.js +175 -0
  53. package/dist/k8s/K8sApp.js.map +1 -0
  54. package/dist/k8s/Manifests.d.ts +80 -0
  55. package/dist/k8s/Manifests.d.ts.map +1 -0
  56. package/dist/k8s/Manifests.js +204 -0
  57. package/dist/k8s/Manifests.js.map +1 -0
  58. package/dist/k8s/types.d.ts +63 -0
  59. package/dist/k8s/types.d.ts.map +1 -0
  60. package/dist/k8s/types.js +13 -0
  61. package/dist/k8s/types.js.map +1 -0
  62. package/infrascript.config.ts +69 -0
  63. package/infrascript.eks.config.ts +121 -0
  64. package/k8s/api-config-configmap.yaml +7 -0
  65. package/k8s/api-deployment.yaml +54 -0
  66. package/k8s/api-ingress.yaml +21 -0
  67. package/k8s/api-pvc-pvc.yaml +10 -0
  68. package/k8s/api-secret-secret.yaml +8 -0
  69. package/k8s/api-service.yaml +12 -0
  70. package/k8s/worker-deployment.yaml +24 -0
  71. package/k8s/worker-service.yaml +12 -0
  72. package/package.json +34 -0
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Deployment = void 0;
4
+ const Builder_1 = require("../core/Builder");
5
+ class Deployment extends Builder_1.Builder {
6
+ constructor(name, image) {
7
+ super();
8
+ this.kind = "Deployment";
9
+ this._replicas = 1;
10
+ this._ports = [];
11
+ this._env = [];
12
+ this._volumeMounts = [];
13
+ this._volumes = [];
14
+ this._labels = {};
15
+ this._annotations = {};
16
+ this._initContainers = [];
17
+ this._name = name;
18
+ this._image = image;
19
+ }
20
+ namespace(ns) {
21
+ this._namespace = ns;
22
+ return this;
23
+ }
24
+ replicas(count) {
25
+ this._replicas = count;
26
+ return this;
27
+ }
28
+ imagePullPolicy(policy) {
29
+ this._imagePullPolicy = policy;
30
+ return this;
31
+ }
32
+ port(...ports) {
33
+ this._ports.push(...ports);
34
+ return this;
35
+ }
36
+ /** Set plain string env vars */
37
+ env(vars) {
38
+ for (const [name, value] of Object.entries(vars)) {
39
+ this._env.push({ name, value });
40
+ }
41
+ return this;
42
+ }
43
+ /** Set an env var sourced from a secret or configmap ref */
44
+ envFrom(name, valueFrom) {
45
+ this._env.push({ name, valueFrom });
46
+ return this;
47
+ }
48
+ resources(req) {
49
+ this._resources = req;
50
+ return this;
51
+ }
52
+ volumeMount(mount) {
53
+ this._volumeMounts.push(mount);
54
+ return this;
55
+ }
56
+ volume(vol) {
57
+ this._volumes.push(vol);
58
+ return this;
59
+ }
60
+ labels(l) {
61
+ this._labels = { ...this._labels, ...l };
62
+ return this;
63
+ }
64
+ annotations(a) {
65
+ this._annotations = { ...this._annotations, ...a };
66
+ return this;
67
+ }
68
+ serviceAccount(name) {
69
+ this._serviceAccountName = name;
70
+ return this;
71
+ }
72
+ livenessProbe(probe) {
73
+ this._livenessProbe = probe;
74
+ return this;
75
+ }
76
+ readinessProbe(probe) {
77
+ this._readinessProbe = probe;
78
+ return this;
79
+ }
80
+ outputPath() {
81
+ const ns = this._namespace ? `${this._namespace}/` : "";
82
+ return `k8s/${ns}${this._name}-deployment.yaml`;
83
+ }
84
+ toObject() {
85
+ const matchLabels = { app: this._name, ...this._labels };
86
+ const container = {
87
+ name: this._name,
88
+ image: this._image,
89
+ };
90
+ if (this._imagePullPolicy)
91
+ container["imagePullPolicy"] = this._imagePullPolicy;
92
+ if (this._ports.length > 0) {
93
+ container["ports"] = this._ports.map((p) => ({ containerPort: p }));
94
+ }
95
+ if (this._env.length > 0)
96
+ container["env"] = this._env;
97
+ if (this._resources)
98
+ container["resources"] = this._resources;
99
+ if (this._volumeMounts.length > 0)
100
+ container["volumeMounts"] = this._volumeMounts;
101
+ if (this._livenessProbe)
102
+ container["livenessProbe"] = this._livenessProbe;
103
+ if (this._readinessProbe)
104
+ container["readinessProbe"] = this._readinessProbe;
105
+ const spec = {
106
+ containers: [container],
107
+ };
108
+ if (this._serviceAccountName)
109
+ spec["serviceAccountName"] = this._serviceAccountName;
110
+ if (this._initContainers.length > 0)
111
+ spec["initContainers"] = this._initContainers;
112
+ if (this._volumes.length > 0)
113
+ spec["volumes"] = this._volumes;
114
+ const metadata = { name: this._name };
115
+ if (this._namespace)
116
+ metadata["namespace"] = this._namespace;
117
+ if (Object.keys(this._annotations).length > 0)
118
+ metadata["annotations"] = this._annotations;
119
+ return {
120
+ apiVersion: "apps/v1",
121
+ kind: "Deployment",
122
+ metadata,
123
+ spec: {
124
+ replicas: this._replicas,
125
+ selector: { matchLabels },
126
+ template: {
127
+ metadata: { labels: matchLabels },
128
+ spec,
129
+ },
130
+ },
131
+ };
132
+ }
133
+ }
134
+ exports.Deployment = Deployment;
135
+ //# sourceMappingURL=Deployment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Deployment.js","sourceRoot":"","sources":["../../src/k8s/Deployment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { K8sAnnotations } from "./types";
2
+ export interface EKSClusterOptions {
3
+ /** AWS region e.g. "ap-northeast-1" */
4
+ region: string;
5
+ /** AWS account ID e.g. "123456789012" */
6
+ accountId: string;
7
+ /**
8
+ * ACM certificate ARN for TLS termination at the ALB.
9
+ * Required if any K8sApp uses .ingress({ tls: true }).
10
+ */
11
+ certArn?: string;
12
+ /**
13
+ * ALB scheme. Defaults to "internet-facing".
14
+ * Use "internal" for VPC-only access.
15
+ */
16
+ scheme?: "internet-facing" | "internal";
17
+ /**
18
+ * ALB target type. Defaults to "ip" (recommended for EKS with VPC CNI).
19
+ */
20
+ targetType?: "ip" | "instance";
21
+ /**
22
+ * EKS cluster name — used for IRSA role ARN construction.
23
+ */
24
+ clusterName?: string;
25
+ /**
26
+ * ECR registry hostname override.
27
+ * Defaults to "<accountId>.dkr.ecr.<region>.amazonaws.com"
28
+ */
29
+ ecrRegistry?: string;
30
+ }
31
+ /**
32
+ * EKSCluster is a context/preset provider — not a YAML builder itself.
33
+ * Pass it to defineConfig and it automatically injects AWS-specific
34
+ * annotations into all Ingress and related manifests.
35
+ */
36
+ export declare class EKSCluster {
37
+ readonly region: string;
38
+ readonly accountId: string;
39
+ readonly certArn?: string;
40
+ readonly scheme: "internet-facing" | "internal";
41
+ readonly targetType: "ip" | "instance";
42
+ readonly clusterName?: string;
43
+ private readonly _ecrRegistry;
44
+ constructor(options: EKSClusterOptions);
45
+ /**
46
+ * Build a full ECR image URI.
47
+ * @example cluster.ecr("api:latest")
48
+ * → "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/api:latest"
49
+ */
50
+ ecr(imageAndTag: string): string;
51
+ /**
52
+ * Build an IRSA role ARN for a service account.
53
+ * @example cluster.irsaRoleArn("api-sa")
54
+ * → "arn:aws:iam::123456789012:role/api-sa"
55
+ */
56
+ irsaRoleArn(roleName: string): string;
57
+ /**
58
+ * Returns the base ALB ingress annotations that apply to every ingress.
59
+ * TLS-specific annotations are added separately when tls=true.
60
+ */
61
+ baseIngressAnnotations(): K8sAnnotations;
62
+ /**
63
+ * Returns TLS-specific ALB annotations.
64
+ * Requires certArn to be set on the cluster.
65
+ */
66
+ tlsIngressAnnotations(): K8sAnnotations;
67
+ /**
68
+ * Returns IRSA annotation for a service account, given a role ARN.
69
+ */
70
+ irsaAnnotation(roleArn: string): K8sAnnotations;
71
+ /**
72
+ * Recommended EBS storageClassName for EKS.
73
+ * Use "gp3" for new clusters (CSI driver), "gp2" for legacy.
74
+ */
75
+ storageClass(type?: "gp2" | "gp3"): string;
76
+ }
77
+ //# sourceMappingURL=EKSCluster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EKSCluster.d.ts","sourceRoot":"","sources":["../../src/k8s/EKSCluster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAAC;IACxC;;OAEG;IACH,UAAU,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC;IAC/B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,UAAU,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,IAAI,GAAG,UAAU,CAAC;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,OAAO,EAAE,iBAAiB;IAYtC;;;;OAIG;IACH,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIhC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIrC;;;OAGG;IACH,sBAAsB,IAAI,cAAc;IAQxC;;;OAGG;IACH,qBAAqB,IAAI,cAAc;IAcvC;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc;IAM/C;;;OAGG;IACH,YAAY,CAAC,IAAI,GAAE,KAAK,GAAG,KAAa,GAAG,MAAM;CAGlD"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EKSCluster = void 0;
4
+ /**
5
+ * EKSCluster is a context/preset provider — not a YAML builder itself.
6
+ * Pass it to defineConfig and it automatically injects AWS-specific
7
+ * annotations into all Ingress and related manifests.
8
+ */
9
+ class EKSCluster {
10
+ constructor(options) {
11
+ this.region = options.region;
12
+ this.accountId = options.accountId;
13
+ this.certArn = options.certArn;
14
+ this.scheme = options.scheme ?? "internet-facing";
15
+ this.targetType = options.targetType ?? "ip";
16
+ this.clusterName = options.clusterName;
17
+ this._ecrRegistry =
18
+ options.ecrRegistry ??
19
+ `${options.accountId}.dkr.ecr.${options.region}.amazonaws.com`;
20
+ }
21
+ /**
22
+ * Build a full ECR image URI.
23
+ * @example cluster.ecr("api:latest")
24
+ * → "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/api:latest"
25
+ */
26
+ ecr(imageAndTag) {
27
+ return `${this._ecrRegistry}/${imageAndTag}`;
28
+ }
29
+ /**
30
+ * Build an IRSA role ARN for a service account.
31
+ * @example cluster.irsaRoleArn("api-sa")
32
+ * → "arn:aws:iam::123456789012:role/api-sa"
33
+ */
34
+ irsaRoleArn(roleName) {
35
+ return `arn:aws:iam::${this.accountId}:role/${roleName}`;
36
+ }
37
+ /**
38
+ * Returns the base ALB ingress annotations that apply to every ingress.
39
+ * TLS-specific annotations are added separately when tls=true.
40
+ */
41
+ baseIngressAnnotations() {
42
+ return {
43
+ "kubernetes.io/ingress.class": "alb",
44
+ "alb.ingress.kubernetes.io/scheme": this.scheme,
45
+ "alb.ingress.kubernetes.io/target-type": this.targetType,
46
+ };
47
+ }
48
+ /**
49
+ * Returns TLS-specific ALB annotations.
50
+ * Requires certArn to be set on the cluster.
51
+ */
52
+ tlsIngressAnnotations() {
53
+ if (!this.certArn) {
54
+ throw new Error("EKSCluster: certArn is required when using TLS ingress. " +
55
+ "Set it via new EKSCluster({ certArn: 'arn:aws:acm:...' })");
56
+ }
57
+ return {
58
+ "alb.ingress.kubernetes.io/listen-ports": '[{"HTTP":80},{"HTTPS":443}]',
59
+ "alb.ingress.kubernetes.io/ssl-redirect": "443",
60
+ "alb.ingress.kubernetes.io/certificate-arn": this.certArn,
61
+ };
62
+ }
63
+ /**
64
+ * Returns IRSA annotation for a service account, given a role ARN.
65
+ */
66
+ irsaAnnotation(roleArn) {
67
+ return {
68
+ "eks.amazonaws.com/role-arn": roleArn,
69
+ };
70
+ }
71
+ /**
72
+ * Recommended EBS storageClassName for EKS.
73
+ * Use "gp3" for new clusters (CSI driver), "gp2" for legacy.
74
+ */
75
+ storageClass(type = "gp3") {
76
+ return type;
77
+ }
78
+ }
79
+ exports.EKSCluster = EKSCluster;
80
+ //# sourceMappingURL=EKSCluster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EKSCluster.js","sourceRoot":"","sources":["../../src/k8s/EKSCluster.ts"],"names":[],"mappings":";;;AAgCA;;;;GAIG;AACH,MAAa,UAAU;IASrB,YAAY,OAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,iBAAiB,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,YAAY;YACf,OAAO,CAAC,WAAW;gBACnB,GAAG,OAAO,CAAC,SAAS,YAAY,OAAO,CAAC,MAAM,gBAAgB,CAAC;IACnE,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,WAAmB;QACrB,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACH,WAAW,CAAC,QAAgB;QAC1B,OAAO,gBAAgB,IAAI,CAAC,SAAS,SAAS,QAAQ,EAAE,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACH,sBAAsB;QACpB,OAAO;YACL,6BAA6B,EAAE,KAAK;YACpC,kCAAkC,EAAE,IAAI,CAAC,MAAM;YAC/C,uCAAuC,EAAE,IAAI,CAAC,UAAU;SACzD,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,qBAAqB;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,0DAA0D;gBAC1D,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QACD,OAAO;YACL,wCAAwC,EAAE,6BAA6B;YACvE,wCAAwC,EAAE,KAAK;YAC/C,2CAA2C,EAAE,IAAI,CAAC,OAAO;SAC1D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,OAAe;QAC5B,OAAO;YACL,4BAA4B,EAAE,OAAO;SACtC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAsB,KAAK;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AArFD,gCAqFC"}
@@ -0,0 +1,71 @@
1
+ import { Deployment } from "./Deployment";
2
+ import { K8sService } from "./Manifests";
3
+ import { Ingress } from "./Manifests";
4
+ import { ConfigMap } from "./Manifests";
5
+ import { Secret } from "./Manifests";
6
+ import { PVC } from "./Manifests";
7
+ import type { EKSCluster } from "./EKSCluster";
8
+ import type { ResourceRequirements, ImagePullPolicy, IngressTlsOptions, K8sLabels, K8sAnnotations } from "./types";
9
+ /**
10
+ * High-level facade. Define your app once — K8sApp emits all required
11
+ * manifests: Deployment, Service, and optionally Ingress, ConfigMap,
12
+ * Secret, and PVC.
13
+ *
14
+ * Pass an EKSCluster to defineConfig to automatically inject
15
+ * AWS-specific annotations into all apps.
16
+ */
17
+ export declare class K8sApp {
18
+ private _name;
19
+ private _namespace?;
20
+ private _image?;
21
+ private _replicas;
22
+ private _port?;
23
+ private _imagePullPolicy?;
24
+ private _env;
25
+ private _envFrom;
26
+ private _secrets;
27
+ private _resources?;
28
+ private _ingressOptions?;
29
+ private _volumeSize?;
30
+ private _volumeMountPath?;
31
+ private _storageClassName?;
32
+ private _labels;
33
+ private _annotations;
34
+ private _irsaRoleArn?;
35
+ /** Injected by the build pipeline when an EKSCluster is present in config */
36
+ _cluster?: EKSCluster;
37
+ constructor(name: string);
38
+ namespace(ns: string): this;
39
+ /**
40
+ * Attach an IAM role ARN for IRSA (IAM Roles for Service Accounts).
41
+ * EKS only — adds the eks.amazonaws.com/role-arn annotation to the
42
+ * generated ServiceAccount and wires serviceAccountName in the Deployment.
43
+ * @param roleArn Full ARN or use cluster.irsaRoleArn("role-name") helper
44
+ */
45
+ irsaRole(roleArn: string): this;
46
+ image(img: string): this;
47
+ replicas(count: number): this;
48
+ port(p: number): this;
49
+ imagePullPolicy(policy: ImagePullPolicy): this;
50
+ /** Plain string env vars — goes into ConfigMap + referenced in Deployment */
51
+ env(vars: Record<string, string>): this;
52
+ /**
53
+ * Secret env vars.
54
+ * Values are placeholder strings — you supply the real values
55
+ * in the generated Secret yaml before applying.
56
+ * key = env var name, value = placeholder / description
57
+ */
58
+ secret(vars: Record<string, string>): this;
59
+ resources(req: ResourceRequirements): this;
60
+ ingress(options: IngressTlsOptions): this;
61
+ volume(options: {
62
+ mountPath: string;
63
+ size: string;
64
+ storageClassName?: string;
65
+ }): this;
66
+ labels(l: K8sLabels): this;
67
+ annotations(a: K8sAnnotations): this;
68
+ /** Compile into all constituent Builder instances */
69
+ toBuilders(): Array<Deployment | K8sService | Ingress | ConfigMap | Secret | PVC>;
70
+ }
71
+ //# sourceMappingURL=K8sApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"K8sApp.d.ts","sourceRoot":"","sources":["../../src/k8s/K8sApp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EAEjB,SAAS,EACT,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB;;;;;;;GAOG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAC3C,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,QAAQ,CAA2D;IAC3E,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,UAAU,CAAC,CAAuB;IAC1C,OAAO,CAAC,eAAe,CAAC,CAAoB;IAC5C,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAS;IAE9B,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,UAAU,CAAC;gBAEV,IAAI,EAAE,MAAM;IAIxB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAE3B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAE/B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAExB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAE7B,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAErB,eAAe,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAE9C,6EAA6E;IAC7E,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAKvC;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAK1C,SAAS,CAAC,GAAG,EAAE,oBAAoB,GAAG,IAAI;IAE1C,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAEzC,MAAM,CAAC,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAOrF,MAAM,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI;IAC1B,WAAW,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI;IAEpC,qDAAqD;IACrD,UAAU,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,GAAG,CAAC;CAwGlF"}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.K8sApp = void 0;
4
+ const Deployment_1 = require("./Deployment");
5
+ const Manifests_1 = require("./Manifests");
6
+ const Manifests_2 = require("./Manifests");
7
+ const Manifests_3 = require("./Manifests");
8
+ const Manifests_4 = require("./Manifests");
9
+ const Manifests_5 = require("./Manifests");
10
+ /**
11
+ * High-level facade. Define your app once — K8sApp emits all required
12
+ * manifests: Deployment, Service, and optionally Ingress, ConfigMap,
13
+ * Secret, and PVC.
14
+ *
15
+ * Pass an EKSCluster to defineConfig to automatically inject
16
+ * AWS-specific annotations into all apps.
17
+ */
18
+ class K8sApp {
19
+ constructor(name) {
20
+ this._replicas = 1;
21
+ this._env = {};
22
+ this._envFrom = [];
23
+ this._secrets = {};
24
+ this._labels = {};
25
+ this._annotations = {};
26
+ this._name = name;
27
+ }
28
+ namespace(ns) { this._namespace = ns; return this; }
29
+ /**
30
+ * Attach an IAM role ARN for IRSA (IAM Roles for Service Accounts).
31
+ * EKS only — adds the eks.amazonaws.com/role-arn annotation to the
32
+ * generated ServiceAccount and wires serviceAccountName in the Deployment.
33
+ * @param roleArn Full ARN or use cluster.irsaRoleArn("role-name") helper
34
+ */
35
+ irsaRole(roleArn) { this._irsaRoleArn = roleArn; return this; }
36
+ image(img) { this._image = img; return this; }
37
+ replicas(count) { this._replicas = count; return this; }
38
+ port(p) { this._port = p; return this; }
39
+ imagePullPolicy(policy) { this._imagePullPolicy = policy; return this; }
40
+ /** Plain string env vars — goes into ConfigMap + referenced in Deployment */
41
+ env(vars) {
42
+ this._env = { ...this._env, ...vars };
43
+ return this;
44
+ }
45
+ /**
46
+ * Secret env vars.
47
+ * Values are placeholder strings — you supply the real values
48
+ * in the generated Secret yaml before applying.
49
+ * key = env var name, value = placeholder / description
50
+ */
51
+ secret(vars) {
52
+ this._secrets = { ...this._secrets, ...vars };
53
+ return this;
54
+ }
55
+ resources(req) { this._resources = req; return this; }
56
+ ingress(options) { this._ingressOptions = options; return this; }
57
+ volume(options) {
58
+ this._volumeMountPath = options.mountPath;
59
+ this._volumeSize = options.size;
60
+ this._storageClassName = options.storageClassName;
61
+ return this;
62
+ }
63
+ labels(l) { this._labels = { ...this._labels, ...l }; return this; }
64
+ annotations(a) { this._annotations = { ...this._annotations, ...a }; return this; }
65
+ /** Compile into all constituent Builder instances */
66
+ toBuilders() {
67
+ if (!this._image)
68
+ throw new Error(`K8sApp "${this._name}" requires .image()`);
69
+ if (!this._port)
70
+ throw new Error(`K8sApp "${this._name}" requires .port()`);
71
+ const builders = [];
72
+ const cluster = this._cluster;
73
+ // ── ConfigMap (plain env vars) ──────────────────────────────────────────
74
+ const hasEnv = Object.keys(this._env).length > 0;
75
+ const configMapName = `${this._name}-config`;
76
+ if (hasEnv) {
77
+ const cm = new Manifests_3.ConfigMap(configMapName);
78
+ if (this._namespace)
79
+ cm.namespace(this._namespace);
80
+ cm.data(this._env);
81
+ builders.push(cm);
82
+ }
83
+ // ── Secret (secret env vars) ────────────────────────────────────────────
84
+ const hasSecrets = Object.keys(this._secrets).length > 0;
85
+ const secretName = `${this._name}-secret`;
86
+ if (hasSecrets) {
87
+ const s = new Manifests_4.Secret(secretName);
88
+ if (this._namespace)
89
+ s.namespace(this._namespace);
90
+ s.data(this._secrets);
91
+ builders.push(s);
92
+ }
93
+ // ── PVC ─────────────────────────────────────────────────────────────────
94
+ const pvcName = `${this._name}-pvc`;
95
+ if (this._volumeSize) {
96
+ const pvc = new Manifests_5.PVC(pvcName, this._volumeSize);
97
+ if (this._namespace)
98
+ pvc.namespace(this._namespace);
99
+ // Default to gp3 on EKS if no storageClassName explicitly set
100
+ const sc = this._storageClassName ?? (cluster ? cluster.storageClass("gp3") : undefined);
101
+ if (sc)
102
+ pvc.storageClassName(sc);
103
+ builders.push(pvc);
104
+ }
105
+ // ── Deployment ───────────────────────────────────────────────────────────
106
+ const deployment = new Deployment_1.Deployment(this._name, this._image);
107
+ if (this._namespace)
108
+ deployment.namespace(this._namespace);
109
+ deployment.replicas(this._replicas);
110
+ deployment.port(this._port);
111
+ if (this._imagePullPolicy)
112
+ deployment.imagePullPolicy(this._imagePullPolicy);
113
+ // EKS: ECR requires Always pull policy by default
114
+ else if (cluster)
115
+ deployment.imagePullPolicy("Always");
116
+ if (this._resources)
117
+ deployment.resources(this._resources);
118
+ if (Object.keys(this._labels).length > 0)
119
+ deployment.labels(this._labels);
120
+ if (Object.keys(this._annotations).length > 0)
121
+ deployment.annotations(this._annotations);
122
+ if (this._irsaRoleArn)
123
+ deployment.serviceAccount(`${this._name}-sa`);
124
+ // Wire plain env vars from ConfigMap
125
+ if (hasEnv) {
126
+ for (const key of Object.keys(this._env)) {
127
+ deployment.envFrom(key, { configMapKeyRef: { name: configMapName, key } });
128
+ }
129
+ }
130
+ // Wire secret env vars from Secret
131
+ if (hasSecrets) {
132
+ for (const key of Object.keys(this._secrets)) {
133
+ deployment.envFrom(key, { secretKeyRef: { name: secretName, key } });
134
+ }
135
+ }
136
+ // Wire volume mount
137
+ if (this._volumeSize && this._volumeMountPath) {
138
+ deployment.volumeMount({ name: pvcName, mountPath: this._volumeMountPath });
139
+ deployment.volume({ name: pvcName, persistentVolumeClaim: { claimName: pvcName } });
140
+ }
141
+ builders.push(deployment);
142
+ // ── Service ──────────────────────────────────────────────────────────────
143
+ const svc = new Manifests_1.K8sService(this._name);
144
+ if (this._namespace)
145
+ svc.namespace(this._namespace);
146
+ svc.port(this._port);
147
+ builders.push(svc);
148
+ // ── Ingress ───────────────────────────────────────────────────────────────
149
+ if (this._ingressOptions) {
150
+ const { host, tls, tlsSecretName, path, ingressClassName } = this._ingressOptions;
151
+ const ingress = new Manifests_2.Ingress(`${this._name}`);
152
+ if (this._namespace)
153
+ ingress.namespace(this._namespace);
154
+ if (cluster) {
155
+ // EKS: use ALB annotations instead of ingressClassName field
156
+ ingress.annotations(cluster.baseIngressAnnotations());
157
+ if (tls) {
158
+ ingress.annotations(cluster.tlsIngressAnnotations());
159
+ }
160
+ }
161
+ else {
162
+ if (ingressClassName)
163
+ ingress.ingressClassName(ingressClassName);
164
+ if (tls) {
165
+ ingress.tls([host], tlsSecretName ?? `${this._name}-tls`);
166
+ }
167
+ }
168
+ ingress.rule(host, path ?? "/", this._name, this._port);
169
+ builders.push(ingress);
170
+ }
171
+ return builders;
172
+ }
173
+ }
174
+ exports.K8sApp = K8sApp;
175
+ //# sourceMappingURL=K8sApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"K8sApp.js","sourceRoot":"","sources":["../../src/k8s/K8sApp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { Builder } from "../core/Builder";
2
+ import type { ServiceType, Protocol, K8sLabels, K8sAnnotations } from "./types";
3
+ export declare class K8sService extends Builder {
4
+ readonly kind = "Service";
5
+ private _name;
6
+ private _namespace?;
7
+ private _type;
8
+ private _ports;
9
+ private _selector;
10
+ private _annotations;
11
+ constructor(name: string);
12
+ namespace(ns: string): this;
13
+ type(t: ServiceType): this;
14
+ selector(s: K8sLabels): this;
15
+ annotations(a: K8sAnnotations): this;
16
+ port(port: number, targetPort?: number, protocol?: Protocol, name?: string): this;
17
+ outputPath(): string;
18
+ toObject(): Record<string, unknown>;
19
+ }
20
+ export declare class Ingress extends Builder {
21
+ readonly kind = "Ingress";
22
+ private _name;
23
+ private _namespace?;
24
+ private _ingressClassName?;
25
+ private _rules;
26
+ private _tls;
27
+ private _annotations;
28
+ constructor(name: string);
29
+ namespace(ns: string): this;
30
+ ingressClassName(cls: string): this;
31
+ annotations(a: K8sAnnotations): this;
32
+ rule(host: string, path: string, serviceName: string, servicePort: number): this;
33
+ tls(hosts: string[], secretName: string): this;
34
+ outputPath(): string;
35
+ toObject(): Record<string, unknown>;
36
+ }
37
+ export declare class ConfigMap extends Builder {
38
+ readonly kind = "ConfigMap";
39
+ private _name;
40
+ private _namespace?;
41
+ private _data;
42
+ constructor(name: string);
43
+ namespace(ns: string): this;
44
+ set(key: string, value: string): this;
45
+ data(d: Record<string, string>): this;
46
+ outputPath(): string;
47
+ toObject(): Record<string, unknown>;
48
+ }
49
+ export type SecretType = "Opaque" | "kubernetes.io/tls" | "kubernetes.io/dockerconfigjson" | (string & {});
50
+ export declare class Secret extends Builder {
51
+ readonly kind = "Secret";
52
+ private _name;
53
+ private _namespace?;
54
+ private _type;
55
+ private _stringData;
56
+ constructor(name: string);
57
+ namespace(ns: string): this;
58
+ type(t: SecretType): this;
59
+ /** Use stringData — K8s will base64-encode automatically */
60
+ set(key: string, value: string): this;
61
+ data(d: Record<string, string>): this;
62
+ outputPath(): string;
63
+ toObject(): Record<string, unknown>;
64
+ }
65
+ export type AccessMode = "ReadWriteOnce" | "ReadOnlyMany" | "ReadWriteMany" | "ReadWriteOncePod";
66
+ export declare class PVC extends Builder {
67
+ readonly kind = "PersistentVolumeClaim";
68
+ private _name;
69
+ private _namespace?;
70
+ private _storage;
71
+ private _accessModes;
72
+ private _storageClassName?;
73
+ constructor(name: string, storage: string);
74
+ namespace(ns: string): this;
75
+ accessModes(...modes: AccessMode[]): this;
76
+ storageClassName(cls: string): this;
77
+ outputPath(): string;
78
+ toObject(): Record<string, unknown>;
79
+ }
80
+ //# sourceMappingURL=Manifests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Manifests.d.ts","sourceRoot":"","sources":["../../src/k8s/Manifests.ts"],"names":[],"mappings":"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"}