underpost 2.99.5 → 2.99.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 (37) hide show
  1. package/.github/workflows/ghpkg.ci.yml +10 -25
  2. package/.github/workflows/npmpkg.ci.yml +13 -2
  3. package/CHANGELOG.md +496 -0
  4. package/README.md +4 -4
  5. package/baremetal/commission-workflows.json +43 -6
  6. package/bin/deploy.js +13 -0
  7. package/cli.md +84 -42
  8. package/examples/static-page/README.md +80 -13
  9. package/jsdoc.json +26 -5
  10. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +47 -0
  11. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +47 -0
  12. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  13. package/manifests/deployment/dd-test-development/deployment.yaml +2 -2
  14. package/package.json +2 -4
  15. package/scripts/maas-setup.sh +13 -9
  16. package/scripts/rocky-kickstart.sh +294 -0
  17. package/src/cli/baremetal.js +237 -555
  18. package/src/cli/cloud-init.js +27 -45
  19. package/src/cli/index.js +52 -6
  20. package/src/cli/kickstart.js +149 -0
  21. package/src/cli/repository.js +166 -13
  22. package/src/cli/run.js +26 -19
  23. package/src/cli/ssh.js +1 -1
  24. package/src/cli/static.js +27 -1
  25. package/src/cli/system.js +332 -0
  26. package/src/client/components/core/Docs.js +22 -3
  27. package/src/db/DataBaseProvider.js +3 -3
  28. package/src/db/mariadb/MariaDB.js +3 -3
  29. package/src/db/mongo/MongooseDB.js +3 -3
  30. package/src/index.js +28 -5
  31. package/src/mailer/EmailRender.js +3 -3
  32. package/src/mailer/MailerProvider.js +4 -4
  33. package/src/server/backup.js +23 -5
  34. package/src/server/client-build-docs.js +29 -3
  35. package/src/server/conf.js +6 -27
  36. package/src/server/cron.js +354 -135
  37. package/src/server/dns.js +2 -0
@@ -6,7 +6,7 @@
6
6
  "isoUrl": "https://cdimage.ubuntu.com/releases/24.04/release/ubuntu-24.04.3-live-server-arm64.iso",
7
7
  "tftpPrefix": "rpi4mb",
8
8
  "bootstrapHttpServerPort": 8888,
9
- "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 ISO-RAM commissioning (ARM64)",
9
+ "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 ISO-RAM Ubuntu 24.04 ephemeral commissioning (ARM64)",
10
10
  "networkInterfaceName": "enabcm6e4ei0",
