@underpostnet/cyberia 3.2.90 → 3.3.73

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 (490) hide show
  1. package/.dockerignore +1 -0
  2. package/.env.example +16 -0
  3. package/.github/workflows/coverall.cyberia.ci.yml +107 -0
  4. package/.github/workflows/cyberia-client.cd.yml +6 -18
  5. package/.github/workflows/cyberia-server.cd.yml +6 -18
  6. package/.github/workflows/docker-image.cyberia-client.ci.yml +8 -5
  7. package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +8 -3
  8. package/.github/workflows/docker-image.cyberia-server.ci.yml +8 -5
  9. package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +8 -5
  10. package/.github/workflows/docker-image.engine-cyberia.ci.yml +15 -1
  11. package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +15 -1
  12. package/.github/workflows/engine-cyberia.cd.yml +6 -78
  13. package/.github/workflows/engine-cyberia.ci.yml +4 -5
  14. package/.github/workflows/ghpkg.ci.yml +42 -21
  15. package/.github/workflows/hardhat.ci.yml +12 -11
  16. package/.github/workflows/npmpkg.ci.yml +17 -15
  17. package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -16
  18. package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
  19. package/.github/workflows/release.cd.yml +2 -9
  20. package/.prettierignore +1 -0
  21. package/AGENTS.md +47 -0
  22. package/CHANGELOG.md +581 -2417
  23. package/CLI-HELP.md +416 -127
  24. package/Dockerfile +25 -9
  25. package/Dockerfile.dev +25 -9
  26. package/Dockerfile.test +4 -4
  27. package/README.md +21 -1
  28. package/bin/build.js +70 -43
  29. package/bin/build.template.js +8 -3
  30. package/bin/cyberia.js +372 -135
  31. package/bin/deploy.js +18 -104
  32. package/bin/index.js +372 -135
  33. package/compose.env +16 -0
  34. package/conf.js +93 -4
  35. package/deploy/cyberia-client/deploy.sh +47 -0
  36. package/deploy/cyberia-client/package.sh +18 -0
  37. package/deploy/cyberia-client/state.sh +14 -0
  38. package/deploy/cyberia-server/deploy.sh +47 -0
  39. package/deploy/cyberia-server/package.sh +18 -0
  40. package/deploy/cyberia-server/state.sh +14 -0
  41. package/deploy/dd-cyberia/deploy.sh +22 -0
  42. package/deploy/dd-cyberia/init.sh +55 -0
  43. package/deploy/dd-cyberia/package.sh +17 -0
  44. package/deploy/dd-cyberia/state.sh +14 -0
  45. package/deploy/dd-cyberia/sync-deploy.sh +116 -0
  46. package/deploy/lib/github-actions-logging.sh +594 -0
  47. package/deploy/lib/host.sh +185 -0
  48. package/deploy/lib/state.sh +62 -0
  49. package/deploy/pwa-microservices-template/deploy.sh +45 -0
  50. package/deploy/release/deploy.sh +32 -0
  51. package/deployment.yaml +7 -2
  52. package/docker-compose.yml +31 -37
  53. package/examples/static-page/README.md +19 -19
  54. package/examples/static-page/ssr-components/CustomPage.js +2 -2
  55. package/hardhat/hardhat.config.js +1 -6
  56. package/hardhat/package-lock.json +104 -43
  57. package/hardhat/package.json +3 -3
  58. package/manifests/alertmanager/deployment.yaml +81 -0
  59. package/manifests/blackbox-exporter/deployment.yaml +75 -0
  60. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +36 -7
  61. package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +77 -0
  62. package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
  63. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  64. package/manifests/grafana/deployment.yaml +26 -7
  65. package/manifests/grafana/kustomization.yaml +1 -0
  66. package/manifests/grafana/service.yaml +6 -1
  67. package/manifests/mariadb/pv.yaml +1 -0
  68. package/manifests/mongodb/statefulset.yaml +9 -2
  69. package/manifests/mysql/pv-pvc.yaml +14 -1
  70. package/manifests/postgresql/pv.yaml +12 -1
  71. package/manifests/postgresql/pvc.yaml +1 -0
  72. package/manifests/prometheus/deployment.yaml +18 -22
  73. package/package.json +83 -10
  74. package/scripts/audit-selinux.sh +64 -0
  75. package/scripts/event-monitor.sh +56 -0
  76. package/scripts/gpu-diag.sh +0 -0
  77. package/scripts/ip-info.sh +0 -0
  78. package/scripts/k3s-node-setup.sh +30 -14
  79. package/scripts/kubeadm-node-setup.sh +40 -31
  80. package/scripts/lxd-vm-setup.sh +0 -0
  81. package/scripts/maas-nat-firewalld.sh +0 -0
  82. package/scripts/maas-setup.sh +8 -8
  83. package/scripts/nat-iptables.sh +2 -0
  84. package/scripts/rhel-grpc-setup.sh +0 -0
  85. package/scripts/rocky-kickstart.sh +25 -9
  86. package/scripts/selinux-normalize.sh +907 -0
  87. package/scripts/shutdown-machine.sh +843 -0
  88. package/scripts/test-monitor.sh +3 -3
  89. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +1 -1
  90. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +2 -2
  91. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +2 -2
  92. package/src/api/core/core.controller.js +1 -1
  93. package/src/api/core/core.router.js +2 -2
  94. package/src/api/core/core.service.js +2 -2
  95. package/src/api/crypto/crypto.controller.js +1 -1
  96. package/src/api/crypto/crypto.service.js +1 -1
  97. package/src/api/cyberia-action/cyberia-action.controller.js +1 -1
  98. package/src/api/cyberia-action/cyberia-action.router.js +1 -1
  99. package/src/api/cyberia-action/cyberia-action.service.js +2 -2
  100. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -1
  101. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +1 -1
  102. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +2 -2
  103. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
  104. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
  105. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
  106. package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
  107. package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
  108. package/src/api/cyberia-entity/cyberia-entity.service.js +2 -2
  109. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +1 -1
  110. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +1 -1
  111. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +2 -2
  112. package/src/api/cyberia-instance/cyberia-fallback-capture.js +466 -0
  113. package/src/api/cyberia-instance/cyberia-fallback-default-items.js +63 -0
  114. package/src/api/cyberia-instance/cyberia-fallback-world.js +16 -1
  115. package/src/api/cyberia-instance/cyberia-instance-map.service.js +1 -1
  116. package/src/api/cyberia-instance/cyberia-instance.controller.js +4 -1
  117. package/src/api/cyberia-instance/cyberia-instance.router.js +15 -2
  118. package/src/api/cyberia-instance/cyberia-instance.service.js +45 -2
  119. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
  120. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +1 -0
  121. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
  122. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +2 -2
  123. package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
  124. package/src/api/cyberia-map/cyberia-map.router.js +1 -1
  125. package/src/api/cyberia-map/cyberia-map.service.js +2 -2
  126. package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
  127. package/src/api/cyberia-quest/cyberia-quest.router.js +1 -1
  128. package/src/api/cyberia-quest/cyberia-quest.service.js +2 -2
  129. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
  130. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
  131. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
  132. package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
  133. package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
  134. package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
  135. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +16 -29
  136. package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
  137. package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
  138. package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
  139. package/src/api/default/default.controller.js +1 -1
  140. package/src/api/default/default.router.js +1 -1
  141. package/src/api/default/default.service.js +2 -2
  142. package/src/api/document/document.controller.js +1 -1
  143. package/src/api/document/document.router.js +1 -1
  144. package/src/api/document/document.service.js +2 -2
  145. package/src/api/file/file.controller.js +1 -1
  146. package/src/api/file/file.router.js +1 -1
  147. package/src/api/file/file.service.js +2 -2
  148. package/src/api/instance/instance.controller.js +1 -1
  149. package/src/api/instance/instance.router.js +1 -1
  150. package/src/api/instance/instance.service.js +2 -2
  151. package/src/api/ipfs/ipfs.controller.js +1 -1
  152. package/src/api/ipfs/ipfs.router.js +2 -2
  153. package/src/api/ipfs/ipfs.service.js +2 -2
  154. package/src/api/object-layer/object-layer.controller.js +1 -1
  155. package/src/api/object-layer/object-layer.model.js +204 -3
  156. package/src/api/object-layer/object-layer.router.js +2 -2
  157. package/src/api/object-layer/object-layer.service.js +4 -17
  158. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
  159. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
  160. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
  161. package/src/api/test/test.controller.js +1 -1
  162. package/src/api/test/test.service.js +1 -1
  163. package/src/api/user/guest.service.js +3 -3
  164. package/src/api/user/user.controller.js +1 -1
  165. package/src/api/user/user.router.js +2 -2
  166. package/src/api/user/user.service.js +4 -4
  167. package/src/api.js +5 -9
  168. package/src/cli/app.js +391 -0
  169. package/src/cli/baremetal.js +30 -36
  170. package/src/cli/client.js +306 -0
  171. package/src/cli/cloud-init.js +3 -3
  172. package/src/cli/cluster.js +242 -135
  173. package/src/cli/db.js +126 -67
  174. package/src/cli/deploy.js +158 -60
  175. package/src/cli/docker-compose.js +5 -5
  176. package/src/cli/domains.js +184 -0
  177. package/src/cli/dotenv-store.js +143 -0
  178. package/src/cli/event.js +2281 -0
  179. package/src/cli/fs.js +3 -3
  180. package/src/cli/host.js +672 -0
  181. package/src/cli/image.js +4 -7
  182. package/src/cli/index.js +426 -134
  183. package/src/cli/ipfs.js +34 -30
  184. package/src/cli/kickstart.js +1 -1
  185. package/src/cli/kubectl.js +218 -41
  186. package/src/cli/lxd.js +3 -3
  187. package/src/cli/monitor.js +1359 -26
  188. package/src/cli/package.js +90 -0
  189. package/src/cli/release.js +73 -34
  190. package/src/cli/repository.js +564 -367
  191. package/src/cli/run.js +362 -654
  192. package/src/cli/secrets.js +2158 -964
  193. package/src/cli/ssh.js +651 -331
  194. package/src/cli/state.js +394 -0
  195. package/src/cli/static.js +2 -2
  196. package/src/cli/system.js +26 -13
  197. package/src/cli/test.js +199 -125
  198. package/src/cli/vultr.js +623 -0
  199. package/src/cli/wireguard.js +2930 -0
  200. package/src/client/components/core/CalendarCore.js +53 -96
  201. package/src/client/components/core/Docs.js +258 -211
  202. package/src/client/components/core/FileExplorer.js +0 -21
  203. package/src/client/components/core/PanelForm.js +4 -4
  204. package/src/client/components/core/Repository.js +56 -0
  205. package/src/client/components/core/Translate.js +7 -0
  206. package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
  207. package/src/client/components/core/Wallet.js +0 -11
  208. package/src/client/components/core/Worker.js +7 -1
  209. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
  210. package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +368 -0
  211. package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +35 -1
  212. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +4 -0
  213. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
  214. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
  215. package/src/client/components/default/AppShellDefault.js +1 -1
  216. package/src/client/components/default/SettingsDefault.js +2 -2
  217. package/src/client/components/itemledger/SettingsItemledger.js +2 -2
  218. package/src/client/components/underpost/AppShellUnderpost.js +3 -2
  219. package/src/client/components/underpost/SettingsUnderpost.js +2 -2
  220. package/src/client/public/cyberia-docs/ARCHITECTURE.md +17 -3
  221. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +32 -5
  222. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +1 -1
  223. package/src/client/public/cyberia-docs/CYBERIA.md +21 -1
  224. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
  225. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  226. package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
  227. package/src/client/public/default/android-chrome-144x144.png +0 -0
  228. package/src/client/public/default/android-chrome-192x192.png +0 -0
  229. package/src/client/public/default/android-chrome-256x256.png +0 -0
  230. package/src/client/public/default/android-chrome-36x36.png +0 -0
  231. package/src/client/public/default/android-chrome-384x384.png +0 -0
  232. package/src/client/public/default/android-chrome-48x48.png +0 -0
  233. package/src/client/public/default/android-chrome-512x512.png +0 -0
  234. package/src/client/public/default/android-chrome-72x72.png +0 -0
  235. package/src/client/public/default/android-chrome-96x96.png +0 -0
  236. package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
  237. package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
  238. package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
  239. package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
  240. package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
  241. package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
  242. package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
  243. package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
  244. package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
  245. package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
  246. package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
  247. package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
  248. package/src/client/public/default/apple-touch-icon.png +0 -0
  249. package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
  250. package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
  251. package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
  252. package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
  253. package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
  254. package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
  255. package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
  256. package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
  257. package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
  258. package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
  259. package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
  260. package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
  261. package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
  262. package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
  263. package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
  264. package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
  265. package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
  266. package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
  267. package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
  268. package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
  269. package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
  270. package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
  271. package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
  272. package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
  273. package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
  274. package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
  275. package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
  276. package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
  277. package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
  278. package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
  279. package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
  280. package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
  281. package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
  282. package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
  283. package/src/client/public/default/assets/background/white.jpg +0 -0
  284. package/src/client/public/default/browserconfig.xml +1 -1
  285. package/src/client/public/default/favicon-16x16.png +0 -0
  286. package/src/client/public/default/favicon-32x32.png +0 -0
  287. package/src/client/public/default/favicon-48x48.png +0 -0
  288. package/src/client/public/default/favicon.ico +0 -0
  289. package/src/client/public/default/manifest.webmanifest +5 -5
  290. package/src/client/public/default/mstile-144x144.png +0 -0
  291. package/src/client/public/default/mstile-150x150.png +0 -0
  292. package/src/client/public/default/mstile-310x150.png +0 -0
  293. package/src/client/public/default/mstile-310x310.png +0 -0
  294. package/src/client/public/default/mstile-70x70.png +0 -0
  295. package/src/client/public/default/yandex-browser-50x50.png +0 -0
  296. package/src/client/public/default/yandex-browser-manifest.json +1 -1
  297. package/src/client/services/cyberia-instance/cyberia-instance.service.js +40 -0
  298. package/src/client/services/object-layer/object-layer.management.js +4 -4
  299. package/src/client/ssr/RootDocument.js +1 -1
  300. package/src/client/ssr/body/404.js +1 -1
  301. package/src/client/ssr/body/500.js +1 -1
  302. package/src/client/ssr/body/CacheControl.js +1 -1
  303. package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
  304. package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
  305. package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
  306. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
  307. package/src/client/ssr/head/CryptokoynScripts.js +1 -1
  308. package/src/client/ssr/head/Css.js +1 -1
  309. package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
  310. package/src/client/ssr/head/DefaultScripts.js +1 -1
  311. package/src/client/ssr/head/ItemledgerScripts.js +1 -1
  312. package/src/client/ssr/head/Microdata.js +1 -1
  313. package/src/client/ssr/head/Production.js +1 -1
  314. package/src/client/ssr/head/Pwa.js +1 -1
  315. package/src/client/ssr/head/PwaItemledger.js +1 -1
  316. package/src/client/ssr/head/Seo.js +1 -1
  317. package/src/client/ssr/head/UnderpostScripts.js +1 -1
  318. package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
  319. package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
  320. package/src/client/ssr/views/Cyberia404.js +7 -5
  321. package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
  322. package/src/client/ssr/views/Maintenance.js +1 -1
  323. package/src/client/ssr/views/NoNetworkConnection.js +1 -1
  324. package/src/client/ssr/views/Test.js +1 -1
  325. package/src/client/sw/core.sw.js +20 -14
  326. package/src/client-builder/client-build-docs.js +61 -46
  327. package/src/client-builder/client-build-live.js +2 -2
  328. package/src/client-builder/client-build.js +58 -44
  329. package/src/client-builder/client-dev-server.js +3 -3
  330. package/src/client-builder/client-icons.js +2 -2
  331. package/src/client-builder/ssr.js +3 -3
  332. package/src/client.build.js +3 -6
  333. package/src/client.dev.js +3 -6
  334. package/src/db/DataBaseProvider.js +186 -3
  335. package/src/db/mariadb/MariaDB.js +3 -2
  336. package/src/db/mongo/MongoBootstrap.js +273 -101
  337. package/src/db/mongo/MongooseDB.js +11 -8
  338. package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
  339. package/src/grpc/cyberia/grpc-server.js +1 -1
  340. package/src/index.js +103 -23
  341. package/src/mailer/EmailRender.js +2 -2
  342. package/src/mailer/MailerInterceptor.js +87 -0
  343. package/src/mailer/MailerProvider.js +50 -6
  344. package/src/projects/cyberia/atlas-sprite-sheet-generator.js +1 -1
  345. package/src/projects/cyberia/besu-genesis-generator.js +3 -3
  346. package/src/projects/cyberia/catalog-cyberia.js +54 -6
  347. package/src/projects/cyberia/gemini-client.js +1 -1
  348. package/src/projects/cyberia/generate-saga.js +15 -24
  349. package/src/projects/cyberia/hot-reload-trigger.js +1 -1
  350. package/src/projects/cyberia/instance-data.js +22 -3
  351. package/src/projects/cyberia/ipfs-client.js +4 -4
  352. package/src/projects/cyberia/map-preview-generator.js +1 -1
  353. package/src/projects/cyberia/object-layer.js +12 -22
  354. package/src/projects/cyberia/semantic-layer-generator.js +1 -1
  355. package/src/projects/underpost/catalog-underpost.js +13 -2
  356. package/src/proxy.js +4 -7
  357. package/src/runtime/cyberia-client/Dockerfile +9 -4
  358. package/src/runtime/cyberia-client/Dockerfile.dev +8 -2
  359. package/src/runtime/cyberia-server/Dockerfile +9 -4
  360. package/src/runtime/cyberia-server/Dockerfile.dev +8 -2
  361. package/src/runtime/engine-cyberia/Dockerfile +25 -9
  362. package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
  363. package/src/runtime/engine-cyberia/Dockerfile.test +4 -4
  364. package/src/runtime/engine-cyberia/compose.env +16 -0
  365. package/src/runtime/engine-cyberia/docker-compose.yml +31 -37
  366. package/src/runtime/express/Express.js +32 -27
  367. package/src/runtime/lampp/Lampp.js +22 -70
  368. package/src/runtime/nginx/Nginx.js +1 -1
  369. package/src/runtime/wp/Wp.js +16 -48
  370. package/src/server/{catalog.js → build/catalog.js} +15 -5
  371. package/src/server/build/coverage.js +117 -0
  372. package/src/server/build/execution.js +402 -0
  373. package/src/server/build/package.js +465 -0
  374. package/src/server/build/testing.js +528 -0
  375. package/src/server/{dns.js → network/dns.js} +241 -14
  376. package/src/server/network/forward-proxy.js +541 -0
  377. package/src/server/{middlewares.js → network/middlewares.js} +59 -4
  378. package/src/server/network/node-capability.js +98 -0
  379. package/src/server/{peer.js → network/peer.js} +3 -3
  380. package/src/server/{proxy.js → network/proxy.js} +7 -13
  381. package/src/server/network/router.js +356 -0
  382. package/src/server/{tls.js → network/tls.js} +2 -2
  383. package/src/server/network/underpost-compression.js +186 -0
  384. package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +26 -16
  385. package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +19 -3
  386. package/src/server/{cri.js → ops/cri.js} +2 -2
  387. package/src/server/ops/cron.js +949 -0
  388. package/src/server/ops/event-notification.js +284 -0
  389. package/src/server/{logger.js → ops/logger.js} +108 -23
  390. package/src/server/ops/monitoring.js +1724 -0
  391. package/src/server/ops/systemd.js +259 -0
  392. package/src/server/{conf.js → runtime/conf.js} +521 -520
  393. package/src/server/runtime/config-scope.js +215 -0
  394. package/src/server/runtime/environment.js +149 -0
  395. package/src/server/{process.js → runtime/process.js} +153 -13
  396. package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
  397. package/src/server/{runtime.js → runtime/runtime.js} +12 -8
  398. package/src/server/{start.js → runtime/start.js} +128 -39
  399. package/src/server/{auth.js → security/auth.js} +7 -8
  400. package/src/server/security/container-storage.js +382 -0
  401. package/src/server/{crypto.js → security/crypto.js} +1 -1
  402. package/src/server/security/selinux.js +185 -0
  403. package/src/server/{backup.js → storage/backup.js} +17 -8
  404. package/src/server/{data-query.js → storage/data-query.js} +1 -1
  405. package/src/server/{downloader.js → storage/downloader.js} +2 -2
  406. package/src/server/storage/repository.js +68 -0
  407. package/src/server.js +4 -7
  408. package/src/ws/IoInterface.js +1 -1
  409. package/src/ws/IoServer.js +1 -1
  410. package/src/ws/core/core.ws.connection.js +1 -1
  411. package/src/ws/core/core.ws.emit.js +1 -1
  412. package/src/ws/core/core.ws.server.js +1 -1
  413. package/src/ws/default/default.ws.connection.js +1 -1
  414. package/src/ws/default/default.ws.emit.js +1 -1
  415. package/src/ws/default/default.ws.server.js +1 -1
  416. package/test/e2e/event-e2e-public-ingress-down.js +45 -0
  417. package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
  418. package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
  419. package/test/{api.test.js → integration/app/api.test.js} +33 -14
  420. package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +30 -0
  421. package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +2 -1
  422. package/test/integration/app/cyberia/cyberia-load.test.js +467 -0
  423. package/test/integration/app/cyberia/fallback-world-capture.test.js +253 -0
  424. package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
  425. package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
  426. package/test/integration/infra/1-security/config-scope.test.js +305 -0
  427. package/test/integration/infra/1-security/container-storage.test.js +356 -0
  428. package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
  429. package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
  430. package/test/integration/infra/1-security/selinux.test.js +69 -0
  431. package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
  432. package/test/integration/infra/1-security/systemd-service.test.js +70 -0
  433. package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
  434. package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
  435. package/test/integration/infra/2-network/node-capability.test.js +182 -0
  436. package/test/integration/infra/2-network/wireguard-cli.test.js +1163 -0
  437. package/test/integration/infra/2-network/wireguard-edge.test.js +1731 -0
  438. package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
  439. package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
  440. package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
  441. package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
  442. package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
  443. package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
  444. package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +47 -6
  445. package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +56 -4
  446. package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
  447. package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
  448. package/test/integration/infra/5-observability/event-notification.test.js +197 -0
  449. package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
  450. package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
  451. package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
  452. package/test/support/shell-harness.js +73 -0
  453. package/test/unit/build-template.test.js +97 -0
  454. package/test/unit/build-workflow-offline.test.js +132 -0
  455. package/test/unit/catalog.test.js +71 -0
  456. package/test/unit/client-build-docs.test.js +334 -0
  457. package/test/unit/conf-loading.test.js +303 -0
  458. package/test/unit/conf-resolution.test.js +979 -0
  459. package/test/unit/coverage-artifact.test.js +130 -0
  460. package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
  461. package/test/unit/deploy-env-resolution.test.js +38 -0
  462. package/test/unit/deploy-log-table.test.js +447 -0
  463. package/test/unit/execution-profiles.test.js +219 -0
  464. package/test/unit/fleet-sync-source.test.js +149 -0
  465. package/test/unit/logger-redaction.test.js +112 -0
  466. package/test/unit/package.test.js +403 -0
  467. package/test/unit/prepare-host.test.js +299 -0
  468. package/test/unit/process-environment.test.js +18 -0
  469. package/test/unit/propagation-message.test.js +78 -0
  470. package/test/unit/redeploy-plan.test.js +24 -0
  471. package/test/unit/release-bump.test.js +474 -0
  472. package/test/unit/ssh-output-redaction.test.js +28 -0
  473. package/test/unit/start-options.test.js +46 -0
  474. package/test/unit/test-tiers.test.js +193 -0
  475. package/vitest.config.js +58 -0
  476. package/.nycrc +0 -9
  477. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
  478. package/manifests/mongodb/pv-pvc.yaml +0 -59
  479. package/scripts/link-local-underpost-cli.sh +0 -6
  480. package/src/api/user/user.build.js +0 -16
  481. package/src/cli/env.js +0 -177
  482. package/src/client/components/core/Blockchain.js +0 -41
  483. package/src/client/components/core/Blog.js +0 -9
  484. package/src/client/components/core/KeyboardAvoidance.js +0 -145
  485. package/src/client/public/default/assets/background/dark.jpg +0 -0
  486. package/src/client/public/default/assets/background/white0-min.jpg +0 -0
  487. package/src/client/public/default/assets/background/white0.jpg +0 -0
  488. package/src/client/public/doc/favicon.ico +0 -0
  489. package/src/client/public/doc/sitemap +0 -148
  490. package/src/server/cron.js +0 -476
