@nathapp/na-cli 1.0.4 → 1.0.7

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 (31) hide show
  1. package/README.md +28 -2
  2. package/bunfig.toml +3 -0
  3. package/dist/commands/list.js +26 -0
  4. package/dist/commands/list.js.map +1 -0
  5. package/dist/index.js +13 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/templates/k8s-deployment/.gitignore-rename +2 -0
  8. package/dist/templates/k8s-deployment/resources/charts/mysql/charts/mysql-install/values.yaml +1 -1
  9. package/dist/templates/k8s-deployment/resources/charts/mysql/values.yaml +5 -1
  10. package/dist/templates/k8s-deployment/resources/charts/redis/values.yaml +1 -1
  11. package/dist/templates/k8s-deployment/services/charts/hooks/charts/pre-delete-rsc/values.yaml +1 -1
  12. package/dist/templates/k8s-deployment/services/charts/sample-nginx/templates/ingressroutetcp.yaml +1 -0
  13. package/dist/templates/k8s-deployment/services/charts/sample-nginx/values.yaml +6 -8
  14. package/dist/templates/k8s-deployment/templates/_cronjob.tpl +1 -1
  15. package/dist/templates/k8s-deployment/templates/_deployment.tpl +2 -2
  16. package/dist/templates/k8s-deployment/templates/_ingressroutetcp.tpl +135 -0
  17. package/dist/templates/k8s-deployment/templates/_job.tpl +1 -1
  18. package/dist/templates/k8s-deployment/templates/_pod.tpl +2 -2
  19. package/dist/templates/k8s-deployment/templates/_statefulset.tpl +2 -2
  20. package/dist/templates/k8s-deployment/templates/root-pull-secret.yaml +4 -2
  21. package/dist/templates/k8s-deployment/templates/root-secret.yaml +4 -2
  22. package/dist/templates/k8s-deployment/test-values.yaml +10 -0
  23. package/dist/templates/k8s-deployment/values.yaml +1 -1
  24. package/dist/templates/k8s-helm-chart/templates/ingressroutetcp.yaml +1 -0
  25. package/dist/templates/k8s-helm-chart/templates/job.yaml +1 -0
  26. package/dist/templates/k8s-helm-chart/values.yaml +127 -13
  27. package/dist/utils/template.js +19 -21
  28. package/dist/utils/template.js.map +1 -1
  29. package/nax/config.json +23 -0
  30. package/nax/features/enhancements/prd.json +61 -0
  31. package/package.json +3 -2
package/README.md CHANGED
@@ -39,7 +39,7 @@ You can provide answers directly via command-line flags. If both `--template` an
39
39
  - `--k8s_chart_registry_host`: `aliyun`, `aws`, `dockerhub`, or `custom`.
40
40
  - `--k8s_image_name`: Full image name (default: `bitnami/kafka`).
41
41
  - `--k8s_image_version`: Version tag (default: `1.0.0`).
