@kinwan/infrascript 0.1.0 → 0.1.1

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.
@@ -1,80 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"Manifests.d.ts","sourceRoot":"","sources":["../../src/k8s/Manifests.ts"],"names":[],"mappings":"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"}
@@ -1,204 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PVC = exports.Secret = exports.ConfigMap = exports.Ingress = exports.K8sService = void 0;
4
- const Builder_1 = require("../core/Builder");
5
- // ─── Service ────────────────────────────────────────────────────────────────
6
- class K8sService extends Builder_1.Builder {
7
- constructor(name) {
8
- super();
9
- this.kind = "Service";
10
- this._type = "ClusterIP";
11
- this._ports = [];
12
- this._selector = {};
13
- this._annotations = {};
14
- this._name = name;
15
- this._selector = { app: name };
16
- }
17
- namespace(ns) { this._namespace = ns; return this; }
18
- type(t) { this._type = t; return this; }
19
- selector(s) { this._selector = { ...this._selector, ...s }; return this; }
20
- annotations(a) { this._annotations = { ...this._annotations, ...a }; return this; }
21
- port(port, targetPort, protocol = "TCP", name) {
22
- this._ports.push({ port, targetPort: targetPort ?? port, protocol, name });
23
- return this;
24
- }
25
- outputPath() {
26
- const ns = this._namespace ? `${this._namespace}/` : "";
27
- return `k8s/${ns}${this._name}-service.yaml`;
28
- }
29
- toObject() {
30
- const metadata = { name: this._name };
31
- if (this._namespace)
32
- metadata["namespace"] = this._namespace;
33
- if (Object.keys(this._annotations).length > 0)
34
- metadata["annotations"] = this._annotations;
35
- return {
36
- apiVersion: "v1",
37
- kind: "Service",
38
- metadata,
39
- spec: {
40
- type: this._type,
41
- selector: this._selector,
42
- ports: this._ports.map(({ port, targetPort, protocol, name }) => {
43
- const p = { port, targetPort, protocol };
44
- if (name)
45
- p["name"] = name;
46
- return p;
47
- }),
48
- },
49
- };
50
- }
51
- }
52
- exports.K8sService = K8sService;
53
- // ─── Ingress ─────────────────────────────────────────────────────────────────
54
- class Ingress extends Builder_1.Builder {
55
- constructor(name) {
56
- super();
57
- this.kind = "Ingress";
58
- this._rules = [];
59
- this._tls = [];
60
- this._annotations = {};
61
- this._name = name;
62
- }
63
- namespace(ns) { this._namespace = ns; return this; }
64
- ingressClassName(cls) { this._ingressClassName = cls; return this; }
65
- annotations(a) { this._annotations = { ...this._annotations, ...a }; return this; }
66
- rule(host, path, serviceName, servicePort) {
67
- this._rules.push({ host, path, serviceName, servicePort });
68
- return this;
69
- }
70
- tls(hosts, secretName) {
71
- this._tls.push({ hosts, secretName });
72
- return this;
73
- }
74
- outputPath() {
75
- const ns = this._namespace ? `${this._namespace}/` : "";
76
- return `k8s/${ns}${this._name}-ingress.yaml`;
77
- }
78
- toObject() {
79
- const metadata = { name: this._name };
80
- if (this._namespace)
81
- metadata["namespace"] = this._namespace;
82
- if (Object.keys(this._annotations).length > 0)
83
- metadata["annotations"] = this._annotations;
84
- const spec = {
85
- rules: this._rules.map(({ host, path, serviceName, servicePort }) => ({
86
- host,
87
- http: {
88
- paths: [{
89
- path,
90
- pathType: "Prefix",
91
- backend: {
92
- service: { name: serviceName, port: { number: servicePort } },
93
- },
94
- }],
95
- },
96
- })),
97
- };
98
- if (this._ingressClassName)
99
- spec["ingressClassName"] = this._ingressClassName;
100
- if (this._tls.length > 0)
101
- spec["tls"] = this._tls;
102
- return { apiVersion: "networking.k8s.io/v1", kind: "Ingress", metadata, spec };
103
- }
104
- }
105
- exports.Ingress = Ingress;
106
- // ─── ConfigMap ───────────────────────────────────────────────────────────────
107
- class ConfigMap extends Builder_1.Builder {
108
- constructor(name) {
109
- super();
110
- this.kind = "ConfigMap";
111
- this._data = {};
112
- this._name = name;
113
- }
114
- namespace(ns) { this._namespace = ns; return this; }
115
- set(key, value) {
116
- this._data[key] = value;
117
- return this;
118
- }
119
- data(d) {
120
- this._data = { ...this._data, ...d };
121
- return this;
122
- }
123
- outputPath() {
124
- const ns = this._namespace ? `${this._namespace}/` : "";
125
- return `k8s/${ns}${this._name}-configmap.yaml`;
126
- }
127
- toObject() {
128
- const metadata = { name: this._name };
129
- if (this._namespace)
130
- metadata["namespace"] = this._namespace;
131
- return { apiVersion: "v1", kind: "ConfigMap", metadata, data: this._data };
132
- }
133
- }
134
- exports.ConfigMap = ConfigMap;
135
- class Secret extends Builder_1.Builder {
136
- constructor(name) {
137
- super();
138
- this.kind = "Secret";
139
- this._type = "Opaque";
140
- this._stringData = {};
141
- this._name = name;
142
- }
143
- namespace(ns) { this._namespace = ns; return this; }
144
- type(t) { this._type = t; return this; }
145
- /** Use stringData — K8s will base64-encode automatically */
146
- set(key, value) {
147
- this._stringData[key] = value;
148
- return this;
149
- }
150
- data(d) {
151
- this._stringData = { ...this._stringData, ...d };
152
- return this;
153
- }
154
- outputPath() {
155
- const ns = this._namespace ? `${this._namespace}/` : "";
156
- return `k8s/${ns}${this._name}-secret.yaml`;
157
- }
158
- toObject() {
159
- const metadata = { name: this._name };
160
- if (this._namespace)
161
- metadata["namespace"] = this._namespace;
162
- return {
163
- apiVersion: "v1",
164
- kind: "Secret",
165
- metadata,
166
- type: this._type,
167
- stringData: this._stringData,
168
- };
169
- }
170
- }
171
- exports.Secret = Secret;
172
- class PVC extends Builder_1.Builder {
173
- constructor(name, storage) {
174
- super();
175
- this.kind = "PersistentVolumeClaim";
176
- this._accessModes = ["ReadWriteOnce"];
177
- this._name = name;
178
- this._storage = storage;
179
- }
180
- namespace(ns) { this._namespace = ns; return this; }
181
- accessModes(...modes) { this._accessModes = modes; return this; }
182
- storageClassName(cls) { this._storageClassName = cls; return this; }
183
- outputPath() {
184
- const ns = this._namespace ? `${this._namespace}/` : "";
185
- return `k8s/${ns}${this._name}-pvc.yaml`;
186
- }
187
- toObject() {
188
- const metadata = { name: this._name };
189
- if (this._namespace)
190
- metadata["namespace"] = this._namespace;
191
- const resources = {
192
- requests: { storage: this._storage },
193
- };
194
- const spec = {
195
- accessModes: this._accessModes,
196
- resources,
197
- };
198
- if (this._storageClassName)
199
- spec["storageClassName"] = this._storageClassName;
200
- return { apiVersion: "v1", kind: "PersistentVolumeClaim", metadata, spec };
201
- }
202
- }
203
- exports.PVC = PVC;
204
- //# sourceMappingURL=Manifests.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Manifests.js","sourceRoot":"","sources":["../../src/k8s/Manifests.ts"],"names":[],"mappings":"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"}
@@ -1,63 +0,0 @@
1
- /** CPU/memory quantity strings e.g. "250m", "512Mi", "1Gi", "2" */
2
- export type ResourceQuantity = string;
3
- export interface ResourceRequirements {
4
- requests?: {
5
- cpu?: ResourceQuantity;
6
- memory?: ResourceQuantity;
7
- };
8
- limits?: {
9
- cpu?: ResourceQuantity;
10
- memory?: ResourceQuantity;
11
- };
12
- }
13
- export type ImagePullPolicy = "Always" | "IfNotPresent" | "Never";
14
- export type RestartPolicy = "Always" | "OnFailure" | "Never";
15
- export type ServiceType = "ClusterIP" | "NodePort" | "LoadBalancer" | "ExternalName";
16
- export type Protocol = "TCP" | "UDP" | "SCTP";
17
- export interface EnvVarValueFrom {
18
- secretKeyRef?: {
19
- name: string;
20
- key: string;
21
- };
22
- configMapKeyRef?: {
23
- name: string;
24
- key: string;
25
- };
26
- fieldRef?: {
27
- fieldPath: string;
28
- };
29
- }
30
- export interface EnvVar {
31
- name: string;
32
- value?: string;
33
- valueFrom?: EnvVarValueFrom;
34
- }
35
- export interface VolumeMount {
36
- name: string;
37
- mountPath: string;
38
- readOnly?: boolean;
39
- subPath?: string;
40
- }
41
- export interface IngressTlsOptions {
42
- /** Hostname for the ingress rule */
43
- host: string;
44
- /** Whether to configure TLS (creates a tls block with a generated secret name) */
45
- tls?: boolean;
46
- /** TLS secret name override. Defaults to "<name>-tls" */
47
- tlsSecretName?: string;
48
- /** Path prefix. Defaults to "/" */
49
- path?: string;
50
- /** Ingress class name e.g. "nginx", "traefik" */
51
- ingressClassName?: string;
52
- }
53
- export interface K8sLabels {
54
- [key: string]: string;
55
- }
56
- export interface K8sAnnotations {
57
- [key: string]: string;
58
- }
59
- /** A reference to a K8s Secret key for use in env vars */
60
- export declare function secretRef(secretName: string, key: string): EnvVarValueFrom;
61
- /** A reference to a K8s ConfigMap key for use in env vars */
62
- export declare function configMapRef(configMapName: string, key: string): EnvVarValueFrom;
63
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/k8s/types.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,gBAAgB,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;IACjE,MAAM,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,gBAAgB,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;CAChE;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAC7D,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;AACrF,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,eAAe,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,QAAQ,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;CAClC;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,kFAAkF;IAClF,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CAE1E;AAED,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CAEhF"}
package/dist/k8s/types.js DELETED
@@ -1,13 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.secretRef = secretRef;
4
- exports.configMapRef = configMapRef;
5
- /** A reference to a K8s Secret key for use in env vars */
6
- function secretRef(secretName, key) {
7
- return { secretKeyRef: { name: secretName, key } };
8
- }
9
- /** A reference to a K8s ConfigMap key for use in env vars */
10
- function configMapRef(configMapName, key) {
11
- return { configMapKeyRef: { name: configMapName, key } };
12
- }
13
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/k8s/types.ts"],"names":[],"mappings":";;AAsDA,8BAEC;AAGD,oCAEC;AARD,0DAA0D;AAC1D,SAAgB,SAAS,CAAC,UAAkB,EAAE,GAAW;IACvD,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,CAAC;AACrD,CAAC;AAED,6DAA6D;AAC7D,SAAgB,YAAY,CAAC,aAAqB,EAAE,GAAW;IAC7D,OAAO,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;AAC3D,CAAC"}
@@ -1,69 +0,0 @@
1
- import { defineConfig, ActionsWorkflow, K8sApp, Deployment, K8sService } from "./src";
2
-
3
- // --- GitHub Actions ---
4
-
5
- const ci = new ActionsWorkflow("ci")
6
- .on("push", { branches: ["main", "dev"] })
7
- .on("pull_request")
8
- .job("test", (j) =>
9
- j
10
- .runsOn("ubuntu-latest")
11
- .step("Checkout", s => s.uses("actions/checkout@v4"))
12
- .step("Setup Node", s => s.uses("actions/setup-node@v4", { "node-version": "20" }))
13
- .step("Install", s => s.run("npm ci"))
14
- .step("Typecheck", s => s.run("npm run typecheck"))
15
- .step("Test", s => s.run("npm test"))
16
- );
17
-
18
- const deploy = new ActionsWorkflow("deploy")
19
- .on("push", { branches: ["main"] })
20
- .permissions({ contents: "read", packages: "write" })
21
- .job("build-push", (j) =>
22
- j
23
- .runsOn("ubuntu-latest")
24
- .step("Checkout", s => s.uses("actions/checkout@v4"))
25
- .step("Log in to GHCR", s => s.uses("docker/login-action@v3", {
26
- registry: "ghcr.io",
27
- username: "${{ github.actor }}",
28
- password: "${{ secrets.GITHUB_TOKEN }}",
29
- }))
30
- .step("Build & Push", s => s.uses("docker/build-push-action@v5", {
31
- push: "true",
32
- tags: "ghcr.io/myorg/api:latest",
33
- }))
34
- )
35
- .job("deploy-k8s", (j) =>
36
- j
37
- .runsOn("ubuntu-latest")
38
- .needs("build-push")
39
- .step("Deploy", s => s.run("kubectl apply -f k8s/"))
40
- );
41
-
42
- // --- K8s high-level ---
43
-
44
- const api = new K8sApp("api")
45
- .image("ghcr.io/myorg/api:latest")
46
- .replicas(2)
47
- .port(3000)
48
- .env({ NODE_ENV: "production", LOG_LEVEL: "info" })
49
- .secret({ DB_PASSWORD: "replace-me", JWT_SECRET: "replace-me" })
50
- .resources({ requests: { cpu: "100m", memory: "128Mi" }, limits: { cpu: "500m", memory: "512Mi" } })
51
- .ingress({ host: "api.myapp.com", tls: true, ingressClassName: "nginx" })
52
- .volume({ mountPath: "/data", size: "5Gi" });
53
-
54
- // --- K8s low-level escape hatch ---
55
-
56
- const worker = new Deployment("worker", "ghcr.io/myorg/worker:latest")
57
- .replicas(1)
58
- .env({ QUEUE_URL: "redis://redis:6379" })
59
- .resources({ requests: { cpu: "50m", memory: "64Mi" } });
60
-
61
- const workerSvc = new K8sService("worker").port(8080);
62
-
63
- export default defineConfig({
64
- actions: { ci, deploy },
65
- k8s: {
66
- apps: { api },
67
- manifests: { worker, workerSvc },
68
- },
69
- });
@@ -1,121 +0,0 @@
1
- /**
2
- * Example: 3 services on EKS
3
- *
4
- * web — React/nginx frontend, public via ALB
5
- * api — Node.js backend, public via ALB
6
- * worker — Background job processor, internal only
7
- *
8
- * Internal communication:
9
- * web -> api via http://api:3000 (K8s Service DNS)
10
- * worker -> api via http://api:3000
11
- * worker -> redis via redis://redis:6379 (assumed deployed separately)
12
- */
13
-
14
- import { defineConfig, ActionsWorkflow, K8sApp, EKSCluster } from "./src";
15
-
16
- // --- Cluster context ---
17
-
18
- const cluster = new EKSCluster({
19
- region: "ap-northeast-1",
20
- accountId: "123456789012",
21
- clusterName: "myapp-prod",
22
- certArn: "arn:aws:acm:ap-northeast-1:123456789012:certificate/abc-123",
23
- scheme: "internet-facing",
24
- targetType: "ip",
25
- });
26
-
27
- // --- Services ---
28
-
29
- const web = new K8sApp("web")
30
- .image(cluster.ecr("web:latest"))
31
- .port(80)
32
- .replicas(2)
33
- .namespace("production")
34
- .env({ API_URL: "http://api:3000" })
35
- .resources({
36
- requests: { cpu: "50m", memory: "64Mi" },
37
- limits: { cpu: "200m", memory: "256Mi" },
38
- })
39
- .ingress({ host: "myapp.com", tls: true });
40
-
41
- const api = new K8sApp("api")
42
- .image(cluster.ecr("api:latest"))
43
- .port(3000)
44
- .replicas(2)
45
- .namespace("production")
46
- .env({ NODE_ENV: "production", LOG_LEVEL: "info" })
47
- .secret({ DB_PASSWORD: "replace-before-apply", JWT_SECRET: "replace-before-apply" })
48
- .resources({
49
- requests: { cpu: "100m", memory: "128Mi" },
50
- limits: { cpu: "500m", memory: "512Mi" },
51
- })
52
- .ingress({ host: "api.myapp.com", tls: true })
53
- .irsaRole(cluster.irsaRoleArn("api-s3-role"));
54
-
55
- const worker = new K8sApp("worker")
56
- .image(cluster.ecr("worker:latest"))
57
- .port(8080)
58
- .replicas(1)
59
- .namespace("production")
60
- .env({
61
- API_URL: "http://api:3000",
62
- QUEUE_URL: "redis://redis:6379",
63
- NODE_ENV: "production",
64
- })
65
- .secret({ DB_PASSWORD: "replace-before-apply" })
66
- .resources({
67
- requests: { cpu: "50m", memory: "64Mi" },
68
- limits: { cpu: "250m", memory: "256Mi" },
69
- });
70
- // no .ingress() — internal only
71
-
72
- // --- GitHub Actions ---
73
-
74
- const ci = new ActionsWorkflow("ci")
75
- .on("push", { branches: ["main", "dev"] })
76
- .on("pull_request")
77
- .job("test", (j) =>
78
- j
79
- .runsOn("ubuntu-latest")
80
- .step("Checkout", s => s.uses("actions/checkout@v4"))
81
- .step("Install", s => s.run("npm ci"))
82
- .step("Test", s => s.run("npm test"))
83
- );
84
-
85
- const deploy = new ActionsWorkflow("deploy")
86
- .on("push", { branches: ["main"] })
87
- .permissions({ contents: "read", packages: "write", "id-token": "write" })
88
- .job("build-and-push", (j) =>
89
- j
90
- .runsOn("ubuntu-latest")
91
- .step("Checkout", s => s.uses("actions/checkout@v4"))
92
- .step("Configure AWS credentials", s => s.uses("aws-actions/configure-aws-credentials@v4", {
93
- "role-to-assume": cluster.irsaRoleArn("github-actions-role"),
94
- "aws-region": cluster.region,
95
- }))
96
- .step("Login to ECR", s => s.uses("aws-actions/amazon-ecr-login@v2"))
97
- .step("Build & push web", s => s.run(`docker build -t ${cluster.ecr("web:latest")} ./web && docker push ${cluster.ecr("web:latest")}`))
98
- .step("Build & push api", s => s.run(`docker build -t ${cluster.ecr("api:latest")} ./api && docker push ${cluster.ecr("api:latest")}`))
99
- .step("Build & push worker", s => s.run(`docker build -t ${cluster.ecr("worker:latest")} ./worker && docker push ${cluster.ecr("worker:latest")}`))
100
- )
101
- .job("deploy", (j) =>
102
- j
103
- .runsOn("ubuntu-latest")
104
- .needs("build-and-push")
105
- .step("Configure AWS credentials", s => s.uses("aws-actions/configure-aws-credentials@v4", {
106
- "role-to-assume": cluster.irsaRoleArn("github-actions-role"),
107
- "aws-region": cluster.region,
108
- }))
109
- .step("Update kubeconfig", s => s.run(`aws eks update-kubeconfig --region ${cluster.region} --name ${cluster.clusterName}`))
110
- .step("Apply manifests", s => s.run("kubectl apply -f k8s/production/"))
111
- );
112
-
113
- // --- Config ---
114
-
115
- export default defineConfig({
116
- actions: { ci, deploy },
117
- k8s: {
118
- cluster,
119
- apps: { web, api, worker },
120
- },
121
- });
@@ -1,7 +0,0 @@
1
- apiVersion: v1
2
- kind: ConfigMap
3
- metadata:
4
- name: api-config
5
- data:
6
- NODE_ENV: production
7
- LOG_LEVEL: info
@@ -1,54 +0,0 @@
1
- apiVersion: apps/v1
2
- kind: Deployment
3
- metadata:
4
- name: api
5
- spec:
6
- replicas: 2
7
- selector:
8
- matchLabels:
9
- app: api
10
- template:
11
- metadata:
12
- labels:
13
- app: api
14
- spec:
15
- containers:
16
- - name: api
17
- image: ghcr.io/myorg/api:latest
18
- ports:
19
- - containerPort: 3000
20
- env:
21
- - name: NODE_ENV
22
- valueFrom:
23
- configMapKeyRef:
24
- name: api-config
25
- key: NODE_ENV
26
- - name: LOG_LEVEL
27
- valueFrom:
28
- configMapKeyRef:
29
- name: api-config
30
- key: LOG_LEVEL
31
- - name: DB_PASSWORD
32
- valueFrom:
33
- secretKeyRef:
34
- name: api-secret
35
- key: DB_PASSWORD
36
- - name: JWT_SECRET
37
- valueFrom:
38
- secretKeyRef:
39
- name: api-secret
40
- key: JWT_SECRET
41
- resources:
42
- requests:
43
- cpu: 100m
44
- memory: 128Mi
45
- limits:
46
- cpu: 500m
47
- memory: 512Mi
48
- volumeMounts:
49
- - name: api-pvc
50
- mountPath: /data
51
- volumes:
52
- - name: api-pvc
53
- persistentVolumeClaim:
54
- claimName: api-pvc
@@ -1,21 +0,0 @@
1
- apiVersion: networking.k8s.io/v1
2
- kind: Ingress
3
- metadata:
4
- name: api
5
- spec:
6
- rules:
7
- - host: api.myapp.com
8
- http:
9
- paths:
10
- - path: /
11
- pathType: Prefix
12
- backend:
13
- service:
14
- name: api
15
- port:
16
- number: 3000
17
- ingressClassName: nginx
18
- tls:
19
- - hosts:
20
- - api.myapp.com
21
- secretName: api-tls