package/.dockerignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /logs
7
7
  /build
8
8
  /.env
9
+ /.underpost
9
10
  /coverage
10
11
  /prometheus_data
11
12
  /grafana_data
package/.env.example CHANGED
@@ -70,6 +70,22 @@ CYBERIA_DEFAULT_INSTANCE=amethyst-strata-expansion
70
70
  CYBERIA_SERVER_APP_ENV=development
71
71
  CYBERIA_SERVER_LOG_LEVEL=
72
72
 
73
+ # --- cyberia-server WebSocket admission and rate limits ----------------------
74
+ # Unset keeps the built-in default. An explicit 0 turns that one limit off.
75
+ # The startup log prints the effective profile ("ws limits: ...").
76
+ #
77
+ # Set CYBERIA_DISABLE_CONNECTION_LIMITS=1 to turn every limit off. The load test
78
+ # (test/cyberia-load.test.js) drives every simulated client from one address, so
79
+ # it needs this. NEVER enable it on a public deploy.
80
+ CYBERIA_DISABLE_CONNECTION_LIMITS=
81
+ CYBERIA_MAX_CONNECTIONS=
82
+ CYBERIA_MAX_CONNECTIONS_PER_IP=
83
+ CYBERIA_CONNECT_RATE_PER_IP=
84
+ CYBERIA_CONNECT_BURST_PER_IP=
85
+ CYBERIA_MESSAGE_RATE=
86
+ CYBERIA_MESSAGE_BURST=
87
+ CYBERIA_MAX_STRIKES=
88
+
73
89
  # --- engine-cyberia runtime env (loaded into the container via env_file) -----