42
- - `--k8s_chart_kind`: `Deployment`, `StatefulSet`, or `CronJob` (default: `Deployment`).
42
+ - `--k8s_chart_kind`: `Deployment`, `StatefulSet`, `CronJob`, or `Job` (default: `Deployment`). A generated `Job` chart runs as a `post-install,post-upgrade` Helm hook (a plain Job's pod template is immutable, so upgrades would fail). Switching it to `pre-install,pre-upgrade` (e.g. migrations before the app rolls out) only works if everything it references is created outside the chart (`fromKeyRef` secrets/config, an existing pull secret): pre-install hooks run before the release's own objects exist.
43
43
  - `--k8s_chart_registry_region`: (For Aliyun/AWS) default: `ap-southeast-3`.
44
44
  - `--k8s_chart_aws_account_id`: (For AWS) default: `123456789`.
45
45
 
@@ -61,6 +61,23 @@ The CLI understands the relationship between infrastructure projects and service
61
61
 
62
62
  This allows you to manage modular services within a master deployment project without manually navigating to sub-folders.
63
63
 
64
+ #### Deployment defaults (`k8s-deployment` / `k8s-helm-chart`)
65
+
66
+ - **Ingress**: Traefik (`className: traefik`, `web` entrypoint), no TLS in the chart. TLS is
67
+ expected to terminate upstream (e.g. Cloudflare Tunnel). Hosts are flat:
68
+ `{{SERVICE_BASE_NAME}}-<chart>.{{SERVICE_BASE_DOMAIN}}`, where `SERVICE_BASE_NAME` is the release name.
69
+ - **TCP routing**: set `ingressRouteTCP` in a chart's values to render a Traefik `IngressRouteTCP`.
70
+ - **Review apps**: merge requests run `make review`, deploying release `<project>-<branch-slug>`
71
+ with `test-values.yaml` into `REVIEW_KUBE_NAMESPACE` (default `<CI_KUBE_NAMESPACE>-review`,
72
+ never the production namespace). Names over 30 chars become `<first 24>-<5-digit cksum>`.
73
+ GitLab stops it via `stop-review` when the MR is merged or closed, or after one week.
74
+ Review apps run branch code with cluster access: scope `KUBECONFIG` per environment
75
+ (`production` = protected credential, `review/*` = credential limited to the review namespace).
76
+ - **CI image**: `HELM_CI_IMAGE` (default `alpine/helm:3.22.0`). Pin deploy jobs to a runner that
77
+ can reach the cluster with `default.tags`.
78
+ - **Lint**: `make lint` render-checks both releases with `helm template` against `values.yaml`
79
+ and `test-values.yaml`.
80
+
64
81
  ---
65
82
 
66
83
  ### 3. Environment Variable Conversion
@@ -86,9 +103,18 @@ na yml-env -i config.yaml -o .env
86
103
  ## Available Templates
87
104
  The CLI currently supports the following project types:
88
105
  - `db-schema`: Database migration and schema projects.
89
- - `k8s-deployment`: Basic Kubernetes manifests.
106
+ - `k8s-deployment`: Umbrella Helm deployment project (resources + services releases, GitLab CI with review apps).
90
107
  - `k8s-helm-chart`: Comprehensive Helm chart bootstrapping.
91
108
  - `mxw-base-api-express`: Express-based API boilerplate.
92
109
  - `ts-library`: TypeScript library project.
93
110
  - `nestjs-api`: Professional NestJS setup with platform choices.
94
111
  - `vuexy-portal`: Frontend portal based on the Vuexy template.
112
+
113
+ ---
114
+
115
+ ## Development
116
+
117
+ ```bash
118
+ bun install
119
+ bun run test # builds dist/, then runs test/ (helm-dependent tests skip when helm is absent)
120
+ ```
package/bunfig.toml ADDED
@@ -0,0 +1,3 @@
1
+ [test]
2
+ # Only run the CLI tests; templates/ and dist/templates/ contain sample test suites.
3
+ root = "./test"
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.listTemplates = void 0;
5
+ var template_1 = require("../utils/template");
6
+ var TEMPLATE_DESCRIPTIONS = (_a = {},
7
+ _a[template_1.TEMPLATE_NAME.DB_SCHEMA] = 'Database schema migration template',
8
+ _a[template_1.TEMPLATE_NAME.K8S_DEPLOYMENT] = 'Kubernetes deployment manifest template',
9
+ _a[template_1.TEMPLATE_NAME.K8S_DEPLOY_CHART] = 'Kubernetes Helm chart template',
10
+ _a[template_1.TEMPLATE_NAME.MXW_BASE_API] = 'MXW base API with Express template',
11
+ _a[template_1.TEMPLATE_NAME.TS_LIBRARY] = 'TypeScript library template',
12
+ _a[template_1.TEMPLATE_NAME.NESTJS_API] = 'NestJS REST API template',
13
+ _a[template_1.TEMPLATE_NAME.VUEXY_PORTAL] = 'Vuexy admin portal template',
14
+ _a);
15
+ function listTemplates() {
16
+ var entries = Object.values(template_1.TEMPLATE_NAME)
17
+ .sort()
18
+ .map(function (name) {
19
+ var _a;
20
+ var description = (_a = TEMPLATE_DESCRIPTIONS[name]) !== null && _a !== void 0 ? _a : 'No description available';
21
+ return "".concat(name, " \u2014 ").concat(description);
22
+ });
23
+ return entries.join('\n');
24
+ }
25
+ exports.listTemplates = listTemplates;
26
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":";;;;AAAA,8CAAkD;AAElD,IAAM,qBAAqB;IACvB,GAAC,wBAAa,CAAC,SAAS,IAAG,oCAAoC;IAC/D,GAAC,wBAAa,CAAC,cAAc,IAAG,yCAAyC;IACzE,GAAC,wBAAa,CAAC,gBAAgB,IAAG,gCAAgC;IAClE,GAAC,wBAAa,CAAC,YAAY,IAAG,oCAAoC;IAClE,GAAC,wBAAa,CAAC,UAAU,IAAG,6BAA6B;IACzD,GAAC,wBAAa,CAAC,UAAU,IAAG,0BAA0B;IACtD,GAAC,wBAAa,CAAC,YAAY,IAAG,6BAA6B;OAC9D,CAAC;AAEF,SAAgB,aAAa;IACzB,IAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAa,CAAC;SACvC,IAAI,EAAE;SACN,GAAG,CAAC,UAAC,IAAI;;QACN,IAAM,WAAW,GAAG,MAAA,qBAAqB,CAAC,IAAI,CAAC,mCAAI,0BAA0B,CAAC;QAC9E,OAAO,UAAG,IAAI,qBAAW,WAAW,CAAE,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEP,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AATD,sCASC"}
package/dist/index.js CHANGED
@@ -40,6 +40,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
40
40
  var path = require("path");
41
41
  var template_1 = require("./utils/template");
42
42
  var env_1 = require("./utils/env");
43
+ var list_1 = require("./commands/list");
43
44
  var yargs = require("yargs");
44
45
  var version = require("../package.json").version;
45
46
  function runGenerateTemplate() {
@@ -147,6 +148,18 @@ yargs.version(version).help().alias("help", "h").showHelpOnFail(true)
147
148
  console.log("converting yaml to .env");
148
149
  return (0, env_1.writeYamlToDotEnv)(argv.input, argv.output);
149
150
  }
151
+ }).command({
152
+ command: 'list',
153
+ describe: 'list all available project templates',
154
+ handler: function () {
155
+ console.log((0, list_1.listTemplates)());
156
+ }
157
+ }).command({
158
+ command: 'ls',
159
+ describe: 'list all available project templates, "list" command alias',
160
+ handler: function () {
161
+ console.log((0, list_1.listTemplates)());
162
+ }
150
163
  });
