underpost 3.2.22 → 3.2.28

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 (50) hide show
  1. package/.github/workflows/ghpkg.ci.yml +1 -1
  2. package/.github/workflows/gitlab.ci.yml +1 -1
  3. package/.github/workflows/npmpkg.ci.yml +1 -1
  4. package/.github/workflows/publish.ci.yml +2 -2
  5. package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -1
  6. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  7. package/CHANGELOG.md +141 -1
  8. package/CLI-HELP.md +56 -2
  9. package/README.md +3 -2
  10. package/baremetal/commission-workflows.json +1 -0
  11. package/bin/build.js +1 -0
  12. package/docker-compose.yml +224 -0
  13. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
  14. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
  15. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  16. package/package.json +27 -15
  17. package/scripts/kubeadm-node-setup.sh +317 -0
  18. package/scripts/rocky-kickstart.sh +877 -185
  19. package/scripts/rpmfusion-ffmpeg-setup.sh +26 -50
  20. package/src/cli/baremetal.js +717 -16
  21. package/src/cli/cluster.js +3 -1
  22. package/src/cli/deploy.js +6 -2
  23. package/src/cli/docker-compose.js +591 -0
  24. package/src/cli/fs.js +35 -11
  25. package/src/cli/index.js +75 -0
  26. package/src/cli/kickstart.js +142 -20
  27. package/src/cli/repository.js +72 -11
  28. package/src/cli/run.js +253 -2
  29. package/src/cli/ssh.js +190 -0
  30. package/src/cli/static.js +2 -2
  31. package/src/{server → client-builder}/client-build-docs.js +15 -5
  32. package/src/{server → client-builder}/client-build-live.js +3 -3
  33. package/src/{server → client-builder}/client-build.js +25 -22
  34. package/src/{server → client-builder}/client-dev-server.js +3 -3
  35. package/src/{server → client-builder}/client-icons.js +2 -2
  36. package/src/{server → client-builder}/ssr.js +5 -5
  37. package/src/client.build.js +1 -1
  38. package/src/client.dev.js +1 -1
  39. package/src/index.js +12 -1
  40. package/src/mailer/EmailRender.js +1 -1
  41. package/src/{server → projects/underpost}/catalog-underpost.js +1 -2
  42. package/src/runtime/express/Express.js +2 -2
  43. package/src/runtime/nginx/Nginx.js +250 -0
  44. package/src/server/catalog.js +7 -14
  45. package/src/server/conf.js +3 -3
  46. package/src/server.js +1 -1
  47. package/typedoc.json +3 -1
  48. package/src/server/ipfs-client.js +0 -599
  49. /package/src/client/ssr/{Render.js → RootDocument.js} +0 -0
  50. /package/src/{server → client-builder}/client-formatted.js +0 -0
@@ -20,7 +20,7 @@ jobs:
20
20
  packages: write
21
21
  id-token: write
22
22
  steps:
23
- - uses: actions/checkout@v6
23
+ - uses: actions/checkout@v7
24
24
 
25
25
  - name: Install required packages
26
26
  run: |
@@ -6,7 +6,7 @@ jobs:
6
6
  name: Update gitlab repo package Jobs
7
7
  runs-on: ubuntu-latest
8
8
  steps:
9
- - uses: actions/checkout@v6
9
+ - uses: actions/checkout@v7
10
10
  with:
11
11
  fetch-depth: 0
12
12
  lfs: true
@@ -39,7 +39,7 @@ jobs:
39
39
  packages: write
40
40
  id-token: write
41
41
  steps:
42
- - uses: actions/checkout@v6
42
+ - uses: actions/checkout@v7
43
43
 
44
44
  - name: Install required packages
45
45
  run: |
@@ -17,7 +17,7 @@ jobs:
17
17
  packages: write
18
18
  id-token: write
19
19
  steps:
20
- - uses: actions/checkout@v6
20
+ - uses: actions/checkout@v7
21
21
 
22
22
  - name: Install required packages
23
23
  run: |
@@ -54,7 +54,7 @@ jobs:
54
54
  packages: write
55
55
  id-token: write
56
56
  steps:
57
- - uses: actions/checkout@v6
57
+ - uses: actions/checkout@v7
58
58
 
59
59
  - uses: actions/setup-node@v6
60
60
  with:
@@ -33,7 +33,7 @@ jobs:
33
33
  image: quay.io/rockylinux/rockylinux:9
34
34
  steps:
35
35
  - name: Checkout
36
- uses: actions/checkout@v6
36
+ uses: actions/checkout@v7
37
37
  # with:
38
38
  # lfs: true
39
39
  # - name: Checkout LFS objects
@@ -11,7 +11,7 @@ jobs:
11
11
  options: --entrypoint /bin/bash
12
12
  steps:
13
13
  - name: Clone repository
14
- uses: actions/checkout@v6
14
+ uses: actions/checkout@v7
15
15
 
16
16
  - name: Install required packages
17
17
  run: |
package/CHANGELOG.md CHANGED
@@ -1,6 +1,146 @@
1
1
  # Changelog
2
2
 
