@underpostnet/cyberia 3.3.0 → 3.3.76
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 +17 -5
- package/.github/workflows/coverall.cyberia.ci.yml +39 -14
- package/.github/workflows/cyberia-client.cd.yml +5 -0
- package/.github/workflows/cyberia-server.cd.yml +5 -0
- 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 +3 -0
- package/.github/workflows/engine-cyberia.ci.yml +4 -5
- package/.github/workflows/ghpkg.ci.yml +35 -20
- package/.github/workflows/hardhat.ci.yml +12 -11
- package/.github/workflows/npmpkg.ci.yml +17 -15
- package/.github/workflows/publish.cyberia.ci.yml +44 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
- package/.github/workflows/release.cd.yml +1 -0
- package/.prettierignore +1 -0
- package/AGENTS.md +96 -0
- package/CHANGELOG.md +653 -2513
- package/CLI-HELP.md +323 -157
- package/Dockerfile +25 -9
- package/Dockerfile.dev +25 -9
- package/Dockerfile.test +5 -5
- package/README.md +48 -28
- package/bin/build.js +86 -41
- package/bin/build.template.js +8 -3
- package/bin/cyberia.js +1494 -1403
- package/bin/deploy.js +18 -104
- package/bin/index.js +1494 -1403
- package/compose.env +17 -5
- package/conf.js +98 -7
- package/deploy/cyberia-client/deploy.sh +46 -0
- package/deploy/cyberia-client/package.sh +17 -0
- package/deploy/cyberia-client/state.sh +15 -0
- package/deploy/cyberia-server/deploy.sh +46 -0
- package/deploy/cyberia-server/package.sh +17 -0
- package/deploy/cyberia-server/state.sh +15 -0
- package/deploy/dd-cyberia/deploy.sh +9 -29
- package/deploy/dd-cyberia/init.sh +38 -45
- package/deploy/dd-cyberia/package.sh +16 -0
- package/deploy/dd-cyberia/state.sh +14 -0
- package/deploy/dd-cyberia/sync-deploy.sh +133 -147
- package/deploy/lib/config.sh +29 -0
- package/deploy/lib/github-actions-logging.sh +610 -0
- package/deploy/lib/host.sh +194 -0
- package/deploy/lib/state.sh +65 -0
- package/deploy/pwa-microservices-template/deploy.sh +17 -42
- package/deploy/release/deploy.sh +9 -41
- package/deployment.yaml +7 -2
- package/docker-compose.yml +23 -17
- 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 +101 -40
- package/hardhat/package.json +2 -2
- package/manifests/alertmanager/deployment.yaml +81 -0
- package/manifests/blackbox-exporter/deployment.yaml +75 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +32 -7
- package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +32 -7
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/mongo-express/deployment.yaml +46 -27
- package/manifests/deployment/mongo-express/kustomization.yaml +9 -0
- package/manifests/deployment/mongo-express/mongo-express-nodeport.yaml +18 -0
- package/manifests/deployment/mongo-express/service.yaml +16 -0
- package/manifests/deployment/mongo-express-no-auth/disable-mongodb-auth.yaml +16 -0
- package/manifests/deployment/mongo-express-no-auth/kustomization.yaml +16 -0
- 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 +87 -12
- package/scripts/event-monitor.sh +56 -0
- package/scripts/k3s-node-setup.sh +27 -14
- package/scripts/kubeadm-node-setup.sh +31 -11
- package/scripts/maas-setup.sh +8 -8
- package/scripts/selinux-normalize.sh +907 -0
- package/scripts/shutdown-machine.sh +843 -0
- package/scripts/test-monitor.sh +5 -5
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +15 -10
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +36 -5
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +7 -2
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +90 -186
- 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 +3 -3
- package/src/api/cyberia-action/cyberia-action.service.js +5 -6
- package/src/api/cyberia-audio/cyberia-audio.controller.js +6 -0
- package/src/api/cyberia-audio/cyberia-audio.model.js +61 -0
- package/src/api/cyberia-audio/cyberia-audio.router.js +21 -0
- package/src/api/cyberia-audio/cyberia-audio.service.js +220 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +2 -4
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +10 -19
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +13 -35
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +17 -34
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +2 -2
- 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.model.js +2 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.service.js +3 -3
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +8 -2
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +31 -20
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +17 -2
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +468 -5
- package/src/api/cyberia-instance/cyberia-fallback-capture.js +502 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +29 -40
- package/src/api/cyberia-instance/cyberia-instance-boot.service.js +5 -5
- package/src/api/cyberia-instance/cyberia-instance-items.js +98 -0
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +35 -142
- package/src/api/cyberia-instance/cyberia-instance.controller.js +2 -5
- package/src/api/cyberia-instance/cyberia-instance.model.js +0 -14
- package/src/api/cyberia-instance/cyberia-instance.router.js +5 -18
- package/src/api/cyberia-instance/cyberia-instance.service.js +5 -45
- package/src/api/cyberia-instance/cyberia-world-generator.js +8 -13
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +49 -75
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +76 -3
- 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 +8 -4
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.controller.js +31 -0
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.model.js +56 -0
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.router.js +33 -0
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +189 -0
- package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.router.js +4 -4
- package/src/api/cyberia-quest/cyberia-quest.service.js +5 -5
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.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 +403 -214
- package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.model.js +6 -6
- 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.ref.js +153 -0
- package/src/api/file/file.ref.json +11 -2
- 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 +47 -12
- package/src/api/object-layer/object-layer.router.js +12 -5
- package/src/api/object-layer/object-layer.service.js +116 -123
- 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 +402 -0
- package/src/cli/baremetal.js +30 -35
- package/src/cli/client.js +306 -0
- package/src/cli/cloud-init.js +3 -3
- package/src/cli/cluster.js +191 -82
- package/src/cli/db.js +120 -68
- package/src/cli/deploy.js +157 -75
- 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-selection.js +115 -0
- package/src/cli/fs.js +159 -343
- package/src/cli/host.js +672 -0
- package/src/cli/image.js +4 -6
- package/src/cli/index.js +343 -151
- 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 +16 -12
- package/src/cli/repository.js +586 -363
- package/src/cli/run.js +398 -843
- package/src/cli/secrets.js +2158 -964
- package/src/cli/ssh.js +478 -279
- package/src/cli/state.js +394 -0
- package/src/cli/static.js +2 -2
- package/src/cli/system.js +1 -1
- package/src/cli/test.js +203 -125
- package/src/cli/vultr.js +61 -21
- package/src/cli/wireguard.js +1112 -306
- package/src/client/components/core/CalendarCore.js +53 -96
- package/src/client/components/core/Docs.js +327 -303
- package/src/client/components/core/FileExplorer.js +0 -21
- package/src/client/components/core/Modal.js +56 -1
- 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/ActionEngineCyberia.js +12 -36
- package/src/client/components/cyberia/EntityEngineCyberia.js +492 -121
- package/src/client/components/cyberia/InstanceEngineCyberia.js +129 -160
- package/src/client/components/cyberia/InstanceSelectionView.js +7 -1
- package/src/client/components/cyberia/MapEngineCyberia.js +175 -69
- package/src/client/components/cyberia/ObjectLayerEngine.js +1011 -97
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +81 -155
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +113 -98
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +215 -56
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +2 -35
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +1 -1
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +712 -76
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +0 -4
- 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 +15 -15
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +313 -30
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +51 -29
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +52 -53
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +16 -11
- package/src/client/public/cyberia-docs/CYBERIA.md +48 -28
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +11 -5
- 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/STATS-PROGRESSION.md +217 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +20 -12
- 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-audio/cyberia-audio.service.js +99 -0
- package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +38 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +5 -4
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +0 -40
- package/src/client/services/cyberia-map/cyberia-map.management.js +5 -4
- package/src/client/services/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +138 -0
- package/src/client/services/object-layer/object-layer.management.js +6 -10
- package/src/client/services/object-layer/object-layer.service.js +3 -1
- 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 +92 -77
- package/src/client-builder/client-build-live.js +2 -2
- package/src/client-builder/client-build.js +105 -74
- package/src/client-builder/client-bundle.js +347 -0
- 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/MongoExpress.js +187 -0
- package/src/db/mongo/MongooseDB.js +7 -8
- package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
- package/src/grpc/cyberia/grpc-server.js +6 -8
- package/src/index.js +79 -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 +144 -147
- package/src/projects/cyberia/atlas-sprite-sheet-store.js +391 -0
- package/src/projects/cyberia/besu-genesis-generator.js +8 -17
- package/src/projects/cyberia/boot-contract-fixtures.js +32 -0
- package/src/projects/cyberia/catalog-cyberia.js +54 -10
- package/src/projects/cyberia/gemini-client.js +4 -4
- package/src/projects/cyberia/generate-saga.js +5 -12
- package/src/projects/cyberia/hot-reload-trigger.js +18 -29
- package/src/projects/cyberia/instance-backup.js +210 -0
- package/src/projects/cyberia/instance-data.js +178 -258
- package/src/projects/cyberia/ipfs-client.js +4 -4
- package/src/projects/cyberia/map-preview-generator.js +33 -69
- package/src/projects/cyberia/object-layer.js +153 -320
- package/src/projects/cyberia/seed-audio.js +139 -0
- package/src/projects/cyberia/semantic-layer-generator-skin.js +2 -8
- package/src/projects/cyberia/semantic-layer-generator.js +3 -19
- package/src/projects/cyberia/stat-balance.js +81 -0
- package/src/projects/cyberia/stat-commands.js +23 -0
- package/src/projects/cyberia/stat-contract-generator.js +101 -0
- package/src/projects/underpost/catalog-underpost.js +9 -1
- package/src/proxy.js +4 -7
- package/src/runtime/cyberia-client/Dockerfile +17 -8
- package/src/runtime/cyberia-client/Dockerfile.dev +13 -4
- package/src/runtime/cyberia-server/Dockerfile +18 -6
- package/src/runtime/cyberia-server/Dockerfile.dev +16 -3
- package/src/runtime/engine-cyberia/Dockerfile +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.test +5 -5
- package/src/runtime/engine-cyberia/compose.env +17 -5
- package/src/runtime/engine-cyberia/docker-compose.yml +23 -17
- 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 +188 -0
- package/src/server/build/execution.js +402 -0
- package/src/server/build/package.js +508 -0
- package/src/server/build/testing.js +578 -0
- package/src/server/{dns.js → network/dns.js} +144 -11
- package/src/server/{forward-proxy.js → network/forward-proxy.js} +10 -18
- package/src/server/{middlewares.js → network/middlewares.js} +11 -5
- 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/{underpost-compression.js → network/underpost-compression.js} +1 -1
- package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +7 -7
- package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +2 -2
- package/src/server/{cri.js → ops/cri.js} +2 -2
- package/src/server/{cron.js → ops/cron.js} +349 -74
- package/src/server/ops/event-notification.js +284 -0
- package/src/server/{logger.js → ops/logger.js} +143 -23
- package/src/server/ops/monitoring.js +1724 -0
- package/src/server/{systemd.js → ops/systemd.js} +55 -1
- package/src/server/{conf.js → runtime/conf.js} +516 -423
- 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 -12
- 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/{selinux.js → security/selinux.js} +1 -1
- package/src/server/{backup.js → storage/backup.js} +17 -8
- package/src/server/{data-query.js → storage/data-query.js} +17 -1
- package/src/server/storage/downloader.js +121 -0
- package/src/server/storage/repository.js +68 -0
- package/src/server/storage/zip.js +153 -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/atlas-sprite-sheet-store.test.js +402 -0
- package/test/integration/app/cyberia/atlas-sprite-sheet.test.js +86 -0
- package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +64 -0
- package/test/integration/app/cyberia/cyberia-entity-type-default.test.js +842 -0
- package/test/integration/app/cyberia/cyberia-instance-conf-coerce.test.js +53 -0
- package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +17 -23
- package/test/integration/app/cyberia/cyberia-instance-items.test.js +90 -0
- package/test/integration/app/cyberia/cyberia-load.test.js +466 -0
- package/test/integration/app/cyberia/cyberia-map-audio-conf.test.js +256 -0
- package/test/integration/app/cyberia/cyberia-stats.test.js +150 -0
- package/test/integration/app/cyberia/fallback-world-capture.test.js +338 -0
- package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
- package/test/integration/app/cyberia/object-layer-item-selection.test.js +56 -0
- package/test/integration/app/cyberia/object-layer-natural-key.test.js +32 -0
- package/test/integration/app/cyberia/seed-audio.test.js +275 -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/{selinux.test.js → integration/infra/1-security/selinux.test.js} +2 -4
- 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 +1187 -0
- package/test/{wireguard-edge.test.js → integration/infra/2-network/wireguard-edge.test.js} +649 -55
- 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/3-cluster/mongo-express-deploy.test.js +156 -0
- package/test/integration/infra/4-ingress/api-cross-origin.test.js +79 -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} +6 -6
- package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +4 -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 +361 -0
- package/test/unit/client-bundle.test.js +313 -0
- package/test/unit/conf-loading.test.js +303 -0
- package/test/unit/conf-resolution.test.js +996 -0
- package/test/unit/coverage-artifact.test.js +221 -0
- package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
- package/test/unit/cyberia/instance-backup.test.js +183 -0
- package/test/unit/cyberia/instance-object-layer-items.test.js +46 -0
- package/test/unit/cyberia/publish-workflow.test.js +22 -0
- package/test/unit/cyberia/stat-balance.test.js +69 -0
- package/test/unit/deploy-env-resolution.test.js +38 -0
- package/test/unit/deploy-log-table.test.js +518 -0
- package/test/unit/downloader-integrity.test.js +98 -0
- package/test/unit/execution-profiles.test.js +219 -0
- package/test/unit/file-reference-registry.test.js +141 -0
- package/test/unit/fleet-sync-source.test.js +149 -0
- package/test/unit/fs-storage-paths.test.js +596 -0
- package/test/unit/logger-redaction.test.js +141 -0
- package/test/unit/package.test.js +457 -0
- package/test/unit/prepare-host.test.js +382 -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 +220 -0
- package/test/unit/zip-archive.test.js +142 -0
- package/vitest.config.js +66 -0
- package/.nycrc +0 -9
- package/deploy/lib/logging.sh +0 -96
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
- package/manifests/mongodb/pv-pvc.yaml +0 -59
- package/scripts/coverall-test-cyberia.sh +0 -24
- package/scripts/coverall-test.sh +0 -24
- package/scripts/link-local-underpost-cli.sh +0 -6
- package/src/api/cyberia-instance/cyberia-fallback-default-items.js +0 -63
- 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/components/cyberia/FallbackWorldEngineCyberia.js +0 -368
- 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/downloader.js +0 -73
- package/src/server/environment.js +0 -98
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Host preparation for deploy/<deploy-id>/*.sh. Sourced, never executed directly.
|
|
2
|
+
# Requires lib/github-actions-logging.sh for deploy_step.
|
|
3
|
+
|
|
4
|
+
LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
source "$LIB_DIR/config.sh"
|
|
6
|
+
|
|
7
|
+
# The host configuration store, if this node has one.
|
|
8
|
+
#
|
|
9
|
+
# Every step below drives the CLI through `sudo`, so the store the CLI writes is root's, not the
|
|
10
|
+
# store of whoever sourced this file. Both are looked at, the sourcing account first, so a script
|
|
11
|
+
# run as root and a script run as an operator with sudo read the same node configuration.
|
|
12
|
+
#
|
|
13
|
+
# Usage: host_config_path
|
|
14
|
+
host_config_path() {
|
|
15
|
+
local root path
|
|
16
|
+
|
|
17
|
+
root="$(npm root -g 2>/dev/null)" || root=''
|
|
18
|
+
path="$root/underpost/.env"
|
|
19
|
+
if [ -n "$root" ] && [ -f "$path" ]; then
|
|
20
|
+
printf '%s' "$path"
|
|
21
|
+
return 0
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Only when the sourcing account has no store of its own: `sudo -n` is non-interactive, so a
|
|
25
|
+
# host without passwordless sudo declines instead of prompting.
|
|
26
|
+
root="$(sudo -n -- /bin/bash -lc 'npm root -g' 2>/dev/null)" || root=''
|
|
27
|
+
path="$root/underpost/.env"
|
|
28
|
+
[ -n "$root" ] && [ -f "$path" ] && printf '%s' "$path"
|
|
29
|
+
|
|
30
|
+
return 0
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# One key of this node's resolved host configuration, read straight out of the store the host
|
|
34
|
+
# domain owns (`underpost host get|set`). Pure shell for the same reason `deploy_id_from_repo`
|
|
35
|
+
# is: it resolves the manifest that makes that CLI runnable, so it cannot ask the CLI.
|
|
36
|
+
#
|
|
37
|
+
# Usage: host_config <key>
|
|
38
|
+
host_config() {
|
|
39
|
+
local key="$1" path value
|
|
40
|
+
|
|
41
|
+
path="$(host_config_path)"
|
|
42
|
+
[ -n "$path" ] || return 0
|
|
43
|
+
|
|
44
|
+
value="$(sed -n "s/^[[:space:]]*${key}[[:space:]]*=[[:space:]]*//p" "$path" | tail -n 1)"
|
|
45
|
+
value="${value%"${value##*[![:space:]]}"}"
|
|
46
|
+
value="${value%\"}"
|
|
47
|
+
value="${value#\"}"
|
|
48
|
+
value="${value%\'}"
|
|
49
|
+
value="${value#\'}"
|
|
50
|
+
printf '%s' "$value"
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# The repository pair a node prepares itself from: the environment, then the node's own host
|
|
54
|
+
# configuration, where `underpost wireguard --sync` records the pair it moved the node onto.
|
|
55
|
+
# Named nowhere else — left empty, the pull resolves the pairing itself.
|
|
56
|
+
ENGINE_SRC_REPO="${ENGINE_SRC_REPO:-$(host_config ENGINE_SRC_REPO)}"
|
|
57
|
+
ENGINE_SRC_PRIVATE_REPO="${ENGINE_SRC_PRIVATE_REPO:-$(host_config ENGINE_SRC_PRIVATE_REPO)}"
|
|
58
|
+
|
|
59
|
+
# The deploy id a source repository belongs to: `engine-cyberia` and `engine-test-cyberia` are
|
|
60
|
+
# both `dd-cyberia`. Pure shell on purpose — it resolves the manifest that makes the CLI
|
|
61
|
+
# runnable, so it cannot be resolved by running the CLI. Prints nothing for a repository that
|
|
62
|
+
# names no deploy (the monorepo itself), which callers read as "leave the checkout's own".
|
|
63
|
+
#
|
|
64
|
+
# Usage: deploy_id_from_repo [owner/repo]
|
|
65
|
+
deploy_id_from_repo() {
|
|
66
|
+
local name="${1:-$ENGINE_SRC_REPO}"
|
|
67
|
+
name="${name##*/}"
|
|
68
|
+
name="${name#engine-test-}"
|
|
69
|
+
name="${name#engine-}"
|
|
70
|
+
name="${name%-private}"
|
|
71
|
+
|
|
72
|
+
[ -n "$name" ] && [ "$name" != "engine" ] && printf 'dd-%s' "$name"
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
# Installs the node's dependencies from the deploy's own package manifest and links the checkout's
|
|
76
|
+
# CLI globally. Every later bare `underpost` command must execute this checkout, never a package
|
|
77
|
+
# left behind by an older image or host preparation.
|
|
78
|
+
#
|
|
79
|
+
# A deploy id owns its dependency set the same way it owns the rest of its configuration, and
|
|
80
|
+
# `engine-private/conf/<deploy-id>/package.json` is where that set lives. The checkout's own
|
|
81
|
+
# manifest is not it: a product tree declares only what it publishes, so installing against it
|
|
82
|
+
# prunes packages the CLI imports — and the CLI is what pulls and repairs the checkout, so the
|
|
83
|
+
# node loses the ability to fix itself. A deploy with no manifest of its own installs the
|
|
84
|
+
# checkout's, which is the previous behaviour.
|
|
85
|
+
#
|
|
86
|
+
# Usage: install_deploy_dependencies <engine-root> [deploy-id]
|
|
87
|
+
install_deploy_dependencies() {
|
|
88
|
+
local engine_root="${1:-$ENGINE_ROOT}"
|
|
89
|
+
local deploy_id="$2"
|
|
90
|
+
local manifest="engine-private/conf/$deploy_id/package.json"
|
|
91
|
+
|
|
92
|
+
if [ -n "$deploy_id" ] && [ -f "$engine_root/$manifest" ]; then
|
|
93
|
+
deploy_step "Install dependencies ($deploy_id)" \
|
|
94
|
+
sudo -n -- /bin/bash -lc "cd $engine_root && cp -a ./$manifest ./package.json && npm install"
|
|
95
|
+
else
|
|
96
|
+
deploy_step "Install dependencies" \
|
|
97
|
+
sudo -n -- /bin/bash -lc "cd $engine_root && npm install"
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# The global `underpost` is a symlink onto this checkout's entrypoint, so the link is only
|
|
101
|
+
# usable while that file carries its executable mode. The mode is tracked in git; the chmod
|
|
102
|
+
# is what carries a checkout that predates it, which is every node still to be synced.
|
|
103
|
+
deploy_step "Link underpost CLI" \
|
|
104
|
+
sudo -n -- /bin/bash -lc \
|
|
105
|
+
"cd $engine_root && chmod +x ./bin/index.js && npm link --force && test -x ./bin/index.js && test \"\$(readlink -f \"\$(command -v underpost)\")\" = \"\$(readlink -f ./bin/index.js)\""
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
# Brings a node to the state every deploy assumes: the engine source at HEAD, its dependencies
|
|
109
|
+
# installed, its CLI globally linked, and the host configuration loaded into the underpost root
|
|
110
|
+
# env store. `host load` is the one entry point for that store — see `underpost host`.
|
|
111
|
+
#
|
|
112
|
+
# Dependencies are installed before the pull, not only after: the pull runs through this
|
|
113
|
+
# checkout's own CLI, so a tree whose node_modules no longer match its manifest cannot repair
|
|
114
|
+
# itself — the entrypoint fails to import long before it can replace the source. They are
|
|
115
|
+
# installed again after it, because the pull resets the checkout to its remote and takes
|
|
116
|
+
# `package.json` with it.
|
|
117
|
+
prepare_host() {
|
|
118
|
+
local engine_root="${1:-$ENGINE_ROOT}"
|
|
119
|
+
local src_repo="${2:-$ENGINE_SRC_REPO}"
|
|
120
|
+
local src_private_repo="${3:-$ENGINE_SRC_PRIVATE_REPO}"
|
|
121
|
+
local deploy_id="${4:-$(deploy_id_from_repo "$src_repo")}"
|
|
122
|
+
|
|
123
|
+
install_deploy_dependencies "$engine_root" "$deploy_id"
|
|
124
|
+
|
|
125
|
+
deploy_step "Pull repository" \
|
|
126
|
+
sudo -n -- /bin/bash -lc \
|
|
127
|
+
"cd $engine_root && node bin run pull $src_repo${src_private_repo:+ --repo-engine-private $src_private_repo}"
|
|
128
|
+
|
|
129
|
+
install_deploy_dependencies "$engine_root" "$deploy_id"
|
|
130
|
+
|
|
131
|
+
deploy_step "Load host config" \
|
|
132
|
+
sudo -n -- /bin/bash -lc "cd $engine_root && node bin host load"
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
# Whether a tracked path carries uncommitted changes, as `1` or empty.
|
|
136
|
+
#
|
|
137
|
+
# An asset repository is committed only when it actually changed, so this stays outside
|
|
138
|
+
# `deploy_step`: its stdout is the value the caller branches on, and a step's logging would
|
|
139
|
+
# swallow it. The engine root is a parameter rather than an inherited global so a script that
|
|
140
|
+
# drives more than one checkout cannot read the wrong one.
|
|
141
|
+
#
|
|
142
|
+
# Usage: has_changes <path> [engine-root]
|
|
143
|
+
has_changes() {
|
|
144
|
+
local path="$1"
|
|
145
|
+
local engine_root="${2:-$ENGINE_ROOT}"
|
|
146
|
+
|
|
147
|
+
sudo -n -- /bin/bash -lc \
|
|
148
|
+
"cd $engine_root && node bin cmt $path --has-changes" | tr -d '\n'
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
# The in-pod bootstrap, emitted as a `--cmd` payload (comma-separated: `underpost deploy`
|
|
152
|
+
# splits on commas, one shell command per element).
|
|
153
|
+
#
|
|
154
|
+
# A pod starts from an image whose global `underpost` is only as new as the last image build,
|
|
155
|
+
# and the engine shells out to that bare command on every production path
|
|
156
|
+
# (`options.dev ? 'node bin' : 'underpost'`). Replacing the image's engine with this deploy's
|
|
157
|
+
# own source and repointing the global bin at it is what makes the pod run the CLI that
|
|
158
|
+
# deployed it rather than the one its image was published with.
|
|
159
|
+
#
|
|
160
|
+
# Pair it with `--skip-pull-repo-base` on the `underpost start` that follows: this *is* the pull
|
|
161
|
+
# `start --build` performs, so leaving it on clones and installs the same tree twice.
|
|
162
|
+
#
|
|
163
|
+
# In-pod bootstrap, emitted as a `--cmd` payload (comma-separated). Three stages, in order:
|
|
164
|
+
# the deploy's own source replaces the image's engine and the global bin is repointed at it;
|
|
165
|
+
# that CLI then stamps `container-status`, which is why the stamp cannot come first — an image
|
|
166
|
+
# predating the state domain answers `unknown command 'state'`. The caller appends the start.
|
|
167
|
+
#
|
|
168
|
+
# The global npm prefix is handed to the container user before either npm call: the manifest's
|
|
169
|
+
# `install` hook installs global tooling and `npm link` publishes the CLI there, and both write
|
|
170
|
+
# a tree the image left owned by root.
|
|
171
|
+
#
|
|
172
|
+
# The paths below are the container's, fixed by the image layout, and deliberately not
|
|
173
|
+
# `$ENGINE_ROOT`: that one names the checkout on the host running this script.
|
|
174
|
+
#
|
|
175
|
+
# Usage: pod_bootstrap_cmd <deploy-id> [env] [owner/repo]
|
|
176
|
+
pod_bootstrap_cmd() {
|
|
177
|
+
local deploy_id="$1"
|
|
178
|
+
local env="${2:-production}"
|
|
179
|
+
local repo="${3:-underpostnet/engine-test-${deploy_id#dd-}}"
|
|
180
|
+
local name="${repo##*/}"
|
|
181
|
+
|
|
182
|
+
printf '%s' "cd /home/dd, \
|
|
183
|
+
underpost clone ${repo}, \
|
|
184
|
+
mkdir -p /home/dd/engine, \
|
|
185
|
+
cp -a /home/dd/${name}/. /home/dd/engine/, \
|
|
186
|
+
rm -rf /home/dd/${name}, \
|
|
187
|
+
cd /home/dd/engine, \
|
|
188
|
+
sudo mkdir -p \$(npm prefix -g)/lib/node_modules \$(npm prefix -g)/bin, \
|
|
189
|
+
sudo chown -R \$(id -u):\$(id -g) \$(npm prefix -g)/lib/node_modules \$(npm prefix -g)/bin, \
|
|
190
|
+
npm install, \
|
|
191
|
+
npm link --force, \
|
|
192
|
+
test \"\$(readlink -f \"\$(command -v underpost)\")\" = \"\$(readlink -f ./bin/index.js)\", \
|
|
193
|
+
underpost state set container-status ${deploy_id}-${env}-build-deployment"
|
|
194
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
source "$LIB_DIR/config.sh"
|
|
8
|
+
|
|
9
|
+
STATE_ENV="${STATE_ENV:-production}"
|
|
10
|
+
STATE_NAMESPACE="${STATE_NAMESPACE:-default}"
|
|
11
|
+
STATE_STREAM="${STATE_STREAM:-1}"
|
|
12
|
+
# Seconds between frames. The live table is the default; 0 observes once and exits, which is
|
|
13
|
+
# what a non-interactive caller wants.
|
|
14
|
+
STATE_WATCH="${STATE_WATCH:-2}"
|
|
15
|
+
|
|
16
|
+
# Streams one observation of a deployment's live execution state, health and metrics.
|
|
17
|
+
#
|
|
18
|
+
# Not wrapped in deploy_step: run_quiet prints only pattern-matched lines and discards its debug
|
|
19
|
+
# log on success, so the payload never reached the terminal. The target defaults to the caller's
|
|
20
|
+
# directory name.
|
|
21
|
+
#
|
|
22
|
+
# Usage: stream_state <engine-root> [deploy-id] [instance-id]
|
|
23
|
+
stream_state() {
|
|
24
|
+
local engine_root="${1:-$ENGINE_ROOT}"
|
|
25
|
+
local deploy_id="${2:-$(basename "$(cd "$(dirname "${BASH_SOURCE[1]}")" && pwd)")}"
|
|
26
|
+
local instance_id="${3:-}"
|
|
27
|
+
local args="deploy-id=${deploy_id}"
|
|
28
|
+
local target="$deploy_id"
|
|
29
|
+
|
|
30
|
+
[ "$STATE_STREAM" = "0" ] && return 0
|
|
31
|
+
|
|
32
|
+
if [ -n "$instance_id" ]; then
|
|
33
|
+
args="${args},instance-id=${instance_id}"
|
|
34
|
+
target="${deploy_id}/${instance_id}"
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
deploy_start "Runtime state ${target}"
|
|
38
|
+
|
|
39
|
+
if [ "$STATE_WATCH" != "0" ]; then
|
|
40
|
+
# In-place redraw, the same shape run_quiet uses for the deploy table: the cursor is
|
|
41
|
+
# parked above the block and each frame overwrites it. Runs until interrupted.
|
|
42
|
+
local refresh=0 frame lines=0
|
|
43
|
+
printf '\033[?25l'
|
|
44
|
+
trap 'printf "\033[?25h\n"; return 0' INT
|
|
45
|
+
while true; do
|
|
46
|
+
refresh=$((refresh + 1))
|
|
47
|
+
frame=$(sudo -n -- /bin/bash -lc \
|
|
48
|
+
"cd ${engine_root} && node bin state status \
|
|
49
|
+
--env ${STATE_ENV} \
|
|
50
|
+
--namespace ${STATE_NAMESPACE} \
|
|
51
|
+
--args ${args},refresh=${refresh}" 2>/dev/null)
|
|
52
|
+
[ "$lines" -gt 0 ] && printf '\033[%dA' "$lines"
|
|
53
|
+
printf '%s\n' "$frame" | while IFS= read -r line; do printf '%s\033[K\n' "$line"; done
|
|
54
|
+
lines=$(printf '%s\n' "$frame" | wc -l)
|
|
55
|
+
sleep "$STATE_WATCH"
|
|
56
|
+
done
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
# RUN_QUIET_CI survives the SSH hop; unset in an ordinary shell, where this prints JSON.
|
|
60
|
+
sudo -n -- /bin/bash -lc \
|
|
61
|
+
"cd ${engine_root} && RUN_QUIET_CI=${RUN_QUIET_CI:-} node bin state publish \
|
|
62
|
+
--env ${STATE_ENV} \
|
|
63
|
+
--namespace ${STATE_NAMESPACE} \
|
|
64
|
+
--args ${args}"
|
|
65
|
+
}
|
|
@@ -2,71 +2,46 @@
|
|
|
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
|
|
9
9
|
# grandparent rather than a fixed remote path.
|
|
10
10
|
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
11
11
|
|
|
12
|
+
DEPLOY_ID=dd-github-pages
|
|
13
|
+
|
|
12
14
|
main() {
|
|
13
|
-
|
|
15
|
+
deploy_start "Starting github pages deploy"
|
|
14
16
|
|
|
15
17
|
cd "$REPO_ROOT"
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
"Install required packages" \
|
|
19
|
-
"Target pod:" \
|
|
20
|
-
14 \
|
|
19
|
+
deploy_step "Install required packages" \
|
|
21
20
|
dnf install -y sudo tar gzip bzip2 git
|
|
22
21
|
|
|
23
|
-
|
|
24
|
-
"Install curl" \
|
|
25
|
-
"Target pod:" \
|
|
26
|
-
14 \
|
|
22
|
+
deploy_step "Install curl" \
|
|
27
23
|
dnf install -y curl --allowerasing
|
|
28
24
|
|
|
29
|
-
|
|
30
|
-
"Add Node.js repository" \
|
|
31
|
-
"Target pod:" \
|
|
32
|
-
14 \
|
|
25
|
+
deploy_step "Add Node.js repository" \
|
|
33
26
|
bash -c "curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -"
|
|
34
27
|
|
|
35
|
-
|
|
36
|
-
"Install Node.js" \
|
|
37
|
-
"Target pod:" \
|
|
38
|
-
14 \
|
|
28
|
+
deploy_step "Install Node.js" \
|
|
39
29
|
dnf install nodejs -y
|
|
40
30
|
|
|
41
|
-
|
|
42
|
-
"Install dependencies" \
|
|
43
|
-
"Target pod:" \
|
|
44
|
-
14 \
|
|
31
|
+
deploy_step "Install dependencies" \
|
|
45
32
|
npm install
|
|
46
33
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"Target pod:" \
|
|
50
|
-
14 \
|
|
51
|
-
node bin new --default-conf --conf-workflow-id dd-github-pages
|
|
34
|
+
deploy_step "Build $DEPLOY_ID configuration" \
|
|
35
|
+
node bin new --default-conf --conf-workflow-id $DEPLOY_ID
|
|
52
36
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"Target pod:" \
|
|
56
|
-
14 \
|
|
57
|
-
node bin new --deploy-id dd-github-pages
|
|
37
|
+
deploy_step "Create $DEPLOY_ID deployment" \
|
|
38
|
+
node bin new --deploy-id $DEPLOY_ID
|
|
58
39
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"Target pod:" \
|
|
62
|
-
14 \
|
|
63
|
-
node bin env dd-github-pages production
|
|
40
|
+
deploy_step "Load $DEPLOY_ID production environment" \
|
|
41
|
+
node bin app load --env production --args deploy-id=$DEPLOY_ID
|
|
64
42
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
"Target pod:" \
|
|
68
|
-
14 \
|
|
69
|
-
env NODE_ENV=production node bin client dd-github-pages '' underpostnet.github.io /pwa-microservices-template-ghpkg
|
|
43
|
+
deploy_step "Build $DEPLOY_ID client" \
|
|
44
|
+
env NODE_ENV=production node bin client $DEPLOY_ID '' underpostnet.github.io /pwa-microservices-template-ghpkg
|
|
70
45
|
}
|
|
71
46
|
|
|
72
47
|
main "$@"
|
package/deploy/release/deploy.sh
CHANGED
|
@@ -2,59 +2,27 @@
|
|
|
2
2
|
set -euo pipefail
|
|
3
3
|
|
|
4
4
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
-
source "$SCRIPT_DIR/../lib/logging.sh"
|
|
6
|
-
|
|
7
|
-
ENGINE_ROOT=/home/dd/engine
|
|
5
|
+
source "$SCRIPT_DIR/../lib/github-actions-logging.sh"
|
|
6
|
+
source "$SCRIPT_DIR/../lib/host.sh"
|
|
8
7
|
|
|
9
8
|
main() {
|
|
10
|
-
|
|
11
|
-
|
|
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"
|
|
9
|
+
deploy_start "Starting remote release deploy"
|
|
18
10
|
|
|
19
|
-
|
|
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"
|
|
11
|
+
prepare_host "$ENGINE_ROOT"
|
|
32
12
|
|
|
33
|
-
|
|
34
|
-
"Install underpost CLI" \
|
|
35
|
-
"Target pod:" \
|
|
36
|
-
14 \
|
|
13
|
+
deploy_step "Install underpost CLI" \
|
|
37
14
|
sudo -n -- /bin/bash -lc \
|
|
38
15
|
"cd $ENGINE_ROOT && npm install -g underpost"
|
|
39
16
|
|
|
40
|
-
|
|
41
|
-
"Resync secrets" \
|
|
42
|
-
"Target pod:" \
|
|
43
|
-
14 \
|
|
17
|
+
deploy_step "Resync secrets" \
|
|
44
18
|
sudo -n -- /bin/bash -lc \
|
|
45
|
-
"cd $ENGINE_ROOT && node bin
|
|
19
|
+
"cd $ENGINE_ROOT && node bin host load"
|
|
46
20
|
|
|
47
|
-
|
|
48
|
-
"Configure git" \
|
|
49
|
-
"Target pod:" \
|
|
50
|
-
14 \
|
|
21
|
+
deploy_step "Configure git" \
|
|
51
22
|
sudo -n -- /bin/bash -lc \
|
|
52
23
|
"cd $ENGINE_ROOT && node bin run --dev git-conf"
|
|
53
24
|
|
|
54
|
-
|
|
55
|
-
"Build and publish docker images" \
|
|
56
|
-
"Target pod:" \
|
|
57
|
-
14 \
|
|
25
|
+
deploy_step "Build and publish docker images" \
|
|
58
26
|
sudo -n -- /bin/bash -lc \
|
|
59
27
|
"cd $ENGINE_ROOT && node bin run docker-image"
|
|
60
28
|
}
|
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.
|
|
23
|
+
image: underpost/underpost-engine:v3.3.76
|
|
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
|
@@ -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.
|
|
138
|
+
image: ${ENGINE_CYBERIA_IMAGE:-underpost/engine-cyberia-dev}:${ENGINE_CYBERIA_TAG:-v3.3.76}
|
|
139
139
|
container_name: dd-cyberia-engine
|
|
140
140
|
command:
|
|
141
141
|
- /bin/sh
|
|
@@ -190,14 +190,16 @@ 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.
|
|
193
|
+
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.76}
|
|
194
194
|
container_name: dd-cyberia-server
|
|
195
195
|
environment:
|
|
196
196
|
INSTANCE_CODE: amethyst-strata-expansion
|
|
197
197
|
CYBERIA_BASE_PATH: /
|
|
198
|
-
|
|
198
|
+
CYBERIA_PUBLIC_URL: ${CYBERIA_SERVER_PUBLIC_ORIGIN:-http://localhost:8081}
|
|
199
|
+
CYBERIA_SERVER_API_KEY: ${CYBERIA_SERVER_API_KEY:-}
|
|
200
|
+
CYBERIA_DATA_SERVER_URL: ${CYBERIA_DATA_SERVER_URL:-http://engine-cyberia}
|
|
199
201
|
ENGINE_PUBLIC_URL: ${ENGINE_PUBLIC_URL:-http://localhost:4005}
|
|
200
|
-
|
|
202
|
+
CYBERIA_DATA_SERVER_GRPC: ${CYBERIA_DATA_SERVER_GRPC:-engine-cyberia-runtime:50051}
|
|
201
203
|
ENGINE_GRPC_RELOAD_INTERVAL_SEC: ${ENGINE_GRPC_RELOAD_INTERVAL_SEC:-300}
|
|
202
204
|
STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
|
|
203
205
|
APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
|
|
@@ -226,14 +228,16 @@ services:
|
|
|
226
228
|
restart: unless-stopped
|
|
227
229
|
|
|
228
230
|
cyberia-server-forest:
|
|
229
|
-
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.
|
|
231
|
+
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.76}
|
|
230
232
|
container_name: dd-cyberia-server-forest
|
|
231
233
|
environment:
|
|
232
234
|
INSTANCE_CODE: FOREST
|
|
233
235
|
CYBERIA_BASE_PATH: /FOREST
|
|
234
|
-
|
|
236
|
+
CYBERIA_PUBLIC_URL: ${CYBERIA_SERVER_PUBLIC_ORIGIN:-http://localhost:8081}/FOREST
|
|
237
|
+
CYBERIA_SERVER_API_KEY: ${CYBERIA_SERVER_API_KEY:-}
|
|
238
|
+
CYBERIA_DATA_SERVER_URL: ${CYBERIA_DATA_SERVER_URL:-http://engine-cyberia}
|
|
235
239
|
ENGINE_PUBLIC_URL: ${ENGINE_PUBLIC_URL:-http://localhost:4005}
|
|
236
|
-
|
|
240
|
+
CYBERIA_DATA_SERVER_GRPC: ${CYBERIA_DATA_SERVER_GRPC:-engine-cyberia-runtime:50051}
|
|
237
241
|
ENGINE_GRPC_RELOAD_INTERVAL_SEC: ${ENGINE_GRPC_RELOAD_INTERVAL_SEC:-300}
|
|
238
242
|
STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
|
|
239
243
|
APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
|
|
@@ -262,14 +266,16 @@ services:
|
|
|
262
266
|
restart: unless-stopped
|
|
263
267
|
|
|
264
268
|
cyberia-server-test:
|
|
265
|
-
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.
|
|
269
|
+
image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.76}
|
|
266
270
|
container_name: dd-cyberia-server-test
|
|
267
271
|
environment:
|
|
268
272
|
INSTANCE_CODE: TEST
|
|
269
273
|
CYBERIA_BASE_PATH: /TEST
|
|
270
|
-
|
|
274
|
+
CYBERIA_PUBLIC_URL: ${CYBERIA_SERVER_PUBLIC_ORIGIN:-http://localhost:8081}/TEST
|
|
275
|
+
CYBERIA_SERVER_API_KEY: ${CYBERIA_SERVER_API_KEY:-}
|
|
276
|
+
CYBERIA_DATA_SERVER_URL: ${CYBERIA_DATA_SERVER_URL:-http://engine-cyberia}
|
|
271
277
|
ENGINE_PUBLIC_URL: ${ENGINE_PUBLIC_URL:-http://localhost:4005}
|
|
272
|
-
|
|
278
|
+
CYBERIA_DATA_SERVER_GRPC: ${CYBERIA_DATA_SERVER_GRPC:-engine-cyberia-runtime:50051}
|
|
273
279
|
ENGINE_GRPC_RELOAD_INTERVAL_SEC: ${ENGINE_GRPC_RELOAD_INTERVAL_SEC:-300}
|
|
274
280
|
STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
|
|
275
281
|
APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
|
|
@@ -299,7 +305,7 @@ services:
|
|
|
299
305
|
|
|
300
306
|
# === Tier 4: presentation, one per variant ===============================
|
|
301
307
|
# One WASM bundle serves every variant; the instance is resolved from the URL
|
|
302
|
-
# sub-path (
|
|
308
|
+
# sub-path (wasm-driver injects CYBERIA_BASE_PATH / _WS_ORIGIN /
|
|
303
309
|
# _ENGINE_API_ORIGIN / _DEFAULT_INSTANCE). Each client waits ONLY for its own
|
|
304
310
|
# server, so the three
|
|
305
311
|
# server->client pipelines advance independently (in parallel) once the shared
|
|
@@ -309,7 +315,7 @@ services:
|
|
|
309
315
|
# cyberia-server-test -> cyberia-client-test
|
|
310
316
|
|
|
311
317
|
cyberia-client-runtime:
|
|
312
|
-
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.
|
|
318
|
+
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.76}
|
|
313
319
|
container_name: dd-cyberia-client
|
|
314
320
|
environment:
|
|
315
321
|
CYBERIA_PORT: '8081'
|
|
@@ -317,7 +323,7 @@ services:
|
|
|
317
323
|
CYBERIA_BASE_PATH: /
|
|
318
324
|
CYBERIA_DEFAULT_INSTANCE: ${CYBERIA_DEFAULT_INSTANCE:-amethyst-strata-expansion}
|
|
319
325
|
CYBERIA_WS_ORIGIN: ${CYBERIA_WS_ORIGIN:-ws://localhost:8081}
|
|
320
|
-
|
|
326
|
+
CYBERIA_DATA_SERVER_URL: ${CYBERIA_CLIENT_DATA_SERVER_URL:-http://localhost}
|
|
321
327
|
networks:
|
|
322
328
|
- dd-cyberia-internal
|
|
323
329
|
expose:
|
|
@@ -334,7 +340,7 @@ services:
|
|
|
334
340
|
restart: unless-stopped
|
|
335
341
|
|
|
336
342
|
cyberia-client-forest:
|
|
337
|
-
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.
|
|
343
|
+
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.76}
|
|
338
344
|
container_name: dd-cyberia-client-forest
|
|
339
345
|
environment:
|
|
340
346
|
CYBERIA_PORT: '8081'
|
|
@@ -342,7 +348,7 @@ services:
|
|
|
342
348
|
CYBERIA_BASE_PATH: /FOREST
|
|
343
349
|
CYBERIA_DEFAULT_INSTANCE: ${CYBERIA_DEFAULT_INSTANCE:-amethyst-strata-expansion}
|
|
344
350
|
CYBERIA_WS_ORIGIN: ${CYBERIA_WS_ORIGIN:-ws://localhost:8081}
|
|
345
|
-
|
|
351
|
+
CYBERIA_DATA_SERVER_URL: ${CYBERIA_CLIENT_DATA_SERVER_URL:-http://localhost}
|
|
346
352
|
networks:
|
|
347
353
|
- dd-cyberia-internal
|
|
348
354
|
expose:
|
|
@@ -359,7 +365,7 @@ services:
|
|
|
359
365
|
restart: unless-stopped
|
|
360
366
|
|
|
361
367
|
cyberia-client-test:
|
|
362
|
-
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.
|
|
368
|
+
image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.76}
|
|
363
369
|
container_name: dd-cyberia-client-test
|
|
364
370
|
environment:
|
|
365
371
|
CYBERIA_PORT: '8081'
|
|
@@ -367,7 +373,7 @@ services:
|
|
|
367
373
|
CYBERIA_BASE_PATH: /TEST
|
|
368
374
|
CYBERIA_DEFAULT_INSTANCE: ${CYBERIA_DEFAULT_INSTANCE:-amethyst-strata-expansion}
|
|
369
375
|
CYBERIA_WS_ORIGIN: ${CYBERIA_WS_ORIGIN:-ws://localhost:8081}
|
|
370
|
-
|
|
376
|
+
CYBERIA_DATA_SERVER_URL: ${CYBERIA_CLIENT_DATA_SERVER_URL:-http://localhost}
|
|
371
377
|
networks:
|
|
372
378
|
- dd-cyberia-internal
|
|
373
379
|
expose:
|
|
@@ -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 -->
|