cyberia 3.0.3 → 3.2.5
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/{.env.production → .env.example} +20 -4
- package/.github/workflows/engine-cyberia.cd.yml +43 -10
- package/.github/workflows/engine-cyberia.ci.yml +48 -26
- package/.github/workflows/ghpkg.ci.yml +5 -5
- package/.github/workflows/gitlab.ci.yml +1 -1
- package/.github/workflows/hardhat.ci.yml +82 -0
- package/.github/workflows/npmpkg.ci.yml +60 -14
- package/.github/workflows/publish.ci.yml +26 -7
- package/.github/workflows/publish.cyberia.ci.yml +5 -5
- package/.github/workflows/pwa-microservices-template-page.cd.yml +6 -7
- package/.github/workflows/pwa-microservices-template-test.ci.yml +4 -4
- package/.github/workflows/release.cd.yml +14 -8
- package/.vscode/extensions.json +9 -8
- package/.vscode/settings.json +3 -2
- package/CHANGELOG.md +643 -1
- package/CLI-HELP.md +132 -57
- package/Dockerfile +4 -2
- package/README.md +347 -22
- package/WHITE-PAPER.md +1540 -0
- package/bin/build.js +21 -12
- package/bin/cyberia.js +2640 -106
- package/bin/deploy.js +258 -372
- package/bin/file.js +5 -1
- package/bin/index.js +2640 -106
- package/bin/vs.js +3 -3
- package/conf.js +169 -105
- package/deployment.yaml +236 -20
- package/hardhat/.env.example +31 -0
- package/hardhat/README.md +531 -0
- package/hardhat/WHITE-PAPER.md +1540 -0
- package/hardhat/contracts/ObjectLayerToken.sol +391 -0
- package/hardhat/deployments/.gitkeep +0 -0
- package/hardhat/deployments/hardhat-ObjectLayerToken.json +11 -0
- package/hardhat/hardhat.config.js +136 -0
- package/hardhat/ignition/modules/ObjectLayerToken.js +21 -0
- package/hardhat/networks/besu-object-layer.network.json +138 -0
- package/hardhat/package-lock.json +4323 -0
- package/hardhat/package.json +36 -0
- package/hardhat/scripts/deployObjectLayerToken.js +98 -0
- package/hardhat/test/ObjectLayerToken.js +592 -0
- package/hardhat/types/ethers-contracts/ObjectLayerToken.ts +690 -0
- package/hardhat/types/ethers-contracts/common.ts +92 -0
- package/hardhat/types/ethers-contracts/factories/ObjectLayerToken__factory.ts +1055 -0
- package/hardhat/types/ethers-contracts/factories/index.ts +4 -0
- package/hardhat/types/ethers-contracts/hardhat.d.ts +47 -0
- package/hardhat/types/ethers-contracts/index.ts +6 -0
- package/jsdoc.dd-cyberia.json +68 -0
- package/jsdoc.json +65 -49
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +5 -4
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +5 -4
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +562 -0
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +297 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +132 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/dd-test-development/deployment.yaml +88 -74
- package/manifests/deployment/dd-test-development/proxy.yaml +13 -4
- package/manifests/deployment/playwright/deployment.yaml +1 -1
- package/manifests/pv-pvc-dd.yaml +1 -1
- package/nodemon.json +1 -1
- package/package.json +60 -48
- package/proxy.yaml +118 -10
- package/pv-pvc.yaml +132 -0
- package/scripts/k3s-node-setup.sh +1 -1
- package/scripts/ports-ls.sh +2 -0
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +47 -1
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +17 -2
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +5 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +80 -7
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +93 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +29 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +51 -0
- package/src/api/cyberia-entity/cyberia-entity.controller.js +74 -0
- package/src/api/cyberia-entity/cyberia-entity.model.js +24 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +27 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +368 -0
- package/src/api/cyberia-instance/cyberia-instance.controller.js +92 -0
- package/src/api/cyberia-instance/cyberia-instance.model.js +84 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +63 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +191 -0
- package/src/api/cyberia-instance/cyberia-portal-connector.js +486 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +74 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +413 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +228 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +27 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +42 -0
- package/src/api/cyberia-map/cyberia-map.controller.js +79 -0
- package/src/api/cyberia-map/cyberia-map.model.js +30 -0
- package/src/api/cyberia-map/cyberia-map.router.js +40 -0
- package/src/api/cyberia-map/cyberia-map.service.js +74 -0
- package/src/api/document/document.service.js +1 -1
- package/src/api/file/file.controller.js +3 -1
- package/src/api/file/file.ref.json +18 -0
- package/src/api/file/file.service.js +28 -5
- package/src/api/ipfs/ipfs.controller.js +4 -25
- package/src/api/ipfs/ipfs.model.js +43 -34
- package/src/api/ipfs/ipfs.router.js +8 -13
- package/src/api/ipfs/ipfs.service.js +56 -104
- package/src/api/object-layer/README.md +347 -22
- package/src/api/object-layer/object-layer.controller.js +6 -2
- package/src/api/object-layer/object-layer.model.js +12 -8
- package/src/api/object-layer/object-layer.router.js +698 -42
- package/src/api/object-layer/object-layer.service.js +119 -37
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +1 -2
- package/src/api/user/user.router.js +10 -5
- package/src/api/user/user.service.js +15 -14
- package/src/cli/baremetal.js +6 -10
- package/src/cli/cloud-init.js +0 -3
- package/src/cli/cluster.js +7 -7
- package/src/cli/db.js +723 -857
- package/src/cli/deploy.js +215 -105
- package/src/cli/env.js +34 -5
- package/src/cli/fs.js +5 -4
- package/src/cli/image.js +0 -3
- package/src/cli/index.js +83 -15
- package/src/cli/kubectl.js +211 -0
- package/src/cli/monitor.js +5 -6
- package/src/cli/release.js +284 -0
- package/src/cli/repository.js +708 -62
- package/src/cli/run.js +371 -151
- package/src/cli/secrets.js +73 -2
- package/src/cli/ssh.js +1 -1
- package/src/cli/test.js +3 -3
- package/src/client/Cryptokoyn.index.js +3 -4
- package/src/client/CyberiaPortal.index.js +3 -4
- package/src/client/Default.index.js +3 -4
- package/src/client/Itemledger.index.js +4 -963
- package/src/client/Underpost.index.js +3 -4
- package/src/client/components/core/AgGrid.js +20 -5
- package/src/client/components/core/Alert.js +2 -2
- package/src/client/components/core/AppStore.js +69 -0
- package/src/client/components/core/CalendarCore.js +2 -2
- package/src/client/components/core/Content.js +22 -3
- package/src/client/components/core/Docs.js +30 -6
- package/src/client/components/core/DropDown.js +137 -17
- package/src/client/components/core/FileExplorer.js +71 -4
- package/src/client/components/core/Input.js +1 -1
- package/src/client/components/core/Keyboard.js +2 -2
- package/src/client/components/core/LogIn.js +2 -2
- package/src/client/components/core/LogOut.js +2 -2
- package/src/client/components/core/Modal.js +20 -7
- package/src/client/components/core/Panel.js +0 -1
- package/src/client/components/core/PanelForm.js +19 -19
- package/src/client/components/core/RichText.js +1 -2
- package/src/client/components/core/SocketIo.js +82 -29
- package/src/client/components/core/SocketIoHandler.js +75 -0
- package/src/client/components/core/Stream.js +143 -95
- package/src/client/components/core/Webhook.js +40 -7
- package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +3 -3
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +2 -2
- package/src/client/components/cryptokoyn/MenuCryptokoyn.js +3 -3
- package/src/client/components/cryptokoyn/SocketIoCryptokoyn.js +3 -51
- package/src/client/components/cyberia/InstanceEngineCyberia.js +700 -0
- package/src/client/components/cyberia/MapEngineCyberia.js +1359 -2
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +17 -6
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +92 -54
- package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +217 -30
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +44 -2
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +3 -4
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +2 -2
- package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +104 -9
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +3 -49
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
- package/src/client/components/default/AppStoreDefault.js +5 -0
- package/src/client/components/default/LogInDefault.js +3 -3
- package/src/client/components/default/LogOutDefault.js +2 -2
- package/src/client/components/default/MenuDefault.js +5 -5
- package/src/client/components/default/SocketIoDefault.js +3 -51
- package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
- package/src/client/components/itemledger/LogInItemledger.js +3 -3
- package/src/client/components/itemledger/LogOutItemledger.js +2 -2
- package/src/client/components/itemledger/MenuItemledger.js +3 -3
- package/src/client/components/itemledger/SocketIoItemledger.js +3 -51
- package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
- package/src/client/components/underpost/CssUnderpost.js +59 -0
- package/src/client/components/underpost/LogInUnderpost.js +6 -3
- package/src/client/components/underpost/LogOutUnderpost.js +4 -2
- package/src/client/components/underpost/MenuUnderpost.js +104 -18
- package/src/client/components/underpost/RoutesUnderpost.js +2 -0
- package/src/client/components/underpost/SocketIoUnderpost.js +3 -51
- package/src/client/public/cryptokoyn/assets/logo/base-icon.png +0 -0
- package/src/client/public/cryptokoyn/browserconfig.xml +12 -0
- package/src/client/public/cryptokoyn/microdata.json +85 -0
- package/src/client/public/cryptokoyn/site.webmanifest +57 -0
- package/src/client/public/cryptokoyn/sitemap +3 -3
- package/src/client/public/default/sitemap +3 -3
- package/src/client/public/itemledger/browserconfig.xml +2 -2
- package/src/client/public/itemledger/manifest.webmanifest +4 -4
- package/src/client/public/itemledger/microdata.json +71 -0
- package/src/client/public/itemledger/sitemap +3 -3
- package/src/client/public/itemledger/yandex-browser-manifest.json +2 -2
- package/src/client/public/test/sitemap +3 -3
- package/src/client/services/core/core.service.js +20 -8
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +105 -0
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +57 -0
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +105 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +194 -0
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +122 -0
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +105 -0
- package/src/client/services/cyberia-map/cyberia-map.management.js +193 -0
- package/src/client/services/cyberia-map/cyberia-map.service.js +126 -0
- package/src/client/services/instance/instance.management.js +2 -2
- package/src/client/services/ipfs/ipfs.service.js +3 -23
- package/src/client/services/object-layer/object-layer.management.js +3 -3
- package/src/client/services/object-layer/object-layer.service.js +21 -0
- package/src/client/services/user/user.management.js +2 -2
- package/src/client/ssr/body/404.js +15 -11
- package/src/client/ssr/body/500.js +15 -11
- package/src/client/ssr/body/SwaggerDarkMode.js +285 -0
- package/src/client/ssr/head/PwaItemledger.js +60 -0
- package/src/client/ssr/offline/NoNetworkConnection.js +11 -10
- package/src/client/ssr/pages/CyberiaServerMetrics.js +1 -1
- package/src/client/ssr/pages/Test.js +11 -10
- package/src/client.build.js +0 -3
- package/src/client.dev.js +0 -3
- package/src/db/DataBaseProvider.js +17 -2
- package/src/db/mariadb/MariaDB.js +14 -9
- package/src/db/mongo/MongooseDB.js +17 -1
- package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +305 -0
- package/src/grpc/cyberia/README.md +326 -0
- package/src/grpc/cyberia/grpc-server.js +530 -0
- package/src/index.js +24 -1
- package/src/proxy.js +0 -3
- package/src/runtime/express/Dockerfile +4 -0
- package/src/runtime/express/Express.js +33 -10
- package/src/runtime/lampp/Dockerfile +13 -2
- package/src/runtime/lampp/Lampp.js +33 -17
- package/src/runtime/wp/Dockerfile +68 -0
- package/src/runtime/wp/Wp.js +639 -0
- package/src/server/auth.js +36 -15
- package/src/server/backup.js +39 -12
- package/src/server/besu-genesis-generator.js +1630 -0
- package/src/server/client-build-docs.js +133 -17
- package/src/server/client-build-live.js +9 -18
- package/src/server/client-build.js +229 -101
- package/src/server/client-dev-server.js +14 -13
- package/src/server/client-formatted.js +109 -57
- package/src/server/conf.js +391 -164
- package/src/server/cron.js +27 -24
- package/src/server/dns.js +29 -12
- package/src/server/downloader.js +0 -2
- package/src/server/ipfs-client.js +24 -1
- package/src/server/logger.js +27 -9
- package/src/server/object-layer.js +217 -103
- package/src/server/peer.js +8 -2
- package/src/server/process.js +1 -50
- package/src/server/proxy.js +4 -8
- package/src/server/runtime.js +30 -9
- package/src/server/semantic-layer-generator-floor.js +359 -0
- package/src/server/semantic-layer-generator-skin.js +1294 -0
- package/src/server/semantic-layer-generator.js +116 -555
- package/src/server/ssr.js +0 -3
- package/src/server/start.js +19 -12
- package/src/server/tls.js +0 -2
- package/src/server.js +0 -4
- package/src/ws/IoInterface.js +1 -10
- package/src/ws/IoServer.js +14 -33
- package/src/ws/core/channels/core.ws.chat.js +65 -20
- package/src/ws/core/channels/core.ws.mailer.js +113 -32
- package/src/ws/core/channels/core.ws.stream.js +90 -31
- package/src/ws/core/core.ws.connection.js +12 -33
- package/src/ws/core/core.ws.emit.js +10 -26
- package/src/ws/core/core.ws.server.js +25 -58
- package/src/ws/default/channels/default.ws.main.js +53 -12
- package/src/ws/default/default.ws.connection.js +26 -13
- package/src/ws/default/default.ws.server.js +30 -12
- package/.env.development +0 -43
- package/.env.test +0 -43
- package/hardhat/contracts/CryptoKoyn.sol +0 -59
- package/hardhat/contracts/ItemLedger.sol +0 -73
- package/hardhat/contracts/Lock.sol +0 -34
- package/hardhat/hardhat.config.cjs +0 -45
- package/hardhat/ignition/modules/Lock.js +0 -18
- package/hardhat/networks/cryptokoyn-itemledger.network.json +0 -29
- package/hardhat/scripts/deployCryptokoyn.cjs +0 -25
- package/hardhat/scripts/deployItemledger.cjs +0 -25
- package/hardhat/test/Lock.js +0 -126
- package/hardhat/white-paper.md +0 -581
- package/src/client/components/cryptokoyn/CommonCryptokoyn.js +0 -29
- package/src/client/components/cryptokoyn/ElementsCryptokoyn.js +0 -38
- package/src/client/components/cyberia-portal/ElementsCyberiaPortal.js +0 -38
- package/src/client/components/default/ElementsDefault.js +0 -38
- package/src/client/components/itemledger/CommonItemledger.js +0 -29
- package/src/client/components/itemledger/ElementsItemledger.js +0 -38
- package/src/client/components/underpost/CommonUnderpost.js +0 -29
- package/src/client/components/underpost/ElementsUnderpost.js +0 -38
- package/src/ws/core/management/core.ws.chat.js +0 -8
- package/src/ws/core/management/core.ws.mailer.js +0 -16
- package/src/ws/core/management/core.ws.stream.js +0 -8
- package/src/ws/default/management/default.ws.main.js +0 -8
- package/white-paper.md +0 -581
package/bin/deploy.js
CHANGED
|
@@ -3,27 +3,21 @@ import axios from 'axios';
|
|
|
3
3
|
|
|
4
4
|
import dotenv from 'dotenv';
|
|
5
5
|
|
|
6
|
-
import { pbcopy,
|
|
6
|
+
import { pbcopy, shellExec } from '../src/server/process.js';
|
|
7
7
|
import { loggerFactory } from '../src/server/logger.js';
|
|
8
8
|
import {
|
|
9
|
-
Config,
|
|
10
9
|
addApiConf,
|
|
11
10
|
addClientConf,
|
|
12
11
|
buildApiSrc,
|
|
13
12
|
buildClientSrc,
|
|
14
13
|
cloneConf,
|
|
15
|
-
loadConf,
|
|
16
|
-
loadReplicas,
|
|
17
14
|
addWsConf,
|
|
18
15
|
buildWsSrc,
|
|
19
16
|
cloneSrcComponents,
|
|
20
|
-
getDataDeploy,
|
|
21
|
-
buildReplicaId,
|
|
22
|
-
Cmd,
|
|
23
17
|
writeEnv,
|
|
24
18
|
buildCliDoc,
|
|
19
|
+
loadConf,
|
|
25
20
|
} from '../src/server/conf.js';
|
|
26
|
-
import { buildClient } from '../src/server/client-build.js';
|
|
27
21
|
import colors from 'colors';
|
|
28
22
|
import { program } from '../src/cli/index.js';
|
|
29
23
|
import { timer } from '../src/client/components/core/CommonJs.js';
|
|
@@ -120,19 +114,6 @@ try {
|
|
|
120
114
|
buildWsSrc({ toOptions, fromOptions });
|
|
121
115
|
}
|
|
122
116
|
break;
|
|
123
|
-
case 'conf': {
|
|
124
|
-
let subConf = process.argv[5] ?? '';
|
|
125
|
-
|
|
126
|
-
if (!['current', 'clean', 'root'].includes(process.argv[3])) {
|
|
127
|
-
const path = fs.existsSync(`./engine-private/replica/${process.argv[3]}`)
|
|
128
|
-
? `./engine-private/replica/${process.argv[3]}/.env.${process.argv[4]}`
|
|
129
|
-
: `./engine-private/conf/${process.argv[3]}/.env.${process.argv[4]}`;
|
|
130
|
-
dotenv.config({ path, override: true });
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
loadConf(process.argv[3], subConf);
|
|
134
|
-
break;
|
|
135
|
-
}
|
|
136
117
|
|
|
137
118
|
case 'new-nodejs-app':
|
|
138
119
|
{
|
|
@@ -143,7 +124,7 @@ try {
|
|
|
143
124
|
|
|
144
125
|
shellExec(`node bin/deploy build-nodejs-src-app ${deployId} ${clientId}`);
|
|
145
126
|
|
|
146
|
-
|
|
127
|
+
await Underpost.repo.client(deployId);
|
|
147
128
|
|
|
148
129
|
shellExec(`npm run dev ${deployId}`);
|
|
149
130
|
}
|
|
@@ -180,8 +161,6 @@ try {
|
|
|
180
161
|
shellExec(`node bin/deploy build-nodejs-conf-api ${apiId} ${deployId} ${clientId}`);
|
|
181
162
|
|
|
182
163
|
shellExec(`node bin/deploy build-nodejs-src-api ${apiId} ${deployId} ${clientId}`);
|
|
183
|
-
|
|
184
|
-
// shellExec(`npm run dev ${deployId}`);
|
|
185
164
|
}
|
|
186
165
|
break;
|
|
187
166
|
case 'new-nodejs-ws':
|
|
@@ -198,42 +177,6 @@ try {
|
|
|
198
177
|
shellExec(`npm run dev ${deployId}`);
|
|
199
178
|
}
|
|
200
179
|
break;
|
|
201
|
-
case 'build-full-client':
|
|
202
|
-
{
|
|
203
|
-
dotenv.config({ override: true });
|
|
204
|
-
if (!process.argv[3]) process.argv[3] = 'dd-default';
|
|
205
|
-
const { deployId } = loadConf(process.argv[3], process.argv[4] ?? '');
|
|
206
|
-
|
|
207
|
-
let argHost = process.argv[5] ? process.argv[5].split(',') : [];
|
|
208
|
-
let argPath = process.argv[6] ? process.argv[6].split(',') : [];
|
|
209
|
-
let deployIdSingleReplicas = [];
|
|
210
|
-
const serverConf = deployId
|
|
211
|
-
? JSON.parse(fs.readFileSync(`./conf/conf.server.json`, 'utf8'))
|
|
212
|
-
: Config.default.server;
|
|
213
|
-
for (const host of Object.keys(serverConf)) {
|
|
214
|
-
for (const path of Object.keys(serverConf[host])) {
|
|
215
|
-
if (argHost.length && argPath.length && (!argHost.includes(host) || !argPath.includes(path))) {
|
|
216
|
-
delete serverConf[host][path];
|
|
217
|
-
} else {
|
|
218
|
-
serverConf[host][path].liteBuild = false;
|
|
219
|
-
serverConf[host][path].minifyBuild = process.env.NODE_ENV === 'production' ? true : false;
|
|
220
|
-
if (serverConf[host][path].singleReplica && serverConf[host][path].replicas) {
|
|
221
|
-
deployIdSingleReplicas = deployIdSingleReplicas.concat(
|
|
222
|
-
serverConf[host][path].replicas.map((replica) => buildReplicaId({ deployId, replica })),
|
|
223
|
-
);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
fs.writeFileSync(`./conf/conf.server.json`, JSON.stringify(serverConf, null, 4), 'utf-8');
|
|
229
|
-
await buildClient();
|
|
230
|
-
|
|
231
|
-
for (const replicaDeployId of deployIdSingleReplicas) {
|
|
232
|
-
shellExec(Cmd.conf(replicaDeployId, process.env.NODE_ENV));
|
|
233
|
-
shellExec(Cmd.build(replicaDeployId));
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
break;
|
|
237
180
|
|
|
238
181
|
case 'update-dependencies':
|
|
239
182
|
const files = await fs.readdir(`./engine-private/conf`, { recursive: true });
|
|
@@ -244,102 +187,12 @@ try {
|
|
|
244
187
|
const deployPackage = JSON.parse(fs.readFileSync(filePah, 'utf8'));
|
|
245
188
|
deployPackage.dependencies = originPackage.dependencies;
|
|
246
189
|
deployPackage.devDependencies = originPackage.devDependencies;
|
|
190
|
+
deployPackage.overrides = originPackage.overrides;
|
|
247
191
|
fs.writeFileSync(filePah, JSON.stringify(deployPackage, null, 4), 'utf8');
|
|
248
192
|
}
|
|
249
193
|
}
|
|
250
194
|
break;
|
|
251
195
|
|
|
252
|
-
case 'sync-env-port':
|
|
253
|
-
const dataDeploy = getDataDeploy({ disableSyncEnvPort: true });
|
|
254
|
-
const dataEnv = [
|
|
255
|
-
{ env: 'production', port: 3000 },
|
|
256
|
-
{ env: 'development', port: 4000 },
|
|
257
|
-
{ env: 'test', port: 5000 },
|
|
258
|
-
];
|
|
259
|
-
let portOffset = 0;
|
|
260
|
-
for (const deployIdObj of dataDeploy) {
|
|
261
|
-
const { deployId } = deployIdObj;
|
|
262
|
-
const baseConfPath = fs.existsSync(`./engine-private/replica/${deployId}`)
|
|
263
|
-
? `./engine-private/replica`
|
|
264
|
-
: `./engine-private/conf`;
|
|
265
|
-
for (const envInstanceObj of dataEnv) {
|
|
266
|
-
const envPath = `${baseConfPath}/${deployId}/.env.${envInstanceObj.env}`;
|
|
267
|
-
const envObj = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
|
|
268
|
-
envObj.PORT = `${envInstanceObj.port + portOffset}`;
|
|
269
|
-
|
|
270
|
-
writeEnv(envPath, envObj);
|
|
271
|
-
}
|
|
272
|
-
const serverConf = loadReplicas(
|
|
273
|
-
deployId,
|
|
274
|
-
JSON.parse(fs.readFileSync(`${baseConfPath}/${deployId}/conf.server.json`, 'utf8')),
|
|
275
|
-
);
|
|
276
|
-
for (const host of Object.keys(serverConf)) {
|
|
277
|
-
for (const path of Object.keys(serverConf[host])) {
|
|
278
|
-
if (serverConf[host][path].singleReplica) {
|
|
279
|
-
portOffset--;
|
|
280
|
-
continue;
|
|
281
|
-
}
|
|
282
|
-
portOffset++;
|
|
283
|
-
if (serverConf[host][path].peer) portOffset++;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
break;
|
|
288
|
-
|
|
289
|
-
case 'build-single-replica': {
|
|
290
|
-
const deployId = process.argv[3];
|
|
291
|
-
const host = process.argv[4];
|
|
292
|
-
const path = process.argv[5];
|
|
293
|
-
const serverConf = loadReplicas(
|
|
294
|
-
deployId,
|
|
295
|
-
JSON.parse(fs.readFileSync(`./engine-private/conf/${deployId}/conf.server.json`, 'utf8')),
|
|
296
|
-
);
|
|
297
|
-
|
|
298
|
-
if (serverConf[host][path].replicas) {
|
|
299
|
-
{
|
|
300
|
-
let replicaIndex = -1;
|
|
301
|
-
for (const replica of serverConf[host][path].replicas) {
|
|
302
|
-
replicaIndex++;
|
|
303
|
-
const replicaDeployId = `${deployId}-${serverConf[host][path].replicas[replicaIndex].slice(1)}`;
|
|
304
|
-
// fs.mkdirSync(`./engine-private/replica/${deployId}${replicaIndex}`, { recursive: true });
|
|
305
|
-
await fs.copy(`./engine-private/conf/${deployId}`, `./engine-private/replica/${replicaDeployId}`);
|
|
306
|
-
fs.writeFileSync(
|
|
307
|
-
`./engine-private/replica/${replicaDeployId}/package.json`,
|
|
308
|
-
fs
|
|
309
|
-
.readFileSync(`./engine-private/replica/${replicaDeployId}/package.json`, 'utf8')
|
|
310
|
-
.replaceAll(`${deployId}`, `${replicaDeployId}`),
|
|
311
|
-
'utf8',
|
|
312
|
-
);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
{
|
|
316
|
-
let replicaIndex = -1;
|
|
317
|
-
for (const replica of serverConf[host][path].replicas) {
|
|
318
|
-
replicaIndex++;
|
|
319
|
-
const replicaDeployId = `${deployId}-${serverConf[host][path].replicas[replicaIndex].slice(1)}`;
|
|
320
|
-
let replicaServerConf = JSON.parse(
|
|
321
|
-
fs.readFileSync(`./engine-private/replica/${replicaDeployId}/conf.server.json`, 'utf8'),
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
const singleReplicaConf = replicaServerConf[host][path];
|
|
325
|
-
singleReplicaConf.replicas = undefined;
|
|
326
|
-
singleReplicaConf.singleReplica = undefined;
|
|
327
|
-
|
|
328
|
-
replicaServerConf = {};
|
|
329
|
-
replicaServerConf[host] = {};
|
|
330
|
-
replicaServerConf[host][replica] = singleReplicaConf;
|
|
331
|
-
|
|
332
|
-
fs.writeFileSync(
|
|
333
|
-
`./engine-private/replica/${replicaDeployId}/conf.server.json`,
|
|
334
|
-
JSON.stringify(replicaServerConf, null, 4),
|
|
335
|
-
'utf8',
|
|
336
|
-
);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
break;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
196
|
case 'rename-package': {
|
|
344
197
|
const name = process.argv[3];
|
|
345
198
|
const originPackage = JSON.parse(fs.readFileSync(`./package.json`, 'utf8'));
|
|
@@ -365,129 +218,28 @@ try {
|
|
|
365
218
|
break;
|
|
366
219
|
}
|
|
367
220
|
|
|
368
|
-
case '
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
logger.error('Test template runner result failed');
|
|
389
|
-
break;
|
|
390
|
-
}
|
|
391
|
-
shellCd(`/home/dd/engine`);
|
|
392
|
-
Underpost.repo.clean({ paths: ['/home/dd/engine', '/home/dd/engine/engine-private '] });
|
|
393
|
-
const originPackageJson = JSON.parse(fs.readFileSync(`package.json`, 'utf8'));
|
|
394
|
-
const newVersion = process.argv[3] ?? originPackageJson.version;
|
|
395
|
-
const node = process.argv[4] ?? 'kind-control-plane';
|
|
396
|
-
const { version } = originPackageJson;
|
|
397
|
-
originPackageJson.version = newVersion;
|
|
398
|
-
fs.writeFileSync(`package.json`, JSON.stringify(originPackageJson, null, 4), 'utf8');
|
|
399
|
-
|
|
400
|
-
const originPackageLockJson = JSON.parse(fs.readFileSync(`package-lock.json`, 'utf8'));
|
|
401
|
-
originPackageLockJson.version = newVersion;
|
|
402
|
-
originPackageLockJson.packages[''].version = newVersion;
|
|
403
|
-
fs.writeFileSync(`package-lock.json`, JSON.stringify(originPackageLockJson, null, 4), 'utf8');
|
|
404
|
-
|
|
405
|
-
if (fs.existsSync(`./engine-private/conf`)) {
|
|
406
|
-
const files = await fs.readdir(`./engine-private/conf`, { recursive: true });
|
|
407
|
-
for (const relativePath of files) {
|
|
408
|
-
const filePah = `./engine-private/conf/${relativePath.replaceAll(`\\`, '/')}`;
|
|
409
|
-
if (filePah.split('/').pop() === 'package.json') {
|
|
410
|
-
const originPackage = JSON.parse(fs.readFileSync(filePah, 'utf8'));
|
|
411
|
-
originPackage.version = newVersion;
|
|
412
|
-
fs.writeFileSync(filePah, JSON.stringify(originPackage, null, 4), 'utf8');
|
|
413
|
-
}
|
|
414
|
-
if (filePah.split('/').pop() === 'deployment.yaml') {
|
|
415
|
-
fs.writeFileSync(
|
|
416
|
-
filePah,
|
|
417
|
-
fs
|
|
418
|
-
.readFileSync(filePah, 'utf8')
|
|
419
|
-
.replaceAll(`v${version}`, `v${newVersion}`)
|
|
420
|
-
.replaceAll(`engine.version: ${version}`, `engine.version: ${newVersion}`),
|
|
421
|
-
'utf8',
|
|
422
|
-
);
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
fs.writeFileSync(
|
|
428
|
-
`./manifests/deployment/dd-default-development/deployment.yaml`,
|
|
429
|
-
fs
|
|
430
|
-
.readFileSync(`./manifests/deployment/dd-default-development/deployment.yaml`, 'utf8')
|
|
431
|
-
.replaceAll(`underpost:v${version}`, `underpost:v${newVersion}`),
|
|
432
|
-
'utf8',
|
|
433
|
-
);
|
|
434
|
-
|
|
435
|
-
if (fs.existsSync(`./.github/workflows/docker-image.ci.yml`))
|
|
436
|
-
fs.writeFileSync(
|
|
437
|
-
`./.github/workflows/docker-image.ci.yml`,
|
|
438
|
-
fs
|
|
439
|
-
.readFileSync(`./.github/workflows/docker-image.ci.yml`, 'utf8')
|
|
440
|
-
.replaceAll(`underpost-engine:v${version}`, `underpost-engine:v${newVersion}`),
|
|
441
|
-
'utf8',
|
|
442
|
-
);
|
|
443
|
-
|
|
444
|
-
fs.writeFileSync(
|
|
445
|
-
`./src/index.js`,
|
|
446
|
-
fs.readFileSync(`./src/index.js`, 'utf8').replaceAll(`${version}`, `${newVersion}`),
|
|
447
|
-
'utf8',
|
|
448
|
-
);
|
|
449
|
-
shellExec(`node bin/deploy cli-docs ${version} ${newVersion}`);
|
|
450
|
-
shellExec(`node bin/deploy update-dependencies`);
|
|
451
|
-
shellExec(`node bin/build dd`);
|
|
452
|
-
shellExec(
|
|
453
|
-
`node bin deploy --kubeadm --build-manifest --sync --info-router --replicas 1 --node ${node} dd production`,
|
|
454
|
-
);
|
|
455
|
-
shellExec(
|
|
456
|
-
`node bin deploy --kubeadm --build-manifest --sync --info-router --replicas 1 --node ${node} dd development `,
|
|
457
|
-
);
|
|
458
|
-
for (const deployId of fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(`,`)) {
|
|
459
|
-
fs.copySync(
|
|
460
|
-
`./engine-private/conf/${deployId}/build/development/deployment.yaml`,
|
|
461
|
-
`./manifests/deployment/${deployId}-development/deployment.yaml`,
|
|
462
|
-
);
|
|
463
|
-
fs.copySync(
|
|
464
|
-
`./engine-private/conf/${deployId}/build/development/proxy.yaml`,
|
|
465
|
-
`./manifests/deployment/${deployId}-development/proxy.yaml`,
|
|
466
|
-
);
|
|
221
|
+
case 'build-default-confs': {
|
|
222
|
+
for (const deployId of fs
|
|
223
|
+
.readFileSync(`./engine-private/deploy/dd.router`, 'utf8')
|
|
224
|
+
.split(`,`)
|
|
225
|
+
.concat(['dd-cron'])) {
|
|
226
|
+
if (fs.existsSync(`./engine-private/conf/${deployId}/build/development/deployment.yaml`))
|
|
227
|
+
fs.copySync(
|
|
228
|
+
`./engine-private/conf/${deployId}/build/development/deployment.yaml`,
|
|
229
|
+
`./manifests/deployment/${deployId}-development/deployment.yaml`,
|
|
230
|
+
);
|
|
231
|
+
if (fs.existsSync(`./engine-private/conf/${deployId}/build/development/proxy.yaml`))
|
|
232
|
+
fs.copySync(
|
|
233
|
+
`./engine-private/conf/${deployId}/build/development/proxy.yaml`,
|
|
234
|
+
`./manifests/deployment/${deployId}-development/proxy.yaml`,
|
|
235
|
+
);
|
|
236
|
+
if (fs.existsSync(`./engine-private/conf/${deployId}/build/development/pv-pvc.yaml`))
|
|
237
|
+
fs.copySync(
|
|
238
|
+
`./engine-private/conf/${deployId}/build/development/pv-pvc.yaml`,
|
|
239
|
+
`./manifests/deployment/${deployId}-development/pv-pvc.yaml`,
|
|
240
|
+
);
|
|
467
241
|
shellExec(`node bin new --dev --default-conf --deploy-id ${deployId}`);
|
|
468
242
|
}
|
|
469
|
-
shellExec(`sudo rm -rf ./engine-private/conf/dd-default`);
|
|
470
|
-
shellExec(`node bin new --deploy-id dd-default`);
|
|
471
|
-
console.log(fs.existsSync(`./engine-private/conf/dd-default`));
|
|
472
|
-
shellExec(`sudo rm -rf ./engine-private/conf/dd-default`);
|
|
473
|
-
shellExec(`node bin cron --dev --setup-start`);
|
|
474
|
-
shellExec(`node bin/deploy build-envs`);
|
|
475
|
-
shellExec(`node bin cmt --changelog-build`);
|
|
476
|
-
break;
|
|
477
|
-
}
|
|
478
|
-
|
|
479
|
-
case 'version-deploy': {
|
|
480
|
-
dotenv.config({ path: `./engine-private/conf/dd-cron/.env.production`, override: true });
|
|
481
|
-
shellExec(
|
|
482
|
-
`underpost secret underpost --create-from-file /home/dd/engine/engine-private/conf/dd-cron/.env.production`,
|
|
483
|
-
);
|
|
484
|
-
shellExec(`node bin/deploy sync-envs`);
|
|
485
|
-
shellExec(`node bin/build dd conf`);
|
|
486
|
-
shellExec(`git add . && cd ./engine-private && git add .`);
|
|
487
|
-
shellExec(`node bin cmt . ci package-pwa-microservices-template 'New release v:${process.argv[3]}'`);
|
|
488
|
-
shellExec(`node bin cmt ./engine-private ci package-pwa-microservices-template`);
|
|
489
|
-
shellExec(`node bin push . ${process.env.GITHUB_USERNAME}/engine`);
|
|
490
|
-
shellExec(`cd ./engine-private && node ../bin push . ${process.env.GITHUB_USERNAME}/engine-private`);
|
|
491
243
|
break;
|
|
492
244
|
}
|
|
493
245
|
|
|
@@ -507,31 +259,6 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
|
|
|
507
259
|
break;
|
|
508
260
|
}
|
|
509
261
|
|
|
510
|
-
case 'heb': {
|
|
511
|
-
// https://besu.hyperledger.org/
|
|
512
|
-
// https://github.com/hyperledger/besu/archive/refs/tags/24.9.1.tar.gz
|
|
513
|
-
|
|
514
|
-
shellCd(`..`);
|
|
515
|
-
|
|
516
|
-
// Download the Linux binary
|
|
517
|
-
shellExec(`wget https://github.com/hyperledger/besu/releases/download/24.9.1/besu-24.9.1.tar.gz`);
|
|
518
|
-
|
|
519
|
-
// Unzip the file:
|
|
520
|
-
shellExec(`tar -xvzf besu-24.9.1.tar.gz`);
|
|
521
|
-
|
|
522
|
-
shellCd(`besu-24.9.1`);
|
|
523
|
-
|
|
524
|
-
shellExec(`bin/besu --help`);
|
|
525
|
-
|
|
526
|
-
// Set env path
|
|
527
|
-
// export PATH=$PATH:/home/dd/besu-24.9.1/bin
|
|
528
|
-
|
|
529
|
-
// Open src
|
|
530
|
-
// shellExec(`sudo code /home/dd/besu-24.9.1 --user-data-dir="/root/.vscode-root" --no-sandbox`);
|
|
531
|
-
|
|
532
|
-
break;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
262
|
case 'maas-db': {
|
|
536
263
|
// DROP, ALTER, CREATE, WITH ENCRYPTED
|
|
537
264
|
// sudo -u <user> -h <host> psql <db-name>
|
|
@@ -639,7 +366,10 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
|
|
|
639
366
|
`${path}/.env`,
|
|
640
367
|
fs
|
|
641
368
|
.readFileSync(`${path}/.env`, 'utf8')
|
|
642
|
-
.replace(
|
|
369
|
+
.replace(
|
|
370
|
+
`FIRST_SUPERUSER=admin@example.com`,
|
|
371
|
+
`FIRST_SUPERUSER=${process.env.GITHUB_EMAIL || 'development@underpost.net'}`,
|
|
372
|
+
)
|
|
643
373
|
.replace(`FIRST_SUPERUSER_PASSWORD=changethis`, `FIRST_SUPERUSER_PASSWORD=${password}`)
|
|
644
374
|
.replace(`SECRET_KEY=changethis`, `SECRET_KEY=${password}`)
|
|
645
375
|
.replace(`POSTGRES_DB=app`, `POSTGRES_DB=postgresdb`)
|
|
@@ -725,7 +455,7 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
|
|
|
725
455
|
shellExec(
|
|
726
456
|
`sudo kubectl create secret generic ${secretSelector}` +
|
|
727
457
|
` --from-file=SECRET_KEY=/home/dd/engine/engine-private/postgresql-password` +
|
|
728
|
-
` --from-literal=FIRST_SUPERUSER
|
|
458
|
+
` --from-literal=FIRST_SUPERUSER=${process.env.GITHUB_EMAIL || 'development@underpost.net'}` +
|
|
729
459
|
` --from-file=FIRST_SUPERUSER_PASSWORD=/home/dd/engine/engine-private/postgresql-password` +
|
|
730
460
|
` --dry-run=client -o yaml | kubectl apply -f - -n ${namespace}`,
|
|
731
461
|
);
|
|
@@ -873,71 +603,6 @@ nvidia/gpu-operator \
|
|
|
873
603
|
break;
|
|
874
604
|
}
|
|
875
605
|
|
|
876
|
-
case 'udpate-version-files': {
|
|
877
|
-
const oldNpmVersion = process.argv[3];
|
|
878
|
-
const oldNodeVersion = process.argv[4];
|
|
879
|
-
const oldNodeMajorVersion = oldNodeVersion.split('.')[0];
|
|
880
|
-
const nodeVersion = shellExec(`node --version`, { stdout: true }).trim().replace('v', '');
|
|
881
|
-
const newNodeMajorVersion = nodeVersion.split('.')[0];
|
|
882
|
-
const npmVersion = shellExec(`npm --version`, { stdout: true }).trim();
|
|
883
|
-
|
|
884
|
-
fs.writeFileSync(
|
|
885
|
-
`README.md`,
|
|
886
|
-
fs
|
|
887
|
-
.readFileSync(`README.md`, 'utf8')
|
|
888
|
-
.replaceAll(oldNodeVersion, nodeVersion)
|
|
889
|
-
.replaceAll(oldNpmVersion, npmVersion),
|
|
890
|
-
);
|
|
891
|
-
fs.writeFileSync(
|
|
892
|
-
`src/client/public/nexodev/docs/references/Getting started.md`,
|
|
893
|
-
fs
|
|
894
|
-
.readFileSync(`src/client/public/nexodev/docs/references/Getting started.md`, 'utf8')
|
|
895
|
-
.replaceAll(oldNodeVersion, nodeVersion)
|
|
896
|
-
.replaceAll(oldNpmVersion, npmVersion),
|
|
897
|
-
);
|
|
898
|
-
|
|
899
|
-
const workflowFiles = [
|
|
900
|
-
`./.github/workflows/coverall.ci.yml`,
|
|
901
|
-
|
|
902
|
-
`./.github/workflows/engine-core.ci.yml`,
|
|
903
|
-
|
|
904
|
-
`./.github/workflows/engine-cyberia.ci.yml`,
|
|
905
|
-
|
|
906
|
-
`./.github/workflows/engine-lampp.ci.yml`,
|
|
907
|
-
|
|
908
|
-
`./.github/workflows/engine-test.ci.yml`,
|
|
909
|
-
|
|
910
|
-
`./.github/workflows/ghpkg.ci.yml`,
|
|
911
|
-
|
|
912
|
-
`./.github/workflows/npmpkg.ci.yml`,
|
|
913
|
-
|
|
914
|
-
`./.github/workflows/publish.ci.yml`,
|
|
915
|
-
|
|
916
|
-
`./.github/workflows/pwa-microservices-template-page.cd.yml`,
|
|
917
|
-
|
|
918
|
-
`./.github/workflows/pwa-microservices-template-test.ci.yml`,
|
|
919
|
-
|
|
920
|
-
`./.github/workflows/test-api-rest.cd.yml`,
|
|
921
|
-
|
|
922
|
-
`./src/runtime/lampp/Dockerfile`,
|
|
923
|
-
|
|
924
|
-
`./Dockerfile`,
|
|
925
|
-
];
|
|
926
|
-
|
|
927
|
-
workflowFiles.forEach((file) => {
|
|
928
|
-
fs.writeFileSync(
|
|
929
|
-
file,
|
|
930
|
-
fs
|
|
931
|
-
.readFileSync(file, 'utf8')
|
|
932
|
-
.replaceAll(oldNodeMajorVersion + '.x', newNodeMajorVersion + '.x')
|
|
933
|
-
.replaceAll(oldNodeVersion, nodeVersion)
|
|
934
|
-
.replaceAll(oldNpmVersion, npmVersion),
|
|
935
|
-
);
|
|
936
|
-
});
|
|
937
|
-
pbcopy(`nvm alias default v${nodeVersion}`);
|
|
938
|
-
break;
|
|
939
|
-
}
|
|
940
|
-
|
|
941
606
|
case 'tls': {
|
|
942
607
|
fs.mkdirSync(`./engine-private/ssl/localhost`, { recursive: true });
|
|
943
608
|
const targetDir = `./engine-private/ssl/${process.argv[3] ? process.argv[3] : 'localhost'}`;
|
|
@@ -988,12 +653,18 @@ nvidia/gpu-operator \
|
|
|
988
653
|
}
|
|
989
654
|
|
|
990
655
|
case 'sync-start': {
|
|
656
|
+
const targetDeployId = process.argv[3] || 'dd';
|
|
657
|
+
const deployIds =
|
|
658
|
+
targetDeployId === 'dd'
|
|
659
|
+
? fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',')
|
|
660
|
+
: [targetDeployId];
|
|
991
661
|
const originPackageJson = JSON.parse(fs.readFileSync(`./package.json`, 'utf8'));
|
|
992
|
-
for (const deployId of
|
|
662
|
+
for (const deployId of deployIds) {
|
|
993
663
|
const packageJsonPath = `./engine-private/conf/${deployId}/package.json`;
|
|
994
664
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
995
|
-
packageJson.scripts
|
|
665
|
+
packageJson.scripts = { start: `${originPackageJson.scripts.start} ${deployId}` };
|
|
996
666
|
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 4), 'utf8');
|
|
667
|
+
logger.info(`sync-start`, { deployId, start: packageJson.scripts.start });
|
|
997
668
|
}
|
|
998
669
|
break;
|
|
999
670
|
}
|
|
@@ -1013,9 +684,32 @@ nvidia/gpu-operator \
|
|
|
1013
684
|
break;
|
|
1014
685
|
}
|
|
1015
686
|
|
|
1016
|
-
case '
|
|
1017
|
-
|
|
1018
|
-
|
|
687
|
+
case 'sync-conf': {
|
|
688
|
+
const originPackageJson = JSON.parse(fs.readFileSync(`./package.json`, 'utf8'));
|
|
689
|
+
for (const deployId of ['dd-cron'].concat(
|
|
690
|
+
fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(','),
|
|
691
|
+
)) {
|
|
692
|
+
for (const file of fs.readdirSync(`./engine-private/conf/${deployId}/`)) {
|
|
693
|
+
const deployPackage = JSON.parse(fs.readFileSync(`./engine-private/conf/${deployId}/package.json`, 'utf8'));
|
|
694
|
+
deployPackage.overrides = originPackageJson.overrides;
|
|
695
|
+
deployPackage.dependencies = originPackageJson.dependencies;
|
|
696
|
+
fs.writeFileSync(
|
|
697
|
+
`./engine-private/conf/${deployId}/package.json`,
|
|
698
|
+
JSON.stringify(deployPackage, null, 4),
|
|
699
|
+
'utf8',
|
|
700
|
+
);
|
|
701
|
+
if (file.startsWith('conf.server') && file.endsWith('.json')) {
|
|
702
|
+
const filePath = `./engine-private/conf/${deployId}/${file}`;
|
|
703
|
+
const confObj = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
704
|
+
for (const host of Object.keys(confObj)) {
|
|
705
|
+
for (const path of Object.keys(confObj[host])) {
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
// fs.writeFileSync(filePath, JSON.stringify(confObj, null, 4), 'utf8');
|
|
709
|
+
logger.info(`sync-conf`, { deployId, file });
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
}
|
|
1019
713
|
break;
|
|
1020
714
|
}
|
|
1021
715
|
|
|
@@ -1040,7 +734,7 @@ nvidia/gpu-operator \
|
|
|
1040
734
|
if (fs.existsSync(toPath)) fs.removeSync(toPath);
|
|
1041
735
|
shellExec(`node bin/deploy pw-conf ${scriptPath}`);
|
|
1042
736
|
shellExec(`kubectl delete deployment playwright-server --ignore-not-found`);
|
|
1043
|
-
while (Underpost.
|
|
737
|
+
while (Underpost.kubectl.get('playwright-server').length > 0) {
|
|
1044
738
|
logger.info(`Waiting for playwright-server deployment to be deleted...`);
|
|
1045
739
|
await timer(1000);
|
|
1046
740
|
}
|
|
@@ -1048,13 +742,13 @@ nvidia/gpu-operator \
|
|
|
1048
742
|
const id = 'playwright-server';
|
|
1049
743
|
await Underpost.test.statusMonitor(id);
|
|
1050
744
|
const nameSpace = 'default';
|
|
1051
|
-
const [pod] = Underpost.
|
|
745
|
+
const [pod] = Underpost.kubectl.get(id);
|
|
1052
746
|
const podName = pod.NAME;
|
|
1053
747
|
shellExec(`kubectl logs -f ${podName} -n ${nameSpace}`, {
|
|
1054
748
|
async: true,
|
|
1055
749
|
});
|
|
1056
750
|
(async () => {
|
|
1057
|
-
while (!Underpost.
|
|
751
|
+
while (!Underpost.kubectl.existsFile({ podName, path: fromPath })) {
|
|
1058
752
|
await timer(1000);
|
|
1059
753
|
logger.info(`Waiting for file ${fromPath} in pod ${podName}...`);
|
|
1060
754
|
}
|
|
@@ -1073,6 +767,198 @@ nvidia/gpu-operator \
|
|
|
1073
767
|
`);
|
|
1074
768
|
break;
|
|
1075
769
|
}
|
|
770
|
+
|
|
771
|
+
case 'dependabot': {
|
|
772
|
+
dotenv.config({ path: `./engine-private/conf/dd-cron/.env.production`, override: true });
|
|
773
|
+
shellExec(`git fetch origin --prune`);
|
|
774
|
+
|
|
775
|
+
const { stdout: branchOutput } = shellExec(`git branch -r`, { silent: true });
|
|
776
|
+
const dependabotBranches = branchOutput
|
|
777
|
+
.split('\n')
|
|
778
|
+
.map((b) => b.trim())
|
|
779
|
+
.filter((b) => b.startsWith('remotes/origin/dependabot/') || b.startsWith('origin/dependabot/'))
|
|
780
|
+
.map((b) => b.replace(/^remotes\//, '').replace(/^origin\//, ''));
|
|
781
|
+
|
|
782
|
+
if (dependabotBranches.length === 0) {
|
|
783
|
+
logger.info('No remote dependabot branches found');
|
|
784
|
+
break;
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
logger.info('Found dependabot branches:', dependabotBranches);
|
|
788
|
+
|
|
789
|
+
// Stash local changes to prevent checkout/merge conflicts
|
|
790
|
+
const stashResult = shellExec(`git stash --include-untracked`, { silent: true });
|
|
791
|
+
const hasStash = !stashResult.stdout.includes('No local changes to save');
|
|
792
|
+
|
|
793
|
+
// Checkout master
|
|
794
|
+
const checkoutResult = shellExec(`git checkout master`);
|
|
795
|
+
if (checkoutResult.code !== 0) {
|
|
796
|
+
logger.error('Failed to checkout master');
|
|
797
|
+
if (hasStash) shellExec(`git stash pop`);
|
|
798
|
+
break;
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
// Pull latest master
|
|
802
|
+
shellExec(`git pull origin master`);
|
|
803
|
+
|
|
804
|
+
// Get repo URI from remote
|
|
805
|
+
const remoteUrl = shellExec(`git config --get remote.origin.url`, { stdout: true, silent: true }).trim();
|
|
806
|
+
const gitUri = remoteUrl.replace(/.*github\.com[:/]/, '').replace(/\.git$/, '');
|
|
807
|
+
|
|
808
|
+
const mergedBranches = [];
|
|
809
|
+
const failedBranches = [];
|
|
810
|
+
|
|
811
|
+
for (const branch of dependabotBranches) {
|
|
812
|
+
logger.info(`Merging branch: ${branch}`);
|
|
813
|
+
const mergeResult = shellExec(`git merge origin/${branch}`);
|
|
814
|
+
if (mergeResult.code === 0) {
|
|
815
|
+
const isAlreadyMerged = mergeResult.stdout && mergeResult.stdout.includes('Already up to date');
|
|
816
|
+
mergedBranches.push({ branch, isAlreadyMerged });
|
|
817
|
+
} else {
|
|
818
|
+
logger.error(`Failed to merge branch: ${branch}`);
|
|
819
|
+
shellExec(`git merge --abort`, { silent: true });
|
|
820
|
+
failedBranches.push(branch);
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
// Delete merged local and remote branches
|
|
825
|
+
for (const { branch, isAlreadyMerged } of mergedBranches) {
|
|
826
|
+
shellExec(`git branch -D ${branch}`, { silent: true });
|
|
827
|
+
// logger.info(`Deleting remote branch: ${branch}${isAlreadyMerged ? ' (already merged)' : ''}`);
|
|
828
|
+
// shellExec(`git push https://${process.env.GITHUB_TOKEN}@github.com/${gitUri}.git --delete ${branch}`, {
|
|
829
|
+
// disableLog: true,
|
|
830
|
+
// });
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
// Restore stashed changes
|
|
834
|
+
if (hasStash) shellExec(`git stash pop`);
|
|
835
|
+
|
|
836
|
+
logger.info(
|
|
837
|
+
'Merged branches:',
|
|
838
|
+
mergedBranches.map((m) => m.branch),
|
|
839
|
+
);
|
|
840
|
+
if (failedBranches.length > 0) logger.warn('Failed branches:', failedBranches);
|
|
841
|
+
logger.info('Dependabot merge completed');
|
|
842
|
+
break;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
case 'add-api': {
|
|
846
|
+
// node bin/deploy add-api <apiId> <deployId> [clientId] [host]
|
|
847
|
+
// Example: node bin/deploy add-api cyberia-dialogue dd-cyberia cyberia-portal
|
|
848
|
+
// Example: node bin/deploy add-api cyberia-dialogue dd-cyberia cyberia-portal underpost.net
|
|
849
|
+
//
|
|
850
|
+
// Adds an API to server conf files (main + dev variants) and client conf.
|
|
851
|
+
// - conf.server.json: adds apiId to every host/path that has an `apis` array
|
|
852
|
+
// (or only to the specified host if [host] is provided)
|
|
853
|
+
// - conf.server.dev.*.json: same treatment for all dev variants
|
|
854
|
+
// - conf.client.json: adds apiId to the specified clientId's `services` array
|
|
855
|
+
// Idempotent: skips if the API is already present.
|
|
856
|
+
|
|
857
|
+
const apiId = process.argv[3];
|
|
858
|
+
const deployId = process.argv[4];
|
|
859
|
+
const clientId = process.argv[5];
|
|
860
|
+
const targetHost = process.argv[6];
|
|
861
|
+
|
|
862
|
+
if (!apiId || !deployId) {
|
|
863
|
+
logger.error('Usage: node bin/deploy add-api <apiId> <deployId> [clientId] [host]');
|
|
864
|
+
logger.error('Example: node bin/deploy add-api cyberia-dialogue dd-cyberia cyberia-portal');
|
|
865
|
+
logger.error('Example: node bin/deploy add-api cyberia-dialogue dd-cyberia cyberia-portal underpost.net');
|
|
866
|
+
process.exit(1);
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
const confFolder = `./engine-private/conf/${deployId}`;
|
|
870
|
+
if (!fs.existsSync(confFolder)) {
|
|
871
|
+
logger.error(`Config folder not found: ${confFolder}`);
|
|
872
|
+
process.exit(1);
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
// Helper: add apiId to apis[] arrays in a server conf file (idempotent)
|
|
876
|
+
// When targetHost is set, only entries under that host are modified.
|
|
877
|
+
const addApiToServerConf = (filePath) => {
|
|
878
|
+
if (!fs.existsSync(filePath)) return 0;
|
|
879
|
+
const conf = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
880
|
+
let count = 0;
|
|
881
|
+
const hosts = targetHost ? (conf[targetHost] ? [targetHost] : []) : Object.keys(conf);
|
|
882
|
+
for (const host of hosts) {
|
|
883
|
+
for (const path of Object.keys(conf[host])) {
|
|
884
|
+
const entry = conf[host][path];
|
|
885
|
+
if (Array.isArray(entry.apis) && entry.apis.length > 0 && !entry.apis.includes(apiId)) {
|
|
886
|
+
entry.apis.push(apiId);
|
|
887
|
+
count++;
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
if (count > 0) {
|
|
892
|
+
fs.writeFileSync(filePath, JSON.stringify(conf, null, 4), 'utf8');
|
|
893
|
+
}
|
|
894
|
+
return count;
|
|
895
|
+
};
|
|
896
|
+
|
|
897
|
+
// 1. Main conf.server.json
|
|
898
|
+
const mainPath = `${confFolder}/conf.server.json`;
|
|
899
|
+
const mainCount = addApiToServerConf(mainPath);
|
|
900
|
+
logger.info(`conf.server.json: added "${apiId}" to ${mainCount} path(s)`);
|
|
901
|
+
|
|
902
|
+
// 2. All dev variants: conf.server.dev.*.json
|
|
903
|
+
const devFiles = fs
|
|
904
|
+
.readdirSync(confFolder)
|
|
905
|
+
.filter((f) => f.startsWith('conf.server.dev.') && f.endsWith('.json'));
|
|
906
|
+
for (const devFile of devFiles) {
|
|
907
|
+
const devPath = `${confFolder}/${devFile}`;
|
|
908
|
+
const devCount = addApiToServerConf(devPath);
|
|
909
|
+
logger.info(`${devFile}: added "${apiId}" to ${devCount} path(s)`);
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
// Helper: add apiId to a client conf file's clientId services (idempotent)
|
|
913
|
+
const addApiToClientConf = (filePath, label) => {
|
|
914
|
+
if (!clientId || !fs.existsSync(filePath)) return;
|
|
915
|
+
const confClient = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
916
|
+
if (confClient[clientId] && Array.isArray(confClient[clientId].services)) {
|
|
917
|
+
if (!confClient[clientId].services.includes(apiId)) {
|
|
918
|
+
confClient[clientId].services.push(apiId);
|
|
919
|
+
fs.writeFileSync(filePath, JSON.stringify(confClient, null, 4), 'utf8');
|
|
920
|
+
logger.info(`${label}: added "${apiId}" to "${clientId}" services`);
|
|
921
|
+
} else {
|
|
922
|
+
logger.info(`${label}: "${apiId}" already in "${clientId}" services`);
|
|
923
|
+
}
|
|
924
|
+
} else {
|
|
925
|
+
logger.warn(`${label}: clientId "${clientId}" not found or has no services array`);
|
|
926
|
+
}
|
|
927
|
+
};
|
|
928
|
+
|
|
929
|
+
// 3. Client conf.client.json
|
|
930
|
+
addApiToClientConf(`${confFolder}/conf.client.json`, 'conf.client.json');
|
|
931
|
+
|
|
932
|
+
// 4. Replicas: engine-private/replica/<deployId>-*
|
|
933
|
+
const replicaBase = './engine-private/replica';
|
|
934
|
+
if (fs.existsSync(replicaBase)) {
|
|
935
|
+
const replicaDirs = fs
|
|
936
|
+
.readdirSync(replicaBase)
|
|
937
|
+
.filter((d) => d.startsWith(`${deployId}-`) && fs.statSync(`${replicaBase}/${d}`).isDirectory());
|
|
938
|
+
for (const replicaDir of replicaDirs) {
|
|
939
|
+
const replicaFolder = `${replicaBase}/${replicaDir}`;
|
|
940
|
+
// Server conf
|
|
941
|
+
const rMainCount = addApiToServerConf(`${replicaFolder}/conf.server.json`);
|
|
942
|
+
logger.info(`replica/${replicaDir}/conf.server.json: added "${apiId}" to ${rMainCount} path(s)`);
|
|
943
|
+
// Dev variants
|
|
944
|
+
const rDevFiles = fs
|
|
945
|
+
.readdirSync(replicaFolder)
|
|
946
|
+
.filter((f) => f.startsWith('conf.server.dev.') && f.endsWith('.json'));
|
|
947
|
+
for (const rDevFile of rDevFiles) {
|
|
948
|
+
const rDevCount = addApiToServerConf(`${replicaFolder}/${rDevFile}`);
|
|
949
|
+
logger.info(`replica/${replicaDir}/${rDevFile}: added "${apiId}" to ${rDevCount} path(s)`);
|
|
950
|
+
}
|
|
951
|
+
// Client conf
|
|
952
|
+
addApiToClientConf(`${replicaFolder}/conf.client.json`, `replica/${replicaDir}/conf.client.json`);
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
// 5. Rebuild default conf
|
|
957
|
+
shellExec(`node bin new --default-conf --deploy-id ${deployId}`);
|
|
958
|
+
logger.info(`Rebuilt default conf for ${deployId}`);
|
|
959
|
+
|
|
960
|
+
break;
|
|
961
|
+
}
|
|
1076
962
|
}
|
|
1077
963
|
} catch (error) {
|
|
1078
964
|
logger.error(error, error.stack);
|