go-duck-cli 1.3.38 → 1.3.41

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.
@@ -13,7 +13,12 @@ export const generateDeploymentArtifacts = async (config, projectRootDir) => {
13
13
  await fs.ensureDir(keycloakDir);
14
14
  await fs.ensureDir(githubDir);
15
15
 
16
+ const toKebabCase = (str) => {
17
+ if (!str) return '';
18
+ return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();
19
+ };
16
20
  const appName = config.name || 'go-duck';
21
+ const k8sAppName = toKebabCase(appName);
17
22
  const parts = appName.split(/[-_]/);
18
23
  const shortName = (parts.length > 1 ? parts.map(w => w[0]).join('') : appName).substring(0, 10).toLowerCase() || 'goduck';
19
24
  const appPort = config.server?.rest?.port || 8080;
@@ -75,9 +80,11 @@ FROM gcr.io/distroless/static-debian12
75
80
  WORKDIR /app
76
81
 
77
82
  COPY --from=builder /app/server .
83
+
78
84
  COPY --from=builder /app/application.yml .
79
85
  COPY --from=builder /app/application-dev.yml .
80
86
  COPY --from=builder /app/application-prod.yml .
87
+ COPY --from=builder /app/docs/ /app/docs/
81
88
 
82
89
  EXPOSE ${appPort}
83
90
  ENV GO_PROFILE=prod
@@ -468,21 +475,21 @@ echo "========================================="
468
475
  const k8sAppYaml = `apiVersion: apps/v1
469
476
  kind: Deployment
470
477
  metadata:
471
- name: ${appName}
478
+ name: ${k8sAppName}
472
479
  labels:
473
- app: ${appName}
480
+ app: ${k8sAppName}
474
481
  spec:
475
482
  replicas: 1
476
483
  selector:
477
484
  matchLabels:
478
- app: ${appName}
485
+ app: ${k8sAppName}
479
486
  template:
480
487
  metadata:
481
488
  labels:
482
- app: ${appName}
489
+ app: ${k8sAppName}
483
490
  spec:
484
491
  containers:
485
- - name: ${appName}
492
+ - name: ${k8sAppName}
486
493
  image: ${appName}:latest
487
494
  env:
488
495
  - name: GO_PROFILE
@@ -490,7 +497,7 @@ spec:
490
497
  - name: GO_DUCK_SERVER_REST_PORT
491
498
  value: "${appPort}"
492
499
  - name: GO_DUCK_DATASOURCE_HOST
493
- value: postgres.${shortName}-postgres-k8s.svc.cluster.local
500
+ value: postgres.${k8sAppName}-postgres-k8s.svc.cluster.local
494
501
  - name: GO_DUCK_DATASOURCE_USERNAME
495
502
  value: "${config.datasource?.username || 'postgres'}"
496
503
  - name: GO_DUCK_DATASOURCE_PASSWORD
@@ -502,31 +509,31 @@ spec:
502
509
  - name: GO_DUCK_DATASOURCE_MONGODB_ENABLED
503
510
  value: "${config.datasource?.mongodb?.enabled ? 'true' : 'false'}"
504
511
  - name: GO_DUCK_DATASOURCE_MONGODB_URI
505
- value: mongodb://mongodb.${shortName}-mongodb-k8s.svc.cluster.local:27017
512
+ value: mongodb://mongodb.${k8sAppName}-mongodb-k8s.svc.cluster.local:27017
506
513
  - name: GO_DUCK_DATASOURCE_MONGODB_DATABASE
507
514
  value: "${config.datasource?.mongodb?.database || 'goduck_document_store'}"
508
515
  - name: GO_DUCK_CACHE_REDIS_HOST
509
- value: redis.${shortName}-redis-k8s.svc.cluster.local:6379
516
+ value: redis.${k8sAppName}-redis-k8s.svc.cluster.local:6379
510
517
  - name: GO_DUCK_CACHE_REDIS_PASSWORD
511
518
  value: "${config.cache?.redis?.password || ''}"
512
519
  - name: GO_DUCK_MESSAGING_MQTT_BROKER
513
- value: tcp://mosquitto.${shortName}-mosquitto-k8s.svc.cluster.local:1883
520
+ value: tcp://mosquitto.${k8sAppName}-mosquitto-k8s.svc.cluster.local:1883
514
521
  - name: GO_DUCK_MESSAGING_MQTT_USERNAME
515
522
  value: "${config.messaging?.mqtt?.username || 'dev_user'}"
516
523
  - name: GO_DUCK_MESSAGING_MQTT_PASSWORD
517
524
  value: "${config.messaging?.mqtt?.password || 'dev_password'}"
518
525
  - name: GO_DUCK_MESSAGING_NATS_URL
519
- value: nats://nats.${shortName}-nats-k8s.svc.cluster.local:4222
526
+ value: nats://nats.${k8sAppName}-nats-k8s.svc.cluster.local:4222
520
527
  - name: GO_DUCK_TELEMETRY_OTEL_ENDPOINT
521
- value: otel-collector.${shortName}-otel-collector-k8s.svc.cluster.local:4317
528
+ value: otel-collector.${k8sAppName}-otel-collector-k8s.svc.cluster.local:4317
522
529
  - name: GO_DUCK_ELASTICSEARCH_ADDRESSES
523
- value: http://elasticsearch.${shortName}-elasticsearch-k8s.svc.cluster.local:9200
530
+ value: http://elasticsearch.${k8sAppName}-elasticsearch-k8s.svc.cluster.local:9200
524
531
  - name: GO_DUCK_ELASTICSEARCH_USERNAME
525
532
  value: "${config.elasticsearch?.username || 'elastic'}"
526
533
  - name: GO_DUCK_ELASTICSEARCH_PASSWORD
527
534
  value: "${config.elasticsearch?.password || 'changeme'}"
528
535
  - name: GO_DUCK_SECURITY_KEYCLOAK_HOST
529
- value: http://keycloak.${shortName}-keycloak-k8s.svc.cluster.local:8080
536
+ value: http://keycloak.${k8sAppName}-keycloak-k8s.svc.cluster.local:8080
530
537
  - name: GO_DUCK_SECURITY_KEYCLOAK_REALM
531
538
  value: "${config.security?.['keycloak-realm'] || 'go-duck-realm'}"
532
539
  - name: GO_DUCK_SECURITY_KEYCLOAK_APP_CLIENT_ID
@@ -536,7 +543,7 @@ spec:
536
543
  - name: GO_DUCK_SECURITY_KEYCLOAK_SERVICE_SECRET
537
544
  value: "${config.security?.['keycloak-service-secret'] || 'service-secret-123'}"
538
545
  - name: GO_DUCK_STORAGE_MINIO_ENDPOINT
539
- value: "http://minio.${shortName}-minio-k8s.svc.cluster.local:9000"
546
+ value: "http://minio.${k8sAppName}-minio-k8s.svc.cluster.local:9000"
540
547
  - name: GO_DUCK_STORAGE_MINIO_ACCESS_KEY
541
548
  value: "${config.storage?.minio?.['access-key'] || 'minioadmin'}"
542
549
  - name: GO_DUCK_STORAGE_MINIO_SECRET_KEY
@@ -550,7 +557,7 @@ spec:
550
557
  apiVersion: v1
551
558
  kind: Service
552
559
  metadata:
553
- name: ${appName}
560
+ name: ${k8sAppName}
554
561
  spec:
555
562
  type: NodePort
556
563
  ports:
@@ -563,7 +570,7 @@ spec:
563
570
  targetPort: grpc
564
571
  nodePort: 30090
565
572
  selector:
566
- app: ${appName}
573
+ app: ${k8sAppName}
567
574
  `;
568
575
 
569
576
  const k8sPostgresYaml = `apiVersion: v1
@@ -1001,7 +1008,7 @@ spec:
1001
1008
  await fs.writeFile(path.join(k8sDir, 'mosquitto.conf'), mosquittoConf);
1002
1009
  // Namespace calculation: unique namespace per service
1003
1010
  const applyNs = (yamlString, serviceName) => {
1004
- const nsName = `${shortName}-${serviceName}-k8s`;
1011
+ const nsName = `${k8sAppName}-${serviceName}-k8s`;
1005
1012
  const nsBlock = `apiVersion: v1\nkind: Namespace\nmetadata:\n name: ${nsName}\n---\n`;
1006
1013
  return nsBlock + yamlString.replace(/^metadata:$/gm, `metadata:\n namespace: ${nsName}`);
1007
1014
  };
@@ -1012,7 +1019,7 @@ spec:
1012
1019
  // We conditionally add minio if storage is enabled (or any blob provider), but for safety we'll just generate its namespace always.
1013
1020
  servicesList.push('minio');
1014
1021
 
1015
- const k8sNamespaceYaml = servicesList.map(svc => `apiVersion: v1\nkind: Namespace\nmetadata:\n name: ${shortName}-${svc}-k8s`).join('\n---\n');
1022
+ const k8sNamespaceYaml = servicesList.map(svc => `apiVersion: v1\nkind: Namespace\nmetadata:\n name: ${k8sAppName}-${svc}-k8s`).join('\n---\n');
1016
1023
 
1017
1024
  await fs.writeFile(path.join(k8sDir, 'namespace.yaml'), k8sNamespaceYaml);
1018
1025
 
@@ -17,7 +17,7 @@ export const generateSwaggerDocs = async (config, entities, outputDir, openEntit
17
17
  description: `Generated documentation for ${config.name} microservice`
18
18
  },
19
19
  servers: [
20
- { url: `http://localhost:${config.server?.rest?.port || 8080}`, description: 'Local Development Server' }
20
+ { url: "/", description: "Current Host" }
21
21
  ],
22
22
  paths: {},
23
23
  components: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "go-duck-cli",
3
- "version": "1.3.38",
3
+ "version": "1.3.41",
4
4
  "description": "The Ultimate Evolutionary Go Microservice Scaffolder.",
5
5
  "main": "index.js",
6
6
  "type": "module",