@underpostnet/cyberia 3.3.0 → 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 (471) hide show
  1. package/.dockerignore +1 -0
  2. package/.github/workflows/coverall.cyberia.ci.yml +34 -14
  3. package/.github/workflows/cyberia-client.cd.yml +5 -0
  4. package/.github/workflows/cyberia-server.cd.yml +5 -0
  5. package/.github/workflows/docker-image.cyberia-client.ci.yml +8 -5
  6. package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +8 -3
  7. package/.github/workflows/docker-image.cyberia-server.ci.yml +8 -5
  8. package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +8 -5
  9. package/.github/workflows/docker-image.engine-cyberia.ci.yml +15 -1
  10. package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +15 -1
  11. package/.github/workflows/engine-cyberia.cd.yml +3 -0
  12. package/.github/workflows/engine-cyberia.ci.yml +4 -5
  13. package/.github/workflows/ghpkg.ci.yml +35 -20
  14. package/.github/workflows/hardhat.ci.yml +12 -11
  15. package/.github/workflows/npmpkg.ci.yml +17 -15
  16. package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
  17. package/.github/workflows/release.cd.yml +1 -0
  18. package/.prettierignore +1 -0
  19. package/AGENTS.md +47 -0
  20. package/CHANGELOG.md +565 -2510
  21. package/CLI-HELP.md +306 -147
  22. package/Dockerfile +25 -9
  23. package/Dockerfile.dev +25 -9
  24. package/Dockerfile.test +4 -4
  25. package/README.md +21 -1
  26. package/bin/build.js +66 -41
  27. package/bin/build.template.js +8 -3
  28. package/bin/cyberia.js +308 -91
  29. package/bin/deploy.js +18 -104
  30. package/bin/index.js +308 -91
  31. package/conf.js +91 -4
  32. package/deploy/cyberia-client/deploy.sh +47 -0
  33. package/deploy/cyberia-client/package.sh +18 -0
  34. package/deploy/cyberia-client/state.sh +14 -0
  35. package/deploy/cyberia-server/deploy.sh +47 -0
  36. package/deploy/cyberia-server/package.sh +18 -0
  37. package/deploy/cyberia-server/state.sh +14 -0
  38. package/deploy/dd-cyberia/deploy.sh +6 -26
  39. package/deploy/dd-cyberia/init.sh +35 -43
  40. package/deploy/dd-cyberia/package.sh +17 -0
  41. package/deploy/dd-cyberia/state.sh +14 -0
  42. package/deploy/dd-cyberia/sync-deploy.sh +92 -170
  43. package/deploy/lib/github-actions-logging.sh +594 -0
  44. package/deploy/lib/host.sh +185 -0
  45. package/deploy/lib/state.sh +62 -0
  46. package/deploy/pwa-microservices-template/deploy.sh +12 -39
  47. package/deploy/release/deploy.sh +9 -39
  48. package/deployment.yaml +7 -2
  49. package/docker-compose.yml +7 -7
  50. package/examples/static-page/README.md +19 -19
  51. package/examples/static-page/ssr-components/CustomPage.js +2 -2
  52. package/hardhat/hardhat.config.js +1 -6
  53. package/hardhat/package-lock.json +101 -40
  54. package/hardhat/package.json +2 -2
  55. package/manifests/alertmanager/deployment.yaml +81 -0
  56. package/manifests/blackbox-exporter/deployment.yaml +75 -0
  57. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +32 -7
  58. package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +32 -7
  59. package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
  60. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  61. package/manifests/grafana/deployment.yaml +26 -7
  62. package/manifests/grafana/kustomization.yaml +1 -0
  63. package/manifests/grafana/service.yaml +6 -1
  64. package/manifests/mariadb/pv.yaml +1 -0
  65. package/manifests/mongodb/statefulset.yaml +9 -2
  66. package/manifests/mysql/pv-pvc.yaml +14 -1
  67. package/manifests/postgresql/pv.yaml +12 -1
  68. package/manifests/postgresql/pvc.yaml +1 -0
  69. package/manifests/prometheus/deployment.yaml +18 -22
  70. package/package.json +83 -10
  71. package/scripts/event-monitor.sh +56 -0
  72. package/scripts/k3s-node-setup.sh +27 -14
  73. package/scripts/kubeadm-node-setup.sh +31 -11
  74. package/scripts/maas-setup.sh +8 -8
  75. package/scripts/selinux-normalize.sh +907 -0
  76. package/scripts/shutdown-machine.sh +843 -0
  77. package/scripts/test-monitor.sh +3 -3
  78. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +1 -1
  79. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +2 -2
  80. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +2 -2
  81. package/src/api/core/core.controller.js +1 -1
  82. package/src/api/core/core.router.js +2 -2
  83. package/src/api/core/core.service.js +2 -2
  84. package/src/api/crypto/crypto.controller.js +1 -1
  85. package/src/api/crypto/crypto.service.js +1 -1
  86. package/src/api/cyberia-action/cyberia-action.controller.js +1 -1
  87. package/src/api/cyberia-action/cyberia-action.router.js +1 -1
  88. package/src/api/cyberia-action/cyberia-action.service.js +2 -2
  89. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -1
  90. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +1 -1
  91. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +2 -2
  92. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
  93. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
  94. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
  95. package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
  96. package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
  97. package/src/api/cyberia-entity/cyberia-entity.service.js +2 -2
  98. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +1 -1
  99. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +1 -1
  100. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +2 -2
  101. package/src/api/cyberia-instance/cyberia-fallback-capture.js +466 -0
  102. package/src/api/cyberia-instance/cyberia-fallback-world.js +8 -0
  103. package/src/api/cyberia-instance/cyberia-instance-map.service.js +1 -1
  104. package/src/api/cyberia-instance/cyberia-instance.controller.js +1 -1
  105. package/src/api/cyberia-instance/cyberia-instance.router.js +2 -2
  106. package/src/api/cyberia-instance/cyberia-instance.service.js +2 -2
  107. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
  108. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
  109. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +2 -2
  110. package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
  111. package/src/api/cyberia-map/cyberia-map.router.js +1 -1
  112. package/src/api/cyberia-map/cyberia-map.service.js +2 -2
  113. package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
  114. package/src/api/cyberia-quest/cyberia-quest.router.js +1 -1
  115. package/src/api/cyberia-quest/cyberia-quest.service.js +2 -2
  116. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
  117. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
  118. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
  119. package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
  120. package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
  121. package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
  122. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +0 -26
  123. package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
  124. package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
  125. package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
  126. package/src/api/default/default.controller.js +1 -1
  127. package/src/api/default/default.router.js +1 -1
  128. package/src/api/default/default.service.js +2 -2
  129. package/src/api/document/document.controller.js +1 -1
  130. package/src/api/document/document.router.js +1 -1
  131. package/src/api/document/document.service.js +2 -2
  132. package/src/api/file/file.controller.js +1 -1
  133. package/src/api/file/file.router.js +1 -1
  134. package/src/api/file/file.service.js +2 -2
  135. package/src/api/instance/instance.controller.js +1 -1
  136. package/src/api/instance/instance.router.js +1 -1
  137. package/src/api/instance/instance.service.js +2 -2
  138. package/src/api/ipfs/ipfs.controller.js +1 -1
  139. package/src/api/ipfs/ipfs.router.js +2 -2
  140. package/src/api/ipfs/ipfs.service.js +2 -2
  141. package/src/api/object-layer/object-layer.controller.js +1 -1
  142. package/src/api/object-layer/object-layer.router.js +2 -2
  143. package/src/api/object-layer/object-layer.service.js +3 -3
  144. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
  145. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
  146. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
  147. package/src/api/test/test.controller.js +1 -1
  148. package/src/api/test/test.service.js +1 -1
  149. package/src/api/user/guest.service.js +3 -3
  150. package/src/api/user/user.controller.js +1 -1
  151. package/src/api/user/user.router.js +2 -2
  152. package/src/api/user/user.service.js +4 -4
  153. package/src/api.js +5 -9
  154. package/src/cli/app.js +391 -0
  155. package/src/cli/baremetal.js +30 -35
  156. package/src/cli/client.js +306 -0
  157. package/src/cli/cloud-init.js +3 -3
  158. package/src/cli/cluster.js +184 -82
  159. package/src/cli/db.js +120 -68
  160. package/src/cli/deploy.js +153 -71
  161. package/src/cli/docker-compose.js +5 -5
  162. package/src/cli/domains.js +184 -0
  163. package/src/cli/dotenv-store.js +143 -0
  164. package/src/cli/event.js +2281 -0
  165. package/src/cli/fs.js +3 -3
  166. package/src/cli/host.js +672 -0
  167. package/src/cli/image.js +4 -6
  168. package/src/cli/index.js +322 -142
  169. package/src/cli/ipfs.js +34 -30
  170. package/src/cli/kickstart.js +1 -1
  171. package/src/cli/kubectl.js +218 -41
  172. package/src/cli/lxd.js +3 -3
  173. package/src/cli/monitor.js +1359 -26
  174. package/src/cli/package.js +90 -0
  175. package/src/cli/release.js +16 -12
  176. package/src/cli/repository.js +558 -363
  177. package/src/cli/run.js +331 -650
  178. package/src/cli/secrets.js +2158 -964
  179. package/src/cli/ssh.js +478 -279
  180. package/src/cli/state.js +394 -0
  181. package/src/cli/static.js +2 -2
  182. package/src/cli/system.js +1 -1
  183. package/src/cli/test.js +199 -125
  184. package/src/cli/vultr.js +61 -21
  185. package/src/cli/wireguard.js +1111 -306
  186. package/src/client/components/core/CalendarCore.js +53 -96
  187. package/src/client/components/core/Docs.js +258 -211
  188. package/src/client/components/core/FileExplorer.js +0 -21
  189. package/src/client/components/core/PanelForm.js +4 -4
  190. package/src/client/components/core/Repository.js +56 -0
  191. package/src/client/components/core/Translate.js +7 -0
  192. package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
  193. package/src/client/components/core/Wallet.js +0 -11
  194. package/src/client/components/core/Worker.js +7 -1
  195. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
  196. package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +2 -1
  197. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
  198. package/src/client/components/default/AppShellDefault.js +1 -1
  199. package/src/client/components/default/SettingsDefault.js +2 -2
  200. package/src/client/components/itemledger/SettingsItemledger.js +2 -2
  201. package/src/client/components/underpost/AppShellUnderpost.js +3 -2
  202. package/src/client/components/underpost/SettingsUnderpost.js +2 -2
  203. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +32 -5
  204. package/src/client/public/cyberia-docs/CYBERIA.md +21 -1
  205. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
  206. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  207. package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
  208. package/src/client/public/default/android-chrome-144x144.png +0 -0
  209. package/src/client/public/default/android-chrome-192x192.png +0 -0
  210. package/src/client/public/default/android-chrome-256x256.png +0 -0
  211. package/src/client/public/default/android-chrome-36x36.png +0 -0
  212. package/src/client/public/default/android-chrome-384x384.png +0 -0
  213. package/src/client/public/default/android-chrome-48x48.png +0 -0
  214. package/src/client/public/default/android-chrome-512x512.png +0 -0
  215. package/src/client/public/default/android-chrome-72x72.png +0 -0
  216. package/src/client/public/default/android-chrome-96x96.png +0 -0
  217. package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
  218. package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
  219. package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
  220. package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
  221. package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
  222. package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
  223. package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
  224. package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
  225. package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
  226. package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
  227. package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
  228. package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
  229. package/src/client/public/default/apple-touch-icon.png +0 -0
  230. package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
  231. package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
  232. package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
  233. package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
  234. package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
  235. package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
  236. package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
  237. package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
  238. package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
  239. package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
  240. package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
  241. package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
  242. package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
  243. package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
  244. package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
  245. package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
  246. package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
  247. package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
  248. package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
  249. package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
  250. package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
  251. package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
  252. package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
  253. package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
  254. package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
  255. package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
  256. package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
  257. package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
  258. package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
  259. package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
  260. package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
  261. package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
  262. package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
  263. package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
  264. package/src/client/public/default/assets/background/white.jpg +0 -0
  265. package/src/client/public/default/browserconfig.xml +1 -1
  266. package/src/client/public/default/favicon-16x16.png +0 -0
  267. package/src/client/public/default/favicon-32x32.png +0 -0
  268. package/src/client/public/default/favicon-48x48.png +0 -0
  269. package/src/client/public/default/favicon.ico +0 -0
  270. package/src/client/public/default/manifest.webmanifest +5 -5
  271. package/src/client/public/default/mstile-144x144.png +0 -0
  272. package/src/client/public/default/mstile-150x150.png +0 -0
  273. package/src/client/public/default/mstile-310x150.png +0 -0
  274. package/src/client/public/default/mstile-310x310.png +0 -0
  275. package/src/client/public/default/mstile-70x70.png +0 -0
  276. package/src/client/public/default/yandex-browser-50x50.png +0 -0
  277. package/src/client/public/default/yandex-browser-manifest.json +1 -1
  278. package/src/client/ssr/RootDocument.js +1 -1
  279. package/src/client/ssr/body/404.js +1 -1
  280. package/src/client/ssr/body/500.js +1 -1
  281. package/src/client/ssr/body/CacheControl.js +1 -1
  282. package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
  283. package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
  284. package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
  285. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
  286. package/src/client/ssr/head/CryptokoynScripts.js +1 -1
  287. package/src/client/ssr/head/Css.js +1 -1
  288. package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
  289. package/src/client/ssr/head/DefaultScripts.js +1 -1
  290. package/src/client/ssr/head/ItemledgerScripts.js +1 -1
  291. package/src/client/ssr/head/Microdata.js +1 -1
  292. package/src/client/ssr/head/Production.js +1 -1
  293. package/src/client/ssr/head/Pwa.js +1 -1
  294. package/src/client/ssr/head/PwaItemledger.js +1 -1
  295. package/src/client/ssr/head/Seo.js +1 -1
  296. package/src/client/ssr/head/UnderpostScripts.js +1 -1
  297. package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
  298. package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
  299. package/src/client/ssr/views/Cyberia404.js +7 -5
  300. package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
  301. package/src/client/ssr/views/Maintenance.js +1 -1
  302. package/src/client/ssr/views/NoNetworkConnection.js +1 -1
  303. package/src/client/ssr/views/Test.js +1 -1
  304. package/src/client/sw/core.sw.js +20 -14
  305. package/src/client-builder/client-build-docs.js +61 -46
  306. package/src/client-builder/client-build-live.js +2 -2
  307. package/src/client-builder/client-build.js +38 -30
  308. package/src/client-builder/client-dev-server.js +3 -3
  309. package/src/client-builder/client-icons.js +2 -2
  310. package/src/client-builder/ssr.js +3 -3
  311. package/src/client.build.js +3 -6
  312. package/src/client.dev.js +3 -6
  313. package/src/db/DataBaseProvider.js +186 -3
  314. package/src/db/mariadb/MariaDB.js +3 -2
  315. package/src/db/mongo/MongoBootstrap.js +273 -101
  316. package/src/db/mongo/MongooseDB.js +7 -8
  317. package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
  318. package/src/grpc/cyberia/grpc-server.js +1 -1
  319. package/src/index.js +79 -23
  320. package/src/mailer/EmailRender.js +2 -2
  321. package/src/mailer/MailerInterceptor.js +87 -0
  322. package/src/mailer/MailerProvider.js +50 -6
  323. package/src/projects/cyberia/atlas-sprite-sheet-generator.js +1 -1
  324. package/src/projects/cyberia/besu-genesis-generator.js +3 -3
  325. package/src/projects/cyberia/catalog-cyberia.js +53 -10
  326. package/src/projects/cyberia/gemini-client.js +1 -1
  327. package/src/projects/cyberia/generate-saga.js +1 -1
  328. package/src/projects/cyberia/hot-reload-trigger.js +1 -1
  329. package/src/projects/cyberia/instance-data.js +1 -1
  330. package/src/projects/cyberia/ipfs-client.js +4 -4
  331. package/src/projects/cyberia/map-preview-generator.js +1 -1
  332. package/src/projects/cyberia/object-layer.js +1 -1
  333. package/src/projects/cyberia/semantic-layer-generator.js +1 -1
  334. package/src/projects/underpost/catalog-underpost.js +9 -1
  335. package/src/proxy.js +4 -7
  336. package/src/runtime/cyberia-client/Dockerfile +9 -4
  337. package/src/runtime/cyberia-client/Dockerfile.dev +8 -2
  338. package/src/runtime/cyberia-server/Dockerfile +9 -4
  339. package/src/runtime/cyberia-server/Dockerfile.dev +8 -2
  340. package/src/runtime/engine-cyberia/Dockerfile +25 -9
  341. package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
  342. package/src/runtime/engine-cyberia/Dockerfile.test +4 -4
  343. package/src/runtime/engine-cyberia/docker-compose.yml +7 -7
  344. package/src/runtime/express/Express.js +32 -27
  345. package/src/runtime/lampp/Lampp.js +22 -70
  346. package/src/runtime/nginx/Nginx.js +1 -1
  347. package/src/runtime/wp/Wp.js +16 -48
  348. package/src/server/{catalog.js → build/catalog.js} +15 -5
  349. package/src/server/build/coverage.js +117 -0
  350. package/src/server/build/execution.js +402 -0
  351. package/src/server/build/package.js +465 -0
  352. package/src/server/build/testing.js +528 -0
  353. package/src/server/{dns.js → network/dns.js} +144 -11
  354. package/src/server/{forward-proxy.js → network/forward-proxy.js} +10 -18
  355. package/src/server/{middlewares.js → network/middlewares.js} +3 -3
  356. package/src/server/network/node-capability.js +98 -0
  357. package/src/server/{peer.js → network/peer.js} +3 -3
  358. package/src/server/{proxy.js → network/proxy.js} +7 -13
  359. package/src/server/network/router.js +356 -0
  360. package/src/server/{tls.js → network/tls.js} +2 -2
  361. package/src/server/{underpost-compression.js → network/underpost-compression.js} +1 -1
  362. package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +7 -7
  363. package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +2 -2
  364. package/src/server/{cri.js → ops/cri.js} +2 -2
  365. package/src/server/{cron.js → ops/cron.js} +349 -74
  366. package/src/server/ops/event-notification.js +284 -0
  367. package/src/server/{logger.js → ops/logger.js} +108 -23
  368. package/src/server/ops/monitoring.js +1724 -0
  369. package/src/server/{systemd.js → ops/systemd.js} +55 -1
  370. package/src/server/{conf.js → runtime/conf.js} +513 -422
  371. package/src/server/runtime/config-scope.js +215 -0
  372. package/src/server/runtime/environment.js +149 -0
  373. package/src/server/{process.js → runtime/process.js} +153 -12
  374. package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
  375. package/src/server/{runtime.js → runtime/runtime.js} +12 -8
  376. package/src/server/{start.js → runtime/start.js} +128 -39
  377. package/src/server/{auth.js → security/auth.js} +7 -8
  378. package/src/server/security/container-storage.js +382 -0
  379. package/src/server/{crypto.js → security/crypto.js} +1 -1
  380. package/src/server/{selinux.js → security/selinux.js} +1 -1
  381. package/src/server/{backup.js → storage/backup.js} +17 -8
  382. package/src/server/{data-query.js → storage/data-query.js} +1 -1
  383. package/src/server/{downloader.js → storage/downloader.js} +2 -2
  384. package/src/server/storage/repository.js +68 -0
  385. package/src/server.js +4 -7
  386. package/src/ws/IoInterface.js +1 -1
  387. package/src/ws/IoServer.js +1 -1
  388. package/src/ws/core/core.ws.connection.js +1 -1
  389. package/src/ws/core/core.ws.emit.js +1 -1
  390. package/src/ws/core/core.ws.server.js +1 -1
  391. package/src/ws/default/default.ws.connection.js +1 -1
  392. package/src/ws/default/default.ws.emit.js +1 -1
  393. package/src/ws/default/default.ws.server.js +1 -1
  394. package/test/e2e/event-e2e-public-ingress-down.js +45 -0
  395. package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
  396. package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
  397. package/test/{api.test.js → integration/app/api.test.js} +33 -14
  398. package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +30 -0
  399. package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +1 -1
  400. package/test/integration/app/cyberia/cyberia-load.test.js +467 -0
  401. package/test/integration/app/cyberia/fallback-world-capture.test.js +253 -0
  402. package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
  403. package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
  404. package/test/integration/infra/1-security/config-scope.test.js +305 -0
  405. package/test/integration/infra/1-security/container-storage.test.js +356 -0
  406. package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
  407. package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
  408. package/test/{selinux.test.js → integration/infra/1-security/selinux.test.js} +2 -4
  409. package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
  410. package/test/integration/infra/1-security/systemd-service.test.js +70 -0
  411. package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
  412. package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
  413. package/test/integration/infra/2-network/node-capability.test.js +182 -0
  414. package/test/integration/infra/2-network/wireguard-cli.test.js +1163 -0
  415. package/test/{wireguard-edge.test.js → integration/infra/2-network/wireguard-edge.test.js} +609 -55
  416. package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
  417. package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
  418. package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
  419. package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
  420. package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
  421. package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
  422. package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +6 -6
  423. package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +4 -4
  424. package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
  425. package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
  426. package/test/integration/infra/5-observability/event-notification.test.js +197 -0
  427. package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
  428. package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
  429. package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
  430. package/test/support/shell-harness.js +73 -0
  431. package/test/unit/build-template.test.js +97 -0
  432. package/test/unit/build-workflow-offline.test.js +132 -0
  433. package/test/unit/catalog.test.js +71 -0
  434. package/test/unit/client-build-docs.test.js +334 -0
  435. package/test/unit/conf-loading.test.js +303 -0
  436. package/test/unit/conf-resolution.test.js +979 -0
  437. package/test/unit/coverage-artifact.test.js +130 -0
  438. package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
  439. package/test/unit/deploy-env-resolution.test.js +38 -0
  440. package/test/unit/deploy-log-table.test.js +447 -0
  441. package/test/unit/execution-profiles.test.js +219 -0
  442. package/test/unit/fleet-sync-source.test.js +149 -0
  443. package/test/unit/logger-redaction.test.js +112 -0
  444. package/test/unit/package.test.js +403 -0
  445. package/test/unit/prepare-host.test.js +299 -0
  446. package/test/unit/process-environment.test.js +18 -0
  447. package/test/unit/propagation-message.test.js +78 -0
  448. package/test/unit/redeploy-plan.test.js +24 -0
  449. package/test/unit/release-bump.test.js +474 -0
  450. package/test/unit/ssh-output-redaction.test.js +28 -0
  451. package/test/unit/start-options.test.js +46 -0
  452. package/test/unit/test-tiers.test.js +193 -0
  453. package/vitest.config.js +58 -0
  454. package/.nycrc +0 -9
  455. package/deploy/lib/logging.sh +0 -96
  456. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
  457. package/manifests/mongodb/pv-pvc.yaml +0 -59
  458. package/scripts/coverall-test-cyberia.sh +0 -24
  459. package/scripts/coverall-test.sh +0 -24
  460. package/scripts/link-local-underpost-cli.sh +0 -6
  461. package/src/api/user/user.build.js +0 -16
  462. package/src/cli/env.js +0 -177
  463. package/src/client/components/core/Blockchain.js +0 -41
  464. package/src/client/components/core/Blog.js +0 -9
  465. package/src/client/components/core/KeyboardAvoidance.js +0 -145
  466. package/src/client/public/default/assets/background/dark.jpg +0 -0
  467. package/src/client/public/default/assets/background/white0-min.jpg +0 -0
  468. package/src/client/public/default/assets/background/white0.jpg +0 -0
  469. package/src/client/public/doc/favicon.ico +0 -0
  470. package/src/client/public/doc/sitemap +0 -148
  471. package/src/server/environment.js +0 -98
