@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.
- package/.dockerignore +1 -0
- package/.env.example +16 -0
- package/.github/workflows/coverall.cyberia.ci.yml +107 -0
- package/.github/workflows/cyberia-client.cd.yml +6 -18
- package/.github/workflows/cyberia-server.cd.yml +6 -18
- package/.github/workflows/docker-image.cyberia-client.ci.yml +8 -5
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +8 -3
- package/.github/workflows/docker-image.cyberia-server.ci.yml +8 -5
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +8 -5
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +15 -1
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +15 -1
- package/.github/workflows/engine-cyberia.cd.yml +6 -78
- package/.github/workflows/engine-cyberia.ci.yml +4 -5
- package/.github/workflows/ghpkg.ci.yml +42 -21
- package/.github/workflows/hardhat.ci.yml +12 -11
- package/.github/workflows/npmpkg.ci.yml +17 -15
- package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -16
- package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
- package/.github/workflows/release.cd.yml +2 -9
- package/.prettierignore +1 -0
- package/AGENTS.md +47 -0
- package/CHANGELOG.md +581 -2417
- package/CLI-HELP.md +416 -127
- package/Dockerfile +25 -9
- package/Dockerfile.dev +25 -9
- package/Dockerfile.test +4 -4
- package/README.md +21 -1
- package/bin/build.js +70 -43
- package/bin/build.template.js +8 -3
- package/bin/cyberia.js +372 -135
- package/bin/deploy.js +18 -104
- package/bin/index.js +372 -135
- package/compose.env +16 -0
- package/conf.js +93 -4
- package/deploy/cyberia-client/deploy.sh +47 -0
- package/deploy/cyberia-client/package.sh +18 -0
- package/deploy/cyberia-client/state.sh +14 -0
- package/deploy/cyberia-server/deploy.sh +47 -0
- package/deploy/cyberia-server/package.sh +18 -0
- package/deploy/cyberia-server/state.sh +14 -0
- package/deploy/dd-cyberia/deploy.sh +22 -0
- package/deploy/dd-cyberia/init.sh +55 -0
- package/deploy/dd-cyberia/package.sh +17 -0
- package/deploy/dd-cyberia/state.sh +14 -0
- package/deploy/dd-cyberia/sync-deploy.sh +116 -0
- package/deploy/lib/github-actions-logging.sh +594 -0
- package/deploy/lib/host.sh +185 -0
- package/deploy/lib/state.sh +62 -0
- package/deploy/pwa-microservices-template/deploy.sh +45 -0
- package/deploy/release/deploy.sh +32 -0
- package/deployment.yaml +7 -2
- package/docker-compose.yml +31 -37
- package/examples/static-page/README.md +19 -19
- package/examples/static-page/ssr-components/CustomPage.js +2 -2
- package/hardhat/hardhat.config.js +1 -6
- package/hardhat/package-lock.json +104 -43
- package/hardhat/package.json +3 -3
- package/manifests/alertmanager/deployment.yaml +81 -0
- package/manifests/blackbox-exporter/deployment.yaml +75 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +36 -7
- package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +77 -0
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/grafana/deployment.yaml +26 -7
- package/manifests/grafana/kustomization.yaml +1 -0
- package/manifests/grafana/service.yaml +6 -1
- package/manifests/mariadb/pv.yaml +1 -0
- package/manifests/mongodb/statefulset.yaml +9 -2
- package/manifests/mysql/pv-pvc.yaml +14 -1
- package/manifests/postgresql/pv.yaml +12 -1
- package/manifests/postgresql/pvc.yaml +1 -0
- package/manifests/prometheus/deployment.yaml +18 -22
- package/package.json +83 -10
- package/scripts/audit-selinux.sh +64 -0
- package/scripts/event-monitor.sh +56 -0
- package/scripts/gpu-diag.sh +0 -0
- package/scripts/ip-info.sh +0 -0
- package/scripts/k3s-node-setup.sh +30 -14
- package/scripts/kubeadm-node-setup.sh +40 -31
- package/scripts/lxd-vm-setup.sh +0 -0
- package/scripts/maas-nat-firewalld.sh +0 -0
- package/scripts/maas-setup.sh +8 -8
- package/scripts/nat-iptables.sh +2 -0
- package/scripts/rhel-grpc-setup.sh +0 -0
- package/scripts/rocky-kickstart.sh +25 -9
- package/scripts/selinux-normalize.sh +907 -0
- package/scripts/shutdown-machine.sh +843 -0
- package/scripts/test-monitor.sh +3 -3
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +1 -1
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +2 -2
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +2 -2
- package/src/api/core/core.controller.js +1 -1
- package/src/api/core/core.router.js +2 -2
- package/src/api/core/core.service.js +2 -2
- package/src/api/crypto/crypto.controller.js +1 -1
- package/src/api/crypto/crypto.service.js +1 -1
- package/src/api/cyberia-action/cyberia-action.controller.js +1 -1
- package/src/api/cyberia-action/cyberia-action.router.js +1 -1
- package/src/api/cyberia-action/cyberia-action.service.js +2 -2
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -1
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +1 -1
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +2 -2
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
- package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.service.js +2 -2
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +2 -2
- package/src/api/cyberia-instance/cyberia-fallback-capture.js +466 -0
- package/src/api/cyberia-instance/cyberia-fallback-default-items.js +63 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +16 -1
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +1 -1
- package/src/api/cyberia-instance/cyberia-instance.controller.js +4 -1
- package/src/api/cyberia-instance/cyberia-instance.router.js +15 -2
- package/src/api/cyberia-instance/cyberia-instance.service.js +45 -2
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +1 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +2 -2
- package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
- package/src/api/cyberia-map/cyberia-map.router.js +1 -1
- package/src/api/cyberia-map/cyberia-map.service.js +2 -2
- package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.router.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.service.js +2 -2
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
- package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
- package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
- package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +16 -29
- package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
- package/src/api/default/default.controller.js +1 -1
- package/src/api/default/default.router.js +1 -1
- package/src/api/default/default.service.js +2 -2
- package/src/api/document/document.controller.js +1 -1
- package/src/api/document/document.router.js +1 -1
- package/src/api/document/document.service.js +2 -2
- package/src/api/file/file.controller.js +1 -1
- package/src/api/file/file.router.js +1 -1
- package/src/api/file/file.service.js +2 -2
- package/src/api/instance/instance.controller.js +1 -1
- package/src/api/instance/instance.router.js +1 -1
- package/src/api/instance/instance.service.js +2 -2
- package/src/api/ipfs/ipfs.controller.js +1 -1
- package/src/api/ipfs/ipfs.router.js +2 -2
- package/src/api/ipfs/ipfs.service.js +2 -2
- package/src/api/object-layer/object-layer.controller.js +1 -1
- package/src/api/object-layer/object-layer.model.js +204 -3
- package/src/api/object-layer/object-layer.router.js +2 -2
- package/src/api/object-layer/object-layer.service.js +4 -17
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
- package/src/api/test/test.controller.js +1 -1
- package/src/api/test/test.service.js +1 -1
- package/src/api/user/guest.service.js +3 -3
- package/src/api/user/user.controller.js +1 -1
- package/src/api/user/user.router.js +2 -2
- package/src/api/user/user.service.js +4 -4
- package/src/api.js +5 -9
- package/src/cli/app.js +391 -0
- package/src/cli/baremetal.js +30 -36
- package/src/cli/client.js +306 -0
- package/src/cli/cloud-init.js +3 -3
- package/src/cli/cluster.js +242 -135
- package/src/cli/db.js +126 -67
- package/src/cli/deploy.js +158 -60
- package/src/cli/docker-compose.js +5 -5
- package/src/cli/domains.js +184 -0
- package/src/cli/dotenv-store.js +143 -0
- package/src/cli/event.js +2281 -0
- package/src/cli/fs.js +3 -3
- package/src/cli/host.js +672 -0
- package/src/cli/image.js +4 -7
- package/src/cli/index.js +426 -134
- package/src/cli/ipfs.js +34 -30
- package/src/cli/kickstart.js +1 -1
- package/src/cli/kubectl.js +218 -41
- package/src/cli/lxd.js +3 -3
- package/src/cli/monitor.js +1359 -26
- package/src/cli/package.js +90 -0
- package/src/cli/release.js +73 -34
- package/src/cli/repository.js +564 -367
- package/src/cli/run.js +362 -654
- package/src/cli/secrets.js +2158 -964
- package/src/cli/ssh.js +651 -331
- package/src/cli/state.js +394 -0
- package/src/cli/static.js +2 -2
- package/src/cli/system.js +26 -13
- package/src/cli/test.js +199 -125
- package/src/cli/vultr.js +623 -0
- package/src/cli/wireguard.js +2930 -0
- package/src/client/components/core/CalendarCore.js +53 -96
- package/src/client/components/core/Docs.js +258 -211
- package/src/client/components/core/FileExplorer.js +0 -21
- package/src/client/components/core/PanelForm.js +4 -4
- package/src/client/components/core/Repository.js +56 -0
- package/src/client/components/core/Translate.js +7 -0
- package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
- package/src/client/components/core/Wallet.js +0 -11
- package/src/client/components/core/Worker.js +7 -1
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
- package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +368 -0
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +35 -1
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +4 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
- package/src/client/components/default/AppShellDefault.js +1 -1
- package/src/client/components/default/SettingsDefault.js +2 -2
- package/src/client/components/itemledger/SettingsItemledger.js +2 -2
- package/src/client/components/underpost/AppShellUnderpost.js +3 -2
- package/src/client/components/underpost/SettingsUnderpost.js +2 -2
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +17 -3
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +32 -5
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +1 -1
- package/src/client/public/cyberia-docs/CYBERIA.md +21 -1
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- package/src/client/public/default/android-chrome-144x144.png +0 -0
- package/src/client/public/default/android-chrome-192x192.png +0 -0
- package/src/client/public/default/android-chrome-256x256.png +0 -0
- package/src/client/public/default/android-chrome-36x36.png +0 -0
- package/src/client/public/default/android-chrome-384x384.png +0 -0
- package/src/client/public/default/android-chrome-48x48.png +0 -0
- package/src/client/public/default/android-chrome-512x512.png +0 -0
- package/src/client/public/default/android-chrome-72x72.png +0 -0
- package/src/client/public/default/android-chrome-96x96.png +0 -0
- package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/default/assets/background/white.jpg +0 -0
- package/src/client/public/default/browserconfig.xml +1 -1
- package/src/client/public/default/favicon-16x16.png +0 -0
- package/src/client/public/default/favicon-32x32.png +0 -0
- package/src/client/public/default/favicon-48x48.png +0 -0
- package/src/client/public/default/favicon.ico +0 -0
- package/src/client/public/default/manifest.webmanifest +5 -5
- package/src/client/public/default/mstile-144x144.png +0 -0
- package/src/client/public/default/mstile-150x150.png +0 -0
- package/src/client/public/default/mstile-310x150.png +0 -0
- package/src/client/public/default/mstile-310x310.png +0 -0
- package/src/client/public/default/mstile-70x70.png +0 -0
- package/src/client/public/default/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +1 -1
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +40 -0
- package/src/client/services/object-layer/object-layer.management.js +4 -4
- package/src/client/ssr/RootDocument.js +1 -1
- package/src/client/ssr/body/404.js +1 -1
- package/src/client/ssr/body/500.js +1 -1
- package/src/client/ssr/body/CacheControl.js +1 -1
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
- package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
- package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
- package/src/client/ssr/head/CryptokoynScripts.js +1 -1
- package/src/client/ssr/head/Css.js +1 -1
- package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
- package/src/client/ssr/head/DefaultScripts.js +1 -1
- package/src/client/ssr/head/ItemledgerScripts.js +1 -1
- package/src/client/ssr/head/Microdata.js +1 -1
- package/src/client/ssr/head/Production.js +1 -1
- package/src/client/ssr/head/Pwa.js +1 -1
- package/src/client/ssr/head/PwaItemledger.js +1 -1
- package/src/client/ssr/head/Seo.js +1 -1
- package/src/client/ssr/head/UnderpostScripts.js +1 -1
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
- package/src/client/ssr/views/Cyberia404.js +7 -5
- package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
- package/src/client/ssr/views/Maintenance.js +1 -1
- package/src/client/ssr/views/NoNetworkConnection.js +1 -1
- package/src/client/ssr/views/Test.js +1 -1
- package/src/client/sw/core.sw.js +20 -14
- package/src/client-builder/client-build-docs.js +61 -46
- package/src/client-builder/client-build-live.js +2 -2
- package/src/client-builder/client-build.js +58 -44
- package/src/client-builder/client-dev-server.js +3 -3
- package/src/client-builder/client-icons.js +2 -2
- package/src/client-builder/ssr.js +3 -3
- package/src/client.build.js +3 -6
- package/src/client.dev.js +3 -6
- package/src/db/DataBaseProvider.js +186 -3
- package/src/db/mariadb/MariaDB.js +3 -2
- package/src/db/mongo/MongoBootstrap.js +273 -101
- package/src/db/mongo/MongooseDB.js +11 -8
- package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
- package/src/grpc/cyberia/grpc-server.js +1 -1
- package/src/index.js +103 -23
- package/src/mailer/EmailRender.js +2 -2
- package/src/mailer/MailerInterceptor.js +87 -0
- package/src/mailer/MailerProvider.js +50 -6
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +1 -1
- package/src/projects/cyberia/besu-genesis-generator.js +3 -3
- package/src/projects/cyberia/catalog-cyberia.js +54 -6
- package/src/projects/cyberia/gemini-client.js +1 -1
- package/src/projects/cyberia/generate-saga.js +15 -24
- package/src/projects/cyberia/hot-reload-trigger.js +1 -1
- package/src/projects/cyberia/instance-data.js +22 -3
- package/src/projects/cyberia/ipfs-client.js +4 -4
- package/src/projects/cyberia/map-preview-generator.js +1 -1
- package/src/projects/cyberia/object-layer.js +12 -22
- package/src/projects/cyberia/semantic-layer-generator.js +1 -1
- package/src/projects/underpost/catalog-underpost.js +13 -2
- package/src/proxy.js +4 -7
- package/src/runtime/cyberia-client/Dockerfile +9 -4
- package/src/runtime/cyberia-client/Dockerfile.dev +8 -2
- package/src/runtime/cyberia-server/Dockerfile +9 -4
- package/src/runtime/cyberia-server/Dockerfile.dev +8 -2
- package/src/runtime/engine-cyberia/Dockerfile +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.test +4 -4
- package/src/runtime/engine-cyberia/compose.env +16 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +31 -37
- package/src/runtime/express/Express.js +32 -27
- package/src/runtime/lampp/Lampp.js +22 -70
- package/src/runtime/nginx/Nginx.js +1 -1
- package/src/runtime/wp/Wp.js +16 -48
- package/src/server/{catalog.js → build/catalog.js} +15 -5
- package/src/server/build/coverage.js +117 -0
- package/src/server/build/execution.js +402 -0
- package/src/server/build/package.js +465 -0
- package/src/server/build/testing.js +528 -0
- package/src/server/{dns.js → network/dns.js} +241 -14
- package/src/server/network/forward-proxy.js +541 -0
- package/src/server/{middlewares.js → network/middlewares.js} +59 -4
- package/src/server/network/node-capability.js +98 -0
- package/src/server/{peer.js → network/peer.js} +3 -3
- package/src/server/{proxy.js → network/proxy.js} +7 -13
- package/src/server/network/router.js +356 -0
- package/src/server/{tls.js → network/tls.js} +2 -2
- package/src/server/network/underpost-compression.js +186 -0
- package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +26 -16
- package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +19 -3
- package/src/server/{cri.js → ops/cri.js} +2 -2
- package/src/server/ops/cron.js +949 -0
- package/src/server/ops/event-notification.js +284 -0
- package/src/server/{logger.js → ops/logger.js} +108 -23
- package/src/server/ops/monitoring.js +1724 -0
- package/src/server/ops/systemd.js +259 -0
- package/src/server/{conf.js → runtime/conf.js} +521 -520
- package/src/server/runtime/config-scope.js +215 -0
- package/src/server/runtime/environment.js +149 -0
- package/src/server/{process.js → runtime/process.js} +153 -13
- package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
- package/src/server/{runtime.js → runtime/runtime.js} +12 -8
- package/src/server/{start.js → runtime/start.js} +128 -39
- package/src/server/{auth.js → security/auth.js} +7 -8
- package/src/server/security/container-storage.js +382 -0
- package/src/server/{crypto.js → security/crypto.js} +1 -1
- package/src/server/security/selinux.js +185 -0
- package/src/server/{backup.js → storage/backup.js} +17 -8
- package/src/server/{data-query.js → storage/data-query.js} +1 -1
- package/src/server/{downloader.js → storage/downloader.js} +2 -2
- package/src/server/storage/repository.js +68 -0
- package/src/server.js +4 -7
- package/src/ws/IoInterface.js +1 -1
- package/src/ws/IoServer.js +1 -1
- package/src/ws/core/core.ws.connection.js +1 -1
- package/src/ws/core/core.ws.emit.js +1 -1
- package/src/ws/core/core.ws.server.js +1 -1
- package/src/ws/default/default.ws.connection.js +1 -1
- package/src/ws/default/default.ws.emit.js +1 -1
- package/src/ws/default/default.ws.server.js +1 -1
- package/test/e2e/event-e2e-public-ingress-down.js +45 -0
- package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
- package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
- package/test/{api.test.js → integration/app/api.test.js} +33 -14
- package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +30 -0
- package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +2 -1
- package/test/integration/app/cyberia/cyberia-load.test.js +467 -0
- package/test/integration/app/cyberia/fallback-world-capture.test.js +253 -0
- package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
- package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
- package/test/integration/infra/1-security/config-scope.test.js +305 -0
- package/test/integration/infra/1-security/container-storage.test.js +356 -0
- package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
- package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
- package/test/integration/infra/1-security/selinux.test.js +69 -0
- package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
- package/test/integration/infra/1-security/systemd-service.test.js +70 -0
- package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
- package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
- package/test/integration/infra/2-network/node-capability.test.js +182 -0
- package/test/integration/infra/2-network/wireguard-cli.test.js +1163 -0
- package/test/integration/infra/2-network/wireguard-edge.test.js +1731 -0
- package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
- package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
- package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
- package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
- package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
- package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
- package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +47 -6
- package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +56 -4
- package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
- package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
- package/test/integration/infra/5-observability/event-notification.test.js +197 -0
- package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
- package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
- package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
- package/test/support/shell-harness.js +73 -0
- package/test/unit/build-template.test.js +97 -0
- package/test/unit/build-workflow-offline.test.js +132 -0
- package/test/unit/catalog.test.js +71 -0
- package/test/unit/client-build-docs.test.js +334 -0
- package/test/unit/conf-loading.test.js +303 -0
- package/test/unit/conf-resolution.test.js +979 -0
- package/test/unit/coverage-artifact.test.js +130 -0
- package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
- package/test/unit/deploy-env-resolution.test.js +38 -0
- package/test/unit/deploy-log-table.test.js +447 -0
- package/test/unit/execution-profiles.test.js +219 -0
- package/test/unit/fleet-sync-source.test.js +149 -0
- package/test/unit/logger-redaction.test.js +112 -0
- package/test/unit/package.test.js +403 -0
- package/test/unit/prepare-host.test.js +299 -0
- package/test/unit/process-environment.test.js +18 -0
- package/test/unit/propagation-message.test.js +78 -0
- package/test/unit/redeploy-plan.test.js +24 -0
- package/test/unit/release-bump.test.js +474 -0
- package/test/unit/ssh-output-redaction.test.js +28 -0
- package/test/unit/start-options.test.js +46 -0
- package/test/unit/test-tiers.test.js +193 -0
- package/vitest.config.js +58 -0
- package/.nycrc +0 -9
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
- package/manifests/mongodb/pv-pvc.yaml +0 -59
- package/scripts/link-local-underpost-cli.sh +0 -6
- package/src/api/user/user.build.js +0 -16
- package/src/cli/env.js +0 -177
- package/src/client/components/core/Blockchain.js +0 -41
- package/src/client/components/core/Blog.js +0 -9
- package/src/client/components/core/KeyboardAvoidance.js +0 -145
- package/src/client/public/default/assets/background/dark.jpg +0 -0
- package/src/client/public/default/assets/background/white0-min.jpg +0 -0
- package/src/client/public/default/assets/background/white0.jpg +0 -0
- package/src/client/public/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +0 -148
- package/src/server/cron.js +0 -476
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
source "$SCRIPT_DIR/../lib/github-actions-logging.sh"
|
|
6
|
+
|
|
7
|
+
# Runs in the workflow's rockylinux:9 container against the checked-out
|
|
8
|
+
# workspace instead of over SSH, so the repository root is this script's
|
|
9
|
+
# grandparent rather than a fixed remote path.
|
|
10
|
+
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
11
|
+
|
|
12
|
+
main() {
|
|
13
|
+
deploy_start "Starting github pages deploy"
|
|
14
|
+
|
|
15
|
+
cd "$REPO_ROOT"
|
|
16
|
+
|
|
17
|
+
deploy_step "Install required packages" \
|
|
18
|
+
dnf install -y sudo tar gzip bzip2 git
|
|
19
|
+
|
|
20
|
+
deploy_step "Install curl" \
|
|
21
|
+
dnf install -y curl --allowerasing
|
|
22
|
+
|
|
23
|
+
deploy_step "Add Node.js repository" \
|
|
24
|
+
bash -c "curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -"
|
|
25
|
+
|
|
26
|
+
deploy_step "Install Node.js" \
|
|
27
|
+
dnf install nodejs -y
|
|
28
|
+
|
|
29
|
+
deploy_step "Install dependencies" \
|
|
30
|
+
npm install
|
|
31
|
+
|
|
32
|
+
deploy_step "Build dd-github-pages configuration" \
|
|
33
|
+
node bin new --default-conf --conf-workflow-id dd-github-pages
|
|
34
|
+
|
|
35
|
+
deploy_step "Create dd-github-pages deployment" \
|
|
36
|
+
node bin new --deploy-id dd-github-pages
|
|
37
|
+
|
|
38
|
+
deploy_step "Load dd-github-pages production environment" \
|
|
39
|
+
node bin app load --env production --args deploy-id=dd-github-pages
|
|
40
|
+
|
|
41
|
+
deploy_step "Build dd-github-pages client" \
|
|
42
|
+
env NODE_ENV=production node bin client dd-github-pages '' underpostnet.github.io /pwa-microservices-template-ghpkg
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
main "$@"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
source "$SCRIPT_DIR/../lib/github-actions-logging.sh"
|
|
6
|
+
source "$SCRIPT_DIR/../lib/host.sh"
|
|
7
|
+
|
|
8
|
+
ENGINE_ROOT=/home/dd/engine
|
|
9
|
+
|
|
10
|
+
main() {
|
|
11
|
+
deploy_start "Starting remote release deploy"
|
|
12
|
+
|
|
13
|
+
prepare_host "$ENGINE_ROOT"
|
|
14
|
+
|
|
15
|
+
deploy_step "Install underpost CLI" \
|
|
16
|
+
sudo -n -- /bin/bash -lc \
|
|
17
|
+
"cd $ENGINE_ROOT && npm install -g underpost"
|
|
18
|
+
|
|
19
|
+
deploy_step "Resync secrets" \
|
|
20
|
+
sudo -n -- /bin/bash -lc \
|
|
21
|
+
"cd $ENGINE_ROOT && node bin host load"
|
|
22
|
+
|
|
23
|
+
deploy_step "Configure git" \
|
|
24
|
+
sudo -n -- /bin/bash -lc \
|
|
25
|
+
"cd $ENGINE_ROOT && node bin run --dev git-conf"
|
|
26
|
+
|
|
27
|
+
deploy_step "Build and publish docker images" \
|
|
28
|
+
sudo -n -- /bin/bash -lc \
|
|
29
|
+
"cd $ENGINE_ROOT && node bin run docker-image"
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
main "$@"
|
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.
|
|
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
|
{
|
package/docker-compose.yml
CHANGED
|
@@ -4,36 +4,6 @@
|
|
|
4
4
|
# (MongoDB + Valkey + IPFS), then the Cyberia content-authority engine and its
|
|
5
5
|
# per-instance server/client tiers, fronted by an nginx reverse proxy.
|
|
6
6
|
#
|
|
7
|
-
# Canonical location (custom docker-compose workflow):
|
|
8
|
-
# engine-private/conf/dd-cyberia/docker-compose/cyberia/
|
|
9
|
-
# ├── docker-compose.yml (this file — the ENTIRE stack, single source)
|
|
10
|
-
# ├── compose.env (working env-file, used as-is — not generated)
|
|
11
|
-
# ├── nginx.conf (custom per-variant sub-path routing)
|
|
12
|
-
# └── mongodb/entrypoint.sh (replica-set bootstrap)
|
|
13
|
-
# All bind mounts below are relative to this directory: the CLI runs compose with
|
|
14
|
-
# `--project-directory` pinned here (see src/cli/docker-compose.js).
|
|
15
|
-
#
|
|
16
|
-
# Multi-instance: one engine-cyberia (content + asset authority) feeds three
|
|
17
|
-
# cyberia-server + three cyberia-client tiers, one per conf.instances.json
|
|
18
|
-
# multiInstance variant (amethyst-strata-expansion "/", FOREST "/FOREST",
|
|
19
|
-
# TEST "/TEST"). This custom workflow owns nginx.conf and the services below;
|
|
20
|
-
# keep both in sync when its instance topology changes.
|
|
21
|
-
#
|
|
22
|
-
# Startup is a strict health-gated chain: the stable gateway starts after the
|
|
23
|
-
# engine, then each server/client pipeline advances independently:
|
|
24
|
-
# mongodb + valkey -> engine runtime -> proxy -> 3x server -> 3x client
|
|
25
|
-
#
|
|
26
|
-
# Architecture boundaries (see CLAUDE.md "Cyberia architecture boundaries"):
|
|
27
|
-
# engine-cyberia — content, validation, persistence, gRPC(:50051)+REST(:4005)
|
|
28
|
-
# data services, asset metadata. The authority layer.
|
|
29
|
-
# cyberia-server — authoritative real-time simulation / tick processing (Go).
|
|
30
|
-
# cyberia-client — rendering, input, prediction, presentation (WASM bundle).
|
|
31
|
-
#
|
|
32
|
-
# Usage:
|
|
33
|
-
# underpost docker-compose --up --deploy-id dd-cyberia --docker-compose-id cyberia
|
|
34
|
-
# (or the docker:cyberia:* npm scripts). The engine-cyberia image bakes the
|
|
35
|
-
# dd-cyberia build at image-build time, so no private-repo credentials are
|
|
36
|
-
# required at container start.
|
|
37
7
|
|
|
38
8
|
name: dd-cyberia
|
|
39
9
|
|
|
@@ -165,7 +135,7 @@ services:
|
|
|
165
135
|
# server starts but rejects connections until seeded). Serves REST/WS on 4005
|
|
166
136
|
# and the engine gRPC data service on 50051.
|
|
167
137
|
engine-cyberia-runtime:
|
|
168
|
-
image: ${ENGINE_CYBERIA_IMAGE:-underpost/engine-cyberia-dev}:${ENGINE_CYBERIA_TAG:-v3.
|
|
138
|
+
image: ${ENGINE_CYBERIA_IMAGE:-underpost/engine-cyberia-dev}:${ENGINE_CYBERIA_TAG:-v3.3.73}
|
|
169
139
|
container_name: dd-cyberia-engine
|
|
170
140
|
command:
|
|
171
141
|
- /bin/sh
|
|
@@ -220,7 +190,7 @@ services:
|
|
|
220
190
|
# gateway on host port 8081, so one port can route every instance path.
|
|
221
191
|
|
|
222
192
|
cyberia-server-runtime:
|
|
223
|
-
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.
|
|
193
|
+
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.73}
|
|
224
194
|
container_name: dd-cyberia-server
|
|
225
195
|
environment:
|
|
226
196
|
INSTANCE_CODE: amethyst-strata-expansion
|
|
@@ -232,6 +202,14 @@ services:
|
|
|
232
202
|
STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
|
|
233
203
|
APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
|
|
234
204
|
LOG_LEVEL: ${CYBERIA_SERVER_LOG_LEVEL:-}
|
|
205
|
+
CYBERIA_DISABLE_CONNECTION_LIMITS: ${CYBERIA_DISABLE_CONNECTION_LIMITS:-}
|
|
206
|
+
CYBERIA_MAX_CONNECTIONS: ${CYBERIA_MAX_CONNECTIONS:-}
|
|
207
|
+
CYBERIA_MAX_CONNECTIONS_PER_IP: ${CYBERIA_MAX_CONNECTIONS_PER_IP:-}
|
|
208
|
+
CYBERIA_CONNECT_RATE_PER_IP: ${CYBERIA_CONNECT_RATE_PER_IP:-}
|
|
209
|
+
CYBERIA_CONNECT_BURST_PER_IP: ${CYBERIA_CONNECT_BURST_PER_IP:-}
|
|
210
|
+
CYBERIA_MESSAGE_RATE: ${CYBERIA_MESSAGE_RATE:-}
|
|
211
|
+
CYBERIA_MESSAGE_BURST: ${CYBERIA_MESSAGE_BURST:-}
|
|
212
|
+
CYBERIA_MAX_STRIKES: ${CYBERIA_MAX_STRIKES:-}
|
|
235
213
|
networks:
|
|
236
214
|
- dd-cyberia-internal
|
|
237
215
|
expose:
|
|
@@ -248,7 +226,7 @@ services:
|
|
|
248
226
|
restart: unless-stopped
|
|
249
227
|
|
|
250
228
|
cyberia-server-forest:
|
|
251
|
-
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.
|
|
229
|
+
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.73}
|
|
252
230
|
container_name: dd-cyberia-server-forest
|
|
253
231
|
environment:
|
|
254
232
|
INSTANCE_CODE: FOREST
|
|
@@ -260,6 +238,14 @@ services:
|
|
|
260
238
|
STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
|
|
261
239
|
APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
|
|
262
240
|
LOG_LEVEL: ${CYBERIA_SERVER_LOG_LEVEL:-}
|
|
241
|
+
CYBERIA_DISABLE_CONNECTION_LIMITS: ${CYBERIA_DISABLE_CONNECTION_LIMITS:-}
|
|
242
|
+
CYBERIA_MAX_CONNECTIONS: ${CYBERIA_MAX_CONNECTIONS:-}
|
|
243
|
+
CYBERIA_MAX_CONNECTIONS_PER_IP: ${CYBERIA_MAX_CONNECTIONS_PER_IP:-}
|
|
244
|
+
CYBERIA_CONNECT_RATE_PER_IP: ${CYBERIA_CONNECT_RATE_PER_IP:-}
|
|
245
|
+
CYBERIA_CONNECT_BURST_PER_IP: ${CYBERIA_CONNECT_BURST_PER_IP:-}
|
|
246
|
+
CYBERIA_MESSAGE_RATE: ${CYBERIA_MESSAGE_RATE:-}
|
|
247
|
+
CYBERIA_MESSAGE_BURST: ${CYBERIA_MESSAGE_BURST:-}
|
|
248
|
+
CYBERIA_MAX_STRIKES: ${CYBERIA_MAX_STRIKES:-}
|
|
263
249
|
networks:
|
|
264
250
|
- dd-cyberia-internal
|
|
265
251
|
expose:
|
|
@@ -276,7 +262,7 @@ services:
|
|
|
276
262
|
restart: unless-stopped
|
|
277
263
|
|
|
278
264
|
cyberia-server-test:
|
|
279
|
-
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.
|
|
265
|
+
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.73}
|
|
280
266
|
container_name: dd-cyberia-server-test
|
|
281
267
|
environment:
|
|
282
268
|
INSTANCE_CODE: TEST
|
|
@@ -288,6 +274,14 @@ services:
|
|
|
288
274
|
STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
|
|
289
275
|
APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
|
|
290
276
|
LOG_LEVEL: ${CYBERIA_SERVER_LOG_LEVEL:-}
|
|
277
|
+
CYBERIA_DISABLE_CONNECTION_LIMITS: ${CYBERIA_DISABLE_CONNECTION_LIMITS:-}
|
|
278
|
+
CYBERIA_MAX_CONNECTIONS: ${CYBERIA_MAX_CONNECTIONS:-}
|
|
279
|
+
CYBERIA_MAX_CONNECTIONS_PER_IP: ${CYBERIA_MAX_CONNECTIONS_PER_IP:-}
|
|
280
|
+
CYBERIA_CONNECT_RATE_PER_IP: ${CYBERIA_CONNECT_RATE_PER_IP:-}
|
|
281
|
+
CYBERIA_CONNECT_BURST_PER_IP: ${CYBERIA_CONNECT_BURST_PER_IP:-}
|
|
282
|
+
CYBERIA_MESSAGE_RATE: ${CYBERIA_MESSAGE_RATE:-}
|
|
283
|
+
CYBERIA_MESSAGE_BURST: ${CYBERIA_MESSAGE_BURST:-}
|
|
284
|
+
CYBERIA_MAX_STRIKES: ${CYBERIA_MAX_STRIKES:-}
|
|
291
285
|
networks:
|
|
292
286
|
- dd-cyberia-internal
|
|
293
287
|
expose:
|
|
@@ -315,7 +309,7 @@ services:
|
|
|
315
309
|
# cyberia-server-test -> cyberia-client-test
|
|
316
310
|
|
|
317
311
|
cyberia-client-runtime:
|
|
318
|
-
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.
|
|
312
|
+
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.73}
|
|
319
313
|
container_name: dd-cyberia-client
|
|
320
314
|
environment:
|
|
321
315
|
CYBERIA_PORT: '8081'
|
|
@@ -340,7 +334,7 @@ services:
|
|
|
340
334
|
restart: unless-stopped
|
|
341
335
|
|
|
342
336
|
cyberia-client-forest:
|
|
343
|
-
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.
|
|
337
|
+
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.73}
|
|
344
338
|
container_name: dd-cyberia-client-forest
|
|
345
339
|
environment:
|
|
346
340
|
CYBERIA_PORT: '8081'
|
|
@@ -365,7 +359,7 @@ services:
|
|
|
365
359
|
restart: unless-stopped
|
|
366
360
|
|
|
367
361
|
cyberia-client-test:
|
|
368
|
-
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.
|
|
362
|
+
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.73}
|
|
369
363
|
container_name: dd-cyberia-client-test
|
|
370
364
|
environment:
|
|
371
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
|
|
58
|
-
|
|
59
|
-
| `page`
|
|
60
|
-
| `outputPath`
|
|
61
|
-
| `buildPath`
|
|
62
|
-
| `env`
|
|
63
|
-
| `minify`
|
|
64
|
-
| `lang`
|
|
65
|
-
| `dir`
|
|
66
|
-
| `metadata`
|
|
67
|
-
| `scripts`
|
|
68
|
-
| `styles`
|
|
69
|
-
| `icons`
|
|
70
|
-
| `headComponents` | `array`
|
|
71
|
-
| `bodyComponents` | `array`
|
|
72
|
-
| `microdata`
|
|
73
|
-
| `customPayload`
|
|
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 `
|
|
141
|
+
A component exports an `SSRComponent` function that returns an HTML template literal:
|
|
142
142
|
|
|
143
143
|
```js
|
|
144
|
-
|
|
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
|
|
8
|
+
* @function SSRComponent
|
|
9
9
|
* @returns {string} HTML string for the page body
|
|
10
10
|
*/
|
|
11
|
-
|
|
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 +
|
|
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;
|