cyberia 3.2.5 → 3.2.9
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/.github/workflows/engine-cyberia.cd.yml +2 -2
- package/.github/workflows/release.cd.yml +1 -2
- package/CHANGELOG.md +351 -1
- package/CLI-HELP.md +40 -13
- package/Dockerfile +0 -4
- package/README.md +242 -497
- package/bin/build.js +19 -5
- package/bin/cyberia.js +1149 -240
- package/bin/deploy.js +570 -1
- package/bin/file.js +6 -0
- package/bin/index.js +1149 -240
- package/bin/vs.js +1 -1
- package/conf.js +67 -89
- package/deployment.yaml +4 -222
- package/hardhat/package-lock.json +32 -32
- package/hardhat/package.json +3 -3
- package/jsconfig.json +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +4 -222
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
- package/manifests/deployment/dd-test-development/deployment.yaml +136 -66
- package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
- package/package.json +23 -14
- package/proxy.yaml +10 -118
- package/scripts/k3s-node-setup.sh +2 -2
- package/scripts/nat-iptables.sh +103 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +76 -21
- package/src/api/core/core.controller.js +10 -10
- package/src/api/core/core.service.js +10 -10
- package/src/api/crypto/crypto.controller.js +8 -8
- package/src/api/crypto/crypto.service.js +8 -8
- package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
- package/src/api/cyberia-action/cyberia-action.model.js +87 -0
- package/src/api/cyberia-action/cyberia-action.router.js +27 -0
- package/src/api/cyberia-action/cyberia-action.service.js +42 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +2 -2
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +16 -16
- package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
- package/src/api/cyberia-entity/cyberia-entity.service.js +10 -10
- package/src/api/cyberia-instance/cyberia-fallback-world.js +19 -209
- package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
- package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +22 -57
- package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
- package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +216 -55
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +4 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +18 -14
- package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
- package/src/api/cyberia-map/cyberia-map.service.js +10 -10
- package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +27 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +27 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/default/default.controller.js +10 -10
- package/src/api/default/default.service.js +10 -10
- package/src/api/document/document.controller.js +12 -12
- package/src/api/document/document.model.js +10 -16
- package/src/api/file/file.controller.js +8 -8
- package/src/api/file/file.model.js +10 -10
- package/src/api/file/file.service.js +36 -36
- package/src/api/instance/instance.controller.js +10 -10
- package/src/api/instance/instance.model.js +4 -10
- package/src/api/instance/instance.service.js +10 -10
- package/src/api/ipfs/ipfs.controller.js +12 -12
- package/src/api/ipfs/ipfs.model.js +4 -13
- package/src/api/ipfs/ipfs.service.js +14 -28
- package/src/api/object-layer/object-layer.controller.js +12 -12
- package/src/api/object-layer/object-layer.model.js +4 -17
- package/src/api/object-layer/object-layer.service.js +12 -12
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +18 -14
- package/src/api/test/test.controller.js +8 -8
- package/src/api/test/test.service.js +8 -8
- package/src/api/user/guest.service.js +99 -0
- package/src/api/user/user.controller.js +6 -6
- package/src/api/user/user.model.js +8 -13
- package/src/api/user/user.service.js +3 -20
- package/src/cli/cluster.js +61 -14
- package/src/cli/db.js +47 -2
- package/src/cli/deploy.js +67 -35
- package/src/cli/fs.js +79 -8
- package/src/cli/image.js +43 -1
- package/src/cli/index.js +26 -1
- package/src/cli/release.js +57 -1
- package/src/cli/repository.js +69 -31
- package/src/cli/run.js +415 -36
- package/src/cli/ssh.js +1 -1
- package/src/cli/static.js +43 -115
- package/src/client/Cryptokoyn.index.js +18 -21
- package/src/client/CyberiaPortal.index.js +19 -23
- package/src/client/Default.index.js +21 -33
- package/src/client/Itemledger.index.js +20 -26
- package/src/client/Underpost.index.js +19 -23
- package/src/client/components/core/404.js +4 -4
- package/src/client/components/core/500.js +4 -4
- package/src/client/components/core/Account.js +73 -60
- package/src/client/components/core/AgGrid.js +23 -33
- package/src/client/components/core/Alert.js +12 -13
- package/src/client/components/core/AppStore.js +1 -1
- package/src/client/components/core/Auth.js +35 -37
- package/src/client/components/core/Badge.js +7 -13
- package/src/client/components/core/BtnIcon.js +15 -17
- package/src/client/components/core/CalendarCore.js +42 -63
- package/src/client/components/core/Chat.js +13 -15
- package/src/client/components/core/ClientEvents.js +87 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/Content.js +17 -14
- package/src/client/components/core/Css.js +15 -71
- package/src/client/components/core/CssCore.js +12 -16
- package/src/client/components/core/D3Chart.js +4 -4
- package/src/client/components/core/Docs.js +64 -91
- package/src/client/components/core/DropDown.js +69 -91
- package/src/client/components/core/EventBus.js +92 -0
- package/src/client/components/core/EventsUI.js +14 -17
- package/src/client/components/core/FileExplorer.js +96 -228
- package/src/client/components/core/FullScreen.js +47 -75
- package/src/client/components/core/Input.js +24 -69
- package/src/client/components/core/Keyboard.js +25 -18
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +25 -31
- package/src/client/components/core/LogIn.js +41 -41
- package/src/client/components/core/LogOut.js +23 -14
- package/src/client/components/core/Modal.js +462 -178
- package/src/client/components/core/NotificationManager.js +14 -18
- package/src/client/components/core/Panel.js +54 -50
- package/src/client/components/core/PanelForm.js +25 -125
- package/src/client/components/core/Polyhedron.js +110 -214
- package/src/client/components/core/PublicProfile.js +39 -32
- package/src/client/components/core/Recover.js +48 -44
- package/src/client/components/core/Responsive.js +88 -32
- package/src/client/components/core/RichText.js +9 -18
- package/src/client/components/core/Router.js +24 -3
- package/src/client/components/core/SearchBox.js +37 -37
- package/src/client/components/core/SignUp.js +39 -30
- package/src/client/components/core/SocketIo.js +31 -2
- package/src/client/components/core/SocketIoHandler.js +6 -6
- package/src/client/components/core/ToggleSwitch.js +8 -20
- package/src/client/components/core/ToolTip.js +5 -17
- package/src/client/components/core/Translate.js +56 -59
- package/src/client/components/core/Validator.js +26 -16
- package/src/client/components/core/Wallet.js +15 -26
- package/src/client/components/core/Worker.js +163 -27
- package/src/client/components/core/windowGetDimensions.js +7 -7
- package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
- package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
- package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
- package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
- package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +305 -61
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
- package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
- package/src/client/components/default/CssDefault.js +12 -12
- package/src/client/components/default/LogInDefault.js +6 -4
- package/src/client/components/default/LogOutDefault.js +6 -4
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +4 -4
- package/src/client/components/default/SignUpDefault.js +6 -4
- package/src/client/components/default/TranslateDefault.js +3 -3
- package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
- package/src/client/components/itemledger/CssItemledger.js +15 -15
- package/src/client/components/itemledger/LogInItemledger.js +6 -4
- package/src/client/components/itemledger/LogOutItemledger.js +6 -4
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +4 -4
- package/src/client/components/itemledger/SignUpItemledger.js +6 -4
- package/src/client/components/itemledger/TranslateItemledger.js +3 -3
- package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
- package/src/client/components/underpost/CssUnderpost.js +14 -14
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
- package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
- package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
- package/src/client/components/underpost/LogInUnderpost.js +6 -4
- package/src/client/components/underpost/LogOutUnderpost.js +6 -4
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +4 -4
- package/src/client/components/underpost/SignUpUnderpost.js +6 -4
- package/src/client/components/underpost/TranslateUnderpost.js +4 -4
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +443 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +417 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +313 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +260 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
- package/src/client/services/core/core.service.js +17 -49
- package/src/client/services/crypto/crypto.service.js +8 -13
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
- package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
- package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/default/default.management.js +159 -267
- package/src/client/services/default/default.service.js +10 -16
- package/src/client/services/document/document.service.js +14 -19
- package/src/client/services/file/file.service.js +8 -13
- package/src/client/services/instance/instance.management.js +5 -5
- package/src/client/services/instance/instance.service.js +10 -15
- package/src/client/services/ipfs/ipfs.service.js +12 -18
- package/src/client/services/object-layer/object-layer.management.js +12 -12
- package/src/client/services/object-layer/object-layer.service.js +20 -26
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
- package/src/client/services/test/test.service.js +8 -13
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +5 -5
- package/src/client/services/user/user.service.js +14 -20
- package/src/client/ssr/body/404.js +3 -3
- package/src/client/ssr/body/500.js +3 -3
- package/src/client/ssr/body/CacheControl.js +5 -2
- package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
- package/src/client/ssr/head/PwaItemledger.js +197 -60
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
- package/src/client/ssr/offline/Maintenance.js +12 -11
- package/src/client/ssr/offline/NoNetworkConnection.js +3 -3
- package/src/client/ssr/pages/Test.js +2 -2
- package/src/client/sw/core.sw.js +212 -0
- package/src/grpc/cyberia/grpc-server.js +179 -67
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +80 -0
- package/src/runtime/cyberia-server/Dockerfile +37 -0
- package/src/runtime/express/Dockerfile +4 -4
- package/src/runtime/lampp/Dockerfile +8 -7
- package/src/runtime/wp/Dockerfile +11 -17
- package/src/server/atlas-sprite-sheet-generator.js +4 -2
- package/src/server/client-build-docs.js +45 -46
- package/src/server/client-build.js +334 -60
- package/src/server/client-formatted.js +47 -16
- package/src/server/conf.js +5 -4
- package/src/server/data-query.js +32 -20
- package/src/server/dns.js +22 -0
- package/src/server/ipfs-client.js +232 -91
- package/src/server/object-layer.js +1 -6
- package/src/server/process.js +13 -27
- package/src/server/semantic-layer-generator-floor.js +11 -51
- package/src/server/semantic-layer-generator-resource.js +259 -0
- package/src/server/semantic-layer-generator-skin.js +41 -171
- package/src/server/semantic-layer-generator.js +122 -14
- package/src/server/shape-generator.js +108 -0
- package/src/server/start.js +17 -3
- package/src/server/valkey.js +141 -235
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +29 -0
- package/typedoc.json +29 -0
- package/WHITE-PAPER.md +0 -1540
- package/hardhat/README.md +0 -531
- package/hardhat/WHITE-PAPER.md +0 -1540
- package/jsdoc.dd-cyberia.json +0 -68
- package/jsdoc.json +0 -68
- package/src/api/object-layer/README.md +0 -672
- package/src/client/components/core/ColorPalette.js +0 -5267
- package/src/client/components/core/JoyStick.js +0 -80
- package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
- package/src/client/components/default/RoutesDefault.js +0 -49
- package/src/client/components/itemledger/RoutesItemledger.js +0 -40
- package/src/client/components/underpost/RoutesUnderpost.js +0 -47
- package/src/client/sw/default.sw.js +0 -127
- package/src/client/sw/template.sw.js +0 -84
- package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
- package/src/grpc/cyberia/README.md +0 -326
package/src/cli/index.js
CHANGED
|
@@ -46,6 +46,9 @@ program
|
|
|
46
46
|
.option('--sync-env-port', 'Sync environment port assignments across all deploy IDs')
|
|
47
47
|
.option('--single-replica', 'Build single replica folders instead of full client')
|
|
48
48
|
.option('--build-zip', 'Create zip files of the builds')
|
|
49
|
+
.option('--split <mb>', 'Split generated zip files into parts of the specified size in MB')
|
|
50
|
+
.option('--unzip <build-prefix>', 'Extract a built client zip or split zip parts using the given build prefix')
|
|
51
|
+
.option('--merge-zip <build-prefix>', 'Merge split ZIP parts back into a single ZIP file for the given build prefix')
|
|
49
52
|
.option('--lite-build', 'Skip full build (default is full build)')
|
|
50
53
|
.option('--icons-build', 'Build icons')
|
|
51
54
|
.description('Builds client assets, single replicas, and/or syncs environment ports.')
|
|
@@ -62,6 +65,11 @@ program
|
|
|
62
65
|
.option('--build', 'Triggers the client-side application build process.')
|
|
63
66
|
.option('--underpost-quickly-install', 'Uses Underpost Quickly Install for dependency installation.')
|
|
64
67
|
.option('--skip-pull-base', 'Skips cloning repositories, uses current workspace code directly.')
|
|
68
|
+
.option('--skip-full-build', 'Skips the full client bundle build during deployment.')
|
|
69
|
+
.option(
|
|
70
|
+
'--pull-bundle',
|
|
71
|
+
'Downloads the pre-built client bundle from Cloudinary via pull-bundle before starting. Use together with --skip-full-build to skip the local build entirely.',
|
|
72
|
+
)
|
|
65
73
|
.action(Underpost.start.callback)
|
|
66
74
|
.description('Initiates application servers, build pipelines, or other defined services based on the deployment ID.');
|
|
67
75
|
|
|
@@ -226,6 +234,7 @@ program
|
|
|
226
234
|
.option('--ban-egress-clear', 'Clears all banned egress IP addresses.')
|
|
227
235
|
.option('--ban-both-add', 'Adds IP addresses to both banned ingress and egress lists.')
|
|
228
236
|
.option('--ban-both-remove', 'Removes IP addresses from both banned ingress and egress lists.')
|
|
237
|
+
.option('--mac', 'Prints the MAC address of the main network interface.')
|
|
229
238
|
.description('Displays the current public machine IP addresses.')
|
|
230
239
|
.action(Underpost.dns.ipDispatcher);
|
|
231
240
|
|
|
@@ -329,6 +338,14 @@ program
|
|
|
329
338
|
'Sets the local:remote port to expose when --expose is active (overrides auto-detected service port).',
|
|
330
339
|
)
|
|
331
340
|
.option('--cmd <cmd>', 'Custom initialization command for deployment (comma-separated commands).')
|
|
341
|
+
.option(
|
|
342
|
+
'--skip-full-build',
|
|
343
|
+
'Skip client bundle rebuild; container will pull pre-built bundle via pull-bundle instead.',
|
|
344
|
+
)
|
|
345
|
+
.option(
|
|
346
|
+
'--pull-bundle',
|
|
347
|
+
'Explicitly pull the pre-built client bundle from Cloudinary inside the container. Use together with --skip-full-build.',
|
|
348
|
+
)
|
|
332
349
|
.description('Manages application deployments, defaulting to deploying development pods.')
|
|
333
350
|
.action(Underpost.deploy.callback);
|
|
334
351
|
|
|
@@ -485,6 +502,7 @@ program
|
|
|
485
502
|
.option('--recursive', 'Uploads files recursively from the specified path.')
|
|
486
503
|
.option('--deploy-id <deploy-id>', 'Specifies the deployment configuration ID for file operations.')
|
|
487
504
|
.option('--pull', 'Downloads the specified file.')
|
|
505
|
+
.option('--omit-unzip', 'With --pull, keeps the downloaded .zip file and skips extraction.')
|
|
488
506
|
.option('--force', 'Forces the action, overriding any warnings or conflicts.')
|
|
489
507
|
.option('--storage-file-path <storage-file-path>', 'Specifies a custom file storage path.')
|
|
490
508
|
.description('Manages file storage, defaulting to file upload operations.')
|
|
@@ -613,7 +631,6 @@ program
|
|
|
613
631
|
.option('--k3s', 'Sets the k3s cluster context for the runner execution.')
|
|
614
632
|
.option('--kind', 'Sets the kind cluster context for the runner execution.')
|
|
615
633
|
.option('--git-clean', 'Runs git clean on volume mount paths before copying.')
|
|
616
|
-
.option('--log-type <log-type>', 'Sets the log type for the runner execution.')
|
|
617
634
|
.option('--deploy-id <deploy-id>', 'Sets deploy id context for the runner execution.')
|
|
618
635
|
.option('--user <user>', 'Sets user context for the runner execution.')
|
|
619
636
|
.option('--hosts <hosts>', 'Comma-separated list of hosts for the runner execution.')
|
|
@@ -657,6 +674,14 @@ program
|
|
|
657
674
|
'(e.g., "127.0.0.1=foo.local,bar.local;10.1.2.3=foo.remote,bar.remote").',
|
|
658
675
|
)
|
|
659
676
|
.option('--copy', 'Copies the runner output to the clipboard (supported by: generate-pass, template-deploy-local).')
|
|
677
|
+
.option(
|
|
678
|
+
'--skip-full-build',
|
|
679
|
+
'Skip client bundle rebuild; triggers pull-bundle in container startup (supported by: sync, template-deploy).',
|
|
680
|
+
)
|
|
681
|
+
.option(
|
|
682
|
+
'--pull-bundle',
|
|
683
|
+
'Explicitly download the pre-built client bundle from Cloudinary inside the container (supported by: sync, template-deploy). Use together with --skip-full-build.',
|
|
684
|
+
)
|
|
660
685
|
.description('Runs specified scripts using various runners.')
|
|
661
686
|
.action(Underpost.run.callback);
|
|
662
687
|
|
package/src/cli/release.js
CHANGED
|
@@ -120,7 +120,7 @@ class UnderpostRelease {
|
|
|
120
120
|
`./manifests/deployment/dd-default-development/deployment.yaml`,
|
|
121
121
|
fs
|
|
122
122
|
.readFileSync(`./manifests/deployment/dd-default-development/deployment.yaml`, 'utf8')
|
|
123
|
-
.replaceAll(`underpost:v${version}`, `underpost:v${newVersion}`),
|
|
123
|
+
.replaceAll(`underpost-engine:v${version}`, `underpost-engine:v${newVersion}`),
|
|
124
124
|
'utf8',
|
|
125
125
|
);
|
|
126
126
|
|
|
@@ -133,6 +133,62 @@ class UnderpostRelease {
|
|
|
133
133
|
'utf8',
|
|
134
134
|
);
|
|
135
135
|
|
|
136
|
+
// Update underpost/* image versions in all engine-*.cd.yml workflows.
|
|
137
|
+
for (const wf of fs.readdirSync(`./.github/workflows`)) {
|
|
138
|
+
if (!wf.match(/^engine-.+\.cd\.yml$/)) continue;
|
|
139
|
+
const wfPath = `./.github/workflows/${wf}`;
|
|
140
|
+
const updated = fs
|
|
141
|
+
.readFileSync(wfPath, 'utf8')
|
|
142
|
+
.replace(/underpost\/([^:'"]+):v[0-9]+\.[0-9]+\.[0-9]+/g, `underpost/$1:v${newVersion}`);
|
|
143
|
+
fs.writeFileSync(wfPath, updated, 'utf8');
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Update version tag in all runtime docker image workflows (type=raw,value=v<version>).
|
|
147
|
+
for (const wf of fs.readdirSync(`./.github/workflows`)) {
|
|
148
|
+
if (!wf.match(/^docker-image\..+\.ci\.yml$/) || wf === 'docker-image.ci.yml') continue;
|
|
149
|
+
const wfPath = `./.github/workflows/${wf}`;
|
|
150
|
+
fs.writeFileSync(
|
|
151
|
+
wfPath,
|
|
152
|
+
fs.readFileSync(wfPath, 'utf8').replaceAll(`type=raw,value=v${version}`, `type=raw,value=v${newVersion}`),
|
|
153
|
+
'utf8',
|
|
154
|
+
);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Update image version in all conf.instances.json files for underpost/* images.
|
|
158
|
+
if (fs.existsSync(`./engine-private/conf`)) {
|
|
159
|
+
const confFiles = await fs.readdir(`./engine-private/conf`, { recursive: true });
|
|
160
|
+
for (const relativePath of confFiles) {
|
|
161
|
+
const filePath = `./engine-private/conf/${relativePath.replaceAll('\\', '/')}`;
|
|
162
|
+
if (filePath.split('/').pop() !== 'conf.instances.json' || !fs.existsSync(filePath)) continue;
|
|
163
|
+
|
|
164
|
+
let instances;
|
|
165
|
+
try {
|
|
166
|
+
instances = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
167
|
+
} catch {
|
|
168
|
+
logger.warn(`Skipping invalid JSON file: ${filePath}`);
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (!Array.isArray(instances)) continue;
|
|
173
|
+
|
|
174
|
+
let updated = false;
|
|
175
|
+
for (const instance of instances) {
|
|
176
|
+
if (!instance || typeof instance !== 'object') continue;
|
|
177
|
+
if (!instance.image || typeof instance.image !== 'string') continue;
|
|
178
|
+
if (!instance.image.startsWith('underpost/')) continue;
|
|
179
|
+
|
|
180
|
+
const baseImage = instance.image.split('@')[0].split(':')[0];
|
|
181
|
+
const nextImage = `${baseImage}:v${newVersion}`;
|
|
182
|
+
if (instance.image !== nextImage) {
|
|
183
|
+
instance.image = nextImage;
|
|
184
|
+
updated = true;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (updated) fs.writeFileSync(filePath, JSON.stringify(instances, null, 2), 'utf8');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
136
192
|
fs.writeFileSync(
|
|
137
193
|
`./src/index.js`,
|
|
138
194
|
fs.readFileSync(`./src/index.js`, 'utf8').replaceAll(`${version}`, `${newVersion}`),
|
package/src/cli/repository.js
CHANGED
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
buildReplicaId,
|
|
22
22
|
writeEnv,
|
|
23
23
|
} from '../server/conf.js';
|
|
24
|
-
import { buildClient } from '../server/client-build.js';
|
|
24
|
+
import { buildClient, unzipClientBuild, mergeClientBuildZip } from '../server/client-build.js';
|
|
25
25
|
import { DefaultConf } from '../../conf.js';
|
|
26
26
|
import Underpost from '../index.js';
|
|
27
27
|
|
|
@@ -401,6 +401,7 @@ class UnderpostRepository {
|
|
|
401
401
|
|
|
402
402
|
/**
|
|
403
403
|
* Retrieves the message of the last Git commit.
|
|
404
|
+
* @param {number} [skip=0] - Number of commits to skip from HEAD (0 = most recent).
|
|
404
405
|
* @returns {string} The last commit message.
|
|
405
406
|
* @memberof UnderpostRepository
|
|
406
407
|
*/
|
|
@@ -642,6 +643,9 @@ class UnderpostRepository {
|
|
|
642
643
|
* @param {boolean} [options.syncEnvPort=false] - If true, syncs environment port assignments across all deploy IDs.
|
|
643
644
|
* @param {boolean} [options.singleReplica=false] - If true, builds single replica folders instead of full client.
|
|
644
645
|
* @param {boolean} [options.buildZip=false] - If true, creates zip files of the builds.
|
|
646
|
+
* @param {string|number} [options.split=''] - Optional ZIP part size in MB. When set with buildZip, writes split parts.
|
|
647
|
+
* @param {string} [options.unzip=''] - Optional build ZIP prefix to extract from ./build.
|
|
648
|
+
* @param {string} [options.mergeZip=''] - Optional build prefix to merge split ZIP parts into a single ZIP.
|
|
645
649
|
* @param {boolean} [options.liteBuild=false] - If true, skips full build (default is full build).
|
|
646
650
|
* @param {boolean} [options.iconsBuild=false] - If true, builds icons.
|
|
647
651
|
* @returns {Promise<boolean>} A promise that resolves when the build is complete.
|
|
@@ -656,12 +660,31 @@ class UnderpostRepository {
|
|
|
656
660
|
syncEnvPort: false,
|
|
657
661
|
singleReplica: false,
|
|
658
662
|
buildZip: false,
|
|
663
|
+
split: '',
|
|
664
|
+
unzip: '',
|
|
665
|
+
mergeZip: '',
|
|
659
666
|
liteBuild: false,
|
|
660
667
|
iconsBuild: false,
|
|
661
668
|
},
|
|
662
669
|
) {
|
|
663
670
|
return new Promise(async (resolve, reject) => {
|
|
664
671
|
try {
|
|
672
|
+
if (options.mergeZip) {
|
|
673
|
+
mergeClientBuildZip({
|
|
674
|
+
buildPrefix: options.mergeZip,
|
|
675
|
+
logger,
|
|
676
|
+
});
|
|
677
|
+
return resolve(true);
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
if (options.unzip) {
|
|
681
|
+
unzipClientBuild({
|
|
682
|
+
buildPrefix: options.unzip,
|
|
683
|
+
logger,
|
|
684
|
+
});
|
|
685
|
+
return resolve(true);
|
|
686
|
+
}
|
|
687
|
+
|
|
665
688
|
// Handle singleReplica operation (must run before syncEnvPort to ensure replica dirs exist)
|
|
666
689
|
if (options.singleReplica) {
|
|
667
690
|
const replicaPath = path;
|
|
@@ -804,6 +827,9 @@ class UnderpostRepository {
|
|
|
804
827
|
let argPath = path ? path.split(',') : [];
|
|
805
828
|
let deployIdSingleReplicas = [];
|
|
806
829
|
let singleReplicaHosts = [];
|
|
830
|
+
const isReplicaContext = resolvedDeployId
|
|
831
|
+
? fs.existsSync(`./engine-private/replica/${resolvedDeployId}`)
|
|
832
|
+
: false;
|
|
807
833
|
const serverConf = resolvedDeployId
|
|
808
834
|
? readConfJson(resolvedDeployId, 'server', { loadReplicas: true })
|
|
809
835
|
: Config.default.server;
|
|
@@ -814,7 +840,7 @@ class UnderpostRepository {
|
|
|
814
840
|
if (argHost.length && argPath.length && (!argHost.includes(host) || !argPath.includes(path))) {
|
|
815
841
|
delete serverConf[host][path];
|
|
816
842
|
} else {
|
|
817
|
-
if (serverConf[host][path].singleReplica && serverConf[host][path].replicas) {
|
|
843
|
+
if (!isReplicaContext && serverConf[host][path].singleReplica && serverConf[host][path].replicas) {
|
|
818
844
|
singleReplicaHosts.push({ host, path });
|
|
819
845
|
deployIdSingleReplicas = deployIdSingleReplicas.concat(
|
|
820
846
|
serverConf[host][path].replicas.map((replica) =>
|
|
@@ -827,10 +853,17 @@ class UnderpostRepository {
|
|
|
827
853
|
}
|
|
828
854
|
await buildClient({
|
|
829
855
|
buildZip: options.buildZip || false,
|
|
856
|
+
split: options.split || '',
|
|
830
857
|
fullBuild: options.liteBuild ? false : true,
|
|
831
858
|
iconsBuild: options.iconsBuild || false,
|
|
832
859
|
});
|
|
833
|
-
for (const replicaDeployId of deployIdSingleReplicas)
|
|
860
|
+
for (const replicaDeployId of deployIdSingleReplicas) {
|
|
861
|
+
if (!fs.existsSync(`./engine-private/replica/${replicaDeployId}`)) {
|
|
862
|
+
logger.warn('Skip replica client build: replica folder not found', { replicaDeployId });
|
|
863
|
+
continue;
|
|
864
|
+
}
|
|
865
|
+
await Underpost.repo.client(replicaDeployId);
|
|
866
|
+
}
|
|
834
867
|
|
|
835
868
|
return resolve(true);
|
|
836
869
|
}
|
|
@@ -917,6 +950,7 @@ Prevent build private config repo.`,
|
|
|
917
950
|
/**
|
|
918
951
|
* Retrieves the Git commit history.
|
|
919
952
|
* @param {number} [sinceCommit=1] - The number of recent commits to retrieve.
|
|
953
|
+
* @param {string} [repoPath='.'] - The path to the repository.
|
|
920
954
|
* @returns {Array<{hash: string, message: string, files: string}>} An array of commit objects with hash, message, and files.
|
|
921
955
|
* @memberof UnderpostRepository
|
|
922
956
|
*/
|
|
@@ -1238,19 +1272,10 @@ Prevent build private config repo.`,
|
|
|
1238
1272
|
},
|
|
1239
1273
|
|
|
1240
1274
|
/**
|
|
1241
|
-
*
|
|
1242
|
-
*
|
|
1243
|
-
* @param {string}
|
|
1244
|
-
* @
|
|
1245
|
-
* @returns {{ count: number, branch: string, hasUnpushed: boolean }} Unpush metadata.
|
|
1246
|
-
* @memberof UnderpostRepository
|
|
1247
|
-
*/
|
|
1248
|
-
/**
|
|
1249
|
-
* Checks whether a remote Git repository URL is reachable.
|
|
1250
|
-
* Uses `git ls-remote` with `|| true` so the process always exits 0.
|
|
1251
|
-
* Injects `GITHUB_TOKEN` into GitHub HTTPS URLs when available.
|
|
1252
|
-
* @param {string} url - Full HTTPS clone URL to test (e.g. "https://github.com/org/repo.git").
|
|
1253
|
-
* @returns {boolean} `true` when the remote responded with at least one ref hash.
|
|
1275
|
+
* Resolves a Git remote URL, normalizing short-form owner/repo references to full
|
|
1276
|
+
* GitHub HTTPS URLs and injecting GITHUB_TOKEN when available.
|
|
1277
|
+
* @param {string} url - The repository URL or short-form (e.g. "owner/repo" or full HTTPS URL).
|
|
1278
|
+
* @returns {string} The resolved (and optionally authenticated) HTTPS URL.
|
|
1254
1279
|
* @memberof UnderpostRepository
|
|
1255
1280
|
*/
|
|
1256
1281
|
resolveAuthUrl(url) {
|
|
@@ -1268,7 +1293,14 @@ Prevent build private config repo.`,
|
|
|
1268
1293
|
}
|
|
1269
1294
|
return normalized;
|
|
1270
1295
|
},
|
|
1271
|
-
|
|
1296
|
+
/**
|
|
1297
|
+
* Checks whether a remote Git repository URL is reachable.
|
|
1298
|
+
* Uses `git ls-remote` with `|| true` so the process always exits 0.
|
|
1299
|
+
* Injects `GITHUB_TOKEN` into GitHub HTTPS URLs when available.
|
|
1300
|
+
* @param {string} url - Full HTTPS clone URL to test (e.g. "https://github.com/org/repo.git").
|
|
1301
|
+
* @returns {boolean} `true` when the remote responded with at least one ref hash.
|
|
1302
|
+
* @memberof UnderpostRepository
|
|
1303
|
+
*/
|
|
1272
1304
|
isRemoteRepo(url) {
|
|
1273
1305
|
if (!url) return false;
|
|
1274
1306
|
const authUrl = Underpost.repo.resolveAuthUrl(url);
|
|
@@ -1282,6 +1314,14 @@ Prevent build private config repo.`,
|
|
|
1282
1314
|
return typeof raw === 'string' && /^[0-9a-f]{40}\t/m.test(raw);
|
|
1283
1315
|
},
|
|
1284
1316
|
|
|
1317
|
+
/**
|
|
1318
|
+
* Returns metadata about unpushed commits in a git repository.
|
|
1319
|
+
* Fetches from origin, then counts commits ahead of the remote branch.
|
|
1320
|
+
* @param {string} [repoPath='.'] - Path to the git repository.
|
|
1321
|
+
* @param {number} [fallback=1] - Value to return as `count` when no unpushed commits are detected.
|
|
1322
|
+
* @returns {{ count: number, branch: string, hasUnpushed: boolean }} Unpush metadata.
|
|
1323
|
+
* @memberof UnderpostRepository
|
|
1324
|
+
*/
|
|
1285
1325
|
getUnpushedCount(repoPath = '.', fallback = 1) {
|
|
1286
1326
|
const branch = shellExec(`cd ${repoPath} && git branch --show-current`, {
|
|
1287
1327
|
stdout: true,
|
|
@@ -1321,19 +1361,6 @@ Prevent build private config repo.`,
|
|
|
1321
1361
|
.trim()
|
|
1322
1362
|
.replaceAll('] - ', '] ');
|
|
1323
1363
|
},
|
|
1324
|
-
|
|
1325
|
-
/**
|
|
1326
|
-
* Manages a cron-backup Git repository: clone, pull, commit, or push.
|
|
1327
|
-
* Resolves the repository path as `../<repoName>` relative to the CWD.
|
|
1328
|
-
* Requires the `GITHUB_USERNAME` environment variable to be set.
|
|
1329
|
-
* @param {object} params
|
|
1330
|
-
* @param {string} params.repoName - Repository name (e.g. `engine-cyberia-cron-backups`).
|
|
1331
|
-
* @param {'clone'|'pull'|'commit'|'push'} params.operation - Git operation to perform.
|
|
1332
|
-
* @param {string} [params.message=''] - Commit message (used by the `commit` operation).
|
|
1333
|
-
* @param {boolean} [params.forceClone=false] - Remove existing clone before re-cloning.
|
|
1334
|
-
* @returns {boolean} `true` on success, `false` if GITHUB_USERNAME is unset or on error.
|
|
1335
|
-
* @memberof UnderpostRepository
|
|
1336
|
-
*/
|
|
1337
1364
|
/**
|
|
1338
1365
|
* Initializes a git repository at the given path and configures user identity
|
|
1339
1366
|
* from environment variables (`GITHUB_USERNAME` / `GITHUB_EMAIL`).
|
|
@@ -1366,7 +1393,18 @@ Prevent build private config repo.`,
|
|
|
1366
1393
|
}
|
|
1367
1394
|
}
|
|
1368
1395
|
},
|
|
1369
|
-
|
|
1396
|
+
/**
|
|
1397
|
+
* Manages a cron-backup Git repository: clone, pull, commit, or push.
|
|
1398
|
+
* Resolves the repository path as `../<repoName>` relative to the CWD.
|
|
1399
|
+
* Requires the `GITHUB_USERNAME` environment variable to be set.
|
|
1400
|
+
* @param {object} params
|
|
1401
|
+
* @param {string} params.repoName - Repository name (e.g. `engine-cyberia-cron-backups`).
|
|
1402
|
+
* @param {'clone'|'pull'|'commit'|'push'} params.operation - Git operation to perform.
|
|
1403
|
+
* @param {string} [params.message=''] - Commit message (used by the `commit` operation).
|
|
1404
|
+
* @param {boolean} [params.forceClone=false] - Remove existing clone before re-cloning.
|
|
1405
|
+
* @returns {boolean} `true` on success, `false` if GITHUB_USERNAME is unset or on error.
|
|
1406
|
+
* @memberof UnderpostRepository
|
|
1407
|
+
*/
|
|
1370
1408
|
manageBackupRepo({ repoName, operation, message = '', forceClone = false }) {
|
|
1371
1409
|
try {
|
|
1372
1410
|
const username = process.env.GITHUB_USERNAME;
|