@@ -0,0 +1,185 @@
1
+ # Host preparation for deploy/<deploy-id>/*.sh. Sourced, never executed directly.
2
+ # Requires lib/github-actions-logging.sh for deploy_step.
3
+
4
+ # The host configuration store, if this node has one.
5
+ #
6
+ # Every step below drives the CLI through `sudo`, so the store the CLI writes is root's, not the
7
+ # store of whoever sourced this file. Both are looked at, the sourcing account first, so a script
8
+ # run as root and a script run as an operator with sudo read the same node configuration.
9
+ #
10
+ # Usage: host_config_path
11
+ host_config_path() {
12
+ local root path
13
+
14
+ root="$(npm root -g 2>/dev/null)" || root=''
15
+ path="$root/underpost/.env"
16
+ if [ -n "$root" ] && [ -f "$path" ]; then
17
+ printf '%s' "$path"
18
+ return 0
19
+ fi
20
+
21
+ # Only when the sourcing account has no store of its own: `sudo -n` is non-interactive, so a
22
+ # host without passwordless sudo declines instead of prompting.
23
+ root="$(sudo -n -- /bin/bash -lc 'npm root -g' 2>/dev/null)" || root=''
24
+ path="$root/underpost/.env"
25
+ [ -n "$root" ] && [ -f "$path" ] && printf '%s' "$path"
26
+
27
+ return 0
28
+ }
29
+
30
+ # One key of this node's resolved host configuration, read straight out of the store the host
31
+ # domain owns (`underpost host get|set`). Pure shell for the same reason `deploy_id_from_repo`
32
+ # is: it resolves the manifest that makes that CLI runnable, so it cannot ask the CLI.
33
+ #
34
+ # Usage: host_config <key>
35
+ host_config() {
36
+ local key="$1" path value
37
+
38
+ path="$(host_config_path)"
39
+ [ -n "$path" ] || return 0
40
+
41
+ value="$(sed -n "s/^[[:space:]]*${key}[[:space:]]*=[[:space:]]*//p" "$path" | tail -n 1)"
42
+ value="${value%"${value##*[![:space:]]}"}"
43
+ value="${value%\"}"
44
+ value="${value#\"}"
45
+ value="${value%\'}"
46
+ value="${value#\'}"
47
+ printf '%s' "$value"
48
+ }
49
+
50
+ # The repository pair a node prepares itself from: the environment, then the node's own host
51
+ # configuration, where `underpost wireguard --sync` records the pair it moved the node onto.
52
+ # Named nowhere else — left empty, the pull resolves the pairing itself.
53
+ ENGINE_SRC_REPO="${ENGINE_SRC_REPO:-$(host_config ENGINE_SRC_REPO)}"
54
+ ENGINE_SRC_PRIVATE_REPO="${ENGINE_SRC_PRIVATE_REPO:-$(host_config ENGINE_SRC_PRIVATE_REPO)}"
55
+
56
+ # The deploy id a source repository belongs to: `engine-cyberia` and `engine-test-cyberia` are
57
+ # both `dd-cyberia`. Pure shell on purpose — it resolves the manifest that makes the CLI
58
+ # runnable, so it cannot be resolved by running the CLI. Prints nothing for a repository that
59
+ # names no deploy (the monorepo itself), which callers read as "leave the checkout's own".
60
+ #
61
+ # Usage: deploy_id_from_repo [owner/repo]
62
+ deploy_id_from_repo() {
63
+ local name="${1:-$ENGINE_SRC_REPO}"
64
+ name="${name##*/}"
65
+ name="${name#engine-test-}"
66
+ name="${name#engine-}"
67
+ name="${name%-private}"
68
+
69
+ [ -n "$name" ] && [ "$name" != "engine" ] && printf 'dd-%s' "$name"
70
+ }
71
+
72
+ # Installs the node's dependencies from the deploy's own package manifest and links the checkout's
73
+ # CLI globally. Every later bare `underpost` command must execute this checkout, never a package
74
+ # left behind by an older image or host preparation.
75
+ #
76
+ # A deploy id owns its dependency set the same way it owns the rest of its configuration, and
77
+ # `engine-private/conf/<deploy-id>/package.json` is where that set lives. The checkout's own
78
+ # manifest is not it: a product tree declares only what it publishes, so installing against it
79
+ # prunes packages the CLI imports — and the CLI is what pulls and repairs the checkout, so the
80
+ # node loses the ability to fix itself. A deploy with no manifest of its own installs the
81
+ # checkout's, which is the previous behaviour.
82
+ #
83
+ # Usage: install_deploy_dependencies <engine-root> [deploy-id]
84
+ install_deploy_dependencies() {
85
+ local engine_root="${1:-/home/dd/engine}"
86
+ local deploy_id="$2"
87
+ local manifest="engine-private/conf/$deploy_id/package.json"
88
+
89
+ if [ -n "$deploy_id" ] && [ -f "$engine_root/$manifest" ]; then
90
+ deploy_step "Install dependencies ($deploy_id)" \
91
+ sudo -n -- /bin/bash -lc "cd $engine_root && cp -a ./$manifest ./package.json && npm install"
92
+ else
93
+ deploy_step "Install dependencies" \
94
+ sudo -n -- /bin/bash -lc "cd $engine_root && npm install"
95
+ fi
96
+
97
+ deploy_step "Link underpost CLI" \
98
+ sudo -n -- /bin/bash -lc \
99
+ "cd $engine_root && npm link --force && test \"\$(readlink -f \"\$(command -v underpost)\")\" = \"\$(readlink -f ./bin/index.js)\""
100
+ }
101
+
102
+ # Brings a node to the state every deploy assumes: the engine source at HEAD, its dependencies
103
+ # installed, its CLI globally linked, and the host configuration loaded into the underpost root
104
+ # env store. `host load` is the one entry point for that store — see `underpost host`.
105
+ #
106
+ # Dependencies are installed before the pull, not only after: the pull runs through this
107
+ # checkout's own CLI, so a tree whose node_modules no longer match its manifest cannot repair
108
+ # itself — the entrypoint fails to import long before it can replace the source. They are
109
+ # installed again after it, because the pull resets the checkout to its remote and takes
110
+ # `package.json` with it.
111
+ prepare_host() {
112
+ local engine_root="${1:-/home/dd/engine}"
113
+ local src_repo="${2:-$ENGINE_SRC_REPO}"
114
+ local src_private_repo="${3:-$ENGINE_SRC_PRIVATE_REPO}"
115
+ local deploy_id="${4:-$(deploy_id_from_repo "$src_repo")}"
116
+
117
+ install_deploy_dependencies "$engine_root" "$deploy_id"
118
+
119
+ deploy_step "Pull repository" \
120
+ sudo -n -- /bin/bash -lc \
121
+ "cd $engine_root && node bin run pull $src_repo${src_private_repo:+ --repo-engine-private $src_private_repo}"
122
+
123
+ install_deploy_dependencies "$engine_root" "$deploy_id"
124
+
125
+ deploy_step "Load host config" \
126
+ sudo -n -- /bin/bash -lc "cd $engine_root && node bin host load"
127
+ }
128
+
129
+ # Whether a tracked path carries uncommitted changes, as `1` or empty.
130
+ #
131
+ # An asset repository is committed only when it actually changed, so this stays outside
132
+ # `deploy_step`: its stdout is the value the caller branches on, and a step's logging would
133
+ # swallow it. The engine root is a parameter rather than an inherited global so a script that
134
+ # drives more than one checkout cannot read the wrong one.
135
+ #
136
+ # Usage: has_changes <path> [engine-root]
137
+ has_changes() {
138
+ local path="$1"
139
+ local engine_root="${2:-${ENGINE_ROOT:-/home/dd/engine}}"
140
+
141
+ sudo -n -- /bin/bash -lc \
142
+ "cd $engine_root && node bin cmt $path --has-changes" | tr -d '\n'
143
+ }
144
+
145
+ # The in-pod bootstrap, emitted as a `--cmd` payload (comma-separated: `underpost deploy`
146
+ # splits on commas, one shell command per element).
147
+ #
148
+ # A pod starts from an image whose global `underpost` is only as new as the last image build,
149
+ # and the engine shells out to that bare command on every production path
150
+ # (`options.dev ? 'node bin' : 'underpost'`). Replacing the image's engine with this deploy's
151
+ # own source and repointing the global bin at it is what makes the pod run the CLI that
152
+ # deployed it rather than the one its image was published with.
153
+ #
154
+ # Pair it with `--skip-pull-repo-base` on the `underpost start` that follows: this *is* the pull
155
+ # `start --build` performs, so leaving it on clones and installs the same tree twice.
156
+ #
157
+ # In-pod bootstrap, emitted as a `--cmd` payload (comma-separated). Three stages, in order:
158
+ # the deploy's own source replaces the image's engine and the global bin is repointed at it;
159
+ # that CLI then stamps `container-status`, which is why the stamp cannot come first — an image
160
+ # predating the state domain answers `unknown command 'state'`. The caller appends the start.
161
+ #
162
+ # The global npm prefix is handed to the container user before either npm call: the manifest's
163
+ # `install` hook installs global tooling and `npm link` publishes the CLI there, and both write
164
+ # a tree the image left owned by root.
165
+ #
166
+ # Usage: pod_bootstrap_cmd <deploy-id> [env] [owner/repo]
167
+ pod_bootstrap_cmd() {
168
+ local deploy_id="$1"
169
+ local env="${2:-production}"
170
+ local repo="${3:-underpostnet/engine-test-${deploy_id#dd-}}"
171
+ local name="${repo##*/}"
172
+
173
+ printf '%s' "cd /home/dd, \
174
+ underpost clone ${repo}, \
175
+ mkdir -p /home/dd/engine, \
176
+ cp -a /home/dd/${name}/. /home/dd/engine/, \
177
+ rm -rf /home/dd/${name}, \
178
+ cd /home/dd/engine, \
179
+ sudo mkdir -p \$(npm prefix -g)/lib/node_modules \$(npm prefix -g)/bin, \
180
+ sudo chown -R \$(id -u):\$(id -g) \$(npm prefix -g)/lib/node_modules \$(npm prefix -g)/bin, \
181
+ npm install, \
182
+ npm link --force, \
183
+ test \"\$(readlink -f \"\$(command -v underpost)\")\" = \"\$(readlink -f ./bin/index.js)\", \
184
+ underpost state set container-status ${deploy_id}-${env}-build-deployment"
185
+ }
@@ -0,0 +1,62 @@
1
+ # Runtime telemetry streaming. Sourced, never executed directly.
2
+ #
3
+ # The one source of streamed state for every context. Nothing here is conditional on GitHub
4
+ # Actions: annotations are just the rendering the state domain picks when it detects a workflow.
5
+
6
+ STATE_ENV="${STATE_ENV:-production}"
7
+ STATE_NAMESPACE="${STATE_NAMESPACE:-default}"
8
+ STATE_STREAM="${STATE_STREAM:-1}"
9
+ # Seconds between frames. The live table is the default; 0 observes once and exits, which is
10
+ # what a non-interactive caller wants.
11
+ STATE_WATCH="${STATE_WATCH:-2}"
12
+
13
+ # Streams one observation of a deployment's live execution state, health and metrics.
14
+ #
15
+ # Not wrapped in deploy_step: run_quiet prints only pattern-matched lines and discards its debug
16
+ # log on success, so the payload never reached the terminal. The target defaults to the caller's
17
+ # directory name.
18
+ #
19
+ # Usage: stream_state <engine-root> [deploy-id] [instance-id]
20
+ stream_state() {
21
+ local engine_root="${1:-/home/dd/engine}"
22
+ local deploy_id="${2:-$(basename "$(cd "$(dirname "${BASH_SOURCE[1]}")" && pwd)")}"
23
+ local instance_id="${3:-}"
24
+ local args="deploy-id=${deploy_id}"
25
+ local target="$deploy_id"
26
+
27
+ [ "$STATE_STREAM" = "0" ] && return 0
28
+
29
+ if [ -n "$instance_id" ]; then
30
+ args="${args},instance-id=${instance_id}"
31
+ target="${deploy_id}/${instance_id}"
32
+ fi
33
+
34
+ deploy_start "Runtime state ${target}"
35
+
36
+ if [ "$STATE_WATCH" != "0" ]; then
37
+ # In-place redraw, the same shape run_quiet uses for the deploy table: the cursor is
38
+ # parked above the block and each frame overwrites it. Runs until interrupted.
39
+ local refresh=0 frame lines=0
40
+ printf '\033[?25l'
41
+ trap 'printf "\033[?25h\n"; return 0' INT
42
+ while true; do
43
+ refresh=$((refresh + 1))
44
+ frame=$(sudo -n -- /bin/bash -lc \
45
+ "cd ${engine_root} && node bin state status \
46
+ --env ${STATE_ENV} \
47
+ --namespace ${STATE_NAMESPACE} \
48
+ --args ${args},refresh=${refresh}" 2>/dev/null)
49
+ [ "$lines" -gt 0 ] && printf '\033[%dA' "$lines"
50
+ printf '%s\n' "$frame" | while IFS= read -r line; do printf '%s\033[K\n' "$line"; done
51
+ lines=$(printf '%s\n' "$frame" | wc -l)
52
+ sleep "$STATE_WATCH"
53
+ done
54
+ fi
55
+
56
+ # RUN_QUIET_CI survives the SSH hop; unset in an ordinary shell, where this prints JSON.
57
+ sudo -n -- /bin/bash -lc \
58
+ "cd ${engine_root} && RUN_QUIET_CI=${RUN_QUIET_CI:-} node bin state publish \
59
+ --env ${STATE_ENV} \
60
+ --namespace ${STATE_NAMESPACE} \
61
+ --args ${args}"
62
+ }
@@ -2,7 +2,7 @@
2
2
  set -euo pipefail
3
3
 
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
- source "$SCRIPT_DIR/../lib/logging.sh"
5
+ source "$SCRIPT_DIR/../lib/github-actions-logging.sh"
6
6
 
7
7
  # Runs in the workflow's rockylinux:9 container against the checked-out
8
8
  # workspace instead of over SSH, so the repository root is this script's
@@ -10,62 +10,35 @@ source "$SCRIPT_DIR/../lib/logging.sh"
10
10
  REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
11
11
 
12
12
  main() {
13
- echo "Starting github pages deploy"
13
+ deploy_start "Starting github pages deploy"
14
14
 
15
15
  cd "$REPO_ROOT"
16
16
 
17
- run_quiet \
18
- "Install required packages" \
19
- "Target pod:" \
20
- 14 \
17
+ deploy_step "Install required packages" \
21
18
  dnf install -y sudo tar gzip bzip2 git
22
19
 
23
- run_quiet \
24
- "Install curl" \
25
- "Target pod:" \
26
- 14 \
20
+ deploy_step "Install curl" \
27
21
  dnf install -y curl --allowerasing
28
22
 
29
- run_quiet \
30
- "Add Node.js repository" \
31
- "Target pod:" \
32
- 14 \
23
+ deploy_step "Add Node.js repository" \
33
24
  bash -c "curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -"
34
25
 
35
- run_quiet \
36
- "Install Node.js" \
37
- "Target pod:" \
38
- 14 \
26
+ deploy_step "Install Node.js" \
39
27
  dnf install nodejs -y
40
28
 
41
- run_quiet \
42
- "Install dependencies" \
43
- "Target pod:" \
44
- 14 \
29
+ deploy_step "Install dependencies" \
45
30
  npm install
46
31
 
47
- run_quiet \
48
- "Build dd-github-pages configuration" \
49
- "Target pod:" \
50
- 14 \
32
+ deploy_step "Build dd-github-pages configuration" \
51
33
  node bin new --default-conf --conf-workflow-id dd-github-pages
52
34
 
53
- run_quiet \
54
- "Create dd-github-pages deployment" \
55
- "Target pod:" \
56
- 14 \
35
+ deploy_step "Create dd-github-pages deployment" \
57
36
  node bin new --deploy-id dd-github-pages
58
37
 
59
- run_quiet \
60
- "Load dd-github-pages production environment" \
61
- "Target pod:" \
62
- 14 \
63
- node bin env dd-github-pages production
38
+ deploy_step "Load dd-github-pages production environment" \
39
+ node bin app load --env production --args deploy-id=dd-github-pages
64
40
 
65
- run_quiet \
66
- "Build dd-github-pages client" \
67
- "Target pod:" \
68
- 14 \
41
+ deploy_step "Build dd-github-pages client" \
69
42
  env NODE_ENV=production node bin client dd-github-pages '' underpostnet.github.io /pwa-microservices-template-ghpkg
70
43
  }
71
44
 
@@ -2,59 +2,29 @@
2
2
  set -euo pipefail
3
3
 
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
- source "$SCRIPT_DIR/../lib/logging.sh"
5
+ source "$SCRIPT_DIR/../lib/github-actions-logging.sh"
6
+ source "$SCRIPT_DIR/../lib/host.sh"
6
7
 
7
8
  ENGINE_ROOT=/home/dd/engine
8
9
 
9
10
  main() {
10
- echo "Starting remote release deploy"
11
+ deploy_start "Starting remote release deploy"
11
12
 
12
- run_quiet \
13
- "Pull repository" \
14
- "Target pod:" \
15
- 14 \
16
- sudo -n -- /bin/bash -lc \
17
- "cd $ENGINE_ROOT && node bin run pull"
18
-
19
- run_quiet \
20
- "Install dependencies" \
21
- "Target pod:" \
22
- 14 \
23
- sudo -n -- /bin/bash -lc \
24
- "cd $ENGINE_ROOT && npm install"
25
-
26
- run_quiet \
27
- "Sync secrets" \
28
- "Target pod:" \
29
- 14 \
30
- sudo -n -- /bin/bash -lc \
31
- "cd $ENGINE_ROOT && node bin run secret"
13
+ prepare_host "$ENGINE_ROOT"
32
14
 
33
- run_quiet \
34
- "Install underpost CLI" \
35
- "Target pod:" \
36
- 14 \
15
+ deploy_step "Install underpost CLI" \
37
16
  sudo -n -- /bin/bash -lc \
38
17
  "cd $ENGINE_ROOT && npm install -g underpost"
39
18
 
40
- run_quiet \
41
- "Resync secrets" \
42
- "Target pod:" \
43
- 14 \
19
+ deploy_step "Resync secrets" \
44
20
  sudo -n -- /bin/bash -lc \
45
- "cd $ENGINE_ROOT && node bin run secret"
21
+ "cd $ENGINE_ROOT && node bin host load"
46
22
 
47
- run_quiet \
48
- "Configure git" \
49
- "Target pod:" \
50
- 14 \
23
+ deploy_step "Configure git" \
51
24
  sudo -n -- /bin/bash -lc \
52
25
  "cd $ENGINE_ROOT && node bin run --dev git-conf"
53
26
 
54
- run_quiet \
55
- "Build and publish docker images" \
56
- "Target pod:" \
57
- 14 \
27
+ deploy_step "Build and publish docker images" \
58
28
  sudo -n -- /bin/bash -lc \
59
29
  "cd $ENGINE_ROOT && node bin run docker-image"
60
30
  }
package/deployment.yaml CHANGED
@@ -20,11 +20,17 @@ spec:
20
20
  spec:
21
21
  containers:
22
22
  - name: dd-cyberia-development-blue
23
- image: underpost/underpost-engine:v3.3.0
23
+ image: underpost/underpost-engine:v3.3.73
24
24
  imagePullPolicy: IfNotPresent
25
25
  envFrom:
26
26
  - secretRef:
27
27
  name: underpost-config
28
+ # The deployment's own environment, with its .env.<env>.oci overlay already
29
+ # applied by 'app apply'. Optional so a deployment predating that Secret still
30
+ # starts; the in-pod 'app load' resolves the same overlay as a second path.
31
+ - secretRef:
32
+ name: dd-cyberia-development-env
33
+ optional: true
28
34
  env:
29
35
  - name: UNDERPOST_INTERNAL_PORT
30
36
  value: "4004"
@@ -33,7 +39,6 @@ spec:
33
39
  - /bin/sh
34
40
  - -c
35
41
  - >
36
- underpost secret underpost --create-from-env &&
37
42
  underpost start --build --run dd-cyberia development
38
43
  readinessProbe:
39
44
  {
@@ -135,7 +135,7 @@ services:
135
135
  # server starts but rejects connections until seeded). Serves REST/WS on 4005
136
136
  # and the engine gRPC data service on 50051.
137
137
  engine-cyberia-runtime:
138
- image: ${ENGINE_CYBERIA_IMAGE:-underpost/engine-cyberia-dev}:${ENGINE_CYBERIA_TAG:-v3.3.0}
138
+ image: ${ENGINE_CYBERIA_IMAGE:-underpost/engine-cyberia-dev}:${ENGINE_CYBERIA_TAG:-v3.3.73}
139
139
  container_name: dd-cyberia-engine
140
140
  command:
141
141
  - /bin/sh
@@ -190,7 +190,7 @@ services:
190
190
  # gateway on host port 8081, so one port can route every instance path.
191
191
 
192
192
  cyberia-server-runtime:
193
- image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.0}
193
+ image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.73}
194
194
  container_name: dd-cyberia-server
195
195
  environment:
196
196
  INSTANCE_CODE: amethyst-strata-expansion
@@ -226,7 +226,7 @@ services:
226
226
  restart: unless-stopped
227
227
 
228
228
  cyberia-server-forest:
229
- image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.0}
229
+ image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.73}
230
230
  container_name: dd-cyberia-server-forest