3
- ## 2026-06-07
3
+ ## 2026-06-23
4
+
5
+ ### hardhat
6
+
7
+ - Add chai devDependency in hardhat module ([bf20134d0](https://github.com/underpostnet/engine/commit/bf20134d0a61512b223b868129eed38c0e7583cf))
8
+ - Fix hardhat undici base dependency ([c9ad2a9f0](https://github.com/underpostnet/engine/commit/c9ad2a9f09d893495d3b80be400ca023c96e91cc))
9
+ - Hardhat 3 migration to nomicfoundation hardhat-toolbox-viem ([22c410635](https://github.com/underpostnet/engine/commit/22c4106355f3c7d6654f21179f131f6ed8fd20cc))
10
+
11
+ ### deploy
12
+
13
+ - Fix verify secrets exists tls deployment in deploy pipeline ([0367676a9](https://github.com/underpostnet/engine/commit/0367676a9a6363e69f772739040bc100dc1c3ceb))
14
+
15
+ ### run-cli
16
+
17
+ - move-node runner: Add skip the patch + rollout if the resource is already where node goal ([b88cf3c68](https://github.com/underpostnet/engine/commit/b88cf3c6833572e9128d4aa85eccf0c94b055609))
18
+ - Add node-move k8s crd between nodes runner ([4c0259a63](https://github.com/underpostnet/engine/commit/4c0259a63380fea6d5261f55f94ba8daf0d9783f))
19
+
20
+ ### baremetal
21
+
22
+ - FIx kubeadm join node logic workflow ([72d7994a7](https://github.com/underpostnet/engine/commit/72d7994a7d978841df83854e1032f7fe79a7e185))
23
+ - Add flag --resume-infra-setup to restore ssh kubeadm remote node deployment ([78a41d400](https://github.com/underpostnet/engine/commit/78a41d4008eceb68a33a2445b4aafd4a7b5aa546))
24
+ - Add engine repo customization in control and worker node commission workflows ([2b8c47f52](https://github.com/underpostnet/engine/commit/2b8c47f52b0c4a1eff82bc8b6cf966aa58f0fece))
25
+ - Fix kubeadm join node logic in ssh remote commission workflows ([72f7e2527](https://github.com/underpostnet/engine/commit/72f7e252733be2f95f67afdfd758f471c1a590f6))
26
+ - Fix SELinux config in install chroot in os deployed ([e7d46472e](https://github.com/underpostnet/engine/commit/e7d46472e41d4beb992918a3c5e2274614818609))
27
+ - Add Timezone + keyboard now configured in the deployed OS ([de00c365d](https://github.com/underpostnet/engine/commit/de00c365d0a12d4abef9735f26dd4c56b77d5dc9))
28
+ - Implement user and ssh keys customization --deploy-id and --user flags in commission workflow ([ec0720230](https://github.com/underpostnet/engine/commit/ec07202309371c8e56df0c2dbe63e0283ccb5c8a))
29
+ - Implement worker and control plane automated infra setup post install os deploy ([d5edb41ab](https://github.com/underpostnet/engine/commit/d5edb41ab3855696198daa3ef44abe521768d260))
30
+ - Implement Automate Rocky Linux bare-metal deployment with SSH and disk detection ([2a0cbf5f1](https://github.com/underpostnet/engine/commit/2a0cbf5f1a90ebc1c4bdae0ea5f37fb16f1395c4))
31
+
32
+ ### kickstart
33
+
34
+ - Fix rocky ephemeral commission ssh server exposure ([b5d3007f6](https://github.com/underpostnet/engine/commit/b5d3007f65e9df0affca1ca21ecdfb6cbbea1724))
35
+
36
+ ### repository
37
+
38
+ - Enhance routePath candidates logic build ([a3d7fd806](https://github.com/underpostnet/engine/commit/a3d7fd8068e31fbdacc5b9832047f09f720ba30c))
39
+
40
+ ### engine-cyberia
41
+
42
+ - Shrinks cyberia-client and cyberia-server production Dockerfile ([dd218c847](https://github.com/underpostnet/engine/commit/dd218c847bbc0c2e3662833607731a8bbe6815c9))
43
+ - Remove redundant saga index and fix null-safe frames access ([9947164e6](https://github.com/underpostnet/engine/commit/9947164e681ae7a5407af9227ae600c6a8a1aa84))
44
+ - Migrate saga generation from DeepSeek to Gemini with staged generation ([6322cd197](https://github.com/underpostnet/engine/commit/6322cd19774d94f312f64173cb41ba62d3c5bba3))
45
+ - Move cyberia server related modules to dedicated src/cyberia directory ([648309ece](https://github.com/underpostnet/engine/commit/648309ecee5b07bcf2132188d089c733f0646fb8))
46
+ - Introduce Top-Down PCG (Semantic Reverse-Engineering) modules and cli command ([5664f536c](https://github.com/underpostnet/engine/commit/5664f536c54446116296a465fc1efd63b1dece42))
47
+ - Clean up quotes and update comment in action service ([1668f95e6](https://github.com/underpostnet/engine/commit/1668f95e6fa266faba89dfecafe89b9654fd7b93))
48
+ - Split action-provider and quest-provider status icons ([e3186a37d](https://github.com/underpostnet/engine/commit/e3186a37d962980e34e0c29234bf4dd3388553e2))
49
+ - Add quest-by-cell lookup endpoint ([648eb1437](https://github.com/underpostnet/engine/commit/648eb14374a549f9e789a425533f9313b9292cfb))
50
+ - Implement base client component ActionEngineCyberia with map-driven quest and action management ([cc89512c0](https://github.com/underpostnet/engine/commit/cc89512c098729012d99e5817b29480808044885))
51
+
52
+ ### docker-compose
53
+
54
+ - Implement base docker-compose engine integration ([3374c7f1a](https://github.com/underpostnet/engine/commit/3374c7f1a4379256db577988d841f414947db0c4))
55
+
56
+ ### cyberia-cli
57
+
58
+ - Update default generate-saga temperature ([dbc5ce5b8](https://github.com/underpostnet/engine/commit/dbc5ce5b83a8268f342a3be3af8c21d1628578a0))
59
+ - In generate-saga pipeline add 'naming and character culture' customization ([516f0ded7](https://github.com/underpostnet/engine/commit/516f0ded7dde5d1990cde5a8e98b6a16807411db))
60
+ - Refactor generate saga pipeline general theme purpose ([993aac921](https://github.com/underpostnet/engine/commit/993aac921a5ba0a41dee8f53fb508505c900ad1e))
61
+ - Refactor saga pipeline replace THEME_DIMENSIONS to dedicated FACTIONS base theme scope ([1280edfde](https://github.com/underpostnet/engine/commit/1280edfdef885dd0e05afd00dd7dbb418a3d2896))
62
+ - Refactor theme dimension scope in generate-sage pipeline, add --tone and simplify 4 mains and add flag --temperature to customizaction ([cc0a3e245](https://github.com/underpostnet/engine/commit/cc0a3e245a3020246e71149d88ed6f026fdff7e2))
63
+ - Add maps semantic stage in generate-saga pipeline ([5c7bdab03](https://github.com/underpostnet/engine/commit/5c7bdab034a3de473e6197d5ffc5d3c61d71f4ef))
64
+ - Fix quest generation with talk objectives case and related logic ([c4d9e397c](https://github.com/underpostnet/engine/commit/c4d9e397c155d5d7c48e42f387c30263cde5c149))
65
+ - Add --space-context flag customization in generate-saga pipeline ([19d2f7ed6](https://github.com/underpostnet/engine/commit/19d2f7ed6aa8ea41ac72622c384f84a524464a4c))
66
+ - Generate saga command: Add lore-grounded auto-theme generation - Auto-synthesize saga themes from CYBERIA-LORE.md when --prompt is omitted - Add --lore-path option to override the base lore document - Add temperature support to GeminiClient.chatJson for varied output - Default --out to ./engine-private/cyberia-sagas/<saga-code>.json - Remove hard requirement for --prompt or --import - Update docs and help text to reflect auto-generation mode ([5b1a668a7](https://github.com/underpostnet/engine/commit/5b1a668a7c1e2b48652b717934d56ec6e9902d54))
67
+
68
+ ### package
69
+
70
+ - Fix nodemailer version ([7d27b7f48](https://github.com/underpostnet/engine/commit/7d27b7f4826b656abdd1d2a10c5d5bb478cd90bf))
71
+ - Fix dependency vulnerability ([13991a0fe](https://github.com/underpostnet/engine/commit/13991a0fe4594887da89de16ac502be4ef7112cb))
72
+
73
+ ### cyberia-docs
74
+
75
+ - Add base Cyberia Lore: The Frontier of Hyperspace ([d389b881f](https://github.com/underpostnet/engine/commit/d389b881ff8dadb9154bb1f7078a515246150031))
76
+
77
+ ### build
78
+
79
+ - Fix catalog generic deploy-id handling ([413f3fc63](https://github.com/underpostnet/engine/commit/413f3fc63851d678267a5618c6779fffc49cb14e))
80
+
81
+ ### engine
82
+
83
+ - Refactor introduce new projects module and client-builder modules split from server ([4d14ee552](https://github.com/underpostnet/engine/commit/4d14ee552258cb3c2f70e43291945798b4d95f1a))
84
+
85
+ ### api
86
+
87
+ - Introduce base cyberia-saga api / model ([2f02f5d6a](https://github.com/underpostnet/engine/commit/2f02f5d6a2ff2258146498bb50ac3e65b51beced))
88
+ - Update canonical action defaults with typed quest dialogues and add Wason errand quest ([5e380abee](https://github.com/underpostnet/engine/commit/5e380abeef4954567717138af5218b506b3da414))
89
+ - Refactor action model: remove type and grantQuestCode, add per-quest dialogue map and getByCode endpoint ([3ce9f4c18](https://github.com/underpostnet/engine/commit/3ce9f4c18ef993da85fe5f9b10b61cf7987e5457))
90
+ - Update quest defaults: replace SCP-2040 references with Kishins ([bf6fa827d](https://github.com/underpostnet/engine/commit/bf6fa827d0fffbe5fcf97756263af50eade0af4b))
91
+ - Add fallback defaults to dialogue and quest services ([ab2894dd4](https://github.com/underpostnet/engine/commit/ab2894dd4f591cc7247d6708a25ea737ea059c56))
92
+ - Refactor CyberiaAction model to cell-based binding and remove provideItemId ([614a2aa60](https://github.com/underpostnet/engine/commit/614a2aa60bfa8e2330722c9c4e9fea4afc3adf3c))
93
+ - Add quest metadata REST endpoint GET /api/cyberia-quest/code/:code ([c6f7cfa94](https://github.com/underpostnet/engine/commit/c6f7cfa94a4b3cc9f398cd63c24082b8c47db642))
94
+
95
+ ### grpc
96
+
97
+ - Scope quest delivery to instance map codes ([d357c0cce](https://github.com/underpostnet/engine/commit/d357c0cce491078ea00a294f15f1b886fb92c05d))
98
+ - Add prerequisiteCodes and canonical item fallback to instance config ([e34683e23](https://github.com/underpostnet/engine/commit/e34683e2372f48be034435fc2ce25915e5447aad))
99
+
100
+ ### hardhar
101
+
102
+ - Fix prevent crash build due coverage build: Error HHE905: Couldn't download compiler version list. ([b841b5598](https://github.com/underpostnet/engine/commit/b841b55980cc5a3d19b6413f2ebb72c45b8906fb))
103
+
104
+ ### cli-run
105
+
106
+ - Add shared-dir-add-user runner: Add user to an existing shared directory without changing file owners ([b5c7ea7c8](https://github.com/underpostnet/engine/commit/b5c7ea7c83cf85775eaf3fc3071097f2e5e9d59f))
107
+
108
+ ### scripts
109
+
110
+ - Update scripts/rpmfusion-ffmpeg-setup.sh ([975f7e9f3](https://github.com/underpostnet/engine/commit/975f7e9f30f7f224bcf0faa78a617b7f67fc6c96))
111
+
112
+ ### client-cyberia
113
+
114
+ - Update default bot skin in fallback world ([a7df2b9f6](https://github.com/underpostnet/engine/commit/a7df2b9f6fd80c62b1aa3fff2ce58d0a3dc18d7a))
115
+ - Fix headerName of metadata cid and render cid in ObjectLayerManagement component ([1d1419001](https://github.com/underpostnet/engine/commit/1d14190017c6b080c502a9478f65a35364c413df))
116
+ - Add Kishins skin item to shared defaults ([acf13ba0e](https://github.com/underpostnet/engine/commit/acf13ba0e2a6acabc7ee1ee233275cdb31311c0d))
117
+ - Fix render section title label in ObjectLayerEngineModal ([2b9a88bed](https://github.com/underpostnet/engine/commit/2b9a88bed67fe2b205f648050af411a9c1e7588d))
118
+
119
+ ### docs
120
+
121
+ - Update action and quest system documentation for cell-based binding and explicit quest accept ([fadd9e360](https://github.com/underpostnet/engine/commit/fadd9e3605e686d8487aad1ef28b2668388256c4))
122
+ - Update quest system documentation with kill and collect objective details ([1695e17d9](https://github.com/underpostnet/engine/commit/1695e17d9ec628ed9907859d6dd4ec890f113240))
123
+ - Document mission system: action-provider NPCs and fallback world instantiation ([469094678](https://github.com/underpostnet/engine/commit/469094678a35d4bbd03c79181f78d7720614179c))
124
+ - Update cyberia client docs url env parsing ([77923cfa4](https://github.com/underpostnet/engine/commit/77923cfa4977fd21ed5acbe6e2e5dfdaa70a614d))
125
+
126
+ ### cyberia-instance
127
+
128
+ - Give action provider NPCs small wander radius ([b56389b5a](https://github.com/underpostnet/engine/commit/b56389b5a63b964ee1c94fcce0d9dafea4c1b2f6))
129
+ - Add action-provider NPC generation and cell reservation to fallback world builder ([985ba010c](https://github.com/underpostnet/engine/commit/985ba010c0ca76dc10bd12fffbc07871c01e0e90))
130
+
131
+ ### grcp
132
+
133
+ - Deliver actions and quests in InstanceConfig for mission content ([e26466e9a](https://github.com/underpostnet/engine/commit/e26466e9a401ada9a5add5b658243e9cf34879a9))
134
+
135
+ ### cli-cyberia
136
+
137
+ - Add DefaultCyberiaActions, DefaultCyberiaQuests, and seed-actions-quests CLI command ([cc9f21377](https://github.com/underpostnet/engine/commit/cc9f21377ba77c0e141d153f852dbb9777d74525))
138
+
139
+ ### fs
140
+
141
+ - Add Single-file handling in upload use case in cloudinary storage ([6061d8bf2](https://github.com/underpostnet/engine/commit/6061d8bf290f00c2c4e46a0206419ba4b1119f2e))
142
+
143
+ ## New release v:3.2.22 (2026-06-07)
4
144
 
5
145
  ### repository
6
146
 
package/CLI-HELP.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ## Underpost CLI
2
2
 
3
- > underpost ci/cd cli v3.2.22
3
+ > underpost ci/cd cli v3.2.28
4
4
 
5
5
  **Usage:** `underpost [options] [command]`
6
6
 
@@ -40,6 +40,7 @@
40
40
  | [`monitor`](#underpost-monitor) | Manages health server monitoring for specified deployments. |
41
41
  | [`ssh`](#underpost-ssh) | Manages SSH credentials and sessions for remote access to cluster nodes or services. |
42
42
  | [`run`](#underpost-run) | Runs specified scripts using various runners. |
43
+ | [`docker-compose`](#underpost-docker-compose) | General-purpose Docker Compose development pipeline (mirrors the Kubernetes dev stack). |
43
44
  | [`lxd`](#underpost-lxd) | Manages LXD virtual machines as K3s nodes (control plane or workers). |
44
45
  | [`baremetal`](#underpost-baremetal) | Manages baremetal server operations, including installation, database setup, commissioning, and user management. |
45
46
  | [`release`](#underpost-release) | Release orchestrator for building new versions and deploying releases of the Underpost CLI. |
@@ -815,7 +816,7 @@ Runs specified scripts using various runners.
815
816
 
816
817
  | Argument | Description |
817
818
  | --- | --- |
818
- | `runner-id` | The runner ID to run. Options: dev-cluster,etc-hosts,ipfs-expose,metadata,svc-ls,svc-rm,ssh-deploy-info,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-local,docker-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,instance-build-manifest,ls-deployments,host-update,install-crio,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-devices,disk-usage,dev,service,sh,log,ps,pid-info,background,ports,deploy-test,tf-vae-test,spark-template,pull-rocky-image,rmi,kill,generate-pass,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job,push-bundle,pull-bundle,build-cluster-deployment-manifests,monitor-ui,shared-dir. |
819
+ | `runner-id` | The runner ID to run. Options: dev-cluster,etc-hosts,ipfs-expose,metadata,svc-ls,svc-rm,ssh-deploy-info,node-move,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-local,docker-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,instance-build-manifest,ls-deployments,host-update,install-crio,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-devices,disk-usage,dev,service,sh,log,ps,pid-info,background,ports,deploy-test,tf-vae-test,spark-template,pull-rocky-image,rmi,kill,generate-pass,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job,push-bundle,pull-bundle,build-cluster-deployment-manifests,monitor-ui,shared-dir,shared-dir-add-user. |
819
820
  | `path` | The input value, identifier, or path for the operation. |
820
821
 
821
822
  #### Options
@@ -894,6 +895,45 @@ Runs specified scripts using various runners.
894
895
 
895
896
  ---
896
897
 
898
+ ### underpost docker-compose
899
+
900
+ General-purpose Docker Compose development pipeline (mirrors the Kubernetes dev stack).
901
+
902
+ **Usage:** `underpost docker-compose [options] [target]`
903
+
904
+ #### Arguments
905
+
906
+ | Argument | Description |
907
+ | --- | --- |
908
+ | `target` | Optional service name for --logs, --shell, --restart, or --build. |
909
+
910
+ #### Options
911
+
912
+ | Option | Description |
913
+ | --- | --- |
914
+ | `--install` | Install Docker Engine and the Compose v2 plugin on RHEL/Rocky hosts. |
915
+ | `--reset` | Comprehensive teardown (equivalent to cluster --reset): removes all stack containers, the network, named volumes (destroys data), orphans, and generated artifacts. |
916
+ | `--force` | Force reinstall (--install), remove volumes (--down), or also drop the env-file (--reset). |
917
+ | `--deploy-id <deploy-id>` | Deployment to run as the app container (default: dd-default). 'dd-default' self-bootstraps a fresh engine; any other id runs the standard 'underpost start' command (mirrors src/cli/deploy.js). |
918
+ | `--env <env>` | Deployment environment for non-default deploy ids (default: development). |
919
+ | `--generate` | Render dynamic supporting files (nginx router config, env-file, app-command override). |
920
+ | `--up` | Start the full stack detached (regenerates config first). |
921
+ | `--down` | Stop and remove containers (and orphans). |
922
+ | `--volumes` | With --down, also remove named volumes (destroys persisted data). |
923
+ | `--restart` | Restart services (optionally a single [target]). |
924
+ | `--build` | With --up rebuild images; alone, rebuilds images with --no-cache. |
925
+ | `--pull` | Pull upstream images for all services. |
926
+ | `--logs` | Follow logs for all services (optionally a single [target]). |
927
+ | `--status` | Show a formatted status table of services. |
928
+ | `--shell` | Open an interactive shell in [target] (default: app). |
929
+ | `--exec <subcommand>` | General-purpose passthrough docker compose subcommand. |
930
+ | `--compose-file <path>` | Path to the compose file (default: docker-compose.yml). |
931
+ | `--env-file <path>` | Path to the compose env-file (default: docker/compose.env). |
932
+ | `--nginx-conf <path>` | Path to the generated nginx config (default: docker/nginx/default.conf). |
933
+ | `-h, --help` | display help for command |
934
+
935
+ ---
936
+
897
937
  ### underpost lxd
898
938
 
899
939
  Manages LXD virtual machines as K3s nodes (control plane or workers).
@@ -976,6 +1016,18 @@ Manages baremetal server operations, including installation, database setup, com
976
1016
  | `--remove-machines <system-ids>` | Removes baremetal machines by comma-separated system IDs, or use "all" |
977
1017
  | `--clear-discovered` | Clears all discovered baremetal machines from the database. |
978
1018
  | `--commission` | Init workflow for commissioning a physical machine. |
1019
+ | `--install-disk [device]` | Explicit target install disk for Rocky deployment (e.g. /dev/nvme0n1). Omit or leave empty to auto-detect the internal disk. |
1020
+ | `--no-auto-install` | Disables the ephemeral runtime AUTO_INSTALL fallback (controller must trigger install). |
1021
+ | `--no-remote-install` | Skips the controller-side remote install orchestration over SSH. |
1022
+ | `--worker` | Post-install infra role: join the deployed node as a Kubernetes worker (requires --control <ip>). Without this flag the node is set up as a control-plane. |
1023
+ | `--control <ip>` | Control-plane IP the worker node joins (used with --worker for kubeadm infra setup). |
1024
+ | `--ssh-key-dir <dir>` | Directory holding the SSH key pair used for commissioning/orchestration (expects <dir>/id_rsa and <dir>/id_rsa.pub). Overrides the workflow "sshKeyDir"; defaults to engine-private/deploy. Supports a leading ~. |
1025
+ | `--deploy-id <deploy-id>` | Deployment ID whose user key pair is used for SSH (key from engine-private/conf/<deploy-id>/users/<user>/id_rsa). Same user↔deployId↔key convention as the ssh command. |
1026
+ | `--user <user>` | SSH user paired with --deploy-id for key resolution and the login user on an existing control-plane (defaults to root). Mirrors the ssh command --user. |
1027
+ | `--engine-repo <url>` | Custom engine repo cloned + normalized to /home/dd/engine on the node (default: <GITHUB_USERNAME>/engine). |
1028
+ | `--engine-branch <branch>` | Branch of the engine repo to clone on the node. |
1029
+ | `--engine-private-repo <url>` | Custom private repo cloned + normalized to /home/dd/engine/engine-private on the node (default: <GITHUB_USERNAME>/engine-<id>-private). |
1030
+ | `--engine-private-branch <branch>` | Branch of the engine-private repo to clone on the node. |
979
1031
  | `--bootstrap-http-server-run` | Runs a temporary bootstrap HTTP server for generic purposes such as serving iPXE scripts or ISO images during commissioning. |
980
1032
  | `--bootstrap-http-server-path <path>` | Sets a custom bootstrap HTTP server path for baremetal commissioning. |
981
1033
  | `--bootstrap-http-server-port <port>` | Sets a custom bootstrap HTTP server port for baremetal commissioning. |
@@ -997,6 +1049,8 @@ Manages baremetal server operations, including installation, database setup, com
997
1049
  | `--logs <log-id>` | Displays logs for log id: dhcp,dhcp-lease,dhcp-lan,cloud-init,cloud-init-machine,cloud-init-config |
998
1050
  | `--dev` | Sets the development context environment for baremetal operations. |
999
1051
  | `--ls` | Lists available boot resources and machines. |
1052
+ | `--resume-infra-setup` | Skip commissioning, OS install, and all bootstrapping; resume only the SSH-based infra setup (kubeadm join/init) on a node that already has the OS installed and is reachable via SSH. |
1053
+ | `--resume-join` | Skip everything except the kubeadm join command. Assumes engine, Node.js, CRI-O, kubelet, and kubeadm are already installed. Only retrieves a fresh join token from the control-plane and runs kubeadm join. |
1000
1054
  | `-h, --help` | display help for command |
1001
1055
 
1002
1056
  ---
package/README.md CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  <div align="center">
18
18
 
19
- [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![](https://data.jsdelivr.com/v1/package/npm/underpost/badge)](https://www.jsdelivr.com/package/npm/underpost) [![Socket Badge](https://socket.dev/api/badge/npm/package/underpost/3.2.22)](https://socket.dev/npm/package/underpost/overview/3.2.22) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master) [![Version](https://img.shields.io/npm/v/underpost.svg)](https://www.npmjs.org/package/underpost) [![License](https://img.shields.io/npm/l/underpost.svg)](https://www.npmjs.com/package/underpost)
19
+ [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![](https://data.jsdelivr.com/v1/package/npm/underpost/badge)](https://www.jsdelivr.com/package/npm/underpost) [![Socket Badge](https://socket.dev/api/badge/npm/package/underpost/3.2.28)](https://socket.dev/npm/package/underpost/overview/3.2.28) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master) [![Version](https://img.shields.io/npm/v/underpost.svg)](https://www.npmjs.org/package/underpost) [![License](https://img.shields.io/npm/l/underpost.svg)](https://www.npmjs.com/package/underpost)
20
20
 
21
21
  </div>
22
22
 
@@ -88,7 +88,7 @@ npm run dev
88
88
  <!-- cli-index-start -->
89
89
  ## Underpost CLI
90
90
 
91
- > underpost ci/cd cli v3.2.22
91
+ > underpost ci/cd cli v3.2.28
92
92
 
93
93
  **Usage:** `underpost [options] [command]`
94
94
 
@@ -128,6 +128,7 @@ npm run dev
128
128
  | [`monitor`](CLI-HELP.md#underpost-monitor) | Manages health server monitoring for specified deployments. |
129
129
  | [`ssh`](CLI-HELP.md#underpost-ssh) | Manages SSH credentials and sessions for remote access to cluster nodes or services. |
130
130
  | [`run`](CLI-HELP.md#underpost-run) | Runs specified scripts using various runners. |
131
+ | [`docker-compose`](CLI-HELP.md#underpost-docker-compose) | General-purpose Docker Compose development pipeline (mirrors the Kubernetes dev stack). |
131
132
  | [`lxd`](CLI-HELP.md#underpost-lxd) | Manages LXD virtual machines as K3s nodes (control plane or workers). |
132
133
  | [`baremetal`](CLI-HELP.md#underpost-baremetal) | Manages baremetal server operations, including installation, database setup, commissioning, and user management. |
133
134
  | [`release`](CLI-HELP.md#underpost-release) | Release orchestrator for building new versions and deploying releases of the Underpost CLI. |
@@ -174,6 +174,7 @@
174
174
  "type": "iso-ram",
175
175
  "osIdLike": "rhel centos fedora",
176
176
  "architecture": "amd64",
177
+ "infraSetup": "underpost-kubeadm-contour",
177
178
  "isoUrl": "https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9-latest-x86_64-boot.iso",
178
179
  "tftpPrefix": "envy-rocky9",
179
180
  "bootstrapHttpServerPort": 8888,
package/bin/build.js CHANGED
@@ -140,6 +140,7 @@ const buildDeployTemplate = async (confName) => {
140
140
  break;
141
141
  }
142
142
  default:
143
+ for (const path of catalog.templatePaths) fs.copySync(`.${path}`, `${basePath}${path}`);
143
144
  break;
144
145
  }
145
146
 
@@ -0,0 +1,224 @@
1
+ # Production-style Docker Compose stack mirroring the Kubernetes development
2
+ # environment defined under manifests/{mongodb,valkey,deployment/dd-default-development}.
3
+ #
4
+ # Mapping summary (K8s -> Compose):
5
+ # StatefulSet mongodb (replSet rs0, keyFile auth) -> mongodb + mongodb-keyfile-init + mongodb-rs-init
6
+ # StatefulSet valkey-service -> valkey-service
7
+ # Deployment dd-default-development-blue -> app
8
+ # HTTPProxy default.net / www.default.net (Contour) -> proxy (nginx reverse proxy)
9
+ # Service type LoadBalancer / NodePort -> published host ports via the proxy
10
+ # Secret mongodb-secret / mongodb-keyfile -> .env values + generated keyfile volume
11
+ # PVC mongodb-storage / volumeClaimTemplates -> named volumes
12
+
13
+ name: dd-default-development
14
+
15
+ services:
16
+ # --- MongoDB -------------------------------------------------------------
17
+ # Mirrors manifests/mongodb/statefulset.yaml: replSet rs0, keyFile cluster
18
+ # auth, --auth, bind to all interfaces. Single-node replica set for local dev.
19
+ #
20
+ # Bootstrap follows src/db/mongo/MongoBootstrap.js rather than the image's
21
+ # MONGO_INITDB_ROOT_USERNAME auto-init (whose temp server + keyFile combination
22
+ # is unreliable). The generated entrypoint (docker/mongodb/entrypoint.sh)
23
+ # generates the keyfile, starts mongod, and bootstraps the replica set + root
24
+ # user over the loopback localhost exception. The healthcheck gates readiness
25
+ # on an authenticated writable primary.
26
+ mongodb:
27
+ image: ${MONGO_IMAGE:-mongo:latest}
28
+ container_name: dd-mongodb
29
+ entrypoint: ["bash", "/docker-init/entrypoint.sh"]
30
+ environment:
31
+ MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME:?set MONGO_INITDB_ROOT_USERNAME in docker/compose.env}
32
+ MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD:?set MONGO_INITDB_ROOT_PASSWORD in docker/compose.env}
33
+ DB_REPLICA_SET: ${DB_REPLICA_SET:-rs0}
34
+ volumes:
35
+ - ./docker/mongodb:/docker-init:ro
36
+ - mongodb-keyfile:/opt/keyfile
37
+ - mongodb-data:/data/db
38
+ networks:
39
+ - dd-internal
40
+ expose:
41
+ - "27017"
42
+ ports:
43
+ - "${MONGO_HOST_PORT:-27017}:27017"
44
+ healthcheck:
45
+ test:
46
+ - CMD-SHELL
47
+ - >
48
+ mongosh --quiet -u "$$MONGO_INITDB_ROOT_USERNAME" -p "$$MONGO_INITDB_ROOT_PASSWORD"
49
+ --authenticationDatabase admin --eval "db.hello().isWritablePrimary" | grep -q true
50
+ interval: 10s
51
+ timeout: 5s
52
+ retries: 20
53
+ start_period: 60s
54
+ restart: unless-stopped
55
+
56
+ # --- Valkey --------------------------------------------------------------
57
+ # Mirrors manifests/valkey/statefulset.yaml.
58
+ valkey-service:
59
+ image: ${VALKEY_IMAGE:-valkey/valkey:latest}
60
+ container_name: dd-valkey
61
+ command: ["valkey-server", "--port", "6379", "--bind", "0.0.0.0", "--protected-mode", "no"]
62
+ volumes:
63
+ - valkey-data:/data
64
+ networks:
65
+ - dd-internal
66
+ expose:
67
+ - "6379"
68
+ # NodePort equivalent (manifests/valkey/valkey-nodeport.yaml nodePort 32079).
69
+ ports:
70
+ - "${VALKEY_NODEPORT:-32079}:6379"
71
+ healthcheck:
72
+ test: ["CMD", "valkey-cli", "-p", "6379", "ping"]
73
+ interval: 10s
74
+ timeout: 5s
75
+ retries: 10
76
+ start_period: 10s
77
+ restart: unless-stopped
78
+
79
+ # --- Application ---------------------------------------------------------
80
+ # Mirrors manifests/deployment/dd-default-development/deployment.yaml
81
+ # (dd-default-development-blue). Connection targets use Docker service
82
+ # discovery instead of hardcoded localhost.
83
+ app:
84
+ image: ${APP_IMAGE:-underpost/underpost-engine}:${APP_TAG:-v3.2.22}
85
+ container_name: dd-app
86
+ # The start command is supplied by the generated override docker/compose.app.yml
87
+ # (see `underpost docker-compose --generate --deploy-id <id>`), keeping this
88
+ # file deployment-agnostic.
89
+ environment:
90
+ NODE_ENV: ${NODE_ENV:-development}
91
+ DB_PROVIDER: ${DB_PROVIDER:-mongoose}
92
+ DB_HOST: ${DB_HOST:-mongodb://mongodb:27017}
93
+ DB_NAME: ${DB_NAME:-default}
94
+ DB_REPLICA_SET: ${DB_REPLICA_SET:-rs0}
95
+ DB_AUTH_SOURCE: ${DB_AUTH_SOURCE:-admin}
96
+ DB_USER: ${MONGO_INITDB_ROOT_USERNAME:?}
97
+ DB_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD:?}
98
+ VALKEY_HOST: ${VALKEY_HOST:-valkey-service}
99
+ VALKEY_PORT: ${VALKEY_PORT:-6379}
100
+ networks:
101
+ - dd-internal
102
+ expose:
103
+ - "4001"
104
+ - "4002"
105
+ - "4003"
106
+ - "4004"
107
+ # Direct access to the LoadBalancer-equivalent ports (manifest 4001-4004).
108
+ ports:
109
+ - "${APP_PORT_4001:-4001}:4001"
110
+ - "${APP_PORT_4002:-4002}:4002"
111
+ - "${APP_PORT_4003:-4003}:4003"
112
+ - "${APP_PORT_4004:-4004}:4004"
113
+ healthcheck:
114
+ test: ["CMD-SHELL", "timeout 2 bash -c '</dev/tcp/127.0.0.1/4001' || exit 1"]
115
+ interval: 15s
116
+ timeout: 5s
117
+ retries: 5
118
+ start_period: 60s
119
+ depends_on:
120
+ mongodb:
121
+ condition: service_healthy
122
+ valkey-service:
123
+ condition: service_healthy
124
+ restart: unless-stopped
125
+
126
+ # --- Reverse proxy / NodePort-equivalent load balancer -------------------
127
+ # Mirrors manifests/deployment/dd-default-development/proxy.yaml (Contour
128
+ # HTTPProxy) using nginx with websocket upgrade support.
129
+ proxy:
130
+ image: ${PROXY_IMAGE:-nginx:stable-alpine}
131
+ container_name: dd-proxy
132
+ volumes:
133
+ - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
134
+ networks:
135
+ - dd-internal
136
+ ports:
137
+ - "${PROXY_HTTP_PORT:-80}:80"
138
+ healthcheck:
139
+ test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1/healthz"]
140
+ interval: 15s
141
+ timeout: 5s
142
+ retries: 5
143
+ start_period: 10s
144
+ depends_on:
145
+ app:
146
+ condition: service_started
147
+ restart: unless-stopped
148
+
149
+ # --- Monitoring: Prometheus ----------------------------------------------
150
+ # Mirrors manifests/prometheus/deployment.yaml. Scrapes the app's /metrics
151
+ # endpoint (prom-client) over the internal network. Config is generated by
152
+ # `underpost docker-compose --generate` into docker/prometheus/prometheus.yml.
153
+ prometheus:
154
+ image: ${PROMETHEUS_IMAGE:-prom/prometheus:latest}
155
+ container_name: dd-prometheus
156
+ command:
157
+ - --config.file=/etc/prometheus/prometheus.yml
158
+ - --storage.tsdb.path=/prometheus
159
+ volumes:
160
+ - ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
161
+ - prometheus-data:/prometheus
162
+ networks:
163
+ - dd-internal
164
+ expose:
165
+ - "9090"
166
+ ports:
167
+ - "${PROMETHEUS_PORT:-9090}:9090"
168
+ healthcheck:
169
+ test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1:9090/-/healthy"]
170
+ interval: 15s
171
+ timeout: 5s
172
+ retries: 5
173
+ start_period: 15s
174
+ depends_on:
175
+ app:
176
+ condition: service_started
177
+ restart: unless-stopped
178
+
179
+ # --- Monitoring: Grafana -------------------------------------------------
180
+ # Mirrors manifests/grafana/deployment.yaml. Prometheus datasource is
181
+ # pre-provisioned (generated) so dashboards work out of the box.
182
+ grafana:
183
+ image: ${GRAFANA_IMAGE:-grafana/grafana:latest}
184
+ container_name: dd-grafana
185
+ environment:
186
+ GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER:-admin}
187
+ GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD:-admin}
188
+ GF_USERS_ALLOW_SIGN_UP: "false"
189
+ volumes:
190
+ - ./docker/grafana/provisioning:/etc/grafana/provisioning:ro
191
+ - grafana-data:/var/lib/grafana
192
+ networks:
193
+ - dd-internal
194
+ expose:
195
+ - "3000"
196
+ ports:
197
+ - "${GRAFANA_PORT:-3000}:3000"
198
+ healthcheck:
199
+ test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1:3000/api/health"]
200
+ interval: 15s
201
+ timeout: 5s
202
+ retries: 5
203
+ start_period: 15s
204
+ depends_on:
205
+ prometheus:
206
+ condition: service_started
207
+ restart: unless-stopped
208
+
209
+ networks:
210
+ dd-internal:
211
+ name: dd-internal
212
+ driver: bridge
213
+
214
+ volumes:
215
+ mongodb-data:
216
+ name: dd-mongodb-data
217
+ mongodb-keyfile:
218
+ name: dd-mongodb-keyfile
219
+ valkey-data:
220
+ name: dd-valkey-data
221
+ prometheus-data:
222
+ name: dd-prometheus-data
223
+ grafana-data:
224
+ name: dd-grafana-data
@@ -23,7 +23,7 @@ spec:
23
23
  spec:
24
24
  containers:
25
25
  - name: dd-cron-backup
26
- image: underpost/underpost-engine:v3.2.22
26
+ image: underpost/underpost-engine:v3.2.28
27
27
  command:
28
28
  - /bin/sh
29
29
  - -c
@@ -23,7 +23,7 @@ spec:
23
23
  spec:
24
24
  containers:
25
25
  - name: dd-cron-dns
26
- image: underpost/underpost-engine:v3.2.22
26
+ image: underpost/underpost-engine:v3.2.28
27
27
  command:
28
28
  - /bin/sh
29
29
  - -c
@@ -17,7 +17,7 @@ spec:
17
17
  spec:
18
18
  containers:
19
19
  - name: dd-default-development-blue
20
- image: underpost/underpost-engine:v3.2.22
20
+ image: underpost/underpost-engine:v3.2.28
21
21
  # resources:
22
22
  # requests:
23
23
  # memory: "124Ki"
@@ -98,7 +98,7 @@ spec:
98
98
  spec:
99
99
  containers:
100
100
  - name: dd-default-development-green
101
- image: underpost/underpost-engine:v3.2.22
101
+ image: underpost/underpost-engine:v3.2.28
102
102
  # resources:
103
103
  # requests:
104
104
  # memory: "124Ki"