151
164
  yargs.parse();
152
165
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1,3 @@
1
1
  .DS_Store
2
+ /charts/
3
+ _env.yaml
@@ -1,4 +1,4 @@
1
- enabled: true
1
+ enabled: false
2
2
  kind: Job
3
3
 
4
4
  annotations:
@@ -4,12 +4,16 @@ kind: StatefulSet
4
4
  replicaCount: 1
5
5
  image:
6
6
  repository: mysql
7
- tag: "5.7.31"
7
+ tag: "8.4"
8
8
  pullPolicy: IfNotPresent
9
9
 
10
10
  service:
11
11
  type: ClusterIP
12
12
  port: 3306
13
13
 
14
+ # MySQL 8.4 notes: the container refuses to start with an empty root password, so set it
15
+ # (from a CI variable, never committed); mysql_native_password is off by default, so old
16
+ # clients need `mysql-native-password=ON` under [mysqld] in a mounted mysql.cnf (config +
17
+ # volumeMounts); a 5.7 data volume cannot be opened by 8.4 directly (upgrade via 8.0).
14
18
  secret:
15
19
  MYSQL_ROOT_PASSWORD: ""
@@ -4,7 +4,7 @@ kind: StatefulSet
4
4
  replicaCount: 1
5
5
  image:
6
6
  repository: redis
7
- tag: "6.0.8-alpine"
7
+ tag: "7.4-alpine"
8
8
  pullPolicy: IfNotPresent
9
9
 
10
10
  service:
@@ -8,7 +8,7 @@ annotations:
8
8
 
9
9
  image:
10
10
  repository: alpine/helm
11
- tag: "3.3.4"
11
+ tag: "3.22.0"
12
12
  pullPolicy: IfNotPresent
13
13
 
14
14
  restartPolicy: Never
@@ -0,0 +1 @@
1
+ {{- include "root.ingressroutetcp" $ }}
@@ -28,16 +28,14 @@ service:
28
28
  port: 80
29
29
 
30
30
  ingress:
31
+ className: "traefik"
31
32
  annotations:
32
- nginx.ingress.kubernetes.io/ssl-redirect: "true"
33
- nginx.ingress.kubernetes.io/rewrite-target: /$1
33
+ traefik.ingress.kubernetes.io/router.entrypoints: web
34
34
  hosts:
35
- - host: www.sample.com
36
- paths: ["/api/?(.*)"]
37
- tls:
38
- - secretName: SERVICE_BASE_DOMAIN_CERT
39
- hosts:
40
- - www.sample.com
35
+ - host: "{{SERVICE_BASE_NAME}}-sample.{{SERVICE_BASE_DOMAIN}}"
36
+ paths:
37
+ - path: "/"
38
+ pathType: "Prefix"
41
39
 
42
40
  readinessProbe:
43
41
  httpGet:
@@ -217,7 +217,7 @@ spec:
217
217
  claimName: {{ include (print $.Chart.Name ".fullname") $ }}-{{ .claimName }}
218
218
  {{- end }}
219
219
  {{- else }}
220
- {{- toYaml . | nindent 12 }}
220
+ - {{ toYaml . | nindent 14 | trim }}
221
221
  {{- end }}
222
222
  {{- end }}
223
223
  {{- end }}
@@ -238,9 +238,9 @@ spec:
238
238
  claimName: {{ include (print $.Chart.Name ".fullname") $ }}-{{ .claimName }}
239
239
  {{- end }}
240
240
  {{- else }}
241
- {{- toYaml . | nindent 8 }}
241
+ - {{ toYaml . | nindent 10 | trim }}
242
242
  {{- end }}
243
243
  {{- end }}
244
244
  {{- end }}
245
245
  {{- end }}