231
231
  environment:
232
232
  INSTANCE_CODE: FOREST
@@ -262,7 +262,7 @@ services:
262
262
  restart: unless-stopped
263
263
 
264
264
  cyberia-server-test:
265
- image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.0}
265
+ image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.73}
266
266
  container_name: dd-cyberia-server-test
267
267
  environment:
268
268
  INSTANCE_CODE: TEST
@@ -309,7 +309,7 @@ services:
309
309
  # cyberia-server-test -> cyberia-client-test
310
310
 
311
311
  cyberia-client-runtime:
312
- image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.0}
312
+ image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.73}
313
313
  container_name: dd-cyberia-client
314
314
  environment:
315
315
  CYBERIA_PORT: '8081'
@@ -334,7 +334,7 @@ services:
334
334
  restart: unless-stopped
335
335
 
336
336
  cyberia-client-forest:
337
- image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.0}
337
+ image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.73}
338
338
  container_name: dd-cyberia-client-forest
339
339
  environment:
340
340
  CYBERIA_PORT: '8081'
@@ -359,7 +359,7 @@ services:
359
359
  restart: unless-stopped
360
360
 
361
361
  cyberia-client-test:
362
- image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.0}
362
+ image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.73}
363
363
  container_name: dd-cyberia-client-test
364
364
  environment:
365
365
  CYBERIA_PORT: '8081'
@@ -54,23 +54,23 @@ When `--output-path` is provided, the server serves the directory containing the
54
54
 
55
55
  See [`static-config-example.json`](./static-config-example.json) for a complete working example.
56
56
 
57
- | Field | Type | Description |
58
- |-------|------|-------------|
59
- | `page` | `string` | Path to the SSR component to render |
60
- | `outputPath` | `string` | Output HTML file path |
61
- | `buildPath` | `string` | Base path for static documents or assets (default: `"/"`) |
62
- | `env` | `string` | `"production"` or `"development"` |
63
- | `minify` | `boolean` | Minify HTML output |
64
- | `lang` | `string` | HTML `lang` attribute |
65
- | `dir` | `string` | HTML `dir` attribute (`ltr`/`rtl`) |
66
- | `metadata` | `object` | SEO metadata (title, description, keywords, author, themeColor, canonicalURL, thumbnail, locale, siteName) |
67
- | `scripts` | `object` | `{ head: [...], body: [...] }` — inline or external scripts |
68
- | `styles` | `array` | Inline (`content`) or external (`href`) stylesheets |
69
- | `icons` | `object` | `favicon`, `appleTouchIcon`, `manifest` paths |
70
- | `headComponents` | `array` | SSR component paths injected into `<head>` |
71
- | `bodyComponents` | `array` | SSR component paths injected into `<body>` |
72
- | `microdata` | `array` | JSON-LD structured data objects |
73
- | `customPayload` | `object` | Arbitrary data injected into the render payload |
57
+ | Field | Type | Description |
58
+ | ---------------- | --------- | ---------------------------------------------------------------------------------------------------------- |
59
+ | `page` | `string` | Path to the SSR component to render |
60
+ | `outputPath` | `string` | Output HTML file path |
61
+ | `buildPath` | `string` | Base path for static documents or assets (default: `"/"`) |
62
+ | `env` | `string` | `"production"` or `"development"` |
63
+ | `minify` | `boolean` | Minify HTML output |
64
+ | `lang` | `string` | HTML `lang` attribute |
65
+ | `dir` | `string` | HTML `dir` attribute (`ltr`/`rtl`) |
66
+ | `metadata` | `object` | SEO metadata (title, description, keywords, author, themeColor, canonicalURL, thumbnail, locale, siteName) |
67
+ | `scripts` | `object` | `{ head: [...], body: [...] }` — inline or external scripts |
68
+ | `styles` | `array` | Inline (`content`) or external (`href`) stylesheets |
69
+ | `icons` | `object` | `favicon`, `appleTouchIcon`, `manifest` paths |
70
+ | `headComponents` | `array` | SSR component paths injected into `<head>` |
71
+ | `bodyComponents` | `array` | SSR component paths injected into `<body>` |
72
+ | `microdata` | `array` | JSON-LD structured data objects |
73
+ | `customPayload` | `object` | Arbitrary data injected into the render payload |
74
74
 
