cyberia 2.8.885
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 +15 -0
- package/.env.development +45 -0
- package/.env.production +50 -0
- package/.env.test +45 -0
- package/.github/workflows/engine-cyberia.cd.yml +31 -0
- package/.github/workflows/engine-cyberia.ci.yml +60 -0
- package/.github/workflows/ghpkg.ci.yml +87 -0
- package/.github/workflows/npmpkg.ci.yml +72 -0
- package/.github/workflows/publish.ci.yml +84 -0
- package/.github/workflows/publish.cyberia.ci.yml +84 -0
- package/.github/workflows/pwa-microservices-template-page.cd.yml +72 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +33 -0
- package/.github/workflows/release.cd.yml +37 -0
- package/.nycrc +9 -0
- package/.prettierignore +13 -0
- package/.prettierrc +9 -0
- package/.vscode/extensions.json +51 -0
- package/.vscode/settings.json +87 -0
- package/AUTHORS.md +21 -0
- package/CHANGELOG.md +205 -0
- package/Dockerfile +28 -0
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/bin/build.js +209 -0
- package/bin/cron.js +47 -0
- package/bin/cyberia.js +145 -0
- package/bin/db.js +199 -0
- package/bin/deploy.js +1293 -0
- package/bin/file.js +197 -0
- package/bin/hwt.js +49 -0
- package/bin/index.js +145 -0
- package/bin/ssl.js +63 -0
- package/bin/util.js +80 -0
- package/bin/vs.js +74 -0
- package/cli.md +714 -0
- package/conf.js +204 -0
- package/deployment.yaml +138 -0
- package/jsconfig.json +7 -0
- package/jsdoc.json +32 -0
- package/manifests/deployment/adminer/deployment.yaml +32 -0
- package/manifests/deployment/adminer/kustomization.yaml +7 -0
- package/manifests/deployment/adminer/service.yaml +13 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +167 -0
- package/manifests/deployment/dd-default-development/proxy.yaml +46 -0
- package/manifests/deployment/dd-test-development/deployment.yaml +174 -0
- package/manifests/deployment/dd-test-development/proxy.yaml +51 -0
- package/manifests/deployment/fastapi/backend-deployment.yml +120 -0
- package/manifests/deployment/fastapi/backend-service.yml +19 -0
- package/manifests/deployment/fastapi/frontend-deployment.yml +54 -0
- package/manifests/deployment/fastapi/frontend-service.yml +15 -0
- package/manifests/deployment/fastapi/initial_data.sh +56 -0
- package/manifests/deployment/kafka/deployment.yaml +69 -0
- package/manifests/deployment/mongo-express/deployment.yaml +60 -0
- package/manifests/deployment/phpmyadmin/deployment.yaml +54 -0
- package/manifests/deployment/spark/spark-pi-py.yaml +21 -0
- package/manifests/deployment/tensorflow/tf-gpu-test.yaml +65 -0
- package/manifests/envoy-service-nodeport.yaml +23 -0
- package/manifests/grafana/deployment.yaml +57 -0
- package/manifests/grafana/kustomization.yaml +7 -0
- package/manifests/grafana/pvc.yaml +12 -0
- package/manifests/grafana/service.yaml +14 -0
- package/manifests/kind-config-dev.yaml +12 -0
- package/manifests/kind-config.yaml +12 -0
- package/manifests/kubeadm-calico-config.yaml +119 -0
- package/manifests/kubelet-config.yaml +65 -0
- package/manifests/letsencrypt-prod.yaml +15 -0
- package/manifests/lxd/lxd-admin-profile.yaml +17 -0
- package/manifests/lxd/lxd-preseed.yaml +30 -0
- package/manifests/lxd/underpost-setup.sh +163 -0
- package/manifests/mariadb/config.yaml +10 -0
- package/manifests/mariadb/kustomization.yaml +9 -0
- package/manifests/mariadb/pv.yaml +12 -0
- package/manifests/mariadb/pvc.yaml +10 -0
- package/manifests/mariadb/secret.yaml +8 -0
- package/manifests/mariadb/service.yaml +10 -0
- package/manifests/mariadb/statefulset.yaml +56 -0
- package/manifests/mariadb/storage-class.yaml +10 -0
- package/manifests/mongodb/backup-access.yaml +16 -0
- package/manifests/mongodb/backup-cronjob.yaml +42 -0
- package/manifests/mongodb/backup-pv-pvc.yaml +22 -0
- package/manifests/mongodb/configmap.yaml +26 -0
- package/manifests/mongodb/headless-service.yaml +10 -0
- package/manifests/mongodb/kustomization.yaml +11 -0
- package/manifests/mongodb/pv-pvc.yaml +23 -0
- package/manifests/mongodb/statefulset.yaml +126 -0
- package/manifests/mongodb/storage-class.yaml +9 -0
- package/manifests/mongodb-4.4/kustomization.yaml +7 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +23 -0
- package/manifests/mongodb-4.4/service-deployment.yaml +63 -0
- package/manifests/mysql/kustomization.yaml +7 -0
- package/manifests/mysql/pv-pvc.yaml +27 -0
- package/manifests/mysql/statefulset.yaml +55 -0
- package/manifests/postgresql/configmap.yaml +9 -0
- package/manifests/postgresql/kustomization.yaml +10 -0
- package/manifests/postgresql/pv.yaml +15 -0
- package/manifests/postgresql/pvc.yaml +13 -0
- package/manifests/postgresql/service.yaml +10 -0
- package/manifests/postgresql/statefulset.yaml +37 -0
- package/manifests/prometheus/deployment.yaml +82 -0
- package/manifests/valkey/kustomization.yaml +7 -0
- package/manifests/valkey/service.yaml +11 -0
- package/manifests/valkey/statefulset.yaml +38 -0
- package/nodemon.json +6 -0
- package/package.json +118 -0
- package/proxy.yaml +35 -0
- package/scripts/device-scan.sh +43 -0
- package/scripts/gpu-diag.sh +19 -0
- package/scripts/maas-setup.sh +120 -0
- package/scripts/nat-iptables.sh +26 -0
- package/scripts/nvim.sh +91 -0
- package/scripts/snap-clean.sh +26 -0
- package/scripts/ssh-cluster-info.sh +14 -0
- package/scripts/ssl.sh +164 -0
- package/src/api/blockchain/blockchain.controller.js +51 -0
- package/src/api/blockchain/blockchain.model.js +90 -0
- package/src/api/blockchain/blockchain.router.js +21 -0
- package/src/api/blockchain/blockchain.service.js +24 -0
- package/src/api/core/core.controller.js +69 -0
- package/src/api/core/core.model.js +11 -0
- package/src/api/core/core.router.js +24 -0
- package/src/api/core/core.service.js +35 -0
- package/src/api/crypto/crypto.controller.js +51 -0
- package/src/api/crypto/crypto.model.js +23 -0
- package/src/api/crypto/crypto.router.js +20 -0
- package/src/api/crypto/crypto.service.js +64 -0
- package/src/api/default/default.controller.js +74 -0
- package/src/api/default/default.model.js +20 -0
- package/src/api/default/default.router.js +27 -0
- package/src/api/default/default.service.js +40 -0
- package/src/api/document/document.controller.js +66 -0
- package/src/api/document/document.model.js +51 -0
- package/src/api/document/document.router.js +24 -0
- package/src/api/document/document.service.js +133 -0
- package/src/api/file/file.controller.js +67 -0
- package/src/api/file/file.model.js +19 -0
- package/src/api/file/file.router.js +22 -0
- package/src/api/file/file.service.js +100 -0
- package/src/api/instance/instance.controller.js +69 -0
- package/src/api/instance/instance.model.js +40 -0
- package/src/api/instance/instance.router.js +34 -0
- package/src/api/instance/instance.service.js +70 -0
- package/src/api/ipfs/ipfs.controller.js +51 -0
- package/src/api/ipfs/ipfs.model.js +17 -0
- package/src/api/ipfs/ipfs.router.js +20 -0
- package/src/api/ipfs/ipfs.service.js +25 -0
- package/src/api/object-layer/README.md +85 -0
- package/src/api/object-layer/object-layer.controller.js +69 -0
- package/src/api/object-layer/object-layer.model.js +181 -0
- package/src/api/object-layer/object-layer.router.js +29 -0
- package/src/api/object-layer/object-layer.service.js +49 -0
- package/src/api/test/test.controller.js +59 -0
- package/src/api/test/test.model.js +14 -0
- package/src/api/test/test.router.js +21 -0
- package/src/api/test/test.service.js +35 -0
- package/src/api/user/postman_collection.json +216 -0
- package/src/api/user/user.build.js +16 -0
- package/src/api/user/user.controller.js +35 -0
- package/src/api/user/user.model.js +100 -0
- package/src/api/user/user.router.js +400 -0
- package/src/api/user/user.service.js +500 -0
- package/src/api.js +23 -0
- package/src/cli/baremetal.js +1310 -0
- package/src/cli/cloud-init.js +548 -0
- package/src/cli/cluster.js +834 -0
- package/src/cli/cron.js +95 -0
- package/src/cli/db.js +414 -0
- package/src/cli/deploy.js +661 -0
- package/src/cli/env.js +101 -0
- package/src/cli/fs.js +256 -0
- package/src/cli/image.js +156 -0
- package/src/cli/index.js +436 -0
- package/src/cli/lxd.js +402 -0
- package/src/cli/monitor.js +260 -0
- package/src/cli/repository.js +274 -0
- package/src/cli/run.js +728 -0
- package/src/cli/script.js +85 -0
- package/src/cli/secrets.js +71 -0
- package/src/cli/ssh.js +46 -0
- package/src/cli/test.js +159 -0
- package/src/client/Cyberia.index.js +50 -0
- package/src/client/CyberiaAdmin.index.js +34 -0
- package/src/client/CyberiaPortal.index.js +36 -0
- package/src/client/Default.index.js +84 -0
- package/src/client/components/core/404.js +20 -0
- package/src/client/components/core/500.js +20 -0
- package/src/client/components/core/Account.js +326 -0
- package/src/client/components/core/AgGrid.js +191 -0
- package/src/client/components/core/Alert.js +77 -0
- package/src/client/components/core/Auth.js +342 -0
- package/src/client/components/core/Badge.js +32 -0
- package/src/client/components/core/Blockchain.js +41 -0
- package/src/client/components/core/Blog.js +9 -0
- package/src/client/components/core/BtnIcon.js +111 -0
- package/src/client/components/core/CalendarCore.js +464 -0
- package/src/client/components/core/Chat.js +64 -0
- package/src/client/components/core/ColorPalette.js +5267 -0
- package/src/client/components/core/CommonJs.js +1010 -0
- package/src/client/components/core/Content.js +196 -0
- package/src/client/components/core/Css.js +1099 -0
- package/src/client/components/core/CssCore.js +882 -0
- package/src/client/components/core/D3Chart.js +44 -0
- package/src/client/components/core/Docs.js +376 -0
- package/src/client/components/core/DropDown.js +223 -0
- package/src/client/components/core/EventsUI.js +133 -0
- package/src/client/components/core/FileExplorer.js +707 -0
- package/src/client/components/core/FullScreen.js +36 -0
- package/src/client/components/core/Input.js +383 -0
- package/src/client/components/core/JoyStick.js +80 -0
- package/src/client/components/core/Keyboard.js +73 -0
- package/src/client/components/core/LoadingAnimation.js +159 -0
- package/src/client/components/core/LogIn.js +190 -0
- package/src/client/components/core/LogOut.js +63 -0
- package/src/client/components/core/Logger.js +29 -0
- package/src/client/components/core/Modal.js +2494 -0
- package/src/client/components/core/NotificationManager.js +84 -0
- package/src/client/components/core/ObjectLayerEngine.js +1229 -0
- package/src/client/components/core/ObjectLayerEngineModal.js +443 -0
- package/src/client/components/core/Pagination.js +207 -0
- package/src/client/components/core/Panel.js +772 -0
- package/src/client/components/core/PanelForm.js +627 -0
- package/src/client/components/core/Polyhedron.js +162 -0
- package/src/client/components/core/Recover.js +207 -0
- package/src/client/components/core/Responsive.js +82 -0
- package/src/client/components/core/RichText.js +43 -0
- package/src/client/components/core/Router.js +317 -0
- package/src/client/components/core/Scroll.js +76 -0
- package/src/client/components/core/SignUp.js +125 -0
- package/src/client/components/core/SocketIo.js +74 -0
- package/src/client/components/core/Stream.js +113 -0
- package/src/client/components/core/ToggleSwitch.js +101 -0
- package/src/client/components/core/ToolTip.js +90 -0
- package/src/client/components/core/Translate.js +522 -0
- package/src/client/components/core/Validator.js +115 -0
- package/src/client/components/core/VanillaJs.js +423 -0
- package/src/client/components/core/Wallet.js +106 -0
- package/src/client/components/core/WebComponent.js +44 -0
- package/src/client/components/core/Webhook.js +25 -0
- package/src/client/components/core/Worker.js +371 -0
- package/src/client/components/core/windowGetDimensions.js +269 -0
- package/src/client/components/cyberia/BagCyberia.js +1253 -0
- package/src/client/components/cyberia/BiomeCyberia.js +130 -0
- package/src/client/components/cyberia/CharacterCyberia.js +321 -0
- package/src/client/components/cyberia/CommonCyberia.js +1834 -0
- package/src/client/components/cyberia/CssCyberia.js +816 -0
- package/src/client/components/cyberia/ElementPreviewCyberia.js +183 -0
- package/src/client/components/cyberia/ElementsCyberia.js +146 -0
- package/src/client/components/cyberia/InteractionPanelCyberia.js +1043 -0
- package/src/client/components/cyberia/JoyStickCyberia.js +53 -0
- package/src/client/components/cyberia/LogInCyberia.js +68 -0
- package/src/client/components/cyberia/LogOutCyberia.js +24 -0
- package/src/client/components/cyberia/MainUserCyberia.js +424 -0
- package/src/client/components/cyberia/MapCyberia.js +160 -0
- package/src/client/components/cyberia/MatrixCyberia.js +147 -0
- package/src/client/components/cyberia/MenuCyberia.js +575 -0
- package/src/client/components/cyberia/PixiCyberia.js +1639 -0
- package/src/client/components/cyberia/PointAndClickMovementCyberia.js +146 -0
- package/src/client/components/cyberia/QuestCyberia.js +1420 -0
- package/src/client/components/cyberia/RoutesCyberia.js +47 -0
- package/src/client/components/cyberia/SettingsCyberia.js +16 -0
- package/src/client/components/cyberia/SignUpCyberia.js +14 -0
- package/src/client/components/cyberia/SkillCyberia.js +124 -0
- package/src/client/components/cyberia/SocketIoCyberia.js +211 -0
- package/src/client/components/cyberia/TileCyberia.js +685 -0
- package/src/client/components/cyberia/TranslateCyberia.js +96 -0
- package/src/client/components/cyberia/UniverseCyberia.js +14 -0
- package/src/client/components/cyberia/WebhookCyberia.js +13 -0
- package/src/client/components/cyberia/WikiCyberia.js +144 -0
- package/src/client/components/cyberia/WorldCyberia.js +680 -0
- package/src/client/components/cyberia-admin/BiomeCyberiaAdmin.js +978 -0
- package/src/client/components/cyberia-admin/CommonCyberiaAdmin.js +29 -0
- package/src/client/components/cyberia-admin/CssCyberiaAdmin.js +15 -0
- package/src/client/components/cyberia-admin/ElementsCyberiaAdmin.js +38 -0
- package/src/client/components/cyberia-admin/InstanceEngineCyberiaAdmin.js +180 -0
- package/src/client/components/cyberia-admin/LogInCyberiaAdmin.js +34 -0
- package/src/client/components/cyberia-admin/LogOutCyberiaAdmin.js +24 -0
- package/src/client/components/cyberia-admin/MenuCyberiaAdmin.js +660 -0
- package/src/client/components/cyberia-admin/RoutesCyberiaAdmin.js +57 -0
- package/src/client/components/cyberia-admin/ServerCyberiaAdmin.js +129 -0
- package/src/client/components/cyberia-admin/SettingsCyberiaAdmin.js +16 -0
- package/src/client/components/cyberia-admin/SignUpCyberiaAdmin.js +11 -0
- package/src/client/components/cyberia-admin/SocketIoCyberiaAdmin.js +53 -0
- package/src/client/components/cyberia-admin/TranslateCyberiaAdmin.js +7 -0
- package/src/client/components/cyberia-biome/CityCyberiaBiome.js +209 -0
- package/src/client/components/cyberia-biome/CityInteriorCyberiaBiome.js +253 -0
- package/src/client/components/cyberia-biome/ColorChaosCyberiaBiome.js +26 -0
- package/src/client/components/cyberia-biome/ForestCyberiaBiome.js +191 -0
- package/src/client/components/cyberia-biome/GridBaseCyberiaBiome.js +364 -0
- package/src/client/components/cyberia-biome/SeedCityCyberiaBiome.js +347 -0
- package/src/client/components/cyberia-biome/ShopCyberiaBiome.js +12 -0
- package/src/client/components/cyberia-biome/SpaceCyberiaBiome.js +58 -0
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +29 -0
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +132 -0
- package/src/client/components/cyberia-portal/ElementsCyberiaPortal.js +38 -0
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +18 -0
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +12 -0
- package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +487 -0
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +45 -0
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +136 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +11 -0
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +52 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +12 -0
- package/src/client/components/default/CommonDefault.js +29 -0
- package/src/client/components/default/CssDefault.js +27 -0
- package/src/client/components/default/ElementsDefault.js +38 -0
- package/src/client/components/default/LogInDefault.js +14 -0
- package/src/client/components/default/LogOutDefault.js +10 -0
- package/src/client/components/default/MenuDefault.js +743 -0
- package/src/client/components/default/RoutesDefault.js +48 -0
- package/src/client/components/default/SettingsDefault.js +16 -0
- package/src/client/components/default/SignUpDefault.js +9 -0
- package/src/client/components/default/SocketIoDefault.js +54 -0
- package/src/client/components/default/TranslateDefault.js +7 -0
- 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-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152-precomposed.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-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76-precomposed.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/dark.jpg +0 -0
- package/src/client/public/default/assets/background/dark.svg +557 -0
- package/src/client/public/default/assets/background/white.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/default/assets/logo/base-icon.png +0 -0
- package/src/client/public/default/assets/logo/underpost.gif +0 -0
- package/src/client/public/default/assets/mailer/api-user-check.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-default-avatar.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-invalid-token.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-recover.png +0 -0
- package/src/client/public/default/browserconfig.xml +12 -0
- 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 +69 -0
- 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/plantuml/client-conf.svg +1 -0
- package/src/client/public/default/plantuml/client-schema.svg +1 -0
- package/src/client/public/default/plantuml/cron-conf.svg +1 -0
- package/src/client/public/default/plantuml/cron-schema.svg +1 -0
- package/src/client/public/default/plantuml/server-conf.svg +1 -0
- package/src/client/public/default/plantuml/server-schema.svg +1 -0
- package/src/client/public/default/plantuml/ssr-conf.svg +1 -0
- package/src/client/public/default/plantuml/ssr-schema.svg +1 -0
- package/src/client/public/default/safari-pinned-tab.svg +24 -0
- package/src/client/public/default/site.webmanifest +69 -0
- package/src/client/public/default/sitemap +148 -0
- package/src/client/public/default/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +9 -0
- package/src/client/public/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +148 -0
- package/src/client/public/test/favicon.ico +0 -0
- package/src/client/public/test/sitemap +148 -0
- package/src/client/services/blockchain/blockchain.service.js +73 -0
- package/src/client/services/core/core.service.js +165 -0
- package/src/client/services/crypto/crypto.service.js +73 -0
- package/src/client/services/default/default.management.js +450 -0
- package/src/client/services/default/default.service.js +98 -0
- package/src/client/services/document/document.service.js +97 -0
- package/src/client/services/file/file.service.js +72 -0
- package/src/client/services/instance/instance.management.js +78 -0
- package/src/client/services/instance/instance.service.js +97 -0
- package/src/client/services/ipfs/ipfs.service.js +73 -0
- package/src/client/services/object-layer/object-layer.service.js +93 -0
- package/src/client/services/test/test.service.js +73 -0
- package/src/client/services/user/user.management.js +56 -0
- package/src/client/services/user/user.service.js +108 -0
- package/src/client/ssr/Render.js +237 -0
- package/src/client/ssr/body/404.js +73 -0
- package/src/client/ssr/body/500.js +72 -0
- package/src/client/ssr/body/CacheControl.js +114 -0
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +90 -0
- package/src/client/ssr/body/CyberiaSplashScreenLore.js +424 -0
- package/src/client/ssr/body/DefaultSplashScreen.js +90 -0
- package/src/client/ssr/email/DefaultRecoverEmail.js +21 -0
- package/src/client/ssr/email/DefaultVerifyEmail.js +17 -0
- package/src/client/ssr/head/Css.js +241 -0
- package/src/client/ssr/head/CyberiaAdminScripts.js +6 -0
- package/src/client/ssr/head/CyberiaPortalScripts.js +6 -0
- package/src/client/ssr/head/CyberiaScripts.js +6 -0
- package/src/client/ssr/head/DefaultScripts.js +6 -0
- package/src/client/ssr/head/Microdata.js +11 -0
- package/src/client/ssr/head/Production.js +1 -0
- package/src/client/ssr/head/Pwa.js +146 -0
- package/src/client/ssr/head/Seo.js +15 -0
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +21 -0
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +17 -0
- package/src/client/ssr/offline/Maintenance.js +63 -0
- package/src/client/ssr/offline/NoNetworkConnection.js +67 -0
- package/src/client/ssr/pages/404.js +12 -0
- package/src/client/ssr/pages/500.js +12 -0
- package/src/client/ssr/pages/Test.js +198 -0
- package/src/client/ssr/pages/maintenance.js +14 -0
- package/src/client/ssr/pages/offline.js +21 -0
- package/src/client/sw/default.sw.js +108 -0
- package/src/client/sw/template.sw.js +84 -0
- package/src/client.build.js +22 -0
- package/src/client.dev.js +24 -0
- package/src/db/DataBaseProvider.js +98 -0
- package/src/db/mariadb/MariaDB.js +66 -0
- package/src/db/mongo/MongooseDB.js +70 -0
- package/src/index.js +198 -0
- package/src/mailer/EmailRender.js +116 -0
- package/src/mailer/MailerProvider.js +213 -0
- package/src/monitor.js +24 -0
- package/src/proxy.js +22 -0
- package/src/runtime/express/Express.js +256 -0
- package/src/runtime/lampp/Dockerfile +50 -0
- package/src/runtime/lampp/Lampp.js +343 -0
- package/src/server/auth.js +689 -0
- package/src/server/backup.js +96 -0
- package/src/server/client-build-docs.js +205 -0
- package/src/server/client-build-live.js +109 -0
- package/src/server/client-build.js +690 -0
- package/src/server/client-dev-server.js +87 -0
- package/src/server/client-formatted.js +87 -0
- package/src/server/client-icons.js +108 -0
- package/src/server/conf.js +1071 -0
- package/src/server/crypto.js +210 -0
- package/src/server/dns.js +276 -0
- package/src/server/downloader.js +74 -0
- package/src/server/json-schema.js +77 -0
- package/src/server/logger.js +197 -0
- package/src/server/network.js +72 -0
- package/src/server/object-layer.js +294 -0
- package/src/server/peer.js +69 -0
- package/src/server/process.js +171 -0
- package/src/server/proxy.js +110 -0
- package/src/server/runtime.js +170 -0
- package/src/server/ssr.js +127 -0
- package/src/server/start.js +161 -0
- package/src/server/tls.js +251 -0
- package/src/server/valkey.js +293 -0
- package/src/server.js +25 -0
- package/src/ws/IoInterface.js +139 -0
- package/src/ws/IoServer.js +88 -0
- package/src/ws/core/channels/core.ws.chat.js +23 -0
- package/src/ws/core/channels/core.ws.mailer.js +35 -0
- package/src/ws/core/channels/core.ws.stream.js +31 -0
- package/src/ws/core/core.ws.connection.js +62 -0
- package/src/ws/core/core.ws.emit.js +53 -0
- package/src/ws/core/core.ws.server.js +76 -0
- package/src/ws/core/management/core.ws.chat.js +8 -0
- package/src/ws/core/management/core.ws.mailer.js +16 -0
- package/src/ws/core/management/core.ws.stream.js +8 -0
- package/src/ws/cyberia/channels/cyberia.ws.bot.js +56 -0
- package/src/ws/cyberia/channels/cyberia.ws.skill.js +51 -0
- package/src/ws/cyberia/channels/cyberia.ws.user.js +437 -0
- package/src/ws/cyberia/cyberia.ws.connection.js +36 -0
- package/src/ws/cyberia/cyberia.ws.emit.js +14 -0
- package/src/ws/cyberia/cyberia.ws.server.js +67 -0
- package/src/ws/cyberia/management/cyberia.ws.bot.js +669 -0
- package/src/ws/cyberia/management/cyberia.ws.skill.js +441 -0
- package/src/ws/cyberia/management/cyberia.ws.user.js +188 -0
- package/src/ws/default/channels/default.ws.main.js +16 -0
- package/src/ws/default/default.ws.connection.js +22 -0
- package/src/ws/default/default.ws.emit.js +14 -0
- package/src/ws/default/default.ws.server.js +20 -0
- package/src/ws/default/management/default.ws.main.js +8 -0
- package/test/api.test.js +53 -0
- package/test/crypto.test.js +117 -0
package/src/cli/run.js
ADDED
|
@@ -0,0 +1,728 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description The main entry point for the Underpost CLI applications.
|
|
3
|
+
* @module src/cli/run.js
|
|
4
|
+
* @namespace UnderpostRun
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { daemonProcess, getTerminalPid, openTerminal, pbcopy, shellCd, shellExec } from '../server/process.js';
|
|
8
|
+
import read from 'read';
|
|
9
|
+
import { getNpmRootPath } from '../server/conf.js';
|
|
10
|
+
import { actionInitLog, loggerFactory } from '../server/logger.js';
|
|
11
|
+
import UnderpostTest from './test.js';
|
|
12
|
+
import fs from 'fs-extra';
|
|
13
|
+
import { range, setPad, timer } from '../client/components/core/CommonJs.js';
|
|
14
|
+
import UnderpostDeploy from './deploy.js';
|
|
15
|
+
import UnderpostRootEnv from './env.js';
|
|
16
|
+
import UnderpostRepository from './repository.js';
|
|
17
|
+
import os from 'os';
|
|
18
|
+
|
|
19
|
+
const logger = loggerFactory(import.meta);
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @class UnderpostRun
|
|
23
|
+
* @description Manages the execution of various CLI commands and operations.
|
|
24
|
+
* This class provides a set of static methods to perform different tasks
|
|
25
|
+
* such as running tests, deploying applications, managing environment variables,
|
|
26
|
+
* and more. It also includes a default option configuration and a collection of
|
|
27
|
+
* runners for executing specific commands.
|
|
28
|
+
* @memberof UnderpostRun
|
|
29
|
+
*/
|
|
30
|
+
class UnderpostRun {
|
|
31
|
+
/**
|
|
32
|
+
* @static
|
|
33
|
+
* @description Default options for the UnderpostRun class.
|
|
34
|
+
* @type {Object}
|
|
35
|
+
* @property {boolean} dev - Whether to run in development mode.
|
|
36
|
+
* @property {string} podName - The name of the pod to run.
|
|
37
|
+
* @property {string} volumeHostPath - The host path for the volume.
|
|
38
|
+
* @property {string} volumeMountPath - The mount path for the volume.
|
|
39
|
+
* @property {string} imageName - The name of the image to run.
|
|
40
|
+
* @property {string} containerName - The name of the container to run.
|
|
41
|
+
* @property {string} namespace - The namespace to run in.
|
|
42
|
+
* @property {boolean} build - Whether to build the image.
|
|
43
|
+
* @property {number} replicas - The number of replicas to run.
|
|
44
|
+
* @property {boolean} k3s - Whether to run in k3s mode.
|
|
45
|
+
* @property {boolean} kubeadm - Whether to run in kubeadm mode.
|
|
46
|
+
* @memberof UnderpostRun
|
|
47
|
+
*/
|
|
48
|
+
static DEFAULT_OPTION = {
|
|
49
|
+
dev: false,
|
|
50
|
+
podName: '',
|
|
51
|
+
volumeHostPath: '',
|
|
52
|
+
volumeMountPath: '',
|
|
53
|
+
imageName: '',
|
|
54
|
+
containerName: '',
|
|
55
|
+
namespace: '',
|
|
56
|
+
build: false,
|
|
57
|
+
replicas: 1,
|
|
58
|
+
k3s: false,
|
|
59
|
+
kubeadm: false,
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* @static
|
|
63
|
+
* @description Collection of runners for executing specific commands.
|
|
64
|
+
* @type {Object}
|
|
65
|
+
* @memberof UnderpostRun
|
|
66
|
+
*/
|
|
67
|
+
static RUNNERS = {
|
|
68
|
+
/**
|
|
69
|
+
* @method spark-template
|
|
70
|
+
* @description Creates a new Spark template project.
|
|
71
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
72
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
73
|
+
* @memberof UnderpostRun
|
|
74
|
+
*/
|
|
75
|
+
'spark-template': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
76
|
+
const dir = '/home/dd/spark-template';
|
|
77
|
+
shellExec(`sudo rm -rf ${dir}`);
|
|
78
|
+
shellCd('/home/dd');
|
|
79
|
+
|
|
80
|
+
// pbcopy(`cd /home/dd && sbt new ${process.env.GITHUB_USERNAME}/spark-template.g8`);
|
|
81
|
+
// await read({ prompt: 'Command copy to clipboard, press enter to continue.\n' });
|
|
82
|
+
shellExec(`cd /home/dd && sbt new ${process.env.GITHUB_USERNAME}/spark-template.g8 '--name=spark-template'`);
|
|
83
|
+
|
|
84
|
+
shellCd(dir);
|
|
85
|
+
|
|
86
|
+
shellExec(`git init && git add . && git commit -m "Base implementation"`);
|
|
87
|
+
shellExec(`chmod +x ./replace_params.sh`);
|
|
88
|
+
shellExec(`chmod +x ./build.sh`);
|
|
89
|
+
|
|
90
|
+
shellExec(`./replace_params.sh`);
|
|
91
|
+
shellExec(`./build.sh`);
|
|
92
|
+
|
|
93
|
+
shellCd('/home/dd/engine');
|
|
94
|
+
},
|
|
95
|
+
/**
|
|
96
|
+
* @method rmi
|
|
97
|
+
* @description Removes all podman images.
|
|
98
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
99
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
100
|
+
* @memberof UnderpostRun
|
|
101
|
+
*/
|
|
102
|
+
rmi: (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
103
|
+
shellExec(`podman rmi $(podman images -qa) --force`);
|
|
104
|
+
},
|
|
105
|
+
/**
|
|
106
|
+
* @method kill
|
|
107
|
+
* @description Kills a process by its port.
|
|
108
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
109
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
110
|
+
* @memberof UnderpostRun
|
|
111
|
+
*/
|
|
112
|
+
kill: (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
113
|
+
shellExec(`sudo kill -9 $(lsof -t -i:${path})`);
|
|
114
|
+
},
|
|
115
|
+
/**
|
|
116
|
+
* @method secret
|
|
117
|
+
* @description Creates a new secret from a file.
|
|
118
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
119
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
120
|
+
* @memberof UnderpostRun
|
|
121
|
+
*/
|
|
122
|
+
secret: (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
123
|
+
shellExec(
|
|
124
|
+
`underpost secret underpost --create-from-file ${
|
|
125
|
+
path ? path : `/home/dd/engine/engine-private/conf/dd-cron/.env.production`
|
|
126
|
+
}`,
|
|
127
|
+
);
|
|
128
|
+
},
|
|
129
|
+
/**
|
|
130
|
+
* @method underpost-config
|
|
131
|
+
* @description Creates a new configmap from a file.
|
|
132
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
133
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
134
|
+
* @memberof UnderpostRun
|
|
135
|
+
*/
|
|
136
|
+
'underpost-config': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
137
|
+
UnderpostDeploy.API.configMap(path ?? 'production');
|
|
138
|
+
},
|
|
139
|
+
/**
|
|
140
|
+
* @method gpu-env
|
|
141
|
+
* @description Creates a new configmap from a file.
|
|
142
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
143
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
144
|
+
* @memberof UnderpostRun
|
|
145
|
+
*/
|
|
146
|
+
'gpu-env': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
147
|
+
shellExec(
|
|
148
|
+
`node bin cluster --dev --reset && node bin cluster --dev --dedicated-gpu --kubeadm && kubectl get pods --all-namespaces -o wide -w`,
|
|
149
|
+
);
|
|
150
|
+
},
|
|
151
|
+
/**
|
|
152
|
+
* @method tf-gpu-test
|
|
153
|
+
* @description Creates a new configmap from a file.
|
|
154
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
155
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
156
|
+
* @memberof UnderpostRun
|
|
157
|
+
*/
|
|
158
|
+
'tf-gpu-test': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
159
|
+
const { underpostRoot } = options;
|
|
160
|
+
shellExec(`kubectl delete configmap tf-gpu-test-script`);
|
|
161
|
+
shellExec(`kubectl delete pod tf-gpu-test-pod`);
|
|
162
|
+
shellExec(`kubectl apply -f ${underpostRoot}/manifests/deployment/tensorflow/tf-gpu-test.yaml`);
|
|
163
|
+
},
|
|
164
|
+
/**
|
|
165
|
+
* @method dev-cluster
|
|
166
|
+
* @description Creates a new configmap from a file.
|
|
167
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
168
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
169
|
+
* @memberof UnderpostRun
|
|
170
|
+
*/
|
|
171
|
+
'dev-cluster': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
172
|
+
const baseCommand = options.dev ? 'node bin' : 'underpost';
|
|
173
|
+
shellExec(`${baseCommand} cluster${options.dev ? ' --dev' : ''} --reset`);
|
|
174
|
+
shellExec(`${baseCommand} cluster${options.dev ? ' --dev' : ''}`);
|
|
175
|
+
const mongoHosts = ['mongodb-0.mongodb-service'];
|
|
176
|
+
shellExec(
|
|
177
|
+
`${baseCommand} cluster${options.dev ? ' --dev' : ''} --mongodb --mongo-db-host ${mongoHosts.join(
|
|
178
|
+
',',
|
|
179
|
+
)} --pull-image`,
|
|
180
|
+
);
|
|
181
|
+
shellExec(`${baseCommand} cluster${options.dev ? ' --dev' : ''} --valkey --pull-image`);
|
|
182
|
+
shellExec(`${baseCommand} deploy --expose mongo`, { async: true });
|
|
183
|
+
shellExec(`${baseCommand} deploy --expose valkey`, { async: true });
|
|
184
|
+
{
|
|
185
|
+
const hostListenResult = UnderpostDeploy.API.etcHostFactory(mongoHosts);
|
|
186
|
+
logger.info(hostListenResult.renderHosts);
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
/**
|
|
190
|
+
* @method ssh-cluster-info
|
|
191
|
+
* @description Creates a new configmap from a file.
|
|
192
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
193
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
194
|
+
* @memberof UnderpostRun
|
|
195
|
+
*/
|
|
196
|
+
'ssh-cluster-info': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
197
|
+
const { underpostRoot } = options;
|
|
198
|
+
shellExec(`chmod +x ${underpostRoot}/scripts/ssh-cluster-info.sh`);
|
|
199
|
+
shellExec(`${underpostRoot}/scripts/ssh-cluster-info.sh`);
|
|
200
|
+
},
|
|
201
|
+
/**
|
|
202
|
+
* @method cyberia-ide
|
|
203
|
+
* @description Creates a new configmap from a file.
|
|
204
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
205
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
206
|
+
* @memberof UnderpostRun
|
|
207
|
+
*/
|
|
208
|
+
'cyberia-ide': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
209
|
+
const baseCommand = options.dev ? 'node bin' : 'underpost';
|
|
210
|
+
shellExec(`${baseCommand} run ide /home/dd/cyberia-server`);
|
|
211
|
+
shellExec(`${baseCommand} run ide /home/dd/cyberia-client`);
|
|
212
|
+
},
|
|
213
|
+
/**
|
|
214
|
+
* @method engine-ide
|
|
215
|
+
* @description Creates a new configmap from a file.
|
|
216
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
217
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
218
|
+
* @memberof UnderpostRun
|
|
219
|
+
*/
|
|
220
|
+
'engine-ide': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
221
|
+
const baseCommand = options.dev ? 'node bin' : 'underpost';
|
|
222
|
+
shellExec(`${baseCommand} run ide /home/dd/engine`);
|
|
223
|
+
shellExec(`${baseCommand} run ide /home/dd/engine/engine-private`);
|
|
224
|
+
},
|
|
225
|
+
/**
|
|
226
|
+
* @method template-deploy
|
|
227
|
+
* @description Creates a new configmap from a file.
|
|
228
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
229
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
230
|
+
* @memberof UnderpostRun
|
|
231
|
+
*/
|
|
232
|
+
'template-deploy': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
233
|
+
const baseCommand = options.dev || true ? 'node bin' : 'underpost';
|
|
234
|
+
shellExec(`${baseCommand} run clean`);
|
|
235
|
+
shellExec(`${baseCommand} push ./engine-private ${process.env.GITHUB_USERNAME}/engine-private`);
|
|
236
|
+
shellCd('/home/dd/engine');
|
|
237
|
+
shellExec(`git reset`);
|
|
238
|
+
shellExec(`${baseCommand} cmt . --empty ci package-pwa-microservices-template`);
|
|
239
|
+
shellExec(`${baseCommand} push . ${process.env.GITHUB_USERNAME}/engine`);
|
|
240
|
+
},
|
|
241
|
+
/**
|
|
242
|
+
* @method clean
|
|
243
|
+
* @description Creates a new configmap from a file.
|
|
244
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
245
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
246
|
+
* @memberof UnderpostRun
|
|
247
|
+
*/
|
|
248
|
+
clean: (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
249
|
+
shellCd(path ?? `/home/dd/engine`);
|
|
250
|
+
shellExec(`node bin/deploy clean-core-repo`);
|
|
251
|
+
},
|
|
252
|
+
/**
|
|
253
|
+
* @method pull
|
|
254
|
+
* @description Creates a new configmap from a file.
|
|
255
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
256
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
257
|
+
* @memberof UnderpostRun
|
|
258
|
+
*/
|
|
259
|
+
pull: (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
260
|
+
shellCd(`/home/dd/engine`);
|
|
261
|
+
shellExec(`node bin/deploy clean-core-repo`);
|
|
262
|
+
shellExec(`underpost pull . ${process.env.GITHUB_USERNAME}/engine`);
|
|
263
|
+
shellExec(`underpost pull ./engine-private ${process.env.GITHUB_USERNAME}/engine-private`);
|
|
264
|
+
},
|
|
265
|
+
/**
|
|
266
|
+
* @method release-deploy
|
|
267
|
+
* @description Creates a new configmap from a file.
|
|
268
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
269
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
270
|
+
* @memberof UnderpostRun
|
|
271
|
+
*/
|
|
272
|
+
'release-deploy': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
273
|
+
actionInitLog();
|
|
274
|
+
shellExec(`underpost --version`);
|
|
275
|
+
shellCd(`/home/dd/engine`);
|
|
276
|
+
for (const _deployId of fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',')) {
|
|
277
|
+
const deployId = _deployId.trim();
|
|
278
|
+
shellExec(`underpost run deploy ${deployId}`, { async: true });
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
/**
|
|
282
|
+
* @method ssh-deploy
|
|
283
|
+
* @description Creates a new configmap from a file.
|
|
284
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
285
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
286
|
+
* @memberof UnderpostRun
|
|
287
|
+
*/
|
|
288
|
+
'ssh-deploy': (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
289
|
+
actionInitLog();
|
|
290
|
+
const baseCommand = options.dev || true ? 'node bin' : 'underpost';
|
|
291
|
+
shellCd('/home/dd/engine');
|
|
292
|
+
shellExec(`git reset`);
|
|
293
|
+
shellExec(`${baseCommand} cmt . --empty cd ssh-${path}`);
|
|
294
|
+
shellExec(`${baseCommand} push . ${process.env.GITHUB_USERNAME}/engine`);
|
|
295
|
+
},
|
|
296
|
+
/**
|
|
297
|
+
* @method ide
|
|
298
|
+
* @description Creates a new configmap from a file.
|
|
299
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
300
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
301
|
+
* @memberof UnderpostRun
|
|
302
|
+
*/
|
|
303
|
+
ide: (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
304
|
+
const { underpostRoot } = options;
|
|
305
|
+
shellExec(`node ${underpostRoot}/bin/vs ${path}`);
|
|
306
|
+
},
|
|
307
|
+
/**
|
|
308
|
+
* @method sync
|
|
309
|
+
* @description Creates a new configmap from a file.
|
|
310
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
311
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
312
|
+
* @memberof UnderpostRun
|
|
313
|
+
*/
|
|
314
|
+
sync: (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
315
|
+
const env = options.dev ? 'development' : 'production';
|
|
316
|
+
const baseCommand = options.dev || true ? 'node bin' : 'underpost';
|
|
317
|
+
shellExec(`${baseCommand} run clean`);
|
|
318
|
+
const defaultPath = ['dd-default', 1, ``, ``, 'kind-control-plane'];
|
|
319
|
+
let [deployId, replicas, versions, image, node] = path ? path.split(',') : defaultPath;
|
|
320
|
+
deployId = deployId ?? defaultPath[0];
|
|
321
|
+
replicas = replicas ?? defaultPath[1];
|
|
322
|
+
versions = versions ?? defaultPath[2];
|
|
323
|
+
image = image ?? defaultPath[3];
|
|
324
|
+
node = node ?? defaultPath[4];
|
|
325
|
+
shellExec(
|
|
326
|
+
`${baseCommand} deploy --kubeadm --build-manifest --sync --info-router --replicas ${
|
|
327
|
+
replicas ?? 1
|
|
328
|
+
} --node ${node}${image ? ` --image ${image}` : ''}${
|
|
329
|
+
versions ? ` --versions ${versions.replaceAll('+', ',')}` : ''
|
|
330
|
+
} dd ${env}`,
|
|
331
|
+
);
|
|
332
|
+
if (!options.build) shellExec(`${baseCommand} deploy --kubeadm ${deployId} ${env}`);
|
|
333
|
+
},
|
|
334
|
+
/**
|
|
335
|
+
* @method ls-deployments
|
|
336
|
+
* @description Creates a new configmap from a file.
|
|
337
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
338
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
339
|
+
* @memberof UnderpostRun
|
|
340
|
+
*/
|
|
341
|
+
'ls-deployments': async (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
342
|
+
console.table(await UnderpostDeploy.API.get(path, 'deployments'));
|
|
343
|
+
},
|
|
344
|
+
/**
|
|
345
|
+
* @method monitor
|
|
346
|
+
* @description Creates a new configmap from a file.
|
|
347
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
348
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
349
|
+
* @memberof UnderpostRun
|
|
350
|
+
*/
|
|
351
|
+
monitor: (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
352
|
+
const pid = getTerminalPid();
|
|
353
|
+
logger.info('monitor pid', pid);
|
|
354
|
+
const checkPath = '/await';
|
|
355
|
+
const _monitor = async () => {
|
|
356
|
+
const result = UnderpostDeploy.API.existsContainerFile({ podName: path, path: checkPath });
|
|
357
|
+
logger.info('monitor', result);
|
|
358
|
+
if (result === true) {
|
|
359
|
+
switch (path) {
|
|
360
|
+
case 'tf-vae-test':
|
|
361
|
+
{
|
|
362
|
+
const nameSpace = 'default';
|
|
363
|
+
const podName = path;
|
|
364
|
+
const basePath = '/home/dd';
|
|
365
|
+
const scriptPath = '/site/en/tutorials/generative/cvae.py';
|
|
366
|
+
// shellExec(
|
|
367
|
+
// `sudo kubectl cp ${nameSpace}/${podName}:${basePath}/docs${scriptPath} ${basePath}/lab/src/${scriptPath
|
|
368
|
+
// .split('/')
|
|
369
|
+
// .pop()}`,
|
|
370
|
+
// );
|
|
371
|
+
// const file = fs.readFileSync(`${basePath}/lab/src/${scriptPath.split('/').pop()}`, 'utf8');
|
|
372
|
+
// fs.writeFileSync(
|
|
373
|
+
// `${basePath}/lab/src/${scriptPath.split('/').pop()}`,
|
|
374
|
+
// file.replace(
|
|
375
|
+
// `import time`,
|
|
376
|
+
// `import time
|
|
377
|
+
// print('=== SCRIPT UPDATE TEST ===')`,
|
|
378
|
+
// ),
|
|
379
|
+
// 'utf8',
|
|
380
|
+
// );
|
|
381
|
+
shellExec(
|
|
382
|
+
`sudo kubectl cp ${basePath}/lab/src/${scriptPath
|
|
383
|
+
.split('/')
|
|
384
|
+
.pop()} ${nameSpace}/${podName}:${basePath}/docs${scriptPath}`,
|
|
385
|
+
);
|
|
386
|
+
// shellExec(`sudo kubectl exec -i ${podName} -- sh -c "ipython ${basePath}/docs${scriptPath}"`);
|
|
387
|
+
shellExec(`sudo kubectl exec -i ${podName} -- sh -c "rm -rf ${checkPath}"`);
|
|
388
|
+
|
|
389
|
+
{
|
|
390
|
+
const checkPath = `/latent_space_plot.png`;
|
|
391
|
+
const outsPaths = [];
|
|
392
|
+
logger.info('monitor', checkPath);
|
|
393
|
+
while (!UnderpostDeploy.API.existsContainerFile({ podName, path: `/home/dd/docs${checkPath}` }))
|
|
394
|
+
await timer(1000);
|
|
395
|
+
|
|
396
|
+
{
|
|
397
|
+
const toPath = `${basePath}/lab${checkPath}`;
|
|
398
|
+
outsPaths.push(toPath);
|
|
399
|
+
shellExec(`sudo kubectl cp ${nameSpace}/${podName}:${basePath}/docs${checkPath} ${toPath}`);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
for (let i of range(1, 10)) {
|
|
403
|
+
i = `/image_at_epoch_${setPad(i, '0', 4)}.png`;
|
|
404
|
+
const toPath = `${basePath}/lab/${i}`;
|
|
405
|
+
outsPaths.push(toPath);
|
|
406
|
+
shellExec(`sudo kubectl cp ${nameSpace}/${podName}:${basePath}/docs${i} ${toPath}`);
|
|
407
|
+
}
|
|
408
|
+
openTerminal(`firefox ${outsPaths.join(' ')}`, { single: true });
|
|
409
|
+
}
|
|
410
|
+
shellExec(`sudo kill -9 ${pid}`);
|
|
411
|
+
}
|
|
412
|
+
break;
|
|
413
|
+
|
|
414
|
+
default:
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
417
|
+
return;
|
|
418
|
+
}
|
|
419
|
+
await timer(1000);
|
|
420
|
+
_monitor();
|
|
421
|
+
};
|
|
422
|
+
_monitor();
|
|
423
|
+
},
|
|
424
|
+
/**
|
|
425
|
+
* @method db-client
|
|
426
|
+
* @description Creates a new configmap from a file.
|
|
427
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
428
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
429
|
+
* @memberof UnderpostRun
|
|
430
|
+
*/
|
|
431
|
+
'db-client': async (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
432
|
+
const { underpostRoot } = options;
|
|
433
|
+
|
|
434
|
+
const image = 'adminer:4.7.6-standalone';
|
|
435
|
+
|
|
436
|
+
if (!options.kubeadm && !options.k3s) {
|
|
437
|
+
// Only load if not kubeadm/k3s (Kind needs it)
|
|
438
|
+
shellExec(`docker pull ${image}`);
|
|
439
|
+
shellExec(`sudo kind load docker-image ${image}`);
|
|
440
|
+
} else if (options.kubeadm || options.k3s)
|
|
441
|
+
// For kubeadm/k3s, ensure it's available for containerd
|
|
442
|
+
shellExec(`sudo crictl pull ${image}`);
|
|
443
|
+
|
|
444
|
+
shellExec(`kubectl delete deployment adminer`);
|
|
445
|
+
shellExec(`kubectl apply -k ${underpostRoot}/manifests/deployment/adminer/.`);
|
|
446
|
+
const successInstance = await UnderpostTest.API.statusMonitor('adminer', 'Running', 'pods', 1000, 60 * 10);
|
|
447
|
+
|
|
448
|
+
if (successInstance) {
|
|
449
|
+
shellExec(`underpost deploy --expose adminer`);
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
/**
|
|
453
|
+
* @method promote
|
|
454
|
+
* @description Creates a new configmap from a file.
|
|
455
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
456
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
457
|
+
* @memberof UnderpostRun
|
|
458
|
+
*/
|
|
459
|
+
promote: async (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
460
|
+
let [inputDeployId, inputEnv, inputReplicas] = path.split(',');
|
|
461
|
+
if (!inputEnv) inputEnv = 'production';
|
|
462
|
+
if (!inputReplicas) inputReplicas = 1;
|
|
463
|
+
if (inputDeployId === 'dd') {
|
|
464
|
+
for (const deployId of fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',')) {
|
|
465
|
+
const currentTraffic = UnderpostDeploy.API.getCurrentTraffic(deployId);
|
|
466
|
+
const targetTraffic = currentTraffic === 'blue' ? 'green' : 'blue';
|
|
467
|
+
UnderpostDeploy.API.switchTraffic(deployId, inputEnv, targetTraffic, inputReplicas);
|
|
468
|
+
}
|
|
469
|
+
} else {
|
|
470
|
+
const currentTraffic = UnderpostDeploy.API.getCurrentTraffic(inputDeployId);
|
|
471
|
+
const targetTraffic = currentTraffic === 'blue' ? 'green' : 'blue';
|
|
472
|
+
UnderpostDeploy.API.switchTraffic(inputDeployId, inputEnv, targetTraffic, inputReplicas);
|
|
473
|
+
}
|
|
474
|
+
},
|
|
475
|
+
/**
|
|
476
|
+
* @method metrics
|
|
477
|
+
* @description Creates a new configmap from a file.
|
|
478
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
479
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
480
|
+
* @memberof UnderpostRun
|
|
481
|
+
*/
|
|
482
|
+
metrics: async (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
483
|
+
const deployList = fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',');
|
|
484
|
+
let hosts = [];
|
|
485
|
+
for (const deployId of deployList) {
|
|
486
|
+
const confServer = JSON.parse(fs.readFileSync(`./engine-private/conf/${deployId}/conf.server.json`, 'utf8'));
|
|
487
|
+
hosts = hosts.concat(Object.keys(confServer));
|
|
488
|
+
}
|
|
489
|
+
shellExec(`node bin cluster --prom ${hosts.join(',')}`);
|
|
490
|
+
shellExec(`node bin cluster --grafana`);
|
|
491
|
+
},
|
|
492
|
+
/**
|
|
493
|
+
* @method cluster
|
|
494
|
+
* @description Creates a new configmap from a file.
|
|
495
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
496
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
497
|
+
* @memberof UnderpostRun
|
|
498
|
+
*/
|
|
499
|
+
cluster: async (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
500
|
+
const deployList = fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',');
|
|
501
|
+
const env = 'production';
|
|
502
|
+
shellCd(`/home/dd/engine`);
|
|
503
|
+
shellExec(`underpost cluster --reset`);
|
|
504
|
+
await timer(5000);
|
|
505
|
+
shellExec(`underpost cluster --kubeadm`);
|
|
506
|
+
await timer(5000);
|
|
507
|
+
shellExec(`underpost dockerfile-pull-base-images --path /home/dd/engine/src/runtime/lampp --kubeadm-load`);
|
|
508
|
+
await timer(5000);
|
|
509
|
+
shellExec(`underpost cluster --kubeadm --pull-image --mongodb`);
|
|
510
|
+
await timer(5000);
|
|
511
|
+
shellExec(`underpost cluster --kubeadm --pull-image --mariadb`);
|
|
512
|
+
await timer(5000);
|
|
513
|
+
for (const deployId of deployList) {
|
|
514
|
+
shellExec(`underpost db ${deployId} --import --git`);
|
|
515
|
+
}
|
|
516
|
+
await timer(5000);
|
|
517
|
+
shellExec(`underpost cluster --kubeadm --pull-image --valkey`);
|
|
518
|
+
await timer(5000);
|
|
519
|
+
shellExec(`underpost cluster --kubeadm --contour`);
|
|
520
|
+
await timer(5000);
|
|
521
|
+
shellExec(`underpost cluster --kubeadm --cert-manager`);
|
|
522
|
+
for (const deployId of deployList) {
|
|
523
|
+
shellExec(`underpost deploy ${deployId} ${env} --kubeadm --cert`);
|
|
524
|
+
}
|
|
525
|
+
},
|
|
526
|
+
/**
|
|
527
|
+
* @method deploy
|
|
528
|
+
* @description Creates a new configmap from a file.
|
|
529
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
530
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
531
|
+
* @memberof UnderpostRun
|
|
532
|
+
*/
|
|
533
|
+
deploy: async (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
534
|
+
const deployId = path;
|
|
535
|
+
const { validVersion, deployVersion } = UnderpostRepository.API.privateConfUpdate(deployId);
|
|
536
|
+
if (!validVersion) throw new Error('Version mismatch');
|
|
537
|
+
const currentTraffic = UnderpostDeploy.API.getCurrentTraffic(deployId);
|
|
538
|
+
const targetTraffic = currentTraffic === 'blue' ? 'green' : 'blue';
|
|
539
|
+
const env = 'production';
|
|
540
|
+
const ignorePods = UnderpostDeploy.API.get(`${deployId}-${env}-${targetTraffic}`).map((p) => p.NAME);
|
|
541
|
+
|
|
542
|
+
if (options.build === true) {
|
|
543
|
+
// deployId, replicas, versions, image, node
|
|
544
|
+
shellExec(
|
|
545
|
+
`node bin run sync ${deployId},${options.replicas ?? 1},${targetTraffic},${
|
|
546
|
+
options.imageName ?? `localhost/rockylinux9-underpost:${deployVersion}`
|
|
547
|
+
},${os.hostname()}`,
|
|
548
|
+
);
|
|
549
|
+
} else shellExec(`sudo kubectl rollout restart deployment/${deployId}-${env}-${targetTraffic}`);
|
|
550
|
+
|
|
551
|
+
let checkStatusIteration = 0;
|
|
552
|
+
const checkStatusIterationMsDelay = 1000;
|
|
553
|
+
const iteratorTag = `[${deployId}-${env}-${targetTraffic}]`;
|
|
554
|
+
logger.info('Deployment init', { deployId, env, targetTraffic, checkStatusIterationMsDelay });
|
|
555
|
+
const minReadyOk = 3;
|
|
556
|
+
let readyOk = 0;
|
|
557
|
+
|
|
558
|
+
while (readyOk < minReadyOk) {
|
|
559
|
+
const ready = UnderpostDeploy.API.checkDeploymentReadyStatus(deployId, env, targetTraffic, ignorePods).ready;
|
|
560
|
+
if (ready === true) {
|
|
561
|
+
readyOk++;
|
|
562
|
+
logger.info(`${iteratorTag} | Deployment ready. Verification number: ${readyOk}`);
|
|
563
|
+
}
|
|
564
|
+
await timer(checkStatusIterationMsDelay);
|
|
565
|
+
checkStatusIteration++;
|
|
566
|
+
logger.info(
|
|
567
|
+
`${iteratorTag} | Deployment in progress... | Delay number check iterations: ${checkStatusIteration}`,
|
|
568
|
+
);
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
logger.info(`${iteratorTag} | Deployment ready. | Total delay number check iterations: ${checkStatusIteration}`);
|
|
572
|
+
|
|
573
|
+
UnderpostDeploy.API.switchTraffic(deployId, env, targetTraffic);
|
|
574
|
+
|
|
575
|
+
// shellExec(`sudo kubectl rollout restart deployment/${deployId}-${env}-${currentTraffic}`);
|
|
576
|
+
},
|
|
577
|
+
/**
|
|
578
|
+
* @method tf-vae-test
|
|
579
|
+
* @description Creates a new configmap from a file.
|
|
580
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
581
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
582
|
+
* @memberof UnderpostRun
|
|
583
|
+
*/
|
|
584
|
+
'tf-vae-test': async (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
585
|
+
const { underpostRoot } = options;
|
|
586
|
+
const podName = 'tf-vae-test';
|
|
587
|
+
await UnderpostRun.RUNNERS['deploy-job']('', {
|
|
588
|
+
podName,
|
|
589
|
+
// volumeMountPath: '/custom_images',
|
|
590
|
+
// volumeHostPath: '/home/dd/engine/src/client/public/cyberia/assets/skin',
|
|
591
|
+
on: {
|
|
592
|
+
init: async () => {
|
|
593
|
+
openTerminal(`node bin run --dev monitor ${podName}`);
|
|
594
|
+
},
|
|
595
|
+
},
|
|
596
|
+
args: [
|
|
597
|
+
`pip install --upgrade \
|
|
598
|
+
nbconvert \
|
|
599
|
+
tensorflow-probability==0.23.0 \
|
|
600
|
+
imageio \
|
|
601
|
+
git+https://github.com/tensorflow/docs \
|
|
602
|
+
matplotlib \
|
|
603
|
+
"numpy<1.25,>=1.21"`,
|
|
604
|
+
'mkdir -p /home/dd',
|
|
605
|
+
'cd /home/dd',
|
|
606
|
+
'git clone https://github.com/tensorflow/docs.git',
|
|
607
|
+
'cd docs',
|
|
608
|
+
'jupyter nbconvert --to python site/en/tutorials/generative/cvae.ipynb',
|
|
609
|
+
`echo '' > /await`,
|
|
610
|
+
`echo '=== WAITING SCRIPT LAUNCH ==='`,
|
|
611
|
+
`while [ -f /await ]; do sleep 1; done`,
|
|
612
|
+
`echo '=== FINISHED ==='`,
|
|
613
|
+
daemonProcess(`ipython site/en/tutorials/generative/cvae.py`),
|
|
614
|
+
],
|
|
615
|
+
});
|
|
616
|
+
},
|
|
617
|
+
/**
|
|
618
|
+
* @method deploy-job
|
|
619
|
+
* @description Creates a new configmap from a file.
|
|
620
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
621
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
622
|
+
* @memberof UnderpostRun
|
|
623
|
+
*/
|
|
624
|
+
'deploy-job': async (path, options = UnderpostRun.DEFAULT_OPTION) => {
|
|
625
|
+
const podName = options.podName || 'deploy-job';
|
|
626
|
+
const volumeName = `${podName}-volume`;
|
|
627
|
+
const args = (options.args ? options.args : path ? [`python ${path}`] : []).filter((c) => c.trim());
|
|
628
|
+
const imageName = options.imageName || 'nvcr.io/nvidia/tensorflow:24.04-tf2-py3';
|
|
629
|
+
const containerName = options.containerName || `${podName}-container`;
|
|
630
|
+
const gpuEnable = imageName.match('nvidia');
|
|
631
|
+
const runtimeClassName = gpuEnable ? 'nvidia' : '';
|
|
632
|
+
const namespace = options.namespace || 'default';
|
|
633
|
+
const volumeMountPath = options.volumeMountPath || path;
|
|
634
|
+
const volumeHostPath = options.volumeHostPath || path;
|
|
635
|
+
const enableVolumeMount = volumeHostPath && volumeMountPath;
|
|
636
|
+
|
|
637
|
+
if (options.volumeType === 'dev') options.volumeType = 'FileOrCreate';
|
|
638
|
+
const volumeType =
|
|
639
|
+
options.volumeType || (enableVolumeMount && fs.statSync(volumeHostPath).isDirectory()) ? 'Directory' : 'File';
|
|
640
|
+
|
|
641
|
+
const envs = UnderpostRootEnv.API.list();
|
|
642
|
+
|
|
643
|
+
const cmd = `kubectl apply -f - <<EOF
|
|
644
|
+
apiVersion: v1
|
|
645
|
+
kind: Pod
|
|
646
|
+
metadata:
|
|
647
|
+
name: ${podName}
|
|
648
|
+
namespace: ${namespace}
|
|
649
|
+
spec:
|
|
650
|
+
restartPolicy: Never
|
|
651
|
+
${runtimeClassName ? ` runtimeClassName: ${runtimeClassName}` : ''}
|
|
652
|
+
containers:
|
|
653
|
+
- name: ${containerName}
|
|
654
|
+
image: ${imageName}
|
|
655
|
+
imagePullPolicy: IfNotPresent
|
|
656
|
+
tty: true
|
|
657
|
+
stdin: true
|
|
658
|
+
command: ${JSON.stringify(options.command ? options.command : ['/bin/bash', '-c'])}
|
|
659
|
+
${
|
|
660
|
+
args.length > 0
|
|
661
|
+
? ` args:
|
|
662
|
+
- |
|
|
663
|
+
${args.map((arg) => ` ${arg}`).join('\n')}`
|
|
664
|
+
: ''
|
|
665
|
+
}
|
|
666
|
+
${`${
|
|
667
|
+
gpuEnable
|
|
668
|
+
? ` resources:
|
|
669
|
+
limits:
|
|
670
|
+
nvidia.com/gpu: '1'
|
|
671
|
+
`
|
|
672
|
+
: ''
|
|
673
|
+
} env:
|
|
674
|
+
${Object.keys(envs)
|
|
675
|
+
.map((key) => ({ key, value: typeof envs[key] === 'number' ? envs[key] : `"${envs[key]}"` }))
|
|
676
|
+
.concat(gpuEnable ? [{ key: 'NVIDIA_VISIBLE_DEVICES', value: 'all' }] : [])
|
|
677
|
+
.map((env) => ` - name: ${env.key}\n value: ${env.value}`)
|
|
678
|
+
.join('\n')}`}
|
|
679
|
+
${
|
|
680
|
+
enableVolumeMount
|
|
681
|
+
? `
|
|
682
|
+
volumeMounts:
|
|
683
|
+
- name: ${volumeName}
|
|
684
|
+
mountPath: ${volumeMountPath}
|
|
685
|
+
volumes:
|
|
686
|
+
- name: ${volumeName}
|
|
687
|
+
hostPath:
|
|
688
|
+
path: ${volumeHostPath}
|
|
689
|
+
type: ${volumeType}`
|
|
690
|
+
: ''
|
|
691
|
+
}
|
|
692
|
+
EOF`;
|
|
693
|
+
shellExec(`kubectl delete pod ${podName}`);
|
|
694
|
+
console.log(cmd);
|
|
695
|
+
shellExec(cmd, { disableLog: true });
|
|
696
|
+
const successInstance = await UnderpostTest.API.statusMonitor(podName);
|
|
697
|
+
if (successInstance) {
|
|
698
|
+
options.on?.init ? await options.on.init() : null;
|
|
699
|
+
shellExec(`kubectl logs -f ${podName}`);
|
|
700
|
+
}
|
|
701
|
+
},
|
|
702
|
+
};
|
|
703
|
+
|
|
704
|
+
static API = {
|
|
705
|
+
/**
|
|
706
|
+
* @method callback
|
|
707
|
+
* @description Initiates a callback to a specified runner with the provided path and options.
|
|
708
|
+
* @param {string} runner - The name of the runner to execute.
|
|
709
|
+
* @param {string} path - The path to the directory where the template will be created.
|
|
710
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
711
|
+
* @memberof UnderpostRun
|
|
712
|
+
* @returns {Promise<any>} The result of the callback execution.
|
|
713
|
+
*/
|
|
714
|
+
async callback(runner, path, options = UnderpostRun.DEFAULT_OPTION) {
|
|
715
|
+
const npmRoot = getNpmRootPath();
|
|
716
|
+
const underpostRoot = options?.dev === true ? '.' : `${npmRoot}/underpost`;
|
|
717
|
+
if (options.command) options.command = options.command.split(',');
|
|
718
|
+
if (options.args) options.args = options.args.split(',');
|
|
719
|
+
options.underpostRoot = underpostRoot;
|
|
720
|
+
options.npmRoot = npmRoot;
|
|
721
|
+
logger.info('callback', { path, options });
|
|
722
|
+
const result = await UnderpostRun.RUNNERS[runner](path, options);
|
|
723
|
+
return result;
|
|
724
|
+
},
|
|
725
|
+
};
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
export default UnderpostRun;
|