@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
package/Dockerfile
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# Stage 1 — builder: clone the private deploy, build it, then scrub secrets.
|
|
7
7
|
# ---------------------------------------------------------------------------
|
|
8
8
|
FROM rockylinux/rockylinux:9 AS builder
|
|
9
|
-
ARG UNDERPOST_VERSION=3.3.
|
|
9
|
+
ARG UNDERPOST_VERSION=3.3.76
|
|
10
10
|
# Pin Node to an exact patch: dnf's nodejs:24 module lags (24.14.1) while
|
|
11
11
|
# underpost's dependencies require >=24.15.0, so install the official binary.
|
|
12
12
|
ARG NODE_VERSION=24.15.0
|
|
@@ -14,7 +14,7 @@ ENV NODE_ENV=production
|
|
|
14
14
|
|
|
15
15
|
RUN set -eux; \
|
|
16
16
|
# `sudo` is required because underpost's build steps shell out to
|
|
17
|
-
# `sudo cp`/`sudo rm` (src/server/start.js); the build runs as root so sudo
|
|
17
|
+
# `sudo cp`/`sudo rm` (src/server/runtime/start.js); the build runs as root so sudo
|
|
18
18
|
# is just a passthrough, but the binary must exist.
|
|
19
19
|
dnf install -y git openssl tar xz sudo; \
|
|
20
20
|
arch="$(uname -m)"; \
|
|
@@ -26,10 +26,22 @@ RUN set -eux; \
|
|
|
26
26
|
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
27
27
|
| tar -xJ -C /usr/local --strip-components=1; \
|
|
28
28
|
node --version; npm --version; \
|
|
29
|
-
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
30
29
|
dnf clean all; rm -rf /var/cache/dnf; \
|
|
31
30
|
npm cache clean --force
|
|
32
31
|
|
|
32
|
+
|
|
33
|
+
# The builder's own `underpost clone` calls below run on this same CLI, and the runtime stage
|
|
34
|
+
# inherits it through `COPY --from=builder /usr/local/`.
|
|
35
|
+
COPY underpost-cli.tgz /tmp/underpost-cli.tgz
|
|
36
|
+
RUN set -eux; \
|
|
37
|
+
npm install -g /tmp/underpost-cli.tgz --omit=dev; \
|
|
38
|
+
rm -f /tmp/underpost-cli.tgz; \
|
|
39
|
+
npm cache clean --force; \
|
|
40
|
+
underpost --version; \
|
|
41
|
+
# The staged package must be the pinned release: a drift here would ship a CLI the
|
|
42
|
+
# deployment manifests were not built against.
|
|
43
|
+
underpost --version | grep -Fq "${UNDERPOST_VERSION}"
|
|
44
|
+
|
|
33
45
|
WORKDIR /home/dd
|
|
34
46
|
|
|
35
47
|
# Comma-separated instance codes to provision (backup dir + optional saga).
|
|
@@ -38,7 +50,7 @@ WORKDIR /home/dd
|
|
|
38
50
|
# `--build-arg INSTANCE_CODES=...`. Declared as an ARG (not a marker-wrapped
|
|
39
51
|
# shell string) so the value is clean — a `/** … */` literal in the shell would
|
|
40
52
|
# glob-expand in the `for` loop below.
|
|
41
|
-
ARG INSTANCE_CODES="amethyst-strata-expansion,FOREST"
|
|
53
|
+
ARG INSTANCE_CODES="amethyst-strata-expansion,FOREST,TEST"
|
|
42
54
|
|
|
43
55
|
RUN --mount=type=secret,id=github_username \
|
|
44
56
|
# --mount=type=secret,id=github_token \
|
|
@@ -83,7 +95,7 @@ RUN --mount=type=secret,id=github_username \
|
|
|
83
95
|
cd /home/dd/engine; \
|
|
84
96
|
# --- install deps + env, then replay build-safe itc provisioning ----------
|
|
85
97
|
npm install; \
|
|
86
|
-
node bin env dd-cyberia
|
|
98
|
+
node bin app load --env production --args deploy-id=dd-cyberia; \
|
|
87
99
|
( cd /home/dd/engine/hardhat && npm install --include=dev ); \
|
|
88
100
|
# --- build the client bundle (assets are now in place) --------------------
|
|
89
101
|
cd /home/dd/engine; \
|
|
@@ -136,11 +148,15 @@ COPY --from=builder /usr/local/ /usr/local/
|
|
|
136
148
|
RUN dnf install -y libstdc++ git sudo && dnf clean all && rm -rf /var/cache/dnf && \
|
|
137
149
|
useradd --create-home --home-dir /home/dd --shell /usr/sbin/nologin dd && \
|
|
138
150
|
# The runtime runs as `dd`, but `underpost start --build` shells out to `sudo cp`/`sudo rm`
|
|
139
|
-
# (src/server/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
151
|
+
# (src/server/runtime/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
140
152
|
printf 'dd ALL=(ALL) NOPASSWD:ALL\n' > /etc/sudoers.d/dd && chmod 0440 /etc/sudoers.d/dd && \
|
|
141
|
-
# underpost persists its global env
|
|
142
|
-
#
|
|
143
|
-
|
|
153
|
+
# underpost persists its global env and container state under
|
|
154
|
+
# `$(npm root -g)/underpost` (getUnderpostRootPath). That path is a STORE directory, not
|
|
155
|
+
# the CLI package tree: the staged package installs under its own package name, and
|
|
156
|
+
# `underpost start --build` re-links the bin at the pulled checkout without moving the
|
|
157
|
+
# store (src/server/runtime/start.js#linkRuntimeCli). Create it here — the non-root
|
|
158
|
+
# runtime user cannot mkdir inside /usr/local itself (EACCES on the first state write).
|
|
159
|
+
mkdir -p "$(npm root -g)/underpost" && chown -R dd:dd "$(npm root -g)/underpost"
|
|
144
160
|
|
|
145
161
|
# Copy ONLY the scrubbed runtime tree — no .git, no token, no caches.
|
|
146
162
|
COPY --from=builder --chown=dd:dd /home/dd/engine /home/dd/engine
|
package/Dockerfile.dev
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# Stage 1 — builder: clone the private deploy, build it, then scrub secrets.
|
|
7
7
|
# ---------------------------------------------------------------------------
|
|
8
8
|
FROM rockylinux/rockylinux:9 AS builder
|
|
9
|
-
ARG UNDERPOST_VERSION=3.3.
|
|
9
|
+
ARG UNDERPOST_VERSION=3.3.76
|
|
10
10
|
# Pin Node to an exact patch: dnf's nodejs:24 module lags (24.14.1) while
|
|
11
11
|
# underpost's dependencies require >=24.15.0, so install the official binary.
|
|
12
12
|
ARG NODE_VERSION=24.15.0
|
|
@@ -14,7 +14,7 @@ ENV NODE_ENV=development
|
|
|
14
14
|
|
|
15
15
|
RUN set -eux; \
|
|
16
16
|
# `sudo` is required because underpost's build steps shell out to
|
|
17
|
-
# `sudo cp`/`sudo rm` (src/server/start.js); the build runs as root so sudo
|
|
17
|
+
# `sudo cp`/`sudo rm` (src/server/runtime/start.js); the build runs as root so sudo
|
|
18
18
|
# is just a passthrough, but the binary must exist.
|
|
19
19
|
dnf install -y git openssl tar xz sudo; \
|
|
20
20
|
arch="$(uname -m)"; \
|
|
@@ -26,10 +26,22 @@ RUN set -eux; \
|
|
|
26
26
|
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
27
27
|
| tar -xJ -C /usr/local --strip-components=1; \
|
|
28
28
|
node --version; npm --version; \
|
|
29
|
-
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
30
29
|
dnf clean all; rm -rf /var/cache/dnf; \
|
|
31
30
|
npm cache clean --force
|
|
32
31
|
|
|
32
|
+
|
|
33
|
+
# The builder's own `underpost clone` calls below run on this same CLI, and the runtime stage
|
|
34
|
+
# inherits it through `COPY --from=builder /usr/local/`.
|
|
35
|
+
COPY underpost-cli.tgz /tmp/underpost-cli.tgz
|
|
36
|
+
RUN set -eux; \
|
|
37
|
+
npm install -g /tmp/underpost-cli.tgz --omit=dev; \
|
|
38
|
+
rm -f /tmp/underpost-cli.tgz; \
|
|
39
|
+
npm cache clean --force; \
|
|
40
|
+
underpost --version; \
|
|
41
|
+
# The staged package must be the pinned release: a drift here would ship a CLI the
|
|
42
|
+
# deployment manifests were not built against.
|
|
43
|
+
underpost --version | grep -Fq "${UNDERPOST_VERSION}"
|
|
44
|
+
|
|
33
45
|
WORKDIR /home/dd
|
|
34
46
|
|
|
35
47
|
# Comma-separated instance codes to provision (backup dir + optional saga).
|
|
@@ -38,7 +50,7 @@ WORKDIR /home/dd
|
|
|
38
50
|
# `--build-arg INSTANCE_CODES=...`. Declared as an ARG (not a marker-wrapped
|
|
39
51
|
# shell string) so the value is clean — a `/** … */` literal in the shell would
|
|
40
52
|
# glob-expand in the `for` loop below.
|
|
41
|
-
ARG INSTANCE_CODES="amethyst-strata-expansion,FOREST"
|
|
53
|
+
ARG INSTANCE_CODES="amethyst-strata-expansion,FOREST,TEST"
|
|
42
54
|
|
|
43
55
|
RUN --mount=type=secret,id=github_username \
|
|
44
56
|
# --mount=type=secret,id=github_token \
|
|
@@ -83,7 +95,7 @@ RUN --mount=type=secret,id=github_username \
|
|
|
83
95
|
cd /home/dd/engine; \
|
|
84
96
|
# --- install deps + env, then replay build-safe itc provisioning ----------
|
|
85
97
|
npm install; \
|
|
86
|
-
node bin env dd-cyberia
|
|
98
|
+
node bin app load --env development --args deploy-id=dd-cyberia; \
|
|
87
99
|
( cd /home/dd/engine/hardhat && npm install --include=dev ); \
|
|
88
100
|
# --- build the client bundle (assets are now in place) --------------------
|
|
89
101
|
cd /home/dd/engine; \
|
|
@@ -136,11 +148,15 @@ COPY --from=builder /usr/local/ /usr/local/
|
|
|
136
148
|
RUN dnf install -y libstdc++ git sudo && dnf clean all && rm -rf /var/cache/dnf && \
|
|
137
149
|
useradd --create-home --home-dir /home/dd --shell /usr/sbin/nologin dd && \
|
|
138
150
|
# The runtime runs as `dd`, but `underpost start --build` shells out to `sudo cp`/`sudo rm`
|
|
139
|
-
# (src/server/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
151
|
+
# (src/server/runtime/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
140
152
|
printf 'dd ALL=(ALL) NOPASSWD:ALL\n' > /etc/sudoers.d/dd && chmod 0440 /etc/sudoers.d/dd && \
|
|
141
|
-
# underpost persists its global env
|
|
142
|
-
#
|
|
143
|
-
|
|
153
|
+
# underpost persists its global env and container state under
|
|
154
|
+
# `$(npm root -g)/underpost` (getUnderpostRootPath). That path is a STORE directory, not
|
|
155
|
+
# the CLI package tree: the staged package installs under its own package name, and
|
|
156
|
+
# `underpost start --build` re-links the bin at the pulled checkout without moving the
|
|
157
|
+
# store (src/server/runtime/start.js#linkRuntimeCli). Create it here — the non-root
|
|
158
|
+
# runtime user cannot mkdir inside /usr/local itself (EACCES on the first state write).
|
|
159
|
+
mkdir -p "$(npm root -g)/underpost" && chown -R dd:dd "$(npm root -g)/underpost"
|
|
144
160
|
|
|
145
161
|
# Copy ONLY the scrubbed runtime tree — no .git, no token, no caches.
|
|
146
162
|
COPY --from=builder --chown=dd:dd /home/dd/engine /home/dd/engine
|
package/Dockerfile.test
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# Stage 1 — builder: clone the private deploy, build it, then scrub secrets.
|
|
7
7
|
# ---------------------------------------------------------------------------
|
|
8
8
|
FROM rockylinux/rockylinux:9 AS builder
|
|
9
|
-
ARG UNDERPOST_VERSION=3.3.
|
|
9
|
+
ARG UNDERPOST_VERSION=3.3.76
|
|
10
10
|
# Pin Node to an exact patch: dnf's nodejs:24 module lags (24.14.1) while
|
|
11
11
|
# underpost's dependencies require >=24.15.0, so install the official binary.
|
|
12
12
|
ARG NODE_VERSION=24.15.0
|
|
@@ -14,7 +14,7 @@ ENV NODE_ENV=development
|
|
|
14
14
|
|
|
15
15
|
RUN set -eux; \
|
|
16
16
|
# `sudo` is required because underpost's build steps shell out to
|
|
17
|
-
# `sudo cp`/`sudo rm` (src/server/start.js); the build runs as root so sudo
|
|
17
|
+
# `sudo cp`/`sudo rm` (src/server/runtime/start.js); the build runs as root so sudo
|
|
18
18
|
# is just a passthrough, but the binary must exist.
|
|
19
19
|
dnf install -y git openssl tar xz sudo; \
|
|
20
20
|
arch="$(uname -m)"; \
|
|
@@ -71,8 +71,8 @@ RUN --mount=type=secret,id=github_token \
|
|
|
71
71
|
\
|
|
72
72
|
# --- install deps + env, then replay build-safe itc provisioning ----------
|
|
73
73
|
npm install; \
|
|
74
|
-
node bin env dd-cyberia
|
|
75
|
-
node bin fs --pull --
|
|
74
|
+
node bin app load --env development --args deploy-id=dd-cyberia; \
|
|
75
|
+
node bin fs --pull --tracked --deploy-id dd-cyberia --storage-id engine-cyberia; \
|
|
76
76
|
( cd /home/dd/engine/hardhat && npm install --include=dev ); \
|
|
77
77
|
( cd /home/dd/engine && underpost clone underpostnet/cyberia-server ); \
|
|
78
78
|
\
|
|
@@ -140,7 +140,7 @@ COPY --from=builder /usr/local/ /usr/local/
|
|
|
140
140
|
RUN dnf install -y libstdc++ git sudo && dnf clean all && rm -rf /var/cache/dnf && \
|
|
141
141
|
useradd --create-home --home-dir /home/dd --shell /usr/sbin/nologin dd && \
|
|
142
142
|
# The runtime runs as `dd`, but `underpost start --build` shells out to `sudo cp`/`sudo rm`
|
|
143
|
-
# (src/server/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
143
|
+
# (src/server/runtime/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
144
144
|
printf 'dd ALL=(ALL) NOPASSWD:ALL\n' > /etc/sudoers.d/dd && chmod 0440 /etc/sudoers.d/dd && \
|
|
145
145
|
# underpost persists its global env at $(npm root -g)/underpost/.env; the
|
|
146
146
|
# non-root runtime user must be able to write it (fixes EACCES on start).
|
package/README.md
CHANGED
|
@@ -8,9 +8,29 @@
|
|
|
8
8
|
|
|
9
9
|
_Stackable Rendering Layers as a Unified Tokenized Reality_
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<!-- Tech stack -->
|
|
14
|
+
<div align="center">
|
|
15
|
+
|
|
16
|
+
<a target="_top" href='https://download.rockylinux.org/pub/rocky/9/'><img alt='rockylinux' src='https://img.shields.io/badge/Rocky Linux v9.8-100000?style=flat&logo=rockylinux&logoColor=white&labelColor=10b981&color=727273'/></a> <a target="_top" href='https://www.npmjs.com/package/npm?activeTab=versions'><img alt='npm' src='https://img.shields.io/badge/npm v11.6.2-100000?style=flat&logo=npm&logoColor=white&labelColor=CB3837&color=727273'/></a> <a target="_top" href='https://nodejs.org/download/release'><img alt='nodedotjs' src='https://img.shields.io/badge/node v24.15.0-100000?style=flat&logo=nodedotjs&logoColor=white&labelColor=5FA04E&color=727273'/></a> <a target="_top" href='https://pgp.mongodb.com/'><img alt='mongodb' src='https://img.shields.io/badge/mongodb_server v7.0-100000?style=flat&logo=mongodb&logoColor=white&labelColor=47A248&color=727273'/></a>
|
|
12
17
|
|
|
13
18
|
</div>
|
|
19
|
+
|
|
20
|
+
<!-- CI/CD and health -->
|
|
21
|
+
<div align="center">
|
|
22
|
+
|
|
23
|
+
[](https://github.com/underpostnet/engine-cyberia/actions/workflows/docker-image.engine-cyberia.ci.yml) [](https://github.com/underpostnet/engine-cyberia/actions/workflows/coverall.cyberia.ci.yml) [](https://coveralls.io/github/underpostnet/engine-cyberia?branch=main) [](https://socket.dev/npm/package/cyberia/overview/3.3.76)
|
|
24
|
+
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<!-- Distribution and package -->
|
|
28
|
+
<div align="center">
|
|
29
|
+
|
|
30
|
+
[](https://www.npmjs.com/package/cyberia) [](https://www.npmjs.com/package/cyberia) [](https://www.jsdelivr.com/package/npm/cyberia) [](https://www.npmjs.com/package/cyberia)
|
|
31
|
+
|
|
32
|
+
</div>
|
|
33
|
+
|
|
14
34
|
Cyberia is an MMORPG extension built on the Underpost Platform. The platform owns the
|
|
15
35
|
toolchain, deployment surface, PWA delivery, and base infrastructure. Cyberia adds a three-service MMO
|
|
16
36
|
runtime: `engine-cyberia`, `cyberia-server`, and `cyberia-client`.
|
|
@@ -25,26 +45,26 @@ Go server and the WASM client with data — it does not run the simulation or th
|
|
|
25
45
|
|
|
26
46
|
```text
|
|
27
47
|
┌───────────────────────────────────────────────┐
|
|
28
|
-
│ UNDERPOST PLATFORM
|
|
29
|
-
│ toolchain · deploy · PWA build · static
|
|
30
|
-
│ delivery · cluster/image/db · monitoring
|
|
31
|
-
│
|
|
32
|
-
│ underpost CLI ──▶ builds & deploys all
|
|
48
|
+
│ UNDERPOST PLATFORM │
|
|
49
|
+
│ toolchain · deploy · PWA build · static │
|
|
50
|
+
│ delivery · cluster/image/db · monitoring │
|
|
51
|
+
│ │
|
|
52
|
+
│ underpost CLI ──▶ builds & deploys all │
|
|
33
53
|
└───────────────────────────────────────────────┘
|
|
34
54
|
│ hosts / delivers
|
|
35
55
|
▼
|
|
36
|
-
╔═══════════════════════════════ CYBERIA MMO
|
|
56
|
+
╔═══════════════════════════════ CYBERIA MMO ═══════════════════════════════════╗
|
|
37
57
|
║ ║
|
|
38
|
-
║ ┌──────────────────┐ gRPC ┌──────────────────┐ WebSocket
|
|
39
|
-
║ │ engine-cyberia │ ────────▶ │ cyberia-server │ ───────────┐
|
|
40
|
-
║ │ (Node.js) │ │ (Go) │ │
|
|
41
|
-
║ │ │ │ │ ▼
|
|
42
|
-
║ │ content │ │ authoritative │
|
|
43
|
-
║ │ validation │ │ simulation │
|
|
44
|
-
║ │ persistence │ │ world tick │
|
|
45
|
-
║ │ gRPC/REST data │ │ AOI replication │
|
|
46
|
-
║ │ asset metadata │ │ │
|
|
47
|
-
║ └──────────────────┘ └──────────────────┘
|
|
58
|
+
║ ┌──────────────────┐ gRPC ┌──────────────────┐ WebSocket ║
|
|
59
|
+
║ │ engine-cyberia │ ────────▶ │ cyberia-server │ ───────────┐ ║
|
|
60
|
+
║ │ (Node.js) │ │ (Go) │ │ ║
|
|
61
|
+
║ │ │ │ │ ▼ ║
|
|
62
|
+
║ │ content │ │ authoritative │ ┌──────────────────┐ ║
|
|
63
|
+
║ │ validation │ │ simulation │ │ cyberia-client │ ║
|
|
64
|
+
║ │ persistence │ │ world tick │ │ (C / WASM) │ ║
|
|
65
|
+
║ │ gRPC/REST data │ │ AOI replication │ │ │ ║
|
|
66
|
+
║ │ asset metadata │ │ │ │ rendering │ ║
|
|
67
|
+
║ └──────────────────┘ └──────────────────┘ │ input │ ║
|
|
48
68
|
║ │ │ prediction │ ║
|
|
49
69
|
║ └──────────────── REST (content/assets) ─────▶│ presentation │ ║
|
|
50
70
|
║ └──────────────────┘ ║
|
|
@@ -137,17 +157,17 @@ Three supervised processes run in parallel, each with its own monitor and reconn
|
|
|
137
157
|
|
|
138
158
|
```text
|
|
139
159
|
┌──────────────────────────────────────────────────────────────┐
|
|
140
|
-
│ SUPERVISION (parallel)
|
|
141
|
-
│
|
|
142
|
-
│ engine-cyberia cyberia-server cyberia-client
|
|
143
|
-
│ ┌────────────┐ ┌────────────┐ ┌────────────┐
|
|
144
|
-
│ │ monitor │ │ monitor │ │ monitor │
|
|
145
|
-
│ │ +reconnect │ │ +reconnect │ │ +reconnect │
|
|
146
|
-
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘
|
|
147
|
-
│ │ │ │
|
|
148
|
-
│ └──────────┬──────────┴──────────┬──────────┘
|
|
149
|
-
│ ▼ ▼
|
|
150
|
-
│ all three up & connected?
|
|
160
|
+
│ SUPERVISION (parallel) │
|
|
161
|
+
│ │
|
|
162
|
+
│ engine-cyberia cyberia-server cyberia-client │
|
|
163
|
+
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
|
|
164
|
+
│ │ monitor │ │ monitor │ │ monitor │ │
|
|
165
|
+
│ │ +reconnect │ │ +reconnect │ │ +reconnect │ │
|
|
166
|
+
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │
|
|
167
|
+
│ │ │ │ │
|
|
168
|
+
│ └──────────┬──────────┴──────────┬──────────┘ │
|
|
169
|
+
│ ▼ ▼ │
|
|
170
|
+
│ all three up & connected? │
|
|
151
171
|
└────────────────────────────┬─────────────────────────────────┘
|
|
152
172
|
│
|
|
153
173
|
┌─────────────────────┼─────────────────────┐
|
package/bin/build.js
CHANGED
|
@@ -2,22 +2,31 @@
|
|
|
2
2
|
|
|
3
3
|
import { Command } from 'commander';
|
|
4
4
|
import fs from 'fs-extra';
|
|
5
|
-
import
|
|
6
|
-
import { loggerFactory } from '../src/server/logger.js';
|
|
5
|
+
import { loggerFactory } from '../src/server/ops/logger.js';
|
|
7
6
|
import { getCapVariableName } from '../src/client/components/core/CommonJs.js';
|
|
8
7
|
import {
|
|
9
8
|
getPathsSSR,
|
|
10
|
-
resolveDeployList,
|
|
11
9
|
syncPrivateConf,
|
|
12
10
|
syncDeployIdSources,
|
|
13
11
|
buildTemplate,
|
|
14
12
|
updatePrivateEngineTestRepo,
|
|
15
|
-
} from '../src/server/conf.js';
|
|
16
|
-
import {
|
|
13
|
+
} from '../src/server/runtime/conf.js';
|
|
14
|
+
import { resolveDeployList } from '../src/server/network/router.js';
|
|
15
|
+
import { loadDeployCatalog } from '../src/server/build/catalog.js';
|
|
16
|
+
import { buildProductPackageJson, productPackageOptionsFactory } from '../src/server/build/package.js';
|
|
17
|
+
import {
|
|
18
|
+
COVERAGE_BUNDLE_DIRECTORY,
|
|
19
|
+
bundleCoverageReports,
|
|
20
|
+
coverageReportCommand,
|
|
21
|
+
deployCoverageReports,
|
|
22
|
+
} from '../src/server/build/coverage.js';
|
|
23
|
+
import { shellExec } from '../src/server/runtime/process.js';
|
|
17
24
|
import Underpost from '../src/index.js';
|
|
18
25
|
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
// The host environment this entrypoint publishes with, read through the domain that owns it
|
|
27
|
+
// rather than from a path: the durable source is one file per scope, and naming the pre-split
|
|
28
|
+
// file here left the build with no credentials at all once that file was retired.
|
|
29
|
+
for (const [key, value] of Object.entries(Underpost.host.read())) process.env[key] = value;
|
|
21
30
|
|
|
22
31
|
const logger = loggerFactory(import.meta);
|
|
23
32
|
|
|
@@ -30,7 +39,7 @@ const basePath = '../pwa-microservices-template';
|
|
|
30
39
|
* @param {string} confName - A concrete deploy id (e.g. `dd-prototype`).
|
|
31
40
|
*/
|
|
32
41
|
const buildDeployTemplate = async (confName) => {
|
|
33
|
-
const repoName =
|
|
42
|
+
const repoName = Underpost.repo.engineRepoFactory(confName);
|
|
34
43
|
const catalog = await loadDeployCatalog(confName);
|
|
35
44
|
|
|
36
45
|
if (catalog.sourceMoves.length) {
|
|
@@ -107,34 +116,28 @@ const buildDeployTemplate = async (confName) => {
|
|
|
107
116
|
if (!fs.existsSync(`${basePath}/.github/workflows`))
|
|
108
117
|
fs.mkdirSync(`${basePath}/.github/workflows`, { recursive: true });
|
|
109
118
|
|
|
110
|
-
const
|
|
111
|
-
const
|
|
112
|
-
|
|
119
|
+
const sourcePackageJson = JSON.parse(fs.readFileSync(`./package.json`, 'utf8'));
|
|
120
|
+
const basePackageJson = JSON.parse(fs.readFileSync(`${basePath}/package.json`, 'utf8'));
|
|
121
|
+
|
|
122
|
+
// A packaged path may be a nested project with its own installed tree; the
|
|
123
|
+
// product resolves dependencies from its own lockfile, never from a copy.
|
|
124
|
+
const copyTemplatePaths = () => {
|
|
125
|
+
for (const path of catalog.templatePaths)
|
|
126
|
+
fs.copySync(`.${path}`, `${basePath}${path}`, {
|
|
127
|
+
filter: (src) => !src.split('/').includes('node_modules'),
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
// The manifest a product publishes is its catalog's declaration, resolved the same way for
|
|
132
|
+
// every product: only the files a product places in the template are its own business.
|
|
133
|
+
const packageOptions = productPackageOptionsFactory({ catalog, engineDependencies: sourcePackageJson.dependencies });
|
|
113
134
|
|
|
114
135
|
switch (confName) {
|
|
115
136
|
case 'dd-cyberia': {
|
|
116
|
-
const { CyberiaDependencies, DOCKER_SCRIPTS } = await import(
|
|
117
|
-
`../src/api/cyberia-server-defaults/cyberia-server-defaults.js`
|
|
118
|
-
);
|
|
119
|
-
fs.copyFileSync(`./bin/cyberia.js`, `${basePath}/bin/cyberia.js`);
|
|
120
137
|
fs.copyFileSync(
|
|
121
138
|
`./.github/workflows/publish.cyberia.ci.yml`,
|
|
122
139
|
`${basePath}/.github/workflows/publish.cyberia.ci.yml`,
|
|
123
140
|
);
|
|
124
|
-
if (packageJson.bin) delete packageJson.bin.underpost;
|
|
125
|
-
if (!packageJson.bin) packageJson.bin = {};
|
|
126
|
-
packageJson.bin.cyberia = 'bin/index.js';
|
|
127
|
-
packageJson.keywords = catalog.keywords;
|
|
128
|
-
packageJson.description = catalog.description;
|
|
129
|
-
packageJson.dependencies = {
|
|
130
|
-
underpost: '^' + Underpost.version.replace('v', ''),
|
|
131
|
-
'adm-zip': '^0.6.0',
|
|
132
|
-
...CyberiaDependencies,
|
|
133
|
-
};
|
|
134
|
-
packageJson.scripts = {
|
|
135
|
-
...packageJson.scripts,
|
|
136
|
-
...DOCKER_SCRIPTS,
|
|
137
|
-
};
|
|
138
141
|
fs.writeFileSync(`${basePath}/bin/index.js`, fs.readFileSync(`./bin/cyberia.js`, 'utf8'), 'utf8');
|
|
139
142
|
// Canonical Cyberia doc; engine-cyberia/README.md is a generated copy — never hand-edited.
|
|
140
143
|
fs.writeFileSync(
|
|
@@ -142,20 +145,23 @@ const buildDeployTemplate = async (confName) => {
|
|
|
142
145
|
fs.readFileSync(`./src/client/public/cyberia-docs/CYBERIA.md`, 'utf8'),
|
|
143
146
|
'utf8',
|
|
144
147
|
);
|
|
145
|
-
|
|
146
|
-
for (const path of catalog.templatePaths) fs.copySync(`.${path}`, `${basePath}${path}`);
|
|
148
|
+
copyTemplatePaths();
|
|
147
149
|
break;
|
|
148
150
|
}
|
|
149
151
|
default:
|
|
150
|
-
|
|
152
|
+
copyTemplatePaths();
|
|
151
153
|
break;
|
|
152
154
|
}
|
|
153
155
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
156
|
+
const packageJson = buildProductPackageJson({
|
|
157
|
+
basePackageJson,
|
|
158
|
+
sourcePackageJson,
|
|
159
|
+
catalog,
|
|
160
|
+
confName,
|
|
161
|
+
repositoryName: repoName,
|
|
162
|
+
...packageOptions,
|
|
163
|
+
});
|
|
164
|
+
fs.writeFileSync(`${basePath}/package.json`, JSON.stringify(packageJson, null, 4), 'utf8');
|
|
159
165
|
if (fs.existsSync(`./deploy/${confName}`))
|
|
160
166
|
fs.copySync(`./deploy/${confName}`, `${basePath}/deploy/${confName}`, {
|
|
161
167
|
overwrite: true,
|
|
@@ -219,18 +225,48 @@ const buildDeployTemplate = async (confName) => {
|
|
|
219
225
|
}
|
|
220
226
|
};
|
|
221
227
|
|
|
228
|
+
/**
|
|
229
|
+
* The coverage reports a deploy id's conf declares, as {@link deployCoverageReports} reads them.
|
|
230
|
+
* @param {string} deployId - A concrete deploy id.
|
|
231
|
+
* @returns {Array<{id: string, suite?: string, path?: string}>}
|
|
232
|
+
*/
|
|
233
|
+
const deployReports = (deployId) =>
|
|
234
|
+
deployCoverageReports(JSON.parse(fs.readFileSync(`./engine-private/conf/${deployId}/conf.server.json`, 'utf8')));
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Carries this build stage's coverage HTML reports into the assembled template, so every
|
|
238
|
+
* container started from the published source serves them instead of generating one.
|
|
239
|
+
* @param {string} deployId - A concrete deploy id.
|
|
240
|
+
*/
|
|
241
|
+
const bundleDeployCoverage = (deployId) => {
|
|
242
|
+
for (const { id, bundled, from, to } of bundleCoverageReports(deployReports(deployId), basePath)) {
|
|
243
|
+
if (bundled) logger.info('Build coverage artifact', { id, from, to });
|
|
244
|
+
else
|
|
245
|
+
logger.warn('No coverage report to bundle; the deploy will publish the unavailable page', {
|
|
246
|
+
id,
|
|
247
|
+
hint: 'node bin/build <deploy-id> --coverage',
|
|
248
|
+
to,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
|
|
222
253
|
const program = new Command();
|
|
223
254
|
|
|
224
255
|
program
|
|
225
256
|
.name('build')
|
|
226
257
|
.description('Assemble deploy id public templates and sync their private configuration repos.')
|
|
227
|
-
.argument('<conf-name>', 'Deploy id, comma-separated list, or the "dd" meta id (fans out via dd.
|
|
258
|
+
.argument('<conf-name>', 'Deploy id, comma-separated list, or the "dd" meta id (fans out via dd.routes).')
|
|
228
259
|
.argument('[env]', 'Environment label (informational; kept for CI invocation compatibility).')
|
|
229
260
|
.option('--conf', 'Sync each deploy id private configuration repo and exit (no template assembly).')
|
|
230
261
|
.option(
|
|
231
262
|
'--no-template-rebuild',
|
|
232
263
|
'Skip the from-scratch base template reconstruction before assembly (assemble onto the existing template).',
|
|
233
264
|
)
|
|
265
|
+
.option(
|
|
266
|
+
'--coverage',
|
|
267
|
+
`Run the test suites the deploy ids' coverage reports name before assembly, so the artifact carries current ${COVERAGE_BUNDLE_DIRECTORY} reports.`,
|
|
268
|
+
false,
|
|
269
|
+
)
|
|
234
270
|
.option(
|
|
235
271
|
'--update-private',
|
|
236
272
|
'After assembling each deploy id, publish it to its private test source repo (underpostnet/engine-test-<id>) for isolated test deploys.',
|
|
@@ -248,12 +284,21 @@ program
|
|
|
248
284
|
return;
|
|
249
285
|
}
|
|
250
286
|
|
|
251
|
-
//
|
|
252
|
-
//
|
|
253
|
-
|
|
287
|
+
// Tests run here, in the build stage, and once per declared suite: the artifact carries
|
|
288
|
+
// each report so no container ever has to produce its own. Refreshing is opt-in because
|
|
289
|
+
// a template assembly is not otherwise a test run.
|
|
290
|
+
if (options.coverage) {
|
|
291
|
+
const suites = new Set(deployList.flatMap(deployReports).flatMap(({ suite }) => (suite ? [suite] : [])));
|
|
292
|
+
for (const suite of suites) shellExec(coverageReportCommand({ suite }));
|
|
293
|
+
}
|
|
254
294
|
|
|
255
295
|
for (const deployId of deployList) {
|
|
296
|
+
// Reconstruct the base template from 0 before each deploy id so neither a previous
|
|
297
|
+
// build run nor the deploy id assembled before this one leaks into it. Opt out with
|
|
298
|
+
// --no-template-rebuild.
|
|
299
|
+
if (options.templateRebuild) await buildTemplate({ toPath: basePath });
|
|
256
300
|
await buildDeployTemplate(deployId);
|
|
301
|
+
bundleDeployCoverage(deployId);
|
|
257
302
|
// Publish the just-assembled tree to the deploy id's private test repo so a
|
|
258
303
|
// pod started with `--private-test-repo` clones this work-in-progress source.
|
|
259
304
|
if (options.updatePrivate) await updatePrivateEngineTestRepo(deployId);
|
package/bin/build.template.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import { Command } from 'commander';
|
|
4
4
|
import fs from 'fs-extra';
|
|
5
5
|
import dotenv from 'dotenv';
|
|
6
|
-
import { loggerFactory } from '../src/server/logger.js';
|
|
7
|
-
import { buildTemplate, updatePrivateTemplateRepo } from '../src/server/conf.js';
|
|
6
|
+
import { loggerFactory } from '../src/server/ops/logger.js';
|
|
7
|
+
import { buildTemplate, updatePrivateTemplateRepo } from '../src/server/runtime/conf.js';
|
|
8
8
|
|
|
9
9
|
if (fs.existsSync('./engine-private/conf/dd-cron/.env.production'))
|
|
10
10
|
dotenv.config({ path: `./engine-private/conf/dd-cron/.env.production`, override: true });
|
|
@@ -20,10 +20,15 @@ program
|
|
|
20
20
|
.argument('[src-path]', 'Engine source root to sync from.', './')
|
|
21
21
|
.argument('[to-path]', 'Template output path.', '../pwa-microservices-template')
|
|
22
22
|
.option('--update-private', 'Update private template repository', false)
|
|
23
|
+
.option('--no-clone', 'Fail instead of cloning when the template checkout is missing or foreign.')
|
|
23
24
|
.action(async (srcPath, toPath, options) => {
|
|
24
25
|
try {
|
|
25
26
|
if (options.updatePrivate) return await updatePrivateTemplateRepo();
|
|
26
|
-
await buildTemplate({
|
|
27
|
+
await buildTemplate({
|
|
28
|
+
srcPath: srcPath.replaceAll(`'`, ''),
|
|
29
|
+
toPath: toPath.replaceAll(`'`, ''),
|
|
30
|
+
noClone: options.clone === false,
|
|
31
|
+
});
|
|
27
32
|
} catch (error) {
|
|
28
33
|
logger.error(error, error.stack);
|
|
29
34
|
process.exit(1);
|