11
11
  "chronyc": {
12
12
  "timezone": "America/Santiago",
@@ -35,7 +35,7 @@
35
35
  "architecture": "arm64",
36
36
  "tftpPrefix": "rpi4mb",
37
37
  "bootstrapHttpServerPort": 8888,
38
- "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 CHROOT commissioning (ARM64)",
38
+ "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 CHROOT Ubuntu 24.04 ephemeral commissioning (ARM64)",
39
39
  "networkInterfaceName": "enabcm6e4ei0",
40
40
  "firmwares": [
41
41
  {
@@ -71,7 +71,7 @@
71
71
  "isoUrl": "https://cdimage.ubuntu.com/releases/24.04/release/ubuntu-24.04.3-live-server-arm64.iso",
72
72
  "tftpPrefix": "rpi4mb",
73
73
  "bootstrapHttpServerPort": 8888,
74
- "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 ISO-NFS commissioning (ARM64)",
74
+ "menuentryStr": "UNDERPOST.NET UEFI/GRUB/MAAS RPi4 ISO-NFS Ubuntu 24.04 ephemeral commissioning (ARM64)",
75
75
  "networkInterfaceName": "enabcm6e4ei0",
76
76
  "chronyc": {
77
77
  "timezone": "America/Santiago",
@@ -100,7 +100,7 @@
100
100
  "architecture": "arm64",
101
101
  "tftpPrefix": "rpi4mb",
102
102
  "bootstrapHttpServerPort": 8888,
103
- "menuentryStr": "UNDERPOST.NET Rocky9 Container CHROOT NFS (ARM64)",
103
+ "menuentryStr": "UNDERPOST.NET Container CHROOT Rocky Linux 9 ephemeral commissioning (ARM64)",
104
104
  "networkInterfaceName": "eth0",
105
105
  "firmwares": [
106
106
  {
@@ -129,7 +129,7 @@
129
129
  "isoUrl": "https://releases.ubuntu.com/releases/24.04/ubuntu-24.04.3-live-server-amd64.iso",
130
130
  "tftpPrefix": "envy",
131
131
  "bootstrapHttpServerPort": 8888,
132
- "menuentryStr": "UNDERPOST.NET UEFI/ISO-IPXE/MAAS hp-envy ISO-NFS commissioning (AMD64)",
132
+ "menuentryStr": "UNDERPOST.NET UEFI/ISO-IPXE/MAAS hp-envy ISO-NFS Ubuntu 24.04 ephemeral commissioning (AMD64)",
133
133
  "networkInterfaceName": "eth0",
134
134
  "chronyc": {
135
135
  "timezone": "America/Santiago",
@@ -153,7 +153,7 @@
153
153
  "isoUrl": "https://releases.ubuntu.com/releases/24.04/ubuntu-24.04.3-live-server-amd64.iso",
154
154
  "tftpPrefix": "envy",
155
155
  "bootstrapHttpServerPort": 8888,
156
- "menuentryStr": "UNDERPOST.NET UEFI/ISO-IPXE/MAAS hp-envy ISO-RAM commissioning (AMD64)",
156
+ "menuentryStr": "UNDERPOST.NET UEFI/ISO-IPXE/MAAS hp-envy ISO-RAM Ubuntu 24.04 ephemeral commissioning (AMD64)",
157
157
  "networkInterfaceName": "eth0",
158
158
  "chronyc": {
159
159
  "timezone": "America/Santiago",
@@ -169,5 +169,42 @@
169
169
  "keyboard": {
170
170
  "layout": "es"
171
171
  }
172
+ },
173
+ "hp-envy-iso-ram-rocky9": {
174
+ "type": "iso-ram",
175
+ "osIdLike": "rhel centos fedora",
176
+ "architecture": "amd64",
177
+ "isoUrl": "https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9-latest-x86_64-boot.iso",
178
+ "tftpPrefix": "envy-rocky9",
179
+ "bootstrapHttpServerPort": 8888,
180
+ "menuentryStr": "UNDERPOST.NET UEFI/ISO-IPXE/KICKSTART-ANACONDA hp-envy ISO-RAM Rocky Linux 9 ephemeral commissioning (AMD64)",
181
+ "networkInterfaceName": "eth0",
182
+ "chronyc": {
183
+ "timezone": "America/Santiago",
184
+ "chronyConfPath": "/etc/chrony/chrony.conf"
185
+ },
186
+ "firmwares": [],
187
+ "container": {
188
+ "image": "quay.io/rockylinux/rockylinux:9",
189
+ "architecture": "amd64",
190
+ "packages": [
191
+ "kernel",
192
+ "kernel-core",
193
+ "kernel-modules",
194
+ "linux-firmware",
195
+ "dracut",
196
+ "dracut-network",
197
+ "dracut-config-generic",
198
+ "dracut-live",
199
+ "nfs-utils",
200
+ "tar",
201
+ "iproute",
202
+ "openssh-server",
203
+ "openssh-clients"
204
+ ]
205
+ },
206
+ "keyboard": {
207
+ "layout": "es"
208
+ }
172
209
  }
173
210
  }
package/bin/deploy.js CHANGED
@@ -468,7 +468,9 @@ try {
468
468
  shellExec(`node bin new --deploy-id dd-default`);
469
469
  console.log(fs.existsSync(`./engine-private/conf/dd-default`));
470
470
  shellExec(`sudo rm -rf ./engine-private/conf/dd-default`);
471
+ shellExec(`node bin cron --dev --setup-start`);
471
472
  shellExec(`node bin/deploy build-envs`);
473
+ shellExec(`node bin cmt --changelog-build`);
472
474
  break;
473
475
  }
474
476
 
@@ -1122,6 +1124,17 @@ nvidia/gpu-operator \
1122
1124
  break;
1123
1125
  }
1124
1126
 
1127
+ case 'sync-start': {
1128
+ const originPackageJson = JSON.parse(fs.readFileSync(`./package.json`, 'utf8'));
1129
+ for (const deployId of fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',')) {
1130
+ const packageJsonPath = `./engine-private/conf/${deployId}/package.json`;
1131
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
1132
+ packageJson.scripts.start = `${originPackageJson.scripts.start} ${deployId}`;
1133
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 4), 'utf8');
1134
+ }
1135
+ break;
1136
+ }
1137
+
1125
1138
  case 'sync-envs': {
1126
1139
  for (const deployId of ['dd-cron'].concat(
1127
1140
  fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(','),
package/cli.md CHANGED
@@ -1,4 +1,4 @@
1
- ## underpost ci/cd cli v2.99.5
1
+ ## underpost ci/cd cli v2.99.7
2
2
 
3
3
  ### Usage: `underpost [options] [command]`
4
4
  ```
@@ -25,11 +25,11 @@ Commands:
25
25
  install Quickly imports Underpost npm dependencies by copying them.
26
26
  db [options] [deploy-list] Manages database operations with support for MariaDB and MongoDB, including import/export, multi-pod targeting, and Git integration.
27
27
  metadata [options] [deploy-id] [host] [path] Manages cluster metadata operations, including import and export.
28
- cron [options] [deploy-list] [job-list] Manages cron jobs, including initialization, execution, and configuration updates.
28
+ cron [options] [deploy-list] [job-list] Manages cron jobs: execute jobs directly or generate and apply K8s CronJob manifests.
29
29
  fs [options] [path] Manages file storage, defaulting to file upload operations.
30
30
  test [options] [deploy-list] Manages and runs tests, defaulting to the current Underpost default test suite.
31
31
  monitor [options] <deploy-id> [env] Manages health server monitoring for specified deployments.
32
- ssh [options]
32
+ ssh [options] Manages SSH credentials and sessions for remote access to cluster nodes or services.
33
33
  run [options] <runner-id> [path] Runs specified scripts using various runners.
34
34
  lxd [options] Manages LXD containers and virtual machines.
35
35
  baremetal [options] [workflow-id] Manages baremetal server operations, including installation, database setup, commissioning, and user management.
@@ -142,33 +142,46 @@ Manages commits to a GitHub repository, supporting various commit types and
142
142
  options.
143
143
 
144
144
  Arguments:
145
- path The absolute or relative directory path of the
146
- repository.
147
- commit-type The type of commit to perform. Options: feat, fix,
148
- docs, style, refactor, perf, ci, cd, infra, build,
149
- test, chore, revert, backup.
150
- module-tag Optional: Sets a specific module tag for the commit.
151
- message Optional: Provides an additional custom message for
152
- the commit.
145
+ path The absolute or relative directory path of
146
+ the repository.
147
+ commit-type The type of commit to perform. Options:
148
+ feat, fix, docs, style, refactor, perf,
149
+ ci, cd, infra, build, test, chore, revert,
150
+ backup.
151
+ module-tag Optional: Sets a specific module tag for
152
+ the commit.
153
+ message Optional: Provides an additional custom
154
+ message for the commit.
153
155
 
154
156
  Options:
155
- --log <latest-n> Shows commit history from the specified number of
156
- latest n path commits.
157
- --last-msg <latest-n> Displays the last n commit message.
158
- --empty Allows committing with empty files.
159
- --copy Copies the generated commit message to the
160
- clipboard.
161
- --info Displays information about available commit types.
162
- --diff Shows the current git diff changes.
163
- --edit Edit last commit.
164
- --msg <msg> Sets a custom commit message.
165
- --deploy-id <deploy-id> Sets the deployment configuration ID for the commit
166
- context.
167
- --cached Commit staged changes only or context.
168
- --hashes <hashes> Comma-separated list of specific file hashes of
169
- commits.
170
- --extension <extension> specific file extensions of commits.
171
- -h, --help display help for command
157
+ --log <latest-n> Shows commit history from the specified
158
+ number of latest n path commits.
159
+ --last-msg <latest-n> Displays the last n commit message.
160
+ --empty Allows committing with empty files.
161
+ --copy Copies the generated commit message to the
162
+ clipboard.
163
+ --info Displays information about available
164
+ commit types.
165
+ --diff Shows the current git diff changes.
166
+ --edit Edit last commit.
167
+ --deploy-id <deploy-id> Sets the deployment configuration ID for
168
+ the commit context.
169
+ --cached Commit staged changes only or context.
170
+ --hashes <hashes> Comma-separated list of specific file
171
+ hashes of commits.
172
+ --extension <extension> specific file extensions of commits.
173
+ --changelog [latest-n] Print plain the changelog of the specified
174
+ number of latest n commits, if no number
175
+ is provided it will get the changelog to
176
+ latest ci integration
177
+ --changelog-build Builds a CHANGELOG.md file based on the
178
+ commit history
179
+ --changelog-min-version <version> Sets the minimum version limit for
180
+ --changelog-build (default: 2.85.0)
181
+ --changelog-no-hash Excludes commit hashes from the generated
182
+ changelog entries (used with
183
+ --changelog-build).
184
+ -h, --help display help for command
172
185
 
173
186
  ```
174
187
 
@@ -255,6 +268,8 @@ Options:
255
268
  --lang <lang> HTML lang attribute (default: en).
256
269
  --dir <dir> HTML dir attribute (default: ltr).
257
270
  --dev Sets the development cli context
271
+ --run-sv [port] Start a standalone Express static server to
272
+ preview the static build (default port: 5000).
258
273
  -h, --help display help for command
259
274
 
260
275
  ```
@@ -630,22 +645,41 @@ Options:
630
645
  ```
631
646
  Usage: underpost cron [options] [deploy-list] [job-list]
632
647
 
633
- Manages cron jobs, including initialization, execution, and configuration
634
- updates.
648
+ Manages cron jobs: execute jobs directly or generate and apply K8s CronJob
649
+ manifests.
635
650
 
636
651
  Arguments:
637
- deploy-list A comma-separated list of deployment IDs (e.g.,
638
- "default-a,default-b").
639
- job-list A comma-separated list of job IDs. Options:
640
- dns,backup. Defaults to all available jobs.
652
+ deploy-list A comma-separated list of deployment IDs (e.g.,
653
+ "default-a,default-b").
654
+ job-list A comma-separated list of job IDs. Options:
655
+ dns,backup. Defaults to all available jobs.
641
656
 
642
657
  Options:
643
- --init-pm2-cronjobs Initializes PM2 cron jobs from configuration for
644
- the specified deployment IDs.
645
- --git Uploads cron job configurations to GitHub.
646
- --update-package-scripts Updates package.json start scripts for each
647
- deploy-id configuration.
648
- -h, --help display help for command
658
+ --generate-k8s-cronjobs Generates Kubernetes CronJob YAML manifests from
659
+ cron configuration.
660
+ --apply Applies generated K8s CronJob manifests to the
661
+ cluster via kubectl.
662
+ --setup-start [deploy-id] Updates deploy-id package.json start script and
663
+ generates+applies its K8s CronJob manifests.
664
+ --namespace <namespace> Kubernetes namespace for the CronJob resources
665
+ (default: "default").
666
+ --image <image> Custom container image for the CronJob pods.
667
+ --git Pass --git flag to cron job execution.
668
+ --cmd <cmd> Optional pre-script commands to run before cron
669
+ execution.
670
+ --dev Use local ./ base path instead of global underpost
671
+ installation.
672
+ --k3s Use k3s cluster context (apply directly on host).
673
+ --kind Use kind cluster context (apply via kind-worker
674
+ container).
675
+ --kubeadm Use kubeadm cluster context (apply directly on
676
+ host).
677
+ --dry-run Preview cron jobs without executing them.
678
+ --create-job-now After applying manifests, immediately create a Job
679
+ from each CronJob (requires --apply).
680
+ --ssh Execute backup commands via SSH on the remote node
681
+ instead of locally.
682
+ -h, --help display help for command
649
683
 
650
684
  ```
651
685
 
@@ -747,6 +781,9 @@ Options:
747
781
  ```
748
782
  Usage: underpost ssh [options]
749
783
 
784
+ Manages SSH credentials and sessions for remote access to cluster nodes or
785
+ services.
786
+
750
787
  Options:
751
788
  --deploy-id <deploy-id> Sets deploy id context for ssh operations.
752
789
  --generate Generates new ssh credential and stores it in
@@ -792,7 +829,7 @@ Options:
792
829
  Runs specified scripts using various runners.
793
830
 
794
831
  Arguments:
795
- runner-id The runner ID to run. Options: dev-cluster,metadata,svc-ls,svc-rm,ssh-deploy-info,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-image,clean,pull,release-deploy,ssh-deploy,ide,crypto-policy,sync,stop,ssh-deploy-stop,ssh-deploy-db-rollback,ssh-deploy-db,ssh-deploy-db-status,tz,cron,get-proxy,instance-promote,instance,ls-deployments,host-update,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-devices,disk-usage,dev,service,etc-hosts,sh,log,ps,ptls,release-cmt,deploy-test,sync-replica,tf-vae-test,spark-template,rmi,kill,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job.
832
+ runner-id The runner ID to run. Options: dev-cluster,metadata,svc-ls,svc-rm,ssh-deploy-info,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-image,clean,pull,release-deploy,ssh-deploy,ide,crypto-policy,sync,stop,ssh-deploy-stop,ssh-deploy-db-rollback,ssh-deploy-db,ssh-deploy-db-status,tz,get-proxy,instance-promote,instance,ls-deployments,host-update,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-devices,disk-usage,dev,service,etc-hosts,sh,log,ps,ptls,release-cmt,deploy-test,sync-replica,tf-vae-test,spark-template,rmi,kill,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job.
796
833
  path The input value, identifier, or path for the operation.
797
834
 
798
835
  Options:
@@ -834,7 +871,8 @@ Options:
834
871
  --expose Enables service exposure for the runner execution.
835
872
  --conf-server-path <conf-server-path> Sets a custom configuration server path.
836
873
  --underpost-root <underpost-root> Sets a custom Underpost root path.
837
- --cron-jobs <jobs> Comma-separated list of cron jobs to run before executing the script.
874
+ --cmd-cron-jobs <cmd-cron-jobs> Pre-script commands to run before cron job execution.
875
+ --deploy-id-cron-jobs <deploy-id-cron-jobs> Specifies deployment IDs to synchronize cron jobs with during execution.
838
876
  --timezone <timezone> Sets the timezone for the runner execution.
839
877
  --kubeadm Sets the kubeadm cluster context for the runner execution.
840
878
  --k3s Sets the k3s cluster context for the runner execution.
@@ -855,6 +893,8 @@ Options:
855
893
  --monitor-status-kind-type <kind-type> Sets the Kubernetes resource kind type to monitor (default: "pods").
856
894
  --monitor-status-delta-ms <milliseconds> Sets the polling interval in milliseconds for status monitoring (default: 1000).
857
895
  --monitor-status-max-attempts <attempts> Sets the maximum number of status check attempts (default: 600).
896
+ --dry-run Preview operations without executing them.
897
+ --create-job-now After applying cron manifests, immediately create a Job from each CronJob (forwarded to cron runner).
858
898
  -h, --help display help for command
859
899
 
860
900
  ```
@@ -943,11 +983,13 @@ Options:
943
983
  --remove-machines <system-ids> Removes baremetal machines by comma-separated system IDs, or use "all"
944
984
  --clear-discovered Clears all discovered baremetal machines from the database.
945
985
  --commission Init workflow for commissioning a physical machine.
986
+ --bootstrap-http-server-run Runs a temporary bootstrap HTTP server for generic purposes such as serving iPXE scripts or ISO images during commissioning.
946
987
  --bootstrap-http-server-path <path> Sets a custom bootstrap HTTP server path for baremetal commissioning.
947
988
  --bootstrap-http-server-port <port> Sets a custom bootstrap HTTP server port for baremetal commissioning.
948
989
  --iso-url <url> Uses a custom ISO URL for baremetal machine commissioning.
949
990
  --nfs-build Builds an NFS root filesystem for a workflow id config architecture using QEMU emulation.
950
991
  --nfs-mount Mounts the NFS root filesystem for a workflow id config architecture.
992
+ --nfs-reset Resets the NFS server completely, closing all connections before reloading exports.
951
993
  --nfs-unmount Unmounts the NFS root filesystem for a workflow id config architecture.
952
994
  --nfs-build-server Builds the NFS server for a workflow id config architecture.
953
995
  --nfs-sh Copies QEMU emulation root entrypoint shell command to the clipboard.
@@ -26,6 +26,30 @@ underpost static --generate-config ./static-config.json
26
26
  underpost static --config-file ./examples/static-page/static-config-example.json
27
27
  ```
28
28
 
29
+ ## Preview with Static Server
30
+
31
+ Use `--run-sv` to start a standalone Express static file server that serves the build output directory, so you can preview your generated pages in a browser.
32
+
33
+ ```sh
34
+ # Build and serve on default port 5000:
35
+ underpost static --page ./examples/static-page/ssr-components/CustomPage.js \
36
+ --output-path ./dist/index.html \
37
+ --run-sv
38
+
39
+ # Build and serve on a custom port:
40
+ underpost static --page ./examples/static-page/ssr-components/CustomPage.js \
41
+ --output-path ./dist/index.html \
42
+ --run-sv 3000
43
+
44
+ # Serve an existing build directory without rebuilding:
45
+ underpost static --output-path ./dist/index.html --run-sv
46
+
47
+ # Serve the current working directory:
48
+ underpost static --run-sv 8080
49
+ ```
50
+
51
+ When `--output-path` is provided, the server serves the directory containing the output file (e.g. `./dist/`). Otherwise it serves the current working directory.
52
+
29
53
  ## Config File Reference
30
54
 
31
55
  See [`static-config-example.json`](./static-config-example.json) for a complete working example.
@@ -34,6 +58,7 @@ See [`static-config-example.json`](./static-config-example.json) for a complete
34
58
  |-------|------|-------------|
35
59
  | `page` | `string` | Path to the SSR component to render |
36
60
  | `outputPath` | `string` | Output HTML file path |
61
+ | `buildPath` | `string` | Base path for static documents or assets (default: `"/"`) |
37
62
  | `env` | `string` | `"production"` or `"development"` |
38
63
  | `minify` | `boolean` | Minify HTML output |
39
64
  | `lang` | `string` | HTML `lang` attribute |
@@ -51,20 +76,62 @@ See [`static-config-example.json`](./static-config-example.json) for a complete
51
76
 
52
77
  Flags override config file values when both are provided.
53
78
 
79
+ ### Build & Output
80
+
81
+ ```sh
82
+ underpost static --page <path> # SSR component path
83
+ --output-path <path> # Output file
84
+ --build-path <path> # Base path for assets (default: "/")
85
+ --config-file <path> # JSON config file
86
+ --generate-config [path] # Generate a template config file
87
+ --env <env> # production | development
88
+ --minify / --no-minify # Toggle minification
89
+ --lang <lang> # HTML lang attribute (default: en)
90
+ --dir <dir> # HTML dir attribute (default: ltr)
91
+ --dev # Development mode
92
+ ```
93
+
94
+ ### Metadata & SEO
95
+
96
+ ```sh
97
+ --title <title> # Page title (deprecated: use --config-file)
98
+ --description <text> # Meta description
99
+ --keywords <a,b,c> # Comma-separated keywords
100
+ --author <name> # Meta author
101
+ --theme-color <color> # Theme color for mobile browsers
102
+ --canonical-url <url> # Canonical URL for SEO
103
+ --thumbnail <url> # Open Graph thumbnail image URL
104
+ --locale <locale> # Page locale (default: en-US)
105
+ --site-name <name> # Site name for Open Graph
106
+ ```
107
+
108
+ ### Scripts & Styles
109
+
110
+ ```sh
111
+ --head-scripts <paths> # Comma-separated script paths for <head>
112
+ --body-scripts <paths> # Comma-separated script paths for <body>
113
+ --styles <paths> # Comma-separated stylesheet paths
114
+ ```
115
+
116
+ ### Icons
117
+
118
+ ```sh
119
+ --favicon <path> # Favicon path
120
+ --apple-touch-icon <path> # Apple touch icon path
121
+ --manifest <path> # Web manifest path
122
+ ```
123
+
124
+ ### SSR Components
125
+
126
+ ```sh
127
+ --head-components <paths> # Comma-separated SSR head component paths
128
+ --body-components <paths> # Comma-separated SSR body component paths
129
+ ```
130
+
131
+ ### Static Server
132
+
54
133
  ```sh
55
- underpost static --page <path> # SSR component path
56
- --output-path <path> # Output file
57
- --config-file <path> # JSON config file
58
- --env <env> # production | development
59
- --minify / --no-minify # Toggle minification
60
- --title <title> # Page title
61
- --description <text> # Meta description
62
- --keywords <a,b,c> # Comma-separated keywords
63
- --author <name> # Meta author
64
- --favicon <path> # Favicon path
65
- --lang <lang> # HTML lang attribute
66
- --dir <dir> # HTML dir attribute
67
- --dev # Development mode
134
+ --run-sv [port] # Start Express static server (default port: 5000)
68
135
  ```
69
136
 
70
137
  ## SSR Component
package/jsdoc.json CHANGED
@@ -3,10 +3,11 @@
3
3
  "allowUnknownTags": true,
4
4
  "dictionaries": ["jsdoc"]
5
5
  },
6
+ "categoryfile": "./jsdoc-categories.json",
6
7
  "source": {
7
- "include": ["./src", "./package.json", "./README.md"],
8
+ "include": ["./src", "./package.json", "./README.md", "./CHANGELOG.md"],
8
9
  "includePattern": ".js$",
9
- "excludePattern": "(node_modules/|docs)"
10
+ "excludePattern": "(node_modules/|/docs/)"
10
11
  },
11
12
  "plugins": ["plugins/markdown", "plugins/summarize", "plugins/shout"],
12
13
  "opts": {
@@ -14,6 +15,7 @@
14
15
  "readme": "./README.md",
15
16
  "recurse": true,
16
17
  "destination": "./public/www.nexodev.org/docs/",
18
+ "tutorials": "./src/client/public/nexodev/docs/references",
17
19
  "encoding": "utf8",
18
20
  "verbose": true,
19
21
  "theme_opts": {
@@ -21,9 +23,28 @@
21
23
  "search": true,
22
24
  "title": "Nexodev - ERP, CRM Development & Cloud DevOps Services",
23
25
  "homepageTitle": "Docs",
24
- "favicon": "./public/www.nexodev.org/"
25
- },
26
- "tutorials": "./public/www.nexodev.org/docs/references"
26
+ "favicon": "./public/www.nexodev.org/",
27
+ "displayModuleHeader": true,
28
+ "includeFilesListInHomepage": true,
29
+ "sections": ["Modules", "Classes", "Namespaces", "Tutorials", "Events", "Interfaces", "Global"],
30
+ "meta": [
31
+ {
32
+ "name": "author",
33
+ "content": "Nexodev - underpostnet"
34
+ },
35
+ {
36
+ "name": "description",
37
+ "content": "Underpost Engine - End2end CI/CD cloud to applications federation tools documentation"
38
+ },
39
+ {
40
+ "name": "keywords",
41
+ "content": "underpost, engine, erp, crm, devops, cloud, kubernetes, documentation, jsdoc"
42
+ }
43
+ ],
44
+ "footer": "<div style='text-align:center;margin:1rem 0;font-size:0.85rem;'>&copy; Nexodev / underpostnet — <a href='https://github.com/underpostnet/engine' target='_blank'>Engine</a> | <a href='https://www.npmjs.com/package/underpost' target='_blank'>npm</a></div>",
45
+ "create_style": ".jsdoc-category-badge{display:inline-block;padding:2px 8px;border-radius:4px;background:#e3f2fd;color:#1565c0;font-size:0.82em;font-weight:600;margin-bottom:0.4em;border:1px solid #90caf9}.jsdoc-category{margin-bottom:0.5em}#sidebar-classes,#sidebar-classes+.sidebar-section-children-container{display:none !important}",
46
+ "add_scripts": ""
47
+ }
27
48
  },
28
49
  "markdown": {
29
50
  "hardwrap": false,
@@ -0,0 +1,47 @@
1
+ apiVersion: batch/v1
2
+ kind: CronJob
3
+ metadata:
4
+ name: dd-cron-backup
5
+ namespace: default
6
+ labels:
7
+ app: dd-cron-backup
8
+ managed-by: underpost
9
+ spec:
10
+ schedule: "0 1 * * *"
11
+ concurrencyPolicy: Forbid
12
+ startingDeadlineSeconds: 200
13
+ successfulJobsHistoryLimit: 3
14
+ failedJobsHistoryLimit: 1
15
+ suspend: false
16
+ jobTemplate:
17
+ spec:
18
+ template:
19
+ metadata:
20
+ labels:
21
+ app: dd-cron-backup
22
+ managed-by: underpost
23
+ spec:
24
+ containers:
25
+ - name: dd-cron-backup
26
+ image: underpost/underpost-engine:v2.99.7
27
+ command:
28
+ - /bin/sh
29
+ - -c
30
+ - >
31
+ cd /home/dd/engine && node bin env dd-cron production && node bin cron --git --dev --ssh dd-lampp,dd-cyberia,dd-core,dd-test backup
32
+ volumeMounts:
33
+ - mountPath: /home/dd/engine
34
+ name: underpost-cron-container-volume
35
+ - mountPath: /usr/lib/node_modules/underpost/.env
36
+ name: underpost-share-env
37
+ subPath: .env
38
+ volumes:
39
+ - hostPath:
40
+ path: /home/dd/engine
41
+ type: Directory
42
+ name: underpost-cron-container-volume
43
+ - hostPath:
44
+ path: /root/.nvm/versions/node/v24.10.0/lib/node_modules/underpost
45
+ type: DirectoryOrCreate
46
+ name: underpost-share-env
47
+ restartPolicy: OnFailure
@@ -0,0 +1,47 @@
1
+ apiVersion: batch/v1
2
+ kind: CronJob
3
+ metadata:
4
+ name: dd-cron-dns
5
+ namespace: default
6
+ labels:
7
+ app: dd-cron-dns
8
+ managed-by: underpost
9
+ spec:
10
+ schedule: "* * * * *"
11
+ concurrencyPolicy: Forbid
12
+ startingDeadlineSeconds: 200
13
+ successfulJobsHistoryLimit: 3
14
+ failedJobsHistoryLimit: 1
15
+ suspend: false
16
+ jobTemplate:
17
+ spec:
18
+ template:
19
+ metadata:
20
+ labels:
21
+ app: dd-cron-dns
22
+ managed-by: underpost
23
+ spec:
24
+ containers:
25
+ - name: dd-cron-dns
26
+ image: underpost/underpost-engine:v2.99.7
27
+ command:
28
+ - /bin/sh
29
+ - -c
30
+ - >
31
+ cd /home/dd/engine && node bin env dd-cron production && node bin cron --git --dev --ssh dd-cron dns
32
+ volumeMounts:
33
+ - mountPath: /home/dd/engine
34
+ name: underpost-cron-container-volume
35
+ - mountPath: /usr/lib/node_modules/underpost/.env
36
+ name: underpost-share-env
37
+ subPath: .env
38
+ volumes:
39
+ - hostPath:
40
+ path: /home/dd/engine
41
+ type: Directory
42
+ name: underpost-cron-container-volume
43
+ - hostPath:
44
+ path: /root/.nvm/versions/node/v24.10.0/lib/node_modules/underpost
45
+ type: DirectoryOrCreate
46
+ name: underpost-share-env
47
+ restartPolicy: OnFailure
@@ -17,7 +17,7 @@ spec:
17
17
  spec:
18
18
  containers:
19
19
  - name: dd-default-development-blue
20
- image: localhost/rockylinux9-underpost:v2.99.5
20
+ image: localhost/rockylinux9-underpost:v2.99.7
21
21
  # resources:
22
22
  # requests:
23
23
  # memory: "124Ki"
@@ -100,7 +100,7 @@ spec:
100
100
  spec:
101
101
  containers:
102
102
  - name: dd-default-development-green
103
- image: localhost/rockylinux9-underpost:v2.99.5
103
+ image: localhost/rockylinux9-underpost:v2.99.7
104
104
  # resources:
105
105
  # requests:
106
106
  # memory: "124Ki"
@@ -18,7 +18,7 @@ spec:
18
18
  spec:
19
19
  containers:
20
20
  - name: dd-test-development-blue
21
- image: localhost/rockylinux9-underpost:v2.99.5
21
+ image: localhost/rockylinux9-underpost:v2.99.7
22
22
 
23
23
  command:
24
24
  - /bin/sh
@@ -103,7 +103,7 @@ spec:
103
103
  spec:
104
104
  containers:
105
105
  - name: dd-test-development-green
106
- image: localhost/rockylinux9-underpost:v2.99.5
106
+ image: localhost/rockylinux9-underpost:v2.99.7
107
107
 
108
108
  command:
109
109
  - /bin/sh