246
- {{- end }}
246
+ {{- end }}
@@ -0,0 +1,135 @@
1
+ {{- define "root.ingressroutetcp" -}}
2
+ {{- if and .Values.enabled .Values.ingressRouteTCP -}}
3
+ {{- $fullName := include (print $.Chart.Name ".fullname") . -}}
4
+ {{- $svcPort := .Values.service.port -}}
5
+ apiVersion: traefik.io/v1alpha1
6
+ kind: IngressRouteTCP
7
+ metadata:
8
+ name: {{ .Values.ingressRouteTCP.name | default (printf "%s-tcp" $fullName) }}
9
+ {{- if .Values.ingressRouteTCP.annotations }}
10
+ annotations:
11
+ {{- with .Values.ingressRouteTCP.annotations }}
12
+ {{- toYaml . | nindent 4 }}
13
+ {{- end }}
14
+ {{- end }}
15
+ labels:
16
+ {{- include (print $.Chart.Name ".labels") . | nindent 4 }}
17
+ spec:
18
+ {{- if .Values.ingressRouteTCP.entryPoints }}
19
+ entryPoints:
20
+ {{- range .Values.ingressRouteTCP.entryPoints }}
21
+ - {{ include "root.global" (list $ .) }}
22
+ {{- end }}
23
+ {{- end }}
24
+ routes:
25
+ {{- if .Values.ingressRouteTCP.routes }}
26
+ {{- range $routeIndex, $route := .Values.ingressRouteTCP.routes }}
27
+ - match: {{ include "root.global" (list $ $route.match) }}
28
+ {{- if $route.priority }}
29
+ priority: {{ $route.priority }}
30
+ {{- end }}
31
+ {{- if $route.middlewares }}
32
+ middlewares:
33
+ {{- range $route.middlewares }}
34
+ - name: {{ include "root.global" (list $ .name) }}
35
+ {{- if .namespace }}
36
+ namespace: {{ include "root.global" (list $ .namespace) }}
37
+ {{- end }}
38
+ {{- end }}
39
+ {{- end }}
40
+ {{- if $route.services }}
41
+ services:
42
+ {{- range $route.services }}
43
+ - name: {{ include "root.global" (list $ .name) | default $fullName }}
44
+ {{- if .namespace }}
45
+ namespace: {{ include "root.global" (list $ .namespace) }}
46
+ {{- end }}
47
+ {{- if .port }}
48
+ port: {{ .port }}
49
+ {{- else if $svcPort }}
50
+ port: {{ $svcPort }}
51
+ {{- end }}
52
+ {{- if .weight }}
53
+ weight: {{ .weight }}
54
+ {{- end }}
55
+ {{- if .terminationDelay }}
56
+ terminationDelay: {{ .terminationDelay }}
57
+ {{- end }}
58
+ {{- if .proxyProtocol }}
59
+ proxyProtocol:
60
+ version: {{ .proxyProtocol.version }}
61
+ {{- end }}
62
+ {{- if .serversTransport }}
63
+ serversTransport: {{ include "root.global" (list $ .serversTransport) }}
64
+ nativeLB: {{ .nativeLB | default false }}
65
+ nodePortLB: {{ .nodePortLB | default false }}
66
+ {{- end }}
67
+ {{- end }}
68
+ {{- end }}
69
+ {{- end }}
70
+ {{- end }}
71
+ {{- if .Values.ingressRouteTCP.host }}
72
+ - match: HostSNI(`{{ include "root.global" (list . .Values.ingressRouteTCP.host) }}`)
73
+ {{- if .Values.ingressRouteTCP.middlewares }}
74
+ middlewares:
75
+ {{- range .Values.ingressRouteTCP.middlewares }}
76
+ - name: {{ include "root.global" (list $ .name) }}
77
+ {{- if .namespace }}
78
+ namespace: {{ include "root.global" (list $ .namespace) }}
79
+ {{- end }}
80
+ {{- end }}
81
+ {{- end }}
82
+ services:
83
+ - name: {{ $fullName }}
84
+ port: {{ $svcPort }}
85
+ {{- if .Values.ingressRouteTCP.terminationDelay }}
86
+ terminationDelay: {{ .Values.ingressRouteTCP.terminationDelay }}
87
+ {{- end }}
88
+ {{- if .Values.ingressRouteTCP.proxyProtocol }}
89
+ proxyProtocol:
90
+ version: {{ .Values.ingressRouteTCP.proxyProtocol.version }}
91
+ {{- end }}
92
+ {{- if .Values.ingressRouteTCP.serversTransport }}
93
+ serversTransport: {{ include "root.global" (list . .Values.ingressRouteTCP.serversTransport) }}
94
+ {{- end }}
95
+ nativeLB: {{ .Values.ingressRouteTCP.nativeLB | default false }}
96
+ nodePortLB: {{ .Values.ingressRouteTCP.nodePortLB | default false }}
97
+ {{- end }}
98
+ {{- if .Values.ingressRouteTCP.tls }}
99
+ tls:
100
+ {{- with .Values.ingressRouteTCP.tls }}
101
+ {{- if .secretName }}
102
+ secretName: {{ include "root.global" (list $ .secretName) }}
103
+ {{- end }}
104
+ {{- if .options }}
105
+ options:
106
+ name: {{ include "root.global" (list $ .options.name) }}
107
+ {{- if .options.namespace }}
108
+ namespace: {{ include "root.global" (list $ .options.namespace) }}
109
+ {{- end }}
110
+ {{- end }}
111
+ {{- if .certResolver }}
112
+ certResolver: {{ include "root.global" (list $ .certResolver) }}
113
+ {{- end }}
114
+ {{- if .domains }}
115
+ domains:
116
+ {{- range .domains }}
117
+ - main: {{ include "root.global" (list $ .main) }}
118
+ {{- if .sans }}
119
+ sans:
120
+ {{- range .sans }}
121
+ - {{ include "root.global" (list $ .) }}
122
+ {{- end }}
123
+ {{- end }}
124
+ {{- end }}
125
+ {{- end }}
126
+ {{- if .store }}
127
+ store: {{ include "root.global" (list $ .store) }}
128
+ {{- end }}
129
+ {{- if .passthrough }}
130
+ passthrough: {{ .passthrough }}
131
+ {{- end }}
132
+ {{- end }}
133
+ {{- end }}
134
+ {{- end }}
135
+ {{- end }}
@@ -225,7 +225,7 @@ spec:
225
225
  claimName: {{ include (print $.Chart.Name ".fullname") $ }}-{{ .claimName }}