74
90
  # The dd-cyberia engine (engine-private/conf/dd-cyberia/conf.server.json) needs
75
91
  # these to boot: DB auth + per-site DB names, the base PORT (the cyberia host is
@@ -0,0 +1,107 @@
1
+ name: CI | Coverall Cyberia
2
+
3
+ on:
4
+ push:
5
+ branches: ['master', 'main']
6
+ pull_request:
7
+ branches: ['master', 'main']
8
+
9
+ jobs:
10
+ test:
11
+ name: Coverall Cyberia Test
12
+ # Deliberately not the engine repository: two coverage workflows on one commit
13
+ # are two Coveralls builds, and the badge then shows whichever landed last
14
+ # rather than the tree's coverage. The engine is served by coverall.ci.yml.
15
+ if: |
16
+ github.actor != 'dependabot[bot]' &&
17
+ (github.repository == 'underpostnet/engine-cyberia' ||
18
+ github.repository == 'underpostnet/engine-ghpkg-cyberia' ||
19
+ github.repository == 'underpostnet/engine-test-cyberia')
20
+ runs-on: ubuntu-latest
21
+ container:
22
+ image: quay.io/rockylinux/rockylinux:9
23
+ steps:
24
+ - name: Clone repository
25
+ uses: actions/checkout@v7
26
+
27
+ - name: Install required packages
28
+ run: |
29
+ dnf install -y sudo tar gzip bzip2 git bash
30
+ dnf install -y curl --allowerasing
31
+
32
+ - name: Install Node.js
33
+ run: |
34
+ curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -
35
+ dnf install nodejs -y
36
+
37
+ - name: Install project dependencies
38
+ run: npm install
39
+
40
+ # Set the COVERAGE_MIN repository variable to gate below the shipped
41
+ # default while the suite is catching up to it.
42
+ - name: Run tests and enforce coverage threshold
43
+ run: COVERAGE_ENFORCE=1 node bin test unit,infra,app,cyberia
44
+ env:
45
+ COVERAGE_MIN: ${{ vars.COVERAGE_MIN }}
46
+
47
+ # Stored even when the threshold step failed — that step still fails the
48
+ # job, but without the report the badge freezes at the last passing build.
49
+ - name: Store coverage report
50
+ if: '!cancelled()'
51
+ uses: actions/upload-artifact@v7
52
+ with:
53
+ name: coverall-cyberia-lcov
54
+ path: ./coverage/lcov.info
55
+ if-no-files-found: error
56
+
57
+ upload:
58
+ name: Upload Cyberia Coverage to Coveralls
59
+ needs: test
60
+ # Host runner, not the Rocky container the suite runs in: every step of the
61
+ # Coveralls action declares `shell: bash`, which the runner execs inside the
62
+ # job container and cannot resolve there.
63
+ if: |
64
+ !cancelled() &&
65
+ github.actor != 'dependabot[bot]' &&
66
+ (github.repository == 'underpostnet/engine-cyberia' ||
67
+ github.repository == 'underpostnet/engine-ghpkg-cyberia' ||
68
+ github.repository == 'underpostnet/engine-test-cyberia')
69
+ runs-on: ubuntu-latest
70
+ steps:
71
+ # Coveralls reads the commit and branch metadata from the checkout.
72
+ - name: Clone repository
73
+ uses: actions/checkout@v7
74
+
75
+ - name: Restore coverage report
76
+ uses: actions/download-artifact@v8
77
+ with:
78
+ name: coverall-cyberia-lcov
79
+ path: ./coverage
80
+
81
+ - name: Upload coverage to Coveralls
82
+ uses: coverallsapp/github-action@v2
83
+ with:
84
+ github-token: ${{ secrets.GITHUB_TOKEN }}
85
+ file: ./coverage/lcov.info
86
+ format: lcov
87
+ parallel: true
88
+ fail-on-error: true
89
+
90
+ finish:
91
+ name: Finish Cyberia Coveralls build
92
+ needs: upload
93
+ # The build stays open until this webhook lands, so it runs on any upload
94
+ # outcome rather than leaving a half-reported build behind.
95
+ if: |
96
+ !cancelled() &&
97
+ github.actor != 'dependabot[bot]' &&
98
+ (github.repository == 'underpostnet/engine-cyberia' ||
99
+ github.repository == 'underpostnet/engine-ghpkg-cyberia' ||
100
+ github.repository == 'underpostnet/engine-test-cyberia')
101
+ runs-on: ubuntu-latest
102
+ steps:
103
+ - name: Notify Coveralls Finished
104
+ uses: coverallsapp/github-action@v2
105
+ with:
106
+ github-token: ${{ secrets.GITHUB_TOKEN }}
107
+ parallel-finished: true
@@ -32,21 +32,9 @@ jobs:
32
32
  script: |
