cyberia 3.2.12 → 3.2.70
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.example +127 -68
- package/.github/workflows/cyberia-client.cd.yml +40 -0
- package/.github/workflows/cyberia-server.cd.yml +40 -0
- package/.github/workflows/docker-image.cyberia-client.ci.yml +49 -0
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +48 -0
- package/.github/workflows/docker-image.cyberia-server.ci.yml +69 -0
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +69 -0
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +52 -0
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +52 -0
- package/.github/workflows/engine-cyberia.cd.yml +34 -24
- package/.github/workflows/engine-cyberia.ci.yml +27 -5
- package/.github/workflows/ghpkg.ci.yml +89 -1
- package/.github/workflows/gitlab.ci.yml +1 -1
- package/.github/workflows/hardhat.ci.yml +1 -1
- package/.github/workflows/npmpkg.ci.yml +19 -12
- package/.github/workflows/publish.ci.yml +2 -2
- package/.github/workflows/publish.cyberia.ci.yml +5 -16
- package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -8
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/CHANGELOG.md +451 -1
- package/CLI-HELP.md +1040 -1130
- package/Dockerfile +141 -43
- package/Dockerfile.dev +143 -0
- package/Dockerfile.test +165 -0
- package/README.md +1 -1
- package/baremetal/commission-workflows.json +1 -0
- package/bin/build.js +128 -136
- package/bin/build.template.js +25 -179
- package/bin/cyberia.js +1089 -188
- package/bin/deploy.js +6 -3
- package/bin/index.js +1089 -188
- package/bump.config.js +1 -0
- package/compose.env +131 -0
- package/conf.js +19 -1
- package/deployment.yaml +74 -2
- package/docker-compose.yml +316 -0
- package/hardhat/hardhat.config.js +2 -2
- package/hardhat/package-lock.json +620 -2041
- package/hardhat/package.json +7 -5
- package/hardhat/scripts/deployObjectLayerToken.js +18 -18
- package/hardhat/test/ObjectLayerToken.js +378 -274
- package/ipfs/configure-ipfs.sh +13 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +74 -2
- package/manifests/deployment/dd-cyberia-development/grpc-service.yaml +17 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +32 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/mongodb/entrypoint.sh +76 -0
- package/nginx.conf +87 -0
- package/package.json +34 -22
- package/pv-pvc.yaml +32 -0
- package/scripts/disk-clean.sh +85 -60
- package/scripts/kubeadm-node-setup.sh +317 -0
- package/scripts/link-local-underpost-cli.sh +6 -0
- package/scripts/rocky-kickstart.sh +877 -185
- package/scripts/rpmfusion-ffmpeg-setup.sh +26 -50
- package/scripts/test-monitor.sh +248 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +43 -7
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +17 -25
- package/src/api/cyberia-action/cyberia-action.controller.js +19 -0
- package/src/api/cyberia-action/cyberia-action.model.js +21 -29
- package/src/api/cyberia-action/cyberia-action.router.js +42 -7
- package/src/api/cyberia-action/cyberia-action.service.js +20 -4
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +58 -57
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +37 -6
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +8 -2
- package/src/api/cyberia-entity/cyberia-entity.router.js +39 -7
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +74 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +67 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +63 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +46 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +62 -10
- package/src/api/cyberia-instance/cyberia-instance.model.js +32 -2
- package/src/api/cyberia-instance/cyberia-instance.router.js +6 -6
- package/src/api/cyberia-instance/cyberia-world-generator.js +116 -3
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +3 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +39 -7
- package/src/api/cyberia-map/cyberia-map.router.js +21 -6
- package/src/api/cyberia-quest/cyberia-quest.controller.js +38 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +47 -7
- package/src/api/cyberia-quest/cyberia-quest.service.js +59 -4
- package/src/api/cyberia-saga/cyberia-saga.controller.js +74 -0
- package/src/api/cyberia-saga/cyberia-saga.model.js +59 -0
- package/src/api/cyberia-saga/cyberia-saga.router.js +63 -0
- package/src/api/cyberia-saga/cyberia-saga.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +551 -122
- package/src/api/cyberia-skill/cyberia-skill.controller.js +74 -0
- package/src/api/cyberia-skill/cyberia-skill.model.js +50 -0
- package/src/api/cyberia-skill/cyberia-skill.router.js +63 -0
- package/src/api/cyberia-skill/cyberia-skill.service.js +42 -0
- package/src/api/ipfs/ipfs.service.js +28 -15
- package/src/api/object-layer/object-layer.router.js +25 -15
- package/src/api/object-layer/object-layer.service.js +15 -20
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +39 -7
- package/src/cli/baremetal.js +717 -16
- package/src/cli/cluster.js +80 -5
- package/src/cli/deploy.js +326 -292
- package/src/cli/docker-compose.js +648 -0
- package/src/cli/env.js +12 -6
- package/src/cli/fs.js +75 -30
- package/src/cli/image.js +187 -55
- package/src/cli/index.js +157 -6
- package/src/cli/kickstart.js +142 -20
- package/src/cli/monitor.js +387 -6
- package/src/cli/release.js +72 -15
- package/src/cli/repository.js +339 -40
- package/src/cli/run.js +678 -186
- package/src/cli/secrets.js +82 -48
- package/src/cli/ssh.js +234 -0
- package/src/cli/static.js +2 -2
- package/src/client/components/core/PanelForm.js +44 -44
- package/src/client/components/cyberia/ActionEngineCyberia.js +1867 -0
- package/src/client/components/cyberia/EntityEngineCyberia.js +585 -0
- package/src/client/components/cyberia/InstanceEngineCyberia.js +219 -13
- package/src/client/components/cyberia/MapEngineCyberia.js +154 -71
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +40 -63
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +34 -20
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +195 -4
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +66 -0
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +8 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +8 -0
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +92 -20
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +272 -50
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +3 -3
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +39 -22
- package/src/client/public/cyberia-docs/CYBERIA-LORE.md +88 -0
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +394 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +28 -12
- package/src/client/public/cyberia-docs/CYBERIA.md +1 -1
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +27 -5
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +99 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +2 -2
- package/src/client/services/cyberia-map/cyberia-map.management.js +2 -2
- package/src/client/services/cyberia-saga/cyberia-saga.service.js +99 -0
- package/src/client/services/cyberia-skill/cyberia-skill.service.js +99 -0
- package/src/client/services/object-layer/object-layer.management.js +6 -6
- package/src/{server → client-builder}/client-build-docs.js +15 -5
- package/src/{server → client-builder}/client-build-live.js +3 -3
- package/src/{server → client-builder}/client-build.js +25 -22
- package/src/{server → client-builder}/client-dev-server.js +3 -3
- package/src/{server → client-builder}/client-icons.js +2 -2
- package/src/{server → client-builder}/ssr.js +5 -5
- package/src/client.build.js +1 -3
- package/src/client.dev.js +1 -1
- package/src/db/mongo/MongoBootstrap.js +12 -12
- package/src/db/mongo/MongooseDB.js +2 -1
- package/src/grpc/cyberia/grpc-server.js +255 -70
- package/src/index.js +12 -1
- package/src/mailer/EmailRender.js +1 -1
- package/src/{server → projects/cyberia}/atlas-sprite-sheet-generator.js +2 -2
- package/src/{server → projects/cyberia}/besu-genesis-generator.js +3 -3
- package/src/projects/cyberia/catalog-cyberia.js +81 -0
- package/src/projects/cyberia/gemini-client.js +175 -0
- package/src/projects/cyberia/generate-saga.js +2107 -0
- package/src/{server → projects/cyberia}/ipfs-client.js +6 -4
- package/src/{server → projects/cyberia}/object-layer.js +12 -108
- package/src/{server → projects/cyberia}/semantic-layer-generator-floor.js +1 -1
- package/src/{server → projects/cyberia}/semantic-layer-generator-resource.js +1 -1
- package/src/{server → projects/cyberia}/semantic-layer-generator-skin.js +1 -1
- package/src/{server → projects/cyberia}/semantic-layer-generator.js +2 -2
- package/src/{server → projects/cyberia}/shape-generator.js +2 -2
- package/src/projects/underpost/catalog-underpost.js +60 -0
- package/src/runtime/cyberia-client/Dockerfile +31 -83
- package/src/runtime/cyberia-client/Dockerfile.dev +23 -30
- package/src/runtime/cyberia-server/Dockerfile +23 -42
- package/src/runtime/cyberia-server/Dockerfile.dev +20 -35
- package/src/runtime/engine-cyberia/Dockerfile +143 -0
- package/src/runtime/engine-cyberia/Dockerfile.dev +143 -0
- package/src/runtime/engine-cyberia/Dockerfile.test +165 -0
- package/src/runtime/engine-cyberia/compose.env +131 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +316 -0
- package/src/runtime/engine-cyberia/ipfs/configure-ipfs.sh +13 -0
- package/src/runtime/engine-cyberia/mongodb/entrypoint.sh +76 -0
- package/src/runtime/engine-cyberia/nginx.conf +87 -0
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/nginx/Nginx.js +250 -0
- package/src/runtime/wp/Dockerfile +3 -3
- package/src/server/catalog.js +72 -0
- package/src/server/conf.js +415 -60
- package/src/server/runtime-status.js +252 -0
- package/src/server/start.js +42 -11
- package/src/server.js +6 -2
- package/test/cyberia-instance-conf-defaults.test.js +140 -0
- package/test/deploy-monitor.test.js +267 -0
- package/test/shape-generator.test.js +7 -1
- package/typedoc.dd-cyberia.json +3 -1
- package/typedoc.json +3 -1
- package/manifests/deployment/dd-test-development/deployment.yaml +0 -256
- package/manifests/deployment/dd-test-development/proxy.yaml +0 -102
- /package/src/client/ssr/{Render.js → RootDocument.js} +0 -0
- /package/src/{server → client-builder}/client-formatted.js +0 -0
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
* @namespace IpfsClient
|
|
12
12
|
*/
|
|
13
13
|
import stringify from 'fast-json-stable-stringify';
|
|
14
|
-
import { loggerFactory } from '
|
|
14
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
15
|
+
import Underpost from '../../index.js';
|
|
15
16
|
const logger = loggerFactory(import.meta);
|
|
16
17
|
const DEFAULT_IPFS_HTTP_TIMEOUT_MS = Number(process.env.IPFS_HTTP_TIMEOUT_MS || 10000);
|
|
17
18
|
const getRequestTimeoutMs = (kind = 'kubo') => {
|
|
@@ -46,21 +47,22 @@ const fetchWithTimeout = async (url, options = {}, { kind = 'kubo', label = url
|
|
|
46
47
|
* @returns {string}
|
|
47
48
|
*/
|
|
48
49
|
const getIpfsApiUrl = () =>
|
|
49
|
-
process.env.IPFS_API_URL ||
|
|
50
|
+
process.env.IPFS_API_URL ||
|
|
51
|
+
`http://${process.env.NODE_ENV === 'development' && !Underpost.env.isInsideContainer() ? 'localhost' : 'ipfs-cluster'}:5001`;
|
|
50
52
|
/**
|
|
51
53
|
* Base URL of the IPFS Cluster REST API (port 9094).
|
|
52
54
|
* @returns {string}
|
|
53
55
|
*/
|
|
54
56
|
const getClusterApiUrl = () =>
|
|
55
57
|
process.env.IPFS_CLUSTER_API_URL ||
|
|
56
|
-
`http://${process.env.NODE_ENV === 'development' ? 'localhost' : 'ipfs-cluster'}:9094`;
|
|
58
|
+
`http://${process.env.NODE_ENV === 'development' && !Underpost.env.isInsideContainer() ? 'localhost' : 'ipfs-cluster'}:9094`;
|
|
57
59
|
/**
|
|
58
60
|
* Base URL of the IPFS HTTP Gateway (port 8080).
|
|
59
61
|
* @returns {string}
|
|
60
62
|
*/
|
|
61
63
|
const getGatewayUrl = () =>
|
|
62
64
|
process.env.IPFS_GATEWAY_URL ||
|
|
63
|
-
`http://${process.env.NODE_ENV === 'development' ? 'localhost' : 'ipfs-cluster'}:8080`;
|
|
65
|
+
`http://${process.env.NODE_ENV === 'development' && !Underpost.env.isInsideContainer() ? 'localhost' : 'ipfs-cluster'}:8080`;
|
|
64
66
|
// ─────────────────────────────────────────────────────────
|
|
65
67
|
// Core: add content
|
|
66
68
|
// ─────────────────────────────────────────────────────────
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Provides utilities and engine logic for processing and managing Cyberia Online's object layer assets (skins, floors, weapons, etc.).
|
|
3
3
|
* Shared logic consumed by both the Cyberia CLI and the REST API service layer.
|
|
4
|
-
* @module src/
|
|
4
|
+
* @module src/projects/cyberia/object-layer.js
|
|
5
5
|
* @namespace CyberiaObjectLayer
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -13,9 +13,13 @@ import { Jimp, intToRGBA, rgbaToInt } from 'jimp';
|
|
|
13
13
|
import crypto from 'crypto';
|
|
14
14
|
import stringify from 'fast-json-stable-stringify';
|
|
15
15
|
|
|
16
|
-
import { range } from '
|
|
17
|
-
import {
|
|
18
|
-
|
|
16
|
+
import { range } from '../../client/components/core/CommonJs.js';
|
|
17
|
+
import {
|
|
18
|
+
generateRandomStats,
|
|
19
|
+
getKeyframeDirectionsByCode,
|
|
20
|
+
OBJECT_LAYER_DIRECTION_NAME_TO_CODE,
|
|
21
|
+
} from '../../client/components/cyberia/SharedDefaultsCyberia.js';
|
|
22
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
19
23
|
|
|
20
24
|
const logger = loggerFactory(import.meta);
|
|
21
25
|
|
|
@@ -206,46 +210,6 @@ export class ObjectLayerEngine {
|
|
|
206
210
|
return { frame, colors };
|
|
207
211
|
}
|
|
208
212
|
|
|
209
|
-
/**
|
|
210
|
-
* Converts a numerical folder direction (e.g., '08', '14') into an array of corresponding keyframe names (e.g., 'down_idle', 'left_walking').
|
|
211
|
-
* @static
|
|
212
|
-
* @param {string} direction - The numerical direction string.
|
|
213
|
-
* @returns {string[]} An array of keyframe direction names.
|
|
214
|
-
* @memberof CyberiaObjectLayer
|
|
215
|
-
*/
|
|
216
|
-
static getKeyFramesDirectionsFromNumberFolderDirection(direction) {
|
|
217
|
-
let objectLayerFrameDirections = [];
|
|
218
|
-
|
|
219
|
-
switch (direction) {
|
|
220
|
-
case '08':
|
|
221
|
-
objectLayerFrameDirections = ['down_idle', 'none_idle', 'default_idle'];
|
|
222
|
-
break;
|
|
223
|
-
case '18':
|
|
224
|
-
objectLayerFrameDirections = ['down_walking'];
|
|
225
|
-
break;
|
|
226
|
-
case '02':
|
|
227
|
-
objectLayerFrameDirections = ['up_idle'];
|
|
228
|
-
break;
|
|
229
|
-
case '12':
|
|
230
|
-
objectLayerFrameDirections = ['up_walking'];
|
|
231
|
-
break;
|
|
232
|
-
case '04':
|
|
233
|
-
objectLayerFrameDirections = ['left_idle', 'up_left_idle', 'down_left_idle'];
|
|
234
|
-
break;
|
|
235
|
-
case '14':
|
|
236
|
-
objectLayerFrameDirections = ['left_walking', 'up_left_walking', 'down_left_walking'];
|
|
237
|
-
break;
|
|
238
|
-
case '06':
|
|
239
|
-
objectLayerFrameDirections = ['right_idle', 'up_right_idle', 'down_right_idle'];
|
|
240
|
-
break;
|
|
241
|
-
case '16':
|
|
242
|
-
objectLayerFrameDirections = ['right_walking', 'up_right_walking', 'down_right_walking'];
|
|
243
|
-
break;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
return objectLayerFrameDirections;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
213
|
/**
|
|
250
214
|
* Processes an image file through {@link ObjectLayerEngine.frameFactory} and adds the resulting frame to the render data structure.
|
|
251
215
|
* Updates the color palette and pushes the frame to all keyframe directions corresponding to the given direction code.
|
|
@@ -278,7 +242,7 @@ export class ObjectLayerEngine {
|
|
|
278
242
|
objectLayerRenderFramesData.colors = processedObjectLayerRenderFramesData.colors;
|
|
279
243
|
|
|
280
244
|
// Get all keyframe directions for this direction code
|
|
281
|
-
const keyframeDirections =
|
|
245
|
+
const keyframeDirections = getKeyframeDirectionsByCode(directionCode);
|
|
282
246
|
|
|
283
247
|
// Push the frame to all corresponding directions
|
|
284
248
|
for (const keyframeDirection of keyframeDirections) {
|
|
@@ -355,23 +319,6 @@ export class ObjectLayerEngine {
|
|
|
355
319
|
await image.write(imagePath);
|
|
356
320
|
}
|
|
357
321
|
|
|
358
|
-
/**
|
|
359
|
-
* Generates a random set of character statistics for an item, with values between 0 and 10.
|
|
360
|
-
* @static
|
|
361
|
-
* @returns {{effect: number, resistance: number, agility: number, range: number, intelligence: number, utility: number}} The random stats object.
|
|
362
|
-
* @memberof CyberiaObjectLayer
|
|
363
|
-
*/
|
|
364
|
-
static generateRandomStats() {
|
|
365
|
-
return {
|
|
366
|
-
effect: random(0, 10),
|
|
367
|
-
resistance: random(0, 10),
|
|
368
|
-
agility: random(0, 10),
|
|
369
|
-
range: random(0, 10),
|
|
370
|
-
intelligence: random(0, 10),
|
|
371
|
-
utility: random(0, 10),
|
|
372
|
-
};
|
|
373
|
-
}
|
|
374
|
-
|
|
375
322
|
// ──────────────────────────────────────────────────────────────────────────
|
|
376
323
|
// Document lifecycle methods
|
|
377
324
|
// ──────────────────────────────────────────────────────────────────────────
|
|
@@ -441,7 +388,7 @@ export class ObjectLayerEngine {
|
|
|
441
388
|
description: '',
|
|
442
389
|
activable: true,
|
|
443
390
|
},
|
|
444
|
-
stats: metadata.data.stats ||
|
|
391
|
+
stats: metadata.data.stats || generateRandomStats(),
|
|
445
392
|
ledger: metadata.data.ledger || { type: 'OFF_CHAIN' },
|
|
446
393
|
},
|
|
447
394
|
};
|
|
@@ -454,7 +401,7 @@ export class ObjectLayerEngine {
|
|
|
454
401
|
description: '',
|
|
455
402
|
activable: true,
|
|
456
403
|
},
|
|
457
|
-
stats:
|
|
404
|
+
stats: generateRandomStats(),
|
|
458
405
|
ledger: { type: 'OFF_CHAIN' },
|
|
459
406
|
},
|
|
460
407
|
};
|
|
@@ -506,34 +453,6 @@ export class ObjectLayerEngine {
|
|
|
506
453
|
return crypto.createHash('sha256').update(stringify(data)).digest('hex');
|
|
507
454
|
}
|
|
508
455
|
|
|
509
|
-
/**
|
|
510
|
-
* Map of keyframe direction names to their numeric folder direction codes.
|
|
511
|
-
* Inverse of {@link ObjectLayerEngine.getKeyFramesDirectionsFromNumberFolderDirection}.
|
|
512
|
-
* @static
|
|
513
|
-
* @type {Object<string, string>}
|
|
514
|
-
* @memberof CyberiaObjectLayer
|
|
515
|
-
*/
|
|
516
|
-
static directionNameToCode = {
|
|
517
|
-
down_idle: '08',
|
|
518
|
-
none_idle: '08',
|
|
519
|
-
default_idle: '08',
|
|
520
|
-
up_idle: '02',
|
|
521
|
-
left_idle: '04',
|
|
522
|
-
up_left_idle: '04',
|
|
523
|
-
down_left_idle: '04',
|
|
524
|
-
right_idle: '06',
|
|
525
|
-
up_right_idle: '06',
|
|
526
|
-
down_right_idle: '06',
|
|
527
|
-
down_walking: '18',
|
|
528
|
-
up_walking: '12',
|
|
529
|
-
left_walking: '14',
|
|
530
|
-
up_left_walking: '14',
|
|
531
|
-
down_left_walking: '14',
|
|
532
|
-
right_walking: '16',
|
|
533
|
-
up_right_walking: '16',
|
|
534
|
-
down_right_walking: '16',
|
|
535
|
-
};
|
|
536
|
-
|
|
537
456
|
/**
|
|
538
457
|
* Writes frame PNGs and an optional metadata.json to one or more base asset
|
|
539
458
|
* directories. This is the shared write-to-disk step consumed by both the
|
|
@@ -571,7 +490,7 @@ export class ObjectLayerEngine {
|
|
|
571
490
|
cellPixelDim = 20,
|
|
572
491
|
}) {
|
|
573
492
|
const writtenPaths = [];
|
|
574
|
-
const dirToCode =
|
|
493
|
+
const dirToCode = OBJECT_LAYER_DIRECTION_NAME_TO_CODE;
|
|
575
494
|
|
|
576
495
|
for (const basePath of basePaths) {
|
|
577
496
|
// Track which directionCode/frameIndex combos we already wrote for
|
|
@@ -995,14 +914,6 @@ export const readPngAsync = ObjectLayerEngine.readPngAsync;
|
|
|
995
914
|
*/
|
|
996
915
|
export const frameFactory = ObjectLayerEngine.frameFactory;
|
|
997
916
|
|
|
998
|
-
/**
|
|
999
|
-
* @see {@link ObjectLayerEngine.getKeyFramesDirectionsFromNumberFolderDirection}
|
|
1000
|
-
* @function getKeyFramesDirectionsFromNumberFolderDirection
|
|
1001
|
-
* @memberof CyberiaObjectLayer
|
|
1002
|
-
*/
|
|
1003
|
-
export const getKeyFramesDirectionsFromNumberFolderDirection =
|
|
1004
|
-
ObjectLayerEngine.getKeyFramesDirectionsFromNumberFolderDirection;
|
|
1005
|
-
|
|
1006
917
|
/**
|
|
1007
918
|
* @see {@link ObjectLayerEngine.processAndPushFrame}
|
|
1008
919
|
* @function processAndPushFrame
|
|
@@ -1017,13 +928,6 @@ export const processAndPushFrame = ObjectLayerEngine.processAndPushFrame;
|
|
|
1017
928
|
*/
|
|
1018
929
|
export const buildImgFromTile = ObjectLayerEngine.buildImgFromTile;
|
|
1019
930
|
|
|
1020
|
-
/**
|
|
1021
|
-
* @see {@link ObjectLayerEngine.generateRandomStats}
|
|
1022
|
-
* @function generateRandomStats
|
|
1023
|
-
* @memberof CyberiaObjectLayer
|
|
1024
|
-
*/
|
|
1025
|
-
export const generateRandomStats = ObjectLayerEngine.generateRandomStats;
|
|
1026
|
-
|
|
1027
931
|
/**
|
|
1028
932
|
* @see {@link ObjectLayerEngine.buildObjectLayerDataFromDirectory}
|
|
1029
933
|
* @function buildObjectLayerDataFromDirectory
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* parent module (circular import is safe because the function body is only
|
|
10
10
|
* executed after module initialisation completes).
|
|
11
11
|
*
|
|
12
|
-
* @module src/
|
|
12
|
+
* @module src/projects/cyberia/semantic-layer-generator-floor.js
|
|
13
13
|
* @namespace SemanticLayerGeneratorFloor
|
|
14
14
|
*/
|
|
15
15
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* frame pipeline (`down_idle` / `default_idle`) is used — matching the
|
|
24
24
|
* stateless, non-directional nature of world-placed resource pickups.
|
|
25
25
|
*
|
|
26
|
-
* @module src/
|
|
26
|
+
* @module src/projects/cyberia/semantic-layer-generator-resource.js
|
|
27
27
|
* @namespace SemanticLayerGeneratorResource
|
|
28
28
|
*/
|
|
29
29
|
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* The canonical side template is direction 06 (right); LEFT is derived by
|
|
25
25
|
* mirroring it so generated frame keys stay aligned with 04 = left and 06 = right.
|
|
26
26
|
*
|
|
27
|
-
* @module src/
|
|
27
|
+
* @module src/projects/cyberia/semantic-layer-generator-skin.js
|
|
28
28
|
* @namespace SemanticLayerGeneratorSkin
|
|
29
29
|
*/
|
|
30
30
|
import { readFileSync } from 'fs';
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
* • semantic-layer-generator-floor.js — all floor-* descriptors
|
|
13
13
|
* • semantic-layer-generator-skin.js — skin-* descriptors
|
|
14
14
|
*
|
|
15
|
-
* @module src/
|
|
15
|
+
* @module src/projects/cyberia/semantic-layer-generator.js
|
|
16
16
|
* @namespace SemanticLayerGenerator
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import crypto from 'crypto';
|
|
20
20
|
|
|
21
21
|
import { createRng, seedToInt, createNoise2D, generateShape, listShapes } from './shape-generator.js';
|
|
22
|
-
import { loggerFactory } from '
|
|
22
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
23
23
|
|
|
24
24
|
import { registerFloorSemantics } from './semantic-layer-generator-floor.js';
|
|
25
25
|
import { registerSkinSemantics } from './semantic-layer-generator-skin.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Parametric shape generator with procedural noise, seeded RNG, and arc-length resampling.
|
|
3
3
|
* Exports a single pure function `generateShape` that returns ordered contour points.
|
|
4
|
-
* @module src/
|
|
4
|
+
* @module src/projects/cyberia/shape-generator.js
|
|
5
5
|
* @namespace ShapeGenerator
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -161,7 +161,7 @@ registerShape('thick-parabola', (t, params) => {
|
|
|
161
161
|
// `a` controls curvature, `rangeX` controls horizontal span, and
|
|
162
162
|
// `thickness` controls band width (vertical gap between outer/inner).
|
|
163
163
|
const a = params.a ?? 0.6;
|
|
164
|
-
const rangeX = params.rangeX ??
|
|
164
|
+
const rangeX = params.rangeX ?? 2.0;
|
|
165
165
|
const thickness = params.thickness ?? 0.35;
|
|
166
166
|
if (t <= 0.5) {
|
|
167
167
|
// Outer parabola (forward: left → right)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Underpost platform content catalog — the base `pwa-microservices-template`.
|
|
3
|
+
*
|
|
4
|
+
* @module src/projects/underpost/catalog-underpost.js
|
|
5
|
+
* @namespace UnderpostCatalog
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Workflow + service files re-added to the template after the engine-only strip.
|
|
10
|
+
* @constant {string[]}
|
|
11
|
+
* @memberof UnderpostCatalog
|
|
12
|
+
*/
|
|
13
|
+
const TEMPLATE_RESTORE_PATHS = [
|
|
14
|
+
`./.github/workflows/pwa-microservices-template-page.cd.yml`,
|
|
15
|
+
`./.github/workflows/pwa-microservices-template-test.ci.yml`,
|
|
16
|
+
`./.github/workflows/npmpkg.ci.yml`,
|
|
17
|
+
`./.github/workflows/ghpkg.ci.yml`,
|
|
18
|
+
`./.github/workflows/gitlab.ci.yml`,
|
|
19
|
+
`./.github/workflows/publish.ci.yml`,
|
|
20
|
+
`./.github/workflows/release.cd.yml`,
|
|
21
|
+
`./src/client/services/user/guest.service.js`,
|
|
22
|
+
'./src/api/user/guest.service.js',
|
|
23
|
+
'./src/ws/IoInterface.js',
|
|
24
|
+
'./src/ws/IoServer.js',
|
|
25
|
+
'./manifests/deployment/dd-default-development',
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* npm keywords for the standalone Underpost platform / template package.
|
|
30
|
+
* @constant {string[]}
|
|
31
|
+
* @memberof UnderpostCatalog
|
|
32
|
+
*/
|
|
33
|
+
const TEMPLATE_KEYWORDS = [
|
|
34
|
+
'underpost',
|
|
35
|
+
'underpost-platform',
|
|
36
|
+
'cli',
|
|
37
|
+
'toolchain',
|
|
38
|
+
'ci-cd',
|
|
39
|
+
'devops',
|
|
40
|
+
'kubernetes',
|
|
41
|
+
'k3s',
|
|
42
|
+
'kubeadm',
|
|
43
|
+
'lxd',
|
|
44
|
+
'baremetal',
|
|
45
|
+
'container-orchestration',
|
|
46
|
+
'image-management',
|
|
47
|
+
'pwa',
|
|
48
|
+
'workbox',
|
|
49
|
+
'microservices',
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* npm description for the standalone Underpost platform / template package.
|
|
54
|
+
* @constant {string}
|
|
55
|
+
* @memberof UnderpostCatalog
|
|
56
|
+
*/
|
|
57
|
+
const TEMPLATE_DESCRIPTION =
|
|
58
|
+
'Underpost Platform — end-to-end CI/CD and application-delivery toolchain CLI. Covers bare metal, Kubernetes, K3s, kubeadm, LXD, container/image orchestration, secrets, databases, cron jobs, monitoring, SSH, runners, PWA + Workbox delivery, and release orchestration. Extensible via downstream CLIs.';
|
|
59
|
+
|
|
60
|
+
export { TEMPLATE_RESTORE_PATHS, TEMPLATE_KEYWORDS, TEMPLATE_DESCRIPTION };
|
|
@@ -1,101 +1,49 @@
|
|
|
1
1
|
# BUILD_MODE: RELEASE | DEBUG
|
|
2
2
|
ARG BUILD_MODE=RELEASE
|
|
3
3
|
|
|
4
|
-
# --- Build Image
|
|
5
|
-
FROM
|
|
6
|
-
# Re-declare ARG after FROM so it is in scope for RUN
|
|
7
|
-
ARG BUILD_MODE=RELEASE
|
|
8
|
-
|
|
9
|
-
RUN dnf -y update && \
|
|
10
|
-
dnf -y install epel-release && \
|
|
11
|
-
dnf -y install --allowerasing \
|
|
12
|
-
git \
|
|
13
|
-
curl \
|
|
14
|
-
wget \
|
|
15
|
-
openssl-devel \
|
|
16
|
-
libnsl \
|
|
17
|
-
perl \
|
|
18
|
-
gnupg2 \
|
|
19
|
-
bzip2 && \
|
|
20
|
-
dnf clean all
|
|
21
|
-
|
|
22
|
-
# System packages (raylib gfx + build dependencies)
|
|
23
|
-
RUN dnf groupinstall -y "Development Tools" && \
|
|
24
|
-
dnf install -y \
|
|
25
|
-
cmake \
|
|
26
|
-
unzip \
|
|
27
|
-
python3 \
|
|
28
|
-
python3.11 \
|
|
29
|
-
alsa-lib-devel \
|
|
30
|
-
mesa-libGL-devel \
|
|
31
|
-
mesa-libGLU-devel \
|
|
32
|
-
libX11-devel \
|
|
33
|
-
libXrandr-devel \
|
|
34
|
-
libXi-devel \
|
|
35
|
-
libXcursor-devel \
|
|
36
|
-
libXinerama-devel \
|
|
37
|
-
libXfixes-devel \
|
|
38
|
-
freeglut-devel \
|
|
39
|
-
glfw-devel \
|
|
40
|
-
libatomic.x86_64 && \
|
|
41
|
-
dnf clean all && \
|
|
42
|
-
alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 2 && \
|
|
43
|
-
alternatives --set python3 /usr/bin/python3.11
|
|
44
|
-
ENV EMSDK=/opt/emsdk
|
|
45
|
-
ENV PATH="${EMSDK}:${EMSDK}/upstream/emscripten:${PATH}"
|
|
4
|
+
# --- Build Image ---
|
|
5
|
+
FROM emscripten/emsdk:5.0.6 AS builder
|
|
46
6
|
|
|
47
|
-
|
|
48
|
-
ARG EMSDK_VERSION=5.0.6
|
|
49
|
-
WORKDIR /opt
|
|
50
|
-
RUN git clone https://github.com/emscripten-core/emsdk.git ${EMSDK}
|
|
51
|
-
WORKDIR ${EMSDK}
|
|
52
|
-
RUN ./emsdk install ${EMSDK_VERSION} && \
|
|
53
|
-
./emsdk activate ${EMSDK_VERSION}
|
|
7
|
+
ARG BUILD_MODE=RELEASE
|
|
54
8
|
|
|
55
9
|
WORKDIR /cyberia-client
|
|
56
|
-
|
|
57
|
-
# in .github/workflows/docker-image.cyberia-client.ci.yml sets
|
|
58
|
-
# context: . from the cyberia-client checkout). The legacy
|
|
59
|
-
# engine-context layout (COPY cyberia-client/ .) is no longer used.
|
|
10
|
+
|
|
60
11
|
COPY . .
|
|
61
12
|
|
|
62
|
-
|
|
63
|
-
# developer's local checkout (or a previous Docker layer cache hit)
|
|
64
|
-
# can't shadow a fresh BUILD_MODE rebuild — e.g. mixing a DEBUG-mode
|
|
65
|
-
# index.wasm with a RELEASE-mode index.js once produced the
|
|
66
|
-
# "corrupted heap memory area" panic that masked the real Closure bug.
|
|
67
|
-
RUN make -f Web.mk clean && make -f Web.mk all BUILD_MODE=${BUILD_MODE} OUTPUT_DIR=bin/
|
|
13
|
+
RUN make -f Web.mk clean all BUILD_MODE=${BUILD_MODE} OUTPUT_DIR=bin/
|
|
68
14
|
|
|
69
|
-
# --- Runtime Image
|
|
15
|
+
# --- Runtime Image ---
|
|
70
16
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
curl -fsSL https://
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
17
|
+
ARG UNDERPOST_VERSION=3.2.70
|
|
18
|
+
ARG NODE_VERSION=24.15.0
|
|
19
|
+
|
|
20
|
+
RUN set -eux; \
|
|
21
|
+
dnf install -y python3 git tar xz; \
|
|
22
|
+
arch="$(uname -m)"; \
|
|
23
|
+
case "$arch" in \
|
|
24
|
+
x86_64) node_arch=x64 ;; \
|
|
25
|
+
aarch64) node_arch=arm64 ;; \
|
|
26
|
+
*) echo "unsupported arch: $arch" >&2; exit 1 ;; \
|
|
27
|
+
esac; \
|
|
28
|
+
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
29
|
+
| tar -xJ -C /usr/local --strip-components=1; \
|
|
30
|
+
node --version; npm --version; \
|
|
31
|
+
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
32
|
+
dnf clean all; rm -rf /var/cache/dnf; \
|
|
86
33
|
npm cache clean --force
|
|
87
34
|
|
|
35
|
+
# Path + server layout is the contract with conf.instances.json mmo-client cmd,
|
|
36
|
+
# which execs `python3 /home/dd/engine/cyberia-client/docker-driver.py <port>
|
|
37
|
+
# /home/dd/engine/cyberia-client/bin` in both development and production.
|
|
38
|
+
# Keep this identical to Dockerfile.dev so prod and dev images are interchangeable.
|
|
88
39
|
WORKDIR /home/dd/engine/cyberia-client
|
|
89
40
|
|
|
90
|
-
COPY --from=builder /cyberia-client/
|
|
91
|
-
COPY --from=builder /cyberia-client/bin
|
|
41
|
+
COPY --from=builder /cyberia-client/docker-driver.py ./docker-driver.py
|
|
42
|
+
COPY --from=builder /cyberia-client/bin ./bin/
|
|
92
43
|
|
|
44
|
+
ENV PYTHONUNBUFFERED=1
|
|
93
45
|
ENV CYBERIA_PORT=8081
|
|
94
|
-
ENV CYBERIA_MODE=production
|
|
95
46
|
|
|
96
|
-
EXPOSE 8081
|
|
47
|
+
EXPOSE 8081
|
|
97
48
|
|
|
98
|
-
|
|
99
|
-
# In K8S deploys conf.instances.json supplies its own cmd that wraps
|
|
100
|
-
# container-status hooks + this same server.py invocation.
|
|
101
|
-
CMD ["sh", "-c", "exec python3 server.py ${CYBERIA_PORT} bin ${CYBERIA_MODE}"]
|
|
49
|
+
CMD ["sh", "-c", "exec python3 docker-driver.py ${CYBERIA_PORT} bin"]
|
|
@@ -1,22 +1,8 @@
|
|
|
1
1
|
# cyberia-client DEV runtime image.
|
|
2
|
-
#
|
|
3
|
-
# Differences vs the production Dockerfile in this same directory:
|
|
4
|
-
# - Builds the C/WASM bundle with BUILD_MODE=DEBUG (raylib + emcc keep
|
|
5
|
-
# symbols, asserts, and DWARF info; the bundle is larger but
|
|
6
|
-
# debuggable in the browser devtools).
|
|
7
|
-
# - Default CYBERIA_MODE is `development` instead of `production`.
|
|
8
|
-
# - Default CYBERIA_PORT is `8082` (debug port) instead of `8081`.
|
|
9
|
-
# - Keeps `vim-minimal`, `lsof`, `strace`, `procps-ng` in the runtime
|
|
10
|
-
# image so the operator can attach and inspect a misbehaving pod.
|
|
11
|
-
# - Does NOT clean the npm cache.
|
|
12
|
-
#
|
|
13
|
-
# Selected automatically by `node bin run instance-build-manifest`
|
|
14
|
-
# whenever the `--dev` flag is set; the production Dockerfile in the
|
|
15
|
-
# same directory is used otherwise.
|
|
16
2
|
|
|
17
3
|
ARG BUILD_MODE=DEBUG
|
|
18
4
|
|
|
19
|
-
# --- Build Image
|
|
5
|
+
# --- Build Image ---
|
|
20
6
|
FROM rockylinux/rockylinux:9 AS builder
|
|
21
7
|
ARG BUILD_MODE=DEBUG
|
|
22
8
|
|
|
@@ -48,35 +34,42 @@ RUN ./emsdk install ${EMSDK_VERSION} && \
|
|
|
48
34
|
./emsdk activate ${EMSDK_VERSION}
|
|
49
35
|
|
|
50
36
|
WORKDIR /cyberia-client
|
|
51
|
-
|
|
52
|
-
# production Dockerfile in this directory for the rationale).
|
|
37
|
+
|
|
53
38
|
COPY . .
|
|
54
39
|
|
|
55
40
|
# Dev build: BUILD_MODE=DEBUG keeps symbols, asserts, source maps.
|
|
56
41
|
RUN make -f Web.mk all BUILD_MODE=${BUILD_MODE} OUTPUT_DIR=bin/
|
|
57
42
|
|
|
58
|
-
# --- Runtime Image
|
|
43
|
+
# --- Runtime Image ---
|
|
59
44
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
60
45
|
|
|
61
|
-
ARG UNDERPOST_VERSION=3.2.
|
|
62
|
-
|
|
63
|
-
|
|
46
|
+
ARG UNDERPOST_VERSION=3.2.70
|
|
47
|
+
ARG NODE_VERSION=24.15.0
|
|
48
|
+
RUN set -eux; \
|
|
49
|
+
dnf -y update; \
|
|
50
|
+
dnf -y install epel-release; \
|
|
64
51
|
dnf -y install --allowerasing \
|
|
65
|
-
curl git python3 \
|
|
66
|
-
procps-ng strace lsof vim-minimal
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
52
|
+
curl git python3 tar xz \
|
|
53
|
+
procps-ng strace lsof vim-minimal; \
|
|
54
|
+
arch="$(uname -m)"; \
|
|
55
|
+
case "$arch" in \
|
|
56
|
+
x86_64) node_arch=x64 ;; \
|
|
57
|
+
aarch64) node_arch=arm64 ;; \
|
|
58
|
+
*) echo "unsupported arch: $arch" >&2; exit 1 ;; \
|
|
59
|
+
esac; \
|
|
60
|
+
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
61
|
+
| tar -xJ -C /usr/local --strip-components=1; \
|
|
62
|
+
node --version; npm --version; \
|
|
63
|
+
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
70
64
|
dnf clean all
|
|
71
65
|
|
|
72
66
|
WORKDIR /home/dd/engine/cyberia-client
|
|
73
67
|
|
|
74
|
-
COPY --from=builder /cyberia-client/
|
|
75
|
-
COPY --from=builder /cyberia-client/bin
|
|
68
|
+
COPY --from=builder /cyberia-client/docker-driver.py ./docker-driver.py
|
|
69
|
+
COPY --from=builder /cyberia-client/bin ./bin/
|
|
76
70
|
|
|
77
71
|
ENV CYBERIA_PORT=8082
|
|
78
|
-
ENV CYBERIA_MODE=development
|
|
79
72
|
|
|
80
73
|
EXPOSE 8081 8082
|
|
81
74
|
|
|
82
|
-
CMD ["sh", "-c", "exec python3
|
|
75
|
+
CMD ["sh", "-c", "exec python3 docker-driver.py ${CYBERIA_PORT} bin"]
|
|
@@ -1,62 +1,43 @@
|
|
|
1
|
-
# --- Build Image
|
|
2
|
-
FROM
|
|
3
|
-
|
|
4
|
-
RUN dnf -y update && \
|
|
5
|
-
dnf -y install epel-release && \
|
|
6
|
-
dnf -y install --allowerasing \
|
|
7
|
-
git \
|
|
8
|
-
make \
|
|
9
|
-
golang && \
|
|
10
|
-
dnf clean all
|
|
1
|
+
# --- Build Image ---
|
|
2
|
+
FROM golang:1.24 AS builder
|
|
11
3
|
|
|
12
4
|
WORKDIR /build
|
|
13
5
|
|
|
14
|
-
# Build context is the cyberia-server project repo root (the workflow
|
|
15
|
-
# in .github/workflows/docker-image.cyberia-server.ci.yml sets
|
|
16
|
-
# context: . from the cyberia-server checkout). The legacy
|
|
17
|
-
# engine-context layout (COPY cyberia-server/ .) is no longer used.
|
|
18
6
|
COPY go.mod go.sum ./
|
|
19
7
|
RUN go mod download
|
|
20
8
|
|
|
21
9
|
COPY . ./
|
|
22
|
-
RUN
|
|
10
|
+
RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o server ./cmd/cyberia-server/
|
|
23
11
|
|
|
24
|
-
# --- Runtime Image
|
|
12
|
+
# --- Runtime Image ---
|
|
25
13
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
dnf clean all && \
|
|
14
|
+
ARG UNDERPOST_VERSION=3.2.70
|
|
15
|
+
ARG NODE_VERSION=24.15.0
|
|
16
|
+
|
|
17
|
+
RUN set -eux; \
|
|
18
|
+
dnf install -y git tar xz; \
|
|
19
|
+
arch="$(uname -m)"; \
|
|
20
|
+
case "$arch" in \
|
|
21
|
+
x86_64) node_arch=x64 ;; \
|
|
22
|
+
aarch64) node_arch=arm64 ;; \
|
|
23
|
+
*) echo "unsupported arch: $arch" >&2; exit 1 ;; \
|
|
24
|
+
esac; \
|
|
25
|
+
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
26
|
+
| tar -xJ -C /usr/local --strip-components=1; \
|
|
27
|
+
node --version; npm --version; \
|
|
28
|
+
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
29
|
+
dnf clean all; rm -rf /var/cache/dnf; \
|
|
43
30
|
npm cache clean --force
|
|
44
31
|
|
|
32
|
+
# Path is the contract with conf.instances.json mmo-server cmd, which execs
|
|
33
|
+
# /home/dd/engine/cyberia-server/server in both development and production.
|
|
34
|
+
# Keep this identical to Dockerfile.dev so prod and dev images are interchangeable.
|
|
45
35
|
WORKDIR /home/dd/engine/cyberia-server
|
|
46
36
|
|
|
47
37
|
COPY --from=builder /build/server ./server
|
|
48
38
|
|
|
49
|
-
# Static SSR dashboard rendered by `node bin/cyberia run-workflow
|
|
50
|
-
# build-server-dashboard --output-path <project-root>/public/index.html`
|
|
51
|
-
# from inside the engine repo checkout. The Go server's findPublicDir()
|
|
52
|
-
# hard-requires public/index.html at boot and log.Fatalf's without it.
|
|
53
|
-
# CI writes the dashboard into ./public/ at the cyberia-server repo root
|
|
54
|
-
# before docker build picks it up here.
|
|
55
39
|
COPY public/ ./public/
|
|
56
40
|
|
|
57
41
|
EXPOSE 8081
|
|
58
42
|
|
|
59
|
-
# Default entrypoint when the image is run directly (not via K8S cmd).
|
|
60
|
-
# In K8S deploys conf.instances.json supplies its own cmd that wraps env
|
|
61
|
-
# sourcing + container-status hooks + this same binary.
|
|
62
43
|
ENTRYPOINT ["/home/dd/engine/cyberia-server/server"]
|