226
226
  {{- end }}
227
227
  {{- else }}
228
- {{- toYaml . | nindent 8 }}
228
+ - {{ toYaml . | nindent 10 | trim }}
229
229
  {{- end }}
230
230
  {{- end }}
231
231
  {{- end }}
@@ -206,9 +206,9 @@ spec:
206
206
  claimName: {{ include (print $.Chart.Name ".fullname") $ }}-{{ .claimName }}
207
207
  {{- end }}
208
208
  {{- else }}
209
- {{- toYaml . | nindent 4 }}
209
+ - {{ toYaml . | nindent 6 | trim }}
210
210
  {{- end }}
211
211
  {{- end }}
212
212
  {{- end }}
213
213
  {{- end }}
214
- {{- end }}
214
+ {{- end }}
@@ -236,9 +236,9 @@ spec:
236
236
  claimName: {{ include (print $.Chart.Name ".fullname") $ }}-{{ .claimName }}
237
237
  {{- end }}
238
238
  {{- else }}
239
- {{- toYaml . | nindent 8 }}
239
+ - {{ toYaml . | nindent 10 | trim }}
240
240
  {{- end }}
241
241
  {{- end }}
242
242
  {{- end }}
243
243
  {{- end }}
244
- {{- end }}
244
+ {{- end }}
@@ -1,11 +1,13 @@
1
- {{- if .Values.global.secret.pull }}
1
+ {{- /* global.secret may be absent, null or "" */ -}}
2
+ {{- $pull := ((.Values.global | default dict).secret | default dict).pull }}
3
+ {{- if $pull }}
2
4
  apiVersion: v1
3
5
  kind: Secret
4
6
  metadata:
5
7
  name: {{ print $.Release.Name "-pull" }}
6
8
  type: kubernetes.io/dockerconfigjson
7
9
  data:
8
- {{- with .Values.global.secret.pull }}
10
+ {{- with $pull }}
9
11
  .dockerconfigjson: {{ .auth | b64enc | printf "{\"auths\":{\"%s\":{\"auth\":\"%s\"}}}" .host | b64enc }}
10
12
  {{- end }}
11
13
  {{- end }}
@@ -1,11 +1,13 @@
1
- {{- if .Values.global.secret.root }}
1
+ {{- /* global.secret may be absent, null or "" */ -}}
2
+ {{- $root := ((.Values.global | default dict).secret | default dict).root }}
3
+ {{- if $root }}
2
4
  apiVersion: v1
3
5
  kind: Secret
4
6
  metadata:
5
7
  name: {{ print $.Release.Name "-root" }}
6
8
  type: Opaque
7
9
  data:
8
- {{- with .Values.global.secret.root }}
10
+ {{- with $root }}
9
11
  {{- range $key, $value := . }}
10
12
  {{- $key | nindent 2 }}{{- ": " -}}
11
13
  {{- if eq (typeOf $value) "string" -}}
@@ -0,0 +1,10 @@
1
+ # Values for non-default-branch releases (merge request review apps).
2
+ # Layered on top of the chart's values.yaml by `make run-install` / `make review`.
3
+ #
4
+ # The release name is <project>-<branch-slug>, so each review app already gets its
5
+ # own hosts: <project>-<branch-slug>-<service>.<SERVICE_BASE_DOMAIN>
6
+ # Keep SERVICE_BASE_DOMAIN the Cloudflare zone itself (one label deep): the free
7
+ # Universal SSL wildcard does not cover *.sub.example.com.
8
+ global:
9
+ root:
10
+ SERVICE_BASE_DOMAIN: "example.com"
@@ -29,7 +29,7 @@ global:
29
29
  root:
30
30
  SERVICE_DOMAIN: "WKS"
31
31
  SERVICE_BASE_SCHEMA: "https"
32
- SERVICE_BASE_DOMAIN: "api.example.com"
32
+ SERVICE_BASE_DOMAIN: "example.com"
33
33
  SERVICE_BASE_DOMAIN_CERT: "ssl-example.com"
34
34
  MYSQL_BASE_SCHEMA: "mysql"
35
35
  MYSQL_BASE_DATABASE: "dev"
@@ -0,0 +1 @@
1
+ {{- include "root.ingressroutetcp" $ }}
@@ -0,0 +1 @@
1
+ {{- include "root.job" $ }}
@@ -1,6 +1,19 @@
1
1
  enabled: true
2
2
  kind: <%= chartKind %>