75
75
  ## CLI Flags
76
76
 
@@ -138,10 +138,10 @@ underpost static --page <path> # SSR component path
138
138
 
139
139
  The page content is defined in an SSR component file. See [`ssr-components/CustomPage.js`](./ssr-components/CustomPage.js) for an example.
140
140
 
141
- A component exports an `SrrComponent` function that returns an HTML template literal:
141
+ A component exports an `SSRComponent` function that returns an HTML template literal:
142
142
 
143
143
  ```js
144
- SrrComponent = () => html`
144
+ SSRComponent = () => html`
145
145
  <div>
146
146
  <h1>Hello World</h1>
147
147
  <p>Your page content here.</p>
@@ -5,10 +5,10 @@
5
5
 
6
6
  /**
7
7
  * SSR Component Example for rendering a custom landing page
8
- * @function SrrComponent
8
+ * @function SSRComponent
9
9
  * @returns {string} HTML string for the page body
10
10
  */
11
- SrrComponent = () => html`
11
+ SSRComponent = () => html`
12
12
  <!-- Main Container -->
13
13
  <div class="custom-page">
14
14
  <!-- Hero Section -->
@@ -3,7 +3,7 @@
3
3
  // Supports deployment to Hyperledger Besu (IBFT2/QBFT) private networks
4
4
  // running on kubeadm-managed Kubernetes clusters (manifests/besu/).
5
5
  //
6
- // Compatible with: Hardhat 3.x + Ethers v6 + hardhat-toolbox-mocha-ethers
6
+ // Compatible with: Hardhat 3.x + viem + hardhat-toolbox-viem
7
7
 
8
8
  import { defineConfig } from 'hardhat/config';
9
9
  import hardhatToolboxViem from '@nomicfoundation/hardhat-toolbox-viem';
@@ -126,11 +126,6 @@ const config = defineConfig({
126
126
  outputFile: process.env.GAS_REPORT_FILE || undefined,
127
127
  noColors: !!process.env.GAS_REPORT_FILE,
128
128
  },
129
-
130
- // ── Mocha (test runner) ─────────────────────────────────────────────────────
131
- mocha: {
132
- timeout: 60000,
133
- },
134
129
  });
135
130
 
136
131
  export default config;