33
33
  set -e
34
34
  set -o pipefail
35
- echo "Starting remote deploy"
36
- cd /home/dd/engine
37
- TARGET_NODE=hp-envy-iso-ram-rocky9
38
- INGRESS_NODE=localhost.localdomain
39
- sudo -n -- /bin/bash -lc "node bin run pull"
40
- sudo -n -- /bin/bash -lc "node bin run secret"
41
- sudo -n -- /bin/bash -lc "node bin/build dd-cyberia --conf"
42
- sudo -n -- /bin/bash -lc "kubectl wait --for=condition=Ready node/${TARGET_NODE} --timeout=2m"
43
- sudo -n -- /bin/bash -lc "kubectl rollout status deployment/underpost-ingress -n default --timeout=5m"
44
- sudo -n -- /bin/bash -lc "kubectl rollout status deployment/underpost-gateway -n default --timeout=5m"
45
- sudo -n -- /bin/bash -lc "node bin run instance \
46
- --kubeadm \
47
- --gateway-api \
48
- --image-pull-policy Always \
49
- --node-name ${TARGET_NODE} \
50
- --ingress-node ${INGRESS_NODE} \
51
- --ssh-key-path /home/dd/tmp/897as9dxhaskd9 \
52
- 'dd-cyberia,mmo-client'"
35
+ # Carried across the SSH hop so the far side reports in GitHub Actions form:
36
+ # deploy/lib/github-actions-logging.sh folds its monitor frames into collapsed groups, and the
37
+ # state domain's telemetry export emits ::notice::/::error:: annotations this job
38
+ # surfaces. GITHUB_ACTIONS itself is a runner-local variable and does not travel.
39
+ export RUN_QUIET_CI=github
40
+ bash /home/dd/engine/deploy/cyberia-client/deploy.sh
@@ -32,21 +32,9 @@ jobs:
32
32
  script: |