3
- replicaCount: 1
3
+ <% if (chartKind === 'Job') { %>
4
+ # A Job's pod template is immutable, so a plain Job fails any `helm upgrade` that changes it
5
+ # (e.g. a new image tag). As a Helm hook it is recreated on every install/upgrade instead.
6
+ # post-install/post-upgrade runs after this release's own Secret, ConfigMap, ServiceAccount
7
+ # and pull secret exist. pre-install/pre-upgrade (e.g. DB migrations before the new app rolls
8
+ # out) runs BEFORE them on the first install, so then every reference must be external:
9
+ # secret/config entries via fromKeyRef, an existing imagePullSecrets name, and volumes from
10
+ # objects created outside the chart.
11
+ annotations:
12
+ helm.sh/hook: post-install,post-upgrade
13
+ helm.sh/hook-weight: "0"
14
+ helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
15
+ restartPolicy: Never
16
+ <% } %>replicaCount: 1
4
17
  image:
5
18
  repository: <%= containerRegistry %>
6
19
  tag: "<%= containerVersion %>"
@@ -8,28 +21,121 @@ image:
8
21
 
9
22
  imagePullSecrets: "{{Release.Name}}-pull"
10
23
 
24
+ # Plain values, injected as env:
25
+ # env:
26
+ # NODE_ENV: "production"
27
+ # ConfigMap entries (also injected as env); a value may reference an external ConfigMap:
28
+ # config:
29
+ # LOG_LEVEL: "info"
30
+ # DB_NAME:
31
+ # fromKeyRef: "master-db-config"
32
+ # Secret entries (also injected as env). Never commit real values here: reference an
33
+ # existing Secret, or pass them from CI variables.
34
+ # secret:
35
+ # DATABASE_URL:
36
+ # fromKeyRef: "<%= chartName %>-db"
37
+
38
+ # Overrides the image command, wrapped in /bin/sh -c:
39
+ # beforeScript:
40
+ # - "echo starting"
41
+ # script:
42
+ # - "node dist/main.js"
43
+
44
+ # initContainers:
45
+ # - name: volume-permissions
46
+ # image: busybox:1.36
47
+ # command: ["sh", "-c", "chown 1000:1000 /data"]
48
+ # volumeMounts:
49
+ # - name: data-storage
50
+ # mountPath: /data
51
+
52
+ # securityContext:
53
+ # runAsUser: 1000
54
+ # runAsGroup: 3000
55
+ # fsGroup: 2000
56
+
57
+ # Set requests on anything that runs as a review app, so previews cannot starve the cluster.
58
+ # resources:
59
+ # requests:
60
+ # cpu: 50m
61
+ # memory: 128Mi
62
+ # limits:
63
+ # memory: 512Mi
64
+
11
65
  service:
12
66
  type: ClusterIP
13
67
  port: 80
14
68
  targetPort: 80
69
+ # Extra ports (e.g. SMTP next to a web UI):
70
+ # ports:
71
+ # - port: 2500
72
+ # name: smtp
73
+ # Proxy to a host outside the cluster instead of pods:
74
+ # type: ExternalName
75
+ # externalName: 10.0.0.10
15
76
 
77
+ # TLS terminates at the Cloudflare edge and reaches Traefik over the tunnel as plain
78
+ # HTTP, so no tls block by default. The host is flat (one label under the base domain)
79
+ # to stay inside Cloudflare's one-level Universal SSL wildcard; SERVICE_BASE_NAME is the
80
+ # release name, which differs per branch (at most 30 chars, so keep chart names to 32
81
+ # chars or less to stay under the 63-char DNS label limit).
82
+ # For direct exposure with cert-manager, use the websecure entrypoint and add:
83
+ # tls:
84
+ # - secretName: SERVICE_BASE_DOMAIN_CERT
85
+ # hosts:
86
+ # - "{{SERVICE_BASE_NAME}}-<%= chartName %>.{{SERVICE_BASE_DOMAIN}}"
16
87
  ingress:
17
- className: "nginx"
88
+ className: "traefik"
18
89
  annotations:
19
- nginx.ingress.kubernetes.io/ssl-redirect: "true"
20
- nginx.ingress.kubernetes.io/rewrite-target: /$1
21
- nginx.ingress.kubernetes.io/use-gzip: "true"
22
- nginx.ingress.kubernetes.io/gzip-min-length: "20"
90
+ traefik.ingress.kubernetes.io/router.entrypoints: web
91
+ # Attach Traefik middlewares (<namespace>-<name>@kubernetescrd), e.g. a noindex header:
92
+ # traefik.ingress.kubernetes.io/router.middlewares: "default-noindex-headers@kubernetescrd"
93
+ # Backend speaks HTTPS:
94
+ # traefik.ingress.kubernetes.io/service.serversscheme: https
23
95
 
24
96
  hosts:
25
- - host: www.example.com
97
+ - host: "{{SERVICE_BASE_NAME}}-<%= chartName %>.{{SERVICE_BASE_DOMAIN}}"
26
98
  paths:
