@underpostnet/cyberia 3.3.73 → 3.3.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +17 -5
- package/.github/workflows/coverall.cyberia.ci.yml +5 -0
- package/.github/workflows/docker-image.cyberia-client.ci.yml +1 -1
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +1 -1
- package/.github/workflows/docker-image.cyberia-server.ci.yml +1 -1
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +1 -1
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +1 -1
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +1 -1
- package/.github/workflows/publish.cyberia.ci.yml +44 -0
- package/AGENTS.md +61 -12
- package/CHANGELOG.md +126 -41
- package/CLI-HELP.md +19 -12
- package/Dockerfile +1 -1
- package/Dockerfile.dev +1 -1
- package/Dockerfile.test +2 -2
- package/README.md +28 -28
- package/bin/build.js +37 -17
- package/bin/cyberia.js +1247 -1373
- package/bin/index.js +1247 -1373
- package/compose.env +17 -5
- package/conf.js +7 -3
- package/deploy/cyberia-client/deploy.sh +10 -11
- package/deploy/cyberia-client/package.sh +0 -1
- package/deploy/cyberia-client/state.sh +3 -2
- package/deploy/cyberia-server/deploy.sh +10 -11
- package/deploy/cyberia-server/package.sh +0 -1
- package/deploy/cyberia-server/state.sh +3 -2
- package/deploy/dd-cyberia/deploy.sh +5 -5
- package/deploy/dd-cyberia/init.sh +15 -14
- package/deploy/dd-cyberia/package.sh +0 -1
- package/deploy/dd-cyberia/state.sh +2 -2
- package/deploy/dd-cyberia/sync-deploy.sh +139 -75
- package/deploy/lib/config.sh +29 -0
- package/deploy/lib/github-actions-logging.sh +92 -76
- package/deploy/lib/host.sh +27 -18
- package/deploy/lib/state.sh +4 -1
- package/deploy/pwa-microservices-template/deploy.sh +10 -8
- package/deploy/release/deploy.sh +0 -2
- package/deployment.yaml +1 -1
- package/docker-compose.yml +23 -17
- package/hardhat/package-lock.json +2 -2
- package/hardhat/package.json +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +1 -1
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +1 -1
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/mongo-express/deployment.yaml +46 -27
- package/manifests/deployment/mongo-express/kustomization.yaml +9 -0
- package/manifests/deployment/mongo-express/mongo-express-nodeport.yaml +18 -0
- package/manifests/deployment/mongo-express/service.yaml +16 -0
- package/manifests/deployment/mongo-express-no-auth/disable-mongodb-auth.yaml +16 -0
- package/manifests/deployment/mongo-express-no-auth/kustomization.yaml +16 -0
- package/package.json +19 -17
- package/scripts/test-monitor.sh +3 -3
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +14 -9
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +36 -5
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +5 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +88 -184
- package/src/api/cyberia-action/cyberia-action.router.js +2 -2
- package/src/api/cyberia-action/cyberia-action.service.js +3 -4
- package/src/api/cyberia-audio/cyberia-audio.controller.js +6 -0
- package/src/api/cyberia-audio/cyberia-audio.model.js +61 -0
- package/src/api/cyberia-audio/cyberia-audio.router.js +21 -0
- package/src/api/cyberia-audio/cyberia-audio.service.js +220 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -3
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +10 -19
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +12 -34
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +15 -32
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.model.js +2 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +8 -2
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +31 -20
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +16 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +466 -3
- package/src/api/cyberia-instance/cyberia-fallback-capture.js +87 -51
- package/src/api/cyberia-instance/cyberia-fallback-world.js +21 -40
- package/src/api/cyberia-instance/cyberia-instance-boot.service.js +5 -5
- package/src/api/cyberia-instance/cyberia-instance-items.js +98 -0
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +34 -141
- package/src/api/cyberia-instance/cyberia-instance.controller.js +1 -4
- package/src/api/cyberia-instance/cyberia-instance.model.js +0 -14
- package/src/api/cyberia-instance/cyberia-instance.router.js +3 -16
- package/src/api/cyberia-instance/cyberia-instance.service.js +3 -43
- package/src/api/cyberia-instance/cyberia-world-generator.js +8 -13
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +49 -75
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +74 -1
- package/src/api/cyberia-map/cyberia-map.service.js +6 -2
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.controller.js +31 -0
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.model.js +56 -0
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.router.js +33 -0
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +189 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +3 -3
- package/src/api/cyberia-quest/cyberia-quest.service.js +3 -3
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +1 -1
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +403 -188
- package/src/api/cyberia-skill/cyberia-skill.model.js +6 -6
- package/src/api/file/file.ref.js +153 -0
- package/src/api/file/file.ref.json +11 -2
- package/src/api/object-layer/object-layer.model.js +47 -12
- package/src/api/object-layer/object-layer.router.js +10 -3
- package/src/api/object-layer/object-layer.service.js +113 -120
- package/src/cli/app.js +12 -1
- package/src/cli/client.js +2 -2
- package/src/cli/cluster.js +7 -0
- package/src/cli/deploy.js +4 -4
- package/src/cli/docker-compose.js +1 -1
- package/src/cli/fs-selection.js +115 -0
- package/src/cli/fs.js +158 -342
- package/src/cli/index.js +22 -10
- package/src/cli/repository.js +28 -0
- package/src/cli/run.js +71 -197
- package/src/cli/test.js +4 -0
- package/src/cli/wireguard.js +32 -31
- package/src/client/components/core/Docs.js +77 -100
- package/src/client/components/core/Modal.js +56 -1
- package/src/client/components/cyberia/ActionEngineCyberia.js +12 -36
- package/src/client/components/cyberia/EntityEngineCyberia.js +492 -121
- package/src/client/components/cyberia/InstanceEngineCyberia.js +129 -160
- package/src/client/components/cyberia/InstanceSelectionView.js +7 -1
- package/src/client/components/cyberia/MapEngineCyberia.js +175 -69
- package/src/client/components/cyberia/ObjectLayerEngine.js +1011 -97
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +81 -155
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +113 -98
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +215 -56
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +0 -34
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +1 -1
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +712 -76
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +0 -4
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +15 -15
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +280 -24
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +51 -29
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +52 -53
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +16 -11
- package/src/client/public/cyberia-docs/CYBERIA.md +28 -28
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +11 -5
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/STATS-PROGRESSION.md +217 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +20 -12
- package/src/client/services/cyberia-audio/cyberia-audio.service.js +99 -0
- package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +38 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +5 -4
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +0 -40
- package/src/client/services/cyberia-map/cyberia-map.management.js +5 -4
- package/src/client/services/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +138 -0
- package/src/client/services/object-layer/object-layer.management.js +6 -10
- package/src/client/services/object-layer/object-layer.service.js +3 -1
- package/src/client-builder/client-build-docs.js +52 -52
- package/src/client-builder/client-build.js +67 -44
- package/src/client-builder/client-bundle.js +347 -0
- package/src/db/mongo/MongoExpress.js +187 -0
- package/src/grpc/cyberia/grpc-server.js +5 -7
- package/src/index.js +1 -1
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +143 -146
- package/src/projects/cyberia/atlas-sprite-sheet-store.js +391 -0
- package/src/projects/cyberia/besu-genesis-generator.js +5 -14
- package/src/projects/cyberia/boot-contract-fixtures.js +32 -0
- package/src/projects/cyberia/catalog-cyberia.js +3 -2
- package/src/projects/cyberia/gemini-client.js +3 -3
- package/src/projects/cyberia/generate-saga.js +4 -11
- package/src/projects/cyberia/hot-reload-trigger.js +17 -28
- package/src/projects/cyberia/instance-backup.js +210 -0
- package/src/projects/cyberia/instance-data.js +177 -257
- package/src/projects/cyberia/map-preview-generator.js +32 -68
- package/src/projects/cyberia/object-layer.js +152 -319
- package/src/projects/cyberia/seed-audio.js +139 -0
- package/src/projects/cyberia/semantic-layer-generator-skin.js +2 -8
- package/src/projects/cyberia/semantic-layer-generator.js +2 -18
- package/src/projects/cyberia/stat-balance.js +81 -0
- package/src/projects/cyberia/stat-commands.js +23 -0
- package/src/projects/cyberia/stat-contract-generator.js +101 -0
- package/src/runtime/cyberia-client/Dockerfile +8 -4
- package/src/runtime/cyberia-client/Dockerfile.dev +5 -2
- package/src/runtime/cyberia-server/Dockerfile +9 -2
- package/src/runtime/cyberia-server/Dockerfile.dev +8 -1
- package/src/runtime/engine-cyberia/Dockerfile +1 -1
- package/src/runtime/engine-cyberia/Dockerfile.dev +1 -1
- package/src/runtime/engine-cyberia/Dockerfile.test +2 -2
- package/src/runtime/engine-cyberia/compose.env +17 -5
- package/src/runtime/engine-cyberia/docker-compose.yml +23 -17
- package/src/server/build/coverage.js +113 -42
- package/src/server/build/package.js +55 -12
- package/src/server/build/testing.js +59 -9
- package/src/server/network/middlewares.js +8 -2
- package/src/server/ops/logger.js +70 -35
- package/src/server/runtime/conf.js +4 -2
- package/src/server/storage/data-query.js +16 -0
- package/src/server/storage/downloader.js +62 -14
- package/src/server/storage/zip.js +153 -0
- package/test/integration/app/cyberia/atlas-sprite-sheet-store.test.js +402 -0
- package/test/integration/app/cyberia/atlas-sprite-sheet.test.js +86 -0
- package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +34 -0
- package/test/integration/app/cyberia/cyberia-entity-type-default.test.js +842 -0
- package/test/integration/app/cyberia/cyberia-instance-conf-coerce.test.js +53 -0
- package/test/integration/app/cyberia/cyberia-instance-conf-defaults.test.js +16 -22
- package/test/integration/app/cyberia/cyberia-instance-items.test.js +90 -0
- package/test/integration/app/cyberia/cyberia-load.test.js +6 -7
- package/test/integration/app/cyberia/cyberia-map-audio-conf.test.js +256 -0
- package/test/integration/app/cyberia/cyberia-stats.test.js +150 -0
- package/test/integration/app/cyberia/fallback-world-capture.test.js +87 -2
- package/test/integration/app/cyberia/object-layer-item-selection.test.js +56 -0
- package/test/integration/app/cyberia/object-layer-natural-key.test.js +32 -0
- package/test/integration/app/cyberia/seed-audio.test.js +275 -0
- package/test/integration/infra/2-network/wireguard-cli.test.js +33 -9
- package/test/integration/infra/2-network/wireguard-edge.test.js +58 -18
- package/test/integration/infra/3-cluster/mongo-express-deploy.test.js +156 -0
- package/test/integration/infra/4-ingress/api-cross-origin.test.js +79 -0
- package/test/unit/client-build-docs.test.js +97 -70
- package/test/unit/client-bundle.test.js +313 -0
- package/test/unit/conf-resolution.test.js +17 -0
- package/test/unit/coverage-artifact.test.js +120 -29
- package/test/unit/cyberia/instance-backup.test.js +183 -0
- package/test/unit/cyberia/instance-object-layer-items.test.js +46 -0
- package/test/unit/cyberia/publish-workflow.test.js +22 -0
- package/test/unit/cyberia/stat-balance.test.js +69 -0
- package/test/unit/deploy-log-table.test.js +76 -5
- package/test/unit/downloader-integrity.test.js +98 -0
- package/test/unit/file-reference-registry.test.js +141 -0
- package/test/unit/fs-storage-paths.test.js +596 -0
- package/test/unit/logger-redaction.test.js +29 -0
- package/test/unit/package.test.js +70 -16
- package/test/unit/prepare-host.test.js +84 -1
- package/test/unit/test-tiers.test.js +27 -0
- package/test/unit/zip-archive.test.js +142 -0
- package/vitest.config.js +11 -3
- package/src/api/cyberia-instance/cyberia-fallback-default-items.js +0 -63
- package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +0 -368
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ _Stackable Rendering Layers as a Unified Tokenized Reality_
|
|
|
20
20
|
<!-- CI/CD and health -->
|
|
21
21
|
<div align="center">
|
|
22
22
|
|
|
23
|
-
[](https://github.com/underpostnet/engine-cyberia/actions/workflows/docker-image.engine-cyberia.ci.yml) [](https://github.com/underpostnet/engine-cyberia/actions/workflows/coverall.cyberia.ci.yml) [](https://coveralls.io/github/underpostnet/engine-cyberia?branch=main) [](https://github.com/underpostnet/engine-cyberia/actions/workflows/docker-image.engine-cyberia.ci.yml) [](https://github.com/underpostnet/engine-cyberia/actions/workflows/coverall.cyberia.ci.yml) [](https://coveralls.io/github/underpostnet/engine-cyberia?branch=main) [](https://socket.dev/npm/package/cyberia/overview/3.3.76)
|
|
24
24
|
|
|
25
25
|
</div>
|
|
26
26
|
|
|
@@ -45,26 +45,26 @@ Go server and the WASM client with data — it does not run the simulation or th
|
|
|
45
45
|
|
|
46
46
|
```text
|
|
47
47
|
┌───────────────────────────────────────────────┐
|
|
48
|
-
│ UNDERPOST PLATFORM
|
|
49
|
-
│ toolchain · deploy · PWA build · static
|
|
50
|
-
│ delivery · cluster/image/db · monitoring
|
|
51
|
-
│
|
|
52
|
-
│ underpost CLI ──▶ builds & deploys all
|
|
48
|
+
│ UNDERPOST PLATFORM │
|
|
49
|
+
│ toolchain · deploy · PWA build · static │
|
|
50
|
+
│ delivery · cluster/image/db · monitoring │
|
|
51
|
+
│ │
|
|
52
|
+
│ underpost CLI ──▶ builds & deploys all │
|
|
53
53
|
└───────────────────────────────────────────────┘
|
|
54
54
|
│ hosts / delivers
|
|
55
55
|
▼
|
|
56
|
-
╔═══════════════════════════════ CYBERIA MMO
|
|
56
|
+
╔═══════════════════════════════ CYBERIA MMO ═══════════════════════════════════╗
|
|
57
57
|
║ ║
|
|
58
|
-
║ ┌──────────────────┐ gRPC ┌──────────────────┐ WebSocket
|
|
59
|
-
║ │ engine-cyberia │ ────────▶ │ cyberia-server │ ───────────┐
|
|
60
|
-
║ │ (Node.js) │ │ (Go) │ │
|
|
61
|
-
║ │ │ │ │ ▼
|
|
62
|
-
║ │ content │ │ authoritative │
|
|
63
|
-
║ │ validation │ │ simulation │
|
|
64
|
-
║ │ persistence │ │ world tick │
|
|
65
|
-
║ │ gRPC/REST data │ │ AOI replication │
|
|
66
|
-
║ │ asset metadata │ │ │
|
|
67
|
-
║ └──────────────────┘ └──────────────────┘
|
|
58
|
+
║ ┌──────────────────┐ gRPC ┌──────────────────┐ WebSocket ║
|
|
59
|
+
║ │ engine-cyberia │ ────────▶ │ cyberia-server │ ───────────┐ ║
|
|
60
|
+
║ │ (Node.js) │ │ (Go) │ │ ║
|
|
61
|
+
║ │ │ │ │ ▼ ║
|
|
62
|
+
║ │ content │ │ authoritative │ ┌──────────────────┐ ║
|
|
63
|
+
║ │ validation │ │ simulation │ │ cyberia-client │ ║
|
|
64
|
+
║ │ persistence │ │ world tick │ │ (C / WASM) │ ║
|
|
65
|
+
║ │ gRPC/REST data │ │ AOI replication │ │ │ ║
|
|
66
|
+
║ │ asset metadata │ │ │ │ rendering │ ║
|
|
67
|
+
║ └──────────────────┘ └──────────────────┘ │ input │ ║
|
|
68
68
|
║ │ │ prediction │ ║
|
|
69
69
|
║ └──────────────── REST (content/assets) ─────▶│ presentation │ ║
|
|
70
70
|
║ └──────────────────┘ ║
|
|
@@ -157,17 +157,17 @@ Three supervised processes run in parallel, each with its own monitor and reconn
|
|
|
157
157
|
|
|
158
158
|
```text
|
|
159
159
|
┌──────────────────────────────────────────────────────────────┐
|
|
160
|
-
│ SUPERVISION (parallel)
|
|
161
|
-
│
|
|
162
|
-
│ engine-cyberia cyberia-server cyberia-client
|
|
163
|
-
│ ┌────────────┐ ┌────────────┐ ┌────────────┐
|
|
164
|
-
│ │ monitor │ │ monitor │ │ monitor │
|
|
165
|
-
│ │ +reconnect │ │ +reconnect │ │ +reconnect │
|
|
166
|
-
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘
|
|
167
|
-
│ │ │ │
|
|
168
|
-
│ └──────────┬──────────┴──────────┬──────────┘
|
|
169
|
-
│ ▼ ▼
|
|
170
|
-
│ all three up & connected?
|
|
160
|
+
│ SUPERVISION (parallel) │
|
|
161
|
+
│ │
|
|
162
|
+
│ engine-cyberia cyberia-server cyberia-client │
|
|
163
|
+
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
|
|
164
|
+
│ │ monitor │ │ monitor │ │ monitor │ │
|
|
165
|
+
│ │ +reconnect │ │ +reconnect │ │ +reconnect │ │
|
|
166
|
+
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │
|
|
167
|
+
│ │ │ │ │
|
|
168
|
+
│ └──────────┬──────────┴──────────┬──────────┘ │
|
|
169
|
+
│ ▼ ▼ │
|
|
170
|
+
│ all three up & connected? │
|
|
171
171
|
└────────────────────────────┬─────────────────────────────────┘
|
|
172
172
|
│
|
|
173
173
|
┌─────────────────────┼─────────────────────┐
|
package/bin/build.js
CHANGED
|
@@ -14,7 +14,12 @@ import {
|
|
|
14
14
|
import { resolveDeployList } from '../src/server/network/router.js';
|
|
15
15
|
import { loadDeployCatalog } from '../src/server/build/catalog.js';
|
|
16
16
|
import { buildProductPackageJson, productPackageOptionsFactory } from '../src/server/build/package.js';
|
|
17
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
COVERAGE_BUNDLE_DIRECTORY,
|
|
19
|
+
bundleCoverageReports,
|
|
20
|
+
coverageReportCommand,
|
|
21
|
+
deployCoverageReports,
|
|
22
|
+
} from '../src/server/build/coverage.js';
|
|
18
23
|
import { shellExec } from '../src/server/runtime/process.js';
|
|
19
24
|
import Underpost from '../src/index.js';
|
|
20
25
|
|
|
@@ -125,7 +130,7 @@ const buildDeployTemplate = async (confName) => {
|
|
|
125
130
|
|
|
126
131
|
// The manifest a product publishes is its catalog's declaration, resolved the same way for
|
|
127
132
|
// every product: only the files a product places in the template are its own business.
|
|
128
|
-
const packageOptions = productPackageOptionsFactory({ catalog,
|
|
133
|
+
const packageOptions = productPackageOptionsFactory({ catalog, engineDependencies: sourcePackageJson.dependencies });
|
|
129
134
|
|
|
130
135
|
switch (confName) {
|
|
131
136
|
case 'dd-cyberia': {
|
|
@@ -221,16 +226,28 @@ const buildDeployTemplate = async (confName) => {
|
|
|
221
226
|
};
|
|
222
227
|
|
|
223
228
|
/**
|
|
224
|
-
*
|
|
225
|
-
*
|
|
229
|
+
* The coverage reports a deploy id's conf declares, as {@link deployCoverageReports} reads them.
|
|
230
|
+
* @param {string} deployId - A concrete deploy id.
|
|
231
|
+
* @returns {Array<{id: string, suite?: string, path?: string}>}
|
|
226
232
|
*/
|
|
227
|
-
const
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
233
|
+
const deployReports = (deployId) =>
|
|
234
|
+
deployCoverageReports(JSON.parse(fs.readFileSync(`./engine-private/conf/${deployId}/conf.server.json`, 'utf8')));
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Carries this build stage's coverage HTML reports into the assembled template, so every
|
|
238
|
+
* container started from the published source serves them instead of generating one.
|
|
239
|
+
* @param {string} deployId - A concrete deploy id.
|
|
240
|
+
*/
|
|
241
|
+
const bundleDeployCoverage = (deployId) => {
|
|
242
|
+
for (const { id, bundled, from, to } of bundleCoverageReports(deployReports(deployId), basePath)) {
|
|
243
|
+
if (bundled) logger.info('Build coverage artifact', { id, from, to });
|
|
244
|
+
else
|
|
245
|
+
logger.warn('No coverage report to bundle; the deploy will publish the unavailable page', {
|
|
246
|
+
id,
|
|
247
|
+
hint: 'node bin/build <deploy-id> --coverage',
|
|
248
|
+
to,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
234
251
|
};
|
|
235
252
|
|
|
236
253
|
const program = new Command();
|
|
@@ -247,7 +264,7 @@ program
|
|
|
247
264
|
)
|
|
248
265
|
.option(
|
|
249
266
|
'--coverage',
|
|
250
|
-
`Run the test
|
|
267
|
+
`Run the test suites the deploy ids' coverage reports name before assembly, so the artifact carries current ${COVERAGE_BUNDLE_DIRECTORY} reports.`,
|
|
251
268
|
false,
|
|
252
269
|
)
|
|
253
270
|
.option(
|
|
@@ -267,10 +284,13 @@ program
|
|
|
267
284
|
return;
|
|
268
285
|
}
|
|
269
286
|
|
|
270
|
-
// Tests run here, in the build stage, and
|
|
271
|
-
// no container ever has to produce its own. Refreshing is opt-in because
|
|
272
|
-
// assembly is not otherwise a test run.
|
|
273
|
-
if (options.coverage)
|
|
287
|
+
// Tests run here, in the build stage, and once per declared suite: the artifact carries
|
|
288
|
+
// each report so no container ever has to produce its own. Refreshing is opt-in because
|
|
289
|
+
// a template assembly is not otherwise a test run.
|
|
290
|
+
if (options.coverage) {
|
|
291
|
+
const suites = new Set(deployList.flatMap(deployReports).flatMap(({ suite }) => (suite ? [suite] : [])));
|
|
292
|
+
for (const suite of suites) shellExec(coverageReportCommand({ suite }));
|
|
293
|
+
}
|
|
274
294
|
|
|
275
295
|
for (const deployId of deployList) {
|
|
276
296
|
// Reconstruct the base template from 0 before each deploy id so neither a previous
|
|
@@ -278,7 +298,7 @@ program
|
|
|
278
298
|
// --no-template-rebuild.
|
|
279
299
|
if (options.templateRebuild) await buildTemplate({ toPath: basePath });
|
|
280
300
|
await buildDeployTemplate(deployId);
|
|
281
|
-
bundleDeployCoverage();
|
|
301
|
+
bundleDeployCoverage(deployId);
|
|
282
302
|
// Publish the just-assembled tree to the deploy id's private test repo so a
|
|
283
303
|
// pod started with `--private-test-repo` clones this work-in-progress source.
|
|
284
304
|
if (options.updatePrivate) await updatePrivateEngineTestRepo(deployId);
|