33
33
  set -e
34
34
  set -o pipefail
35
- echo "Starting remote deploy"
36
- cd /home/dd/engine
37
- TARGET_NODE=hp-envy-iso-ram-rocky9
38
- INGRESS_NODE=localhost.localdomain
39
- sudo -n -- /bin/bash -lc "node bin run pull"
40
- sudo -n -- /bin/bash -lc "node bin run secret"
41
- sudo -n -- /bin/bash -lc "node bin/build dd-cyberia --conf"
42
- sudo -n -- /bin/bash -lc "kubectl wait --for=condition=Ready node/${TARGET_NODE} --timeout=2m"
43
- sudo -n -- /bin/bash -lc "kubectl rollout status deployment/underpost-ingress -n default --timeout=5m"
44
- sudo -n -- /bin/bash -lc "kubectl rollout status deployment/underpost-gateway -n default --timeout=5m"
45
- sudo -n -- /bin/bash -lc "node bin run instance \
46
- --kubeadm \
47
- --gateway-api \
48
- --image-pull-policy Always \
49
- --node-name ${TARGET_NODE} \
50
- --ingress-node ${INGRESS_NODE} \
51
- --ssh-key-path /home/dd/tmp/897as9dxhaskd9 \
52
- 'dd-cyberia,mmo-server'"
35
+ # Carried across the SSH hop so the far side reports in GitHub Actions form:
36
+ # deploy/lib/github-actions-logging.sh folds its monitor frames into collapsed groups, and the
37
+ # state domain's telemetry export emits ::notice::/::error:: annotations this job
38
+ # surfaces. GITHUB_ACTIONS itself is a runner-local variable and does not travel.
39
+ export RUN_QUIET_CI=github
40
+ bash /home/dd/engine/deploy/cyberia-server/deploy.sh
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.2.90'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -34,9 +34,15 @@ jobs:
34
34
  - name: Build cyberia-server SSR dashboard