27
- - path: "/?(.*)"
28
- pathType: "ImplementationSpecific"
29
- tls:
30
- - secretName: SERVICE_BASE_DOMAIN_CERT
31
- hosts:
32
- - SERVICE_BASE_DOMAIN
99
+ - path: "/"
100
+ pathType: "Prefix"
101
+
102
+ # Traefik IngressRoute instead of Ingress (multiple routes, priorities, cross-namespace
103
+ # services such as an auth outpost). Disable `ingress` when using it.
104
+ # ingressRoute:
105
+ # entryPoints:
106
+ # - web
107
+ # routes:
108
+ # - match: Host(`{{SERVICE_BASE_NAME}}-<%= chartName %>.{{SERVICE_BASE_DOMAIN}}`)
109
+ # kind: Rule
110
+ # priority: 10
111
+ # services:
112
+ # - port: 80
113
+ # # scheme: https
114
+ # # serversTransport: "{{Release.Name}}-<%= chartName %>-transport"
115
+ # # middlewares:
116
+ # # - name: noindex-headers
117
+ # # namespace: default
118
+
119
+ # Backend transport for ingressRoute services (e.g. self-signed HTTPS upstream).
120
+ # Default name: <release>-<chart>-transport.
121
+ # serversTransport:
122
+ # insecureSkipVerify: true
123
+
124
+ # A Traefik Middleware owned by this chart. Default name: <release>-<chart>.
125
+ # middleware:
126
+ # headers:
127
+ # customResponseHeaders:
128
+ # X-Robots-Tag: "noindex, nofollow"
129
+
130
+ # Raw TCP routing through Traefik (databases, brokers), matched by SNI. SNI only exists
131
+ # inside TLS, so a named host needs `tls` (passthrough, or Traefik terminating); without
132
+ # TLS only the catch-all HostSNI(`*`) matches.
133
+ # ingressRouteTCP:
134
+ # entryPoints:
135
+ # - websecure
136
+ # host: "{{SERVICE_BASE_NAME}}-<%= chartName %>-tcp.{{SERVICE_BASE_DOMAIN}}"
137
+ # tls:
138
+ # passthrough: true
33
139
 
34
140
  readinessProbe:
35
141
  httpGet:
@@ -37,3 +143,11 @@ readinessProbe:
37
143
  port: 80
38
144
  initialDelaySeconds: 10
39
145
  periodSeconds: 5
146
+
147
+ # volumeMounts:
148
+ # - name: data-storage
149
+ # mountPath: /data
150
+ # volumes:
151
+ # - name: data-storage
152
+ # persistentVolumeClaim:
153
+ # claimName: "{{Release.Name}}-<%= chartName %>"
@@ -47,7 +47,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
47
47
  }
48
48
  };
49
49
  Object.defineProperty(exports, "__esModule", { value: true });
50
- exports.generateTemplate = exports.render = exports.K8S_REGISTRY_HOST = exports.NESTJS_API_PLATFORM = exports.TEMPLATE_NAME = void 0;
50
+ exports.detectPackageManager = exports.generateTemplate = exports.render = exports.K8S_REGISTRY_HOST = exports.NESTJS_API_PLATFORM = exports.TEMPLATE_NAME = void 0;
51
51
  var ejs = require("ejs");
52
52
  var fs = require("fs");
53
53
  var inquirer = require("inquirer");
@@ -266,7 +266,7 @@ function generateTemplate(templateDir, targetDirectory) {
266
266
  name: "k8s_chart_kind",
267
267
  type: "list",
268
268
  message: "what is the chart kind?",
269
- choices: ["Deployment", "StatefulSet", "CronJob"],
269
+ choices: ["Deployment", "StatefulSet", "CronJob", "Job"],
270
270
  default: "Deployment",
271
271
  when: function (answers) {
272
272
  var isNonInteractive = !!(yargs.argv['template'] && yargs.argv['name']);
@@ -376,27 +376,25 @@ function postProcess(options) {
376
376
  function isNode(options) {
377
377
  return fs.existsSync(path.join(options.templatePath, 'package.json'));
378
378
  }
379
- function postProcessNode(options) {
380
- shell.cd(options.targetPath);
381
- var cmd = '';
382
- /*
383
- if (shell.which('yarn')) {
384
- cmd = 'yarn';
385
- } else if (shell.which('npm')) {
386
- cmd = 'npm install';
387
- }
388
- */
389
- if (shell.which('npm')) {
390
- cmd = 'npm install';
379
+ function detectPackageManager(targetPath) {
380
+ if (fs.existsSync(path.join(targetPath, 'bun.lockb')) || fs.existsSync(path.join(targetPath, 'bun.lock'))) {
381
+ return 'bun install';
391
382
  }
392
- if (cmd) {
393
- var result = shell.exec(cmd);
394
- if (result.code !== 0) {
395
- return false;
396
- }
383
+ if (fs.existsSync(path.join(targetPath, 'pnpm-lock.yaml'))) {
384
+ return 'pnpm install';
397
385
  }
398
- else {
399
- console.log(chalk_1.default.red('No yarn or npm found. Cannot run installation.'));
386
+ if (fs.existsSync(path.join(targetPath, 'yarn.lock'))) {
387
+ return 'yarn install';
388
+ }
389
+ return 'npm install';
390
+ }
391
+ exports.detectPackageManager = detectPackageManager;
392
+ function postProcessNode(options) {
393
+ shell.cd(options.targetPath);
394
+ var cmd = detectPackageManager(options.targetPath);
395
+ var result = shell.exec(cmd);
396
+ if (result.code !== 0) {
397
+ return false;
400
398
  }
401
399
  return true;
402
400
  }
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ {
2
+ "version": 1,
3
+ "autoMode": {
4
+ "defaultAgent": "claude"
5
+ },
6
+ "quality": {
7
+ "requireTests": false,
8
+ "commands": {}
9
+ },
10
+ "tdd": {
11
+ "strategy": "lite",
12
+ "greenfieldDetection": true
13
+ },
14
+ "review": {
15
+ "enabled": true,
16
+ "checks": ["test"],
17
+ "commands": {}
18
+ },
19
+ "execution": {
20
+ "maxIterations": 6,
21
+ "costLimit": 5.0
22
+ }
23
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "feature": "enhancements",
3
+ "version": "1.0.0",
4
+ "project": "na-cli",
5
+ "branchName": "feat/nax-dogfood-enhancements",
6
+ "description": "Two small enhancements to na-cli: (A) a 'na list' command to discover available templates, and (E) smart package manager detection for 'na generate --install'.",
7
+ "userStories": [
8
+ {
9
+ "id": "US-001",
10
+ "title": "na list command shows all available templates",
11
+ "description": "Add a 'na list' (alias: 'na ls') command that prints all available templates with their names and descriptions, so users don't need to run 'na generate' and pick from an interactive prompt just to discover what exists.\n\nExisting patterns to follow:\n- Look at src/index.ts for how commands are registered with yargs\n- Look at src/utils/template.ts for the TEMPLATE_NAME enum and template definitions\n- List output should be formatted: name (left-padded) + description column\n- Tests go in: test/list.test.ts (create test/ dir if needed)\n- Build: npm run build (compiles TypeScript to dist/)\n- No external dependencies — use only what's already installed",
12
+ "acceptanceCriteria": [
13
+ "AC1: 'na list' prints all template names from the TEMPLATE_NAME enum, one per line",
14
+ "AC2: Each line shows template name and a short description (e.g. 'nestjs-api — NestJS REST API template')",
15
+ "AC3: 'na ls' works as an alias for 'na list'",
16
+ "AC4: Output is sorted alphabetically by template name",
17
+ "AC5: Unit tests cover the list output format and alias"
18
+ ],
19
+ "complexity": "simple",
20
+ "status": "passed",
21
+ "contextFiles": [
22
+ "src/index.ts",
23
+ "src/utils/template.ts"
24
+ ],
25
+ "attempts": 0,
26
+ "priorErrors": [],
27
+ "escalations": [],
28
+ "dependencies": [],
29
+ "tags": [],
30
+ "storyPoints": 1,
31
+ "passes": true
32
+ },
33
+ {
34
+ "id": "US-002",
35
+ "title": "na generate --install detects correct package manager",
36
+ "description": "The 'na generate --install' flag currently hardcodes 'npm install'. It should auto-detect the correct package manager from lockfiles in the generated project directory.\n\nDetection priority (highest to lowest):\n1. bun.lockb or bun.lock → bun install\n2. pnpm-lock.yaml → pnpm install\n3. yarn.lock → yarn install\n4. package-lock.json or none → npm install\n\nExisting patterns to follow:\n- Look at src/utils/template.ts for where 'npm install' is currently called (search for 'install')\n- Detection should happen AFTER template files are written (lockfile may be part of template)\n- Tests go in: test/package-manager.test.ts\n- Build: npm run build",
37
+ "acceptanceCriteria": [
38
+ "AC1: If generated project contains bun.lockb or bun.lock, runs 'bun install'",
39
+ "AC2: If generated project contains pnpm-lock.yaml, runs 'pnpm install'",
40
+ "AC3: If generated project contains yarn.lock, runs 'yarn install'",
41
+ "AC4: Falls back to 'npm install' when no lockfile present",
42
+ "AC5: Lockfile detection checks the target output directory (not cwd)",
43
+ "AC6: Unit tests cover all four detection scenarios"
44
+ ],
45
+ "complexity": "simple",
46
+ "status": "passed",
47
+ "contextFiles": [
48
+ "src/utils/template.ts",
49
+ "src/index.ts"
50
+ ],
51
+ "attempts": 0,
52
+ "priorErrors": [],
53
+ "escalations": [],
54
+ "dependencies": [],
55
+ "tags": [],
56
+ "storyPoints": 1,
57
+ "passes": true
58
+ }
59
+ ],
60
+ "updatedAt": "2026-03-01T09:39:55.209Z"
61
+ }
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@nathapp/na-cli",
3
- "version": "1.0.4",
3
+ "version": "1.0.7",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "start": "npm run build && node dist/index.js",
7
- "build": "tsc && shx rm -rf dist/templates && shx cp -r templates dist"
7
+ "build": "tsc && shx rm -rf dist/templates && shx cp -r templates dist",
8
+ "test": "npm run build && bun test test/"
8
9
  },
9
10
  "bin": {
10
11
  "na-cli": "./dist/index.js",