35
35
  working-directory: engine
36
36
  run: |
37
- node bin/deploy cyberia
37
+ node bin package dd-cyberia --install
38
38
  node bin/cyberia run-workflow build-cyberia-404 --output-path ../assets/404/index.html
39
39
 
40
+ - name: Stage underpost CLI package
41
+ working-directory: engine
42
+ # Bakes the CLI into the runtime image from this checkout instead of the registry, so a
43
+ # starting pod never fetches it. The Dockerfiles COPY ../underpost-cli.tgz.
44
+ run: node bin/cyberia run-workflow stage-cli --output-path ..
45
+
40
46
  - name: Set up Docker Buildx
41
47
  uses: docker/setup-buildx-action@v4
42
48
 
@@ -65,7 +71,4 @@ jobs:
65
71
  push: true
66
72
  tags: ${{ steps.meta.outputs.tags }}
67
73
  labels: ${{ steps.meta.outputs.labels }}
68
-
69
- build-args: |
70
- UNDERPOST_VERSION=${{ env.UNDERPOST_VERSION }}
71
74
  BUILD_MODE=RELEASE
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.2.90'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -34,9 +34,15 @@ jobs:
34
34
  - name: Build cyberia-server SSR dashboard
35
35
  working-directory: engine
36
36
  run: |
37
- node bin/deploy cyberia
37
+ node bin package dd-cyberia --install
38
38
  node bin/cyberia run-workflow build-cyberia-404 --output-path ../assets/404/index.html
39
39
 
40
+ - name: Stage underpost CLI package
41
+ working-directory: engine
42
+ # Bakes the CLI into the runtime image from this checkout instead of the registry, so a
43
+ # starting pod never fetches it. The Dockerfiles COPY ../underpost-cli.tgz.
44
+ run: node bin/cyberia run-workflow stage-cli --output-path ..
45
+
40
46
  - name: Set up Docker Buildx
41
47
  uses: docker/setup-buildx-action@v4
42
48
 
@@ -66,5 +72,4 @@ jobs:
66
72
  tags: ${{ steps.meta.outputs.tags }}
67
73
  labels: ${{ steps.meta.outputs.labels }}
68
74
  build-args: |
69
- UNDERPOST_VERSION=${{ env.UNDERPOST_VERSION }}
70
75
  BUILD_MODE=DEBUG
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.2.90'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -34,10 +34,16 @@ jobs:
34
34
  - name: Build cyberia-server SSR dashboard
35
35
  working-directory: engine
36
36
  run: |
37
- node bin/deploy cyberia
37
+ node bin package dd-cyberia --install
38
38
  node bin/cyberia run-workflow build-server-dashboard --output-path ../public/index.html
39
39
  node bin/cyberia run-workflow build-cyberia-404 --output-path ../public/404/index.html
40
40
 
41
+ - name: Stage underpost CLI package
42
+ working-directory: engine
43
+ # Bakes the CLI into the runtime image from this checkout instead of the registry, so a
44
+ # starting pod never fetches it. The Dockerfiles COPY ../underpost-cli.tgz.
45
+ run: node bin/cyberia run-workflow stage-cli --output-path ..
46
+
41
47
  - name: Set up Docker Buildx
42
48
  uses: docker/setup-buildx-action@v4
43
49
 
@@ -66,6 +72,3 @@ jobs:
66
72
  push: true
67
73
  tags: ${{ steps.meta.outputs.tags }}
68
74
  labels: ${{ steps.meta.outputs.labels }}
69
-
70
- build-args: |
71
- UNDERPOST_VERSION=${{ env.UNDERPOST_VERSION }}
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.2.90'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -34,10 +34,16 @@ jobs:
34
34
  - name: Build cyberia-server SSR dashboard (dev)
35
35
  working-directory: engine
36
36
  run: |
37
- node bin/deploy cyberia
37
+ node bin package dd-cyberia --install
38
38
  node bin/cyberia run-workflow build-server-dashboard --dev --output-path ../public/index.html
39
39
  node bin/cyberia run-workflow build-cyberia-404 --output-path ../public/404/index.html
40
40
 
41
+ - name: Stage underpost CLI package
42
+ working-directory: engine
43
+ # Bakes the CLI into the runtime image from this checkout instead of the registry, so a
44
+ # starting pod never fetches it. The Dockerfiles COPY ../underpost-cli.tgz.
45
+ run: node bin/cyberia run-workflow stage-cli --output-path ..
46
+
41
47
  - name: Set up Docker Buildx
42
48
  uses: docker/setup-buildx-action@v4
43
49
 
@@ -66,6 +72,3 @@ jobs:
66
72
  push: true
67
73
  tags: ${{ steps.meta.outputs.tags }}
68
74
  labels: ${{ steps.meta.outputs.labels }}
69
-
70
- build-args: |
71
- UNDERPOST_VERSION=${{ env.UNDERPOST_VERSION }}
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.2.90'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -16,6 +16,20 @@ jobs:
16
16
  steps:
17
17
  - uses: actions/checkout@v7
18
18
 
19
+ - name: Setup Node.js
20
+ uses: actions/setup-node@v7
21
+ with:
22
+ node-version: '24.x'
23
+
24
+ - name: Install engine dependencies
25
+ run: npm ci --ignore-scripts
26
+
27
+ - name: Stage underpost CLI package
28
+ # Bakes the CLI into the image from this checkout instead of the registry, so a starting
29
+ # pod never fetches it. The Dockerfiles COPY underpost-cli.tgz from the build context,
30
+ # which for this workflow is the repository root.
31
+ run: node bin/cyberia run-workflow stage-cli --output-path .
32
+
19
33
  - name: Set up Docker Buildx
20
34
  uses: docker/setup-buildx-action@v4
21
35
 
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.2.90'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -16,6 +16,20 @@ jobs:
16
16
  steps:
17
17
  - uses: actions/checkout@v7
18
18
 
19
+ - name: Setup Node.js
20
+ uses: actions/setup-node@v7
21
+ with:
22
+ node-version: '24.x'
23
+
24
+ - name: Install engine dependencies
25
+ run: npm ci --ignore-scripts
26
+
27
+ - name: Stage underpost CLI package
28
+ # Bakes the CLI into the image from this checkout instead of the registry, so a starting
29
+ # pod never fetches it. The Dockerfiles COPY underpost-cli.tgz from the build context,
30
+ # which for this workflow is the repository root.
31
+ run: node bin/cyberia run-workflow stage-cli --output-path .
32
+
19
33
  - name: Set up Docker Buildx
20
34
  uses: docker/setup-buildx-action@v4
21
35
 
@@ -40,13 +40,8 @@ jobs:
40
40
  script: |
41
41
  set -e
42
42
  set -o pipefail
43
- echo "Starting remote deploy"
44
- INGRESS_NODE=localhost.localdomain
45
- cd /home/dd/engine
46
- sudo -n -- /bin/bash -lc "node bin run pull"
47
- sudo -n -- /bin/bash -lc "npm install"
48
- sudo -n -- /bin/bash -lc "node bin run secret"
49
- sudo -n -- /bin/bash -lc "node bin run deploy dd-cyberia --gateway-api --ingress-node ${INGRESS_NODE}"
43
+ export RUN_QUIET_CI=github
44
+ bash /home/dd/engine/deploy/dd-cyberia/deploy.sh
50
45
  sync-and-deploy:
51
46
  if: github.event.inputs.job == 'sync-and-deploy'
52
47
  name: Remote SSH sync and deploy
@@ -71,67 +66,8 @@ jobs:
71
66
  script: |
72
67
  set -e
73
68
  set -o pipefail
74
- echo "Starting remote sync and deploy"
75
- TARGET_NODE=localhost.localdomain
76
- INGRESS_NODE=localhost.localdomain
77
- cd /home/dd/engine
78
- sudo -n -- /bin/bash -lc "node bin run pull"
79
- sudo -n -- /bin/bash -lc "npm install"
80
- sudo -n -- /bin/bash -lc "node bin run secret"
81
- sudo -n -- /bin/bash -lc "npm run test"
82
- sudo -n -- /bin/bash -lc "node bin run clean src/client/public/cyberia"
83
- sudo -n -- /bin/bash -lc "node bin run clean src/client/public/underpost"
84
- sudo -n -- /bin/bash -lc "node bin cmt src/client/public/cyberia --init-repo"
85
- sudo -n -- /bin/bash -lc "node bin cmt src/client/public/underpost --init-repo"
86
- sudo -n -- /bin/bash -lc "node bin fs src/client/public/cyberia --pull --recursive --deploy-id dd-cyberia"
87
- sudo -n -- /bin/bash -lc "node bin fs src/client/public/underpost --pull --recursive --deploy-id dd-cyberia --storage-file-path './engine-private/conf/dd-cyberia/storage.underpost.json'"
88
- CHANGES_CYBERIA=$(sudo -n -- /bin/bash -lc "node bin cmt src/client/public/cyberia --has-changes" | tr -d '\n')
89
- if [ "$CHANGES_CYBERIA" = "1" ]; then
90
- sudo -n -- /bin/bash -lc "node bin cmt src/client/public/cyberia feat 'Update cyberia public assets'"
91
- fi
92
- CHANGES_UNDERPOST=$(sudo -n -- /bin/bash -lc "node bin cmt src/client/public/underpost --has-changes" | tr -d '\n')
93
- if [ "$CHANGES_UNDERPOST" = "1" ]; then
94
- sudo -n -- /bin/bash -lc "node bin cmt src/client/public/underpost feat 'Update underpost public assets'"
95
- fi
96
- sudo -n -- /bin/bash -lc "npm run fix"
97
- sudo -n -- /bin/bash -lc "npm install"
98
- sudo -n -- /bin/bash -lc "node bin/deploy cyberia"
99
- sudo -n -- /bin/bash -lc "underpost run clean"
100
- sudo -n -- /bin/bash -lc "node bin env dd-cyberia production"
101
- sudo -n -- /bin/bash -lc "node bin/cyberia run-workflow build-manifest"
102
- sudo -n -- /bin/bash -lc "node bin run sync 'dd-cyberia,1,,underpost/engine-cyberia:latest' \
103
- --kubeadm \
104
- --deploy-id-cron-jobs none \
105
- --timeout-response 300000ms \
106
- --node-name ${TARGET_NODE} \
107
- --gateway-api \
108
- --ingress-node ${INGRESS_NODE} \
109
- --ssh-key-path /home/dd/tmp/897as9dxhaskd9 \
110
- --image-pull-policy Always \
111
- --cmd 'cd /home/dd/engine, \
112
- underpost clone underpostnet/engine-cyberia, \
113
- mkdir -p /home/dd/engine/src/client/public/itemledger \
114
- /home/dd/engine/src/client/public/cryptokoyn \
115
- /home/dd/engine/src/client/components/cryptokoyn \
116
- /home/dd/engine/src/client/components/itemledger \
117
- /home/dd/engine/hardhat, \
118
- cp -a ./engine-cyberia/src/client/public/itemledger/. /home/dd/engine/src/client/public/itemledger/, \
119
- cp -a ./engine-cyberia/src/client/public/cryptokoyn/. /home/dd/engine/src/client/public/cryptokoyn/, \
120
- cp -a ./engine-cyberia/src/client/components/cryptokoyn/. /home/dd/engine/src/client/components/cryptokoyn/, \
121
- cp -a ./engine-cyberia/src/client/components/itemledger/. /home/dd/engine/src/client/components/itemledger/, \
122
- cp -a ./engine-cyberia/src/client/Itemledger.index.js /home/dd/engine/src/client/Itemledger.index.js, \
123
- cp -a ./engine-cyberia/src/client/Cryptokoyn.index.js /home/dd/engine/src/client/Cryptokoyn.index.js, \
124
- rm -rf ./engine-cyberia, \
125
- sudo rm -rf ./engine-private/, \
126
- node bin clone underpostnet/engine-cyberia-private, \
127
- sudo mv ./engine-cyberia-private ./engine-private, \
128
- node bin env dd-cyberia production, \
129
- node ./engine-private/itc-scripts/dd-cyberia-0.js, \
130
- sudo chown -R dd:dd /home/dd/engine/src/client/public/cyberia, \
131
- node bin/cyberia run-workflow import-default-items, \
132
- node bin env dd-cyberia production, \
133
- node bin client dd-cyberia, \
134
- node bin start dd-cyberia production --run'"
69
+ export RUN_QUIET_CI=github
70
+ bash /home/dd/engine/deploy/dd-cyberia/sync-deploy.sh
135
71
  init:
136
72
  if: github.event.inputs.job == 'init'
137
73
  name: Remote SSH init deployment
@@ -156,13 +92,5 @@ jobs:
156
92
  script: |
157
93
  set -e
158
94
  set -o pipefail
159
- echo "Starting init deploy"
160
- INGRESS_NODE=localhost.localdomain
161
- cd /home/dd/engine
162
- sudo -n -- /bin/bash -lc "node bin run pull"
163
- sudo -n -- /bin/bash -lc "npm install"
164
- sudo -n -- /bin/bash -lc "node bin run secret"
165
- sudo -n -- /bin/bash -lc "node bin/build dd-cyberia --conf"
166
- sudo -n -- /bin/bash -lc "node bin deploy dd-cyberia production --kubeadm --gateway-api --ingress-node ${INGRESS_NODE} --sync --build-manifest --timeout-response 300000ms --versions green --replicas 1"
167
- sudo -n -- /bin/bash -lc "node bin deploy dd-cyberia production --kubeadm --gateway-api --ingress-node ${INGRESS_NODE} --disable-update-proxy --git-clean"
168
- sudo -n -- /bin/bash -lc "node bin monitor dd-cyberia production --ready-deployment --promote --timeout-response 300000ms --versions green --replicas 1"
95
+ export RUN_QUIET_CI=github
96
+ bash /home/dd/engine/deploy/dd-cyberia/init.sh
@@ -62,13 +62,12 @@ jobs:
62
62
  env:
63
63
  GITHUB_TOKEN: ${{ secrets.GIT_AUTH_TOKEN }}
64
64
  GITHUB_USERNAME: ${{ github.repository_owner }}
65
+ # Never interpolated into the script: the propagated payload is multi-line and a shell
66
+ # expansion would corrupt entries holding `$` and execute anything in `$(...)`.
67
+ PROPAGATED_MESSAGE: ${{ github.event.inputs.message }}
65
68
  run: |
66
69
  cd .. && node engine/bin clone underpostnet/pwa-microservices-template
67
- if [ -n "${{ github.event.inputs.message }}" ]; then
68
- LAST_COMMIT_MESSAGE="${{ github.event.inputs.message }}"
69
- else
70
- LAST_COMMIT_MESSAGE=$(cd engine && node bin cmt --changelog-msg --from-n-commit 1 --changelog-no-hash 2>/dev/null || echo "")
71
- fi
70
+ LAST_COMMIT_MESSAGE=$(cd engine && node bin cmt --propagate-msg 2>/dev/null || echo "")
72
71
  SHOULD_CD="${{ github.event.inputs.sync }}"
73
72
  DEPLOY_TYPE="${{ github.event.inputs.deploy_type }}"
74
73
  if [ -z "$LAST_COMMIT_MESSAGE" ]; then
@@ -20,7 +20,13 @@ permissions:
20
20
  id-token: write
21
21
  jobs:
22
22
  pwa-microservices-template-ghpk:
23
- if: github.repository == 'underpostnet/pwa-microservices-template' && startsWith(github.event.head_commit.message, 'ci(package-pwa-microservices-template-ghpkg)')
23
+ if: >-
24
+ github.repository == 'underpostnet/pwa-microservices-template' &&
25
+ (
26
+ startsWith(github.event.head_commit.message, 'ci(package-pwa-microservices-template-ghpkg)')
27
+ ||
28
+ github.event_name == 'workflow_dispatch'
29
+ )
24
30
  name: Update github repo package Jobs
25
31
  runs-on: ubuntu-latest
26
32
  container:
@@ -42,20 +48,30 @@ jobs:
42
48
  curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -
43
49
  dnf install nodejs -y
44
50
 
45
- - name: Capture commit message
46
- run: |
47
- FULL_MSG="${{ github.event.head_commit.message }}"
48
- LAST_COMMIT_MESSAGE="${FULL_MSG:-update package}"
49
- echo "LAST_COMMIT_MESSAGE<<EOF" >> $GITHUB_ENV
50
- echo "$LAST_COMMIT_MESSAGE" >> $GITHUB_ENV
51
- echo "EOF" >> $GITHUB_ENV
52
- echo "[INFO] Commit message: $LAST_COMMIT_MESSAGE"
53
-
54
51
  - name: Install dependencies and set repo configuration
55
52
  run: |
56
53
  npm install
57
- node ./bin/deploy rename-package @underpostnet/underpost
58
- node ./bin/deploy set-repo underpostnet/pwa-microservices-template-ghpkg
54
+ node ./bin package --rename @underpostnet/underpost
55
+ node ./bin package --set-repo underpostnet/pwa-microservices-template-ghpkg
56
+
57
+ # Placed after the install because it resolves the payload through the CLI, which needs the
58
+ # dependencies. The push that triggers this job carries the payload the engine propagated.
59
+ - name: Capture commit message
60
+ env:
61
+ # Never interpolated into the script: the propagated payload is multi-line and a shell
62
+ # expansion would corrupt entries holding `$` and execute anything in `$(...)`.
63
+ PROPAGATED_MESSAGE: ${{ github.event.head_commit.message }}
64
+ run: |
65
+ LAST_COMMIT_MESSAGE=$(node ./bin cmt --propagate-msg 2>/dev/null || echo "")
66
+ if [ -z "$LAST_COMMIT_MESSAGE" ]; then
67
+ LAST_COMMIT_MESSAGE="update package"
68
+ fi
69
+ {
70
+ echo "LAST_COMMIT_MESSAGE<<PROPAGATION_EOF"
71
+ echo "$LAST_COMMIT_MESSAGE"
72
+ echo "PROPAGATION_EOF"
73
+ } >> $GITHUB_ENV
74
+ echo "[INFO] Commit message: $LAST_COMMIT_MESSAGE"
59
75
 
60
76
  - name: Set git global credentials
61
77
  run: |
@@ -118,15 +134,20 @@ jobs:
118
134
  echo "[INFO] Canonical github package repo: underpostnet/engine-ghpkg-$CONF_ID"
119
135
 
120
136
  - name: Capture commit message
137
+ env:
138
+ # Never interpolated into the script: the propagated payload is multi-line and a shell
139
+ # expansion would corrupt entries holding `$` and execute anything in `$(...)`.
140
+ PROPAGATED_MESSAGE: ${{ github.event.inputs.message }}
121
141
  run: |
122
- FULL_MSG="${{ github.event.inputs.message }}"
123
- if [ -z "$FULL_MSG" ]; then
124
- FULL_MSG=$(node bin cmt --changelog-msg --from-n-commit 1 --changelog-no-hash 2>/dev/null || echo "")
142
+ LAST_COMMIT_MESSAGE=$(node bin cmt --propagate-msg 2>/dev/null || echo "")
143
+ if [ -z "$LAST_COMMIT_MESSAGE" ]; then
144
+ LAST_COMMIT_MESSAGE="Update canonical github package repo"
125
145
  fi
126
- LAST_COMMIT_MESSAGE="${FULL_MSG:-Update canonical github package repo}"
127
- echo "LAST_COMMIT_MESSAGE<<EOF" >> $GITHUB_ENV
128
- echo "$LAST_COMMIT_MESSAGE" >> $GITHUB_ENV
129
- echo "EOF" >> $GITHUB_ENV
146
+ {
147
+ echo "LAST_COMMIT_MESSAGE<<PROPAGATION_EOF"
148
+ echo "$LAST_COMMIT_MESSAGE"
149
+ echo "PROPAGATION_EOF"
150
+ } >> $GITHUB_ENV
130
151
  echo "[INFO] Commit message: $LAST_COMMIT_MESSAGE"
131
152
 
132
153
  - name: Set git global credentials
@@ -146,8 +167,8 @@ jobs:
146
167
  cd engine-$CONF_ID
147
168
  rm -rf ./.git
148
169
  mv ../$GHPKG_REPO.git ./.git
149
- node ../engine/bin/deploy rename-package "$PACKAGE_NAME"
150
- node ../engine/bin/deploy set-repo underpostnet/$GHPKG_REPO
170
+ node ../engine/bin package --rename "$PACKAGE_NAME"
171
+ node ../engine/bin package --set-repo underpostnet/$GHPKG_REPO
151
172
  git init
152
173
  git config user.name 'underpostnet'
153
174
  git config user.email 'development@underpost.net'