@underpostnet/cyberia 3.2.90 → 3.3.0

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.
Files changed (129) hide show
  1. package/.env.example +16 -0
  2. package/.github/workflows/coverall.cyberia.ci.yml +87 -0
  3. package/.github/workflows/cyberia-client.cd.yml +1 -18
  4. package/.github/workflows/cyberia-server.cd.yml +1 -18
  5. package/.github/workflows/docker-image.cyberia-client.ci.yml +1 -1
  6. package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +1 -1
  7. package/.github/workflows/docker-image.cyberia-server.ci.yml +1 -1
  8. package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +1 -1
  9. package/.github/workflows/docker-image.engine-cyberia.ci.yml +1 -1
  10. package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +1 -1
  11. package/.github/workflows/engine-cyberia.cd.yml +3 -78
  12. package/.github/workflows/ghpkg.ci.yml +7 -1
  13. package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -16
  14. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  15. package/.github/workflows/release.cd.yml +1 -9
  16. package/CHANGELOG.md +110 -1
  17. package/CLI-HELP.md +139 -9
  18. package/Dockerfile +1 -1
  19. package/Dockerfile.dev +1 -1
  20. package/Dockerfile.test +1 -1
  21. package/bin/build.js +7 -5
  22. package/bin/cyberia.js +73 -53
  23. package/bin/deploy.js +1 -1
  24. package/bin/index.js +73 -53
  25. package/compose.env +16 -0
  26. package/conf.js +2 -0
  27. package/deploy/dd-cyberia/deploy.sh +42 -0
  28. package/deploy/dd-cyberia/init.sh +63 -0
  29. package/deploy/dd-cyberia/sync-deploy.sh +194 -0
  30. package/deploy/lib/logging.sh +96 -0
  31. package/deploy/pwa-microservices-template/deploy.sh +72 -0
  32. package/deploy/release/deploy.sh +62 -0
  33. package/deployment.yaml +1 -1
  34. package/docker-compose.yml +31 -37
  35. package/hardhat/package-lock.json +9 -9
  36. package/hardhat/package.json +3 -3
  37. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +5 -1
  38. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
  39. package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +52 -0
  40. package/manifests/deployment/dd-cyberia-development/deployment.yaml +1 -1
  41. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  42. package/package.json +2 -2
  43. package/scripts/audit-selinux.sh +64 -0
  44. package/scripts/coverall-test-cyberia.sh +24 -0
  45. package/scripts/coverall-test.sh +24 -0
  46. package/scripts/gpu-diag.sh +0 -0
  47. package/scripts/ip-info.sh +0 -0
  48. package/scripts/k3s-node-setup.sh +18 -15
  49. package/scripts/kubeadm-node-setup.sh +12 -23
  50. package/scripts/link-local-underpost-cli.sh +0 -0
  51. package/scripts/lxd-vm-setup.sh +0 -0
  52. package/scripts/maas-nat-firewalld.sh +0 -0
  53. package/scripts/nat-iptables.sh +2 -0
  54. package/scripts/rhel-grpc-setup.sh +0 -0
  55. package/scripts/rocky-kickstart.sh +25 -9
  56. package/scripts/test-monitor.sh +1 -1
  57. package/src/api/cyberia-instance/cyberia-fallback-default-items.js +63 -0
  58. package/src/api/cyberia-instance/cyberia-fallback-world.js +8 -1
  59. package/src/api/cyberia-instance/cyberia-instance.controller.js +3 -0
  60. package/src/api/cyberia-instance/cyberia-instance.router.js +13 -0
  61. package/src/api/cyberia-instance/cyberia-instance.service.js +43 -0
  62. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +1 -0
  63. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +16 -3
  64. package/src/api/object-layer/object-layer.model.js +204 -3
  65. package/src/api/object-layer/object-layer.service.js +1 -14
  66. package/src/cli/baremetal.js +1 -2
  67. package/src/cli/cloud-init.js +1 -1
  68. package/src/cli/cluster.js +73 -68
  69. package/src/cli/db.js +9 -2
  70. package/src/cli/deploy.js +21 -5
  71. package/src/cli/docker-compose.js +1 -1
  72. package/src/cli/env.js +1 -1
  73. package/src/cli/image.js +0 -1
  74. package/src/cli/index.js +121 -9
  75. package/src/cli/lxd.js +1 -1
  76. package/src/cli/monitor.js +1 -1
  77. package/src/cli/release.js +57 -22
  78. package/src/cli/repository.js +11 -9
  79. package/src/cli/run.js +36 -9
  80. package/src/cli/ssh.js +198 -77
  81. package/src/cli/system.js +26 -13
  82. package/src/cli/test.js +1 -1
  83. package/src/cli/vultr.js +583 -0
  84. package/src/cli/wireguard.js +2125 -0
  85. package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +368 -0
  86. package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +33 -0
  87. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +4 -0
  88. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
  89. package/src/client/public/cyberia-docs/ARCHITECTURE.md +17 -3
  90. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +1 -1
  91. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  92. package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
  93. package/src/client/services/cyberia-instance/cyberia-instance.service.js +40 -0
  94. package/src/client/services/object-layer/object-layer.management.js +4 -4
  95. package/src/client-builder/client-build.js +20 -14
  96. package/src/db/mongo/MongooseDB.js +4 -0
  97. package/src/index.js +25 -1
  98. package/src/projects/cyberia/catalog-cyberia.js +5 -0
  99. package/src/projects/cyberia/generate-saga.js +14 -23
  100. package/src/projects/cyberia/instance-data.js +21 -2
  101. package/src/projects/cyberia/object-layer.js +11 -21
  102. package/src/projects/underpost/catalog-underpost.js +4 -1
  103. package/src/runtime/cyberia-client/Dockerfile +1 -1
  104. package/src/runtime/cyberia-client/Dockerfile.dev +1 -1
  105. package/src/runtime/cyberia-server/Dockerfile +1 -1
  106. package/src/runtime/cyberia-server/Dockerfile.dev +1 -1
  107. package/src/runtime/engine-cyberia/Dockerfile +1 -1
  108. package/src/runtime/engine-cyberia/Dockerfile.dev +1 -1
  109. package/src/runtime/engine-cyberia/Dockerfile.test +1 -1
  110. package/src/runtime/engine-cyberia/compose.env +16 -0
  111. package/src/runtime/engine-cyberia/docker-compose.yml +31 -37
  112. package/src/server/backup.js +1 -1
  113. package/src/server/conf.js +18 -108
  114. package/src/server/cron.js +249 -51
  115. package/src/server/dns.js +100 -6
  116. package/src/server/environment.js +98 -0
  117. package/src/server/forward-proxy.js +549 -0
  118. package/src/server/middlewares.js +56 -1
  119. package/src/server/process.js +0 -1
  120. package/src/server/selinux.js +185 -0
  121. package/src/server/systemd.js +205 -0
  122. package/src/server/underpost-compression.js +186 -0
  123. package/src/server/underpost-gateway.js +20 -10
  124. package/src/server/underpost-ingress.js +18 -2
  125. package/test/cyberia-instance-conf-defaults.test.js +1 -0
  126. package/test/selinux.test.js +71 -0
  127. package/test/underpost-gateway.test.js +41 -0
  128. package/test/underpost-ingress.test.js +52 -0
  129. package/test/wireguard-edge.test.js +1177 -0
@@ -0,0 +1,194 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ source "$SCRIPT_DIR/../lib/logging.sh"
6
+
7
+ ENGINE_ROOT=/home/dd/engine
8
+ TARGET_NODE=localhost.localdomain
9
+ INGRESS_NODE=localhost.localdomain
10
+
11
+ # Asset repositories are committed only when they actually changed, so the
12
+ # status query stays outside run_quiet: its stdout is the value we branch on.
13
+ has_changes() {
14
+ local path="$1"
15
+
16
+ sudo -n -- /bin/bash -lc \
17
+ "cd $ENGINE_ROOT && node bin cmt $path --has-changes" | tr -d '\n'
18
+ }
19
+
20
+ main() {
21
+ echo "Starting remote sync and deploy"
22
+
23
+ run_quiet \
24
+ "Pull repository" \
25
+ "Target pod:" \
26
+ 14 \
27
+ sudo -n -- /bin/bash -lc \
28
+ "cd $ENGINE_ROOT && node bin run pull"
29
+
30
+ run_quiet \
31
+ "Install dependencies" \
32
+ "Target pod:" \
33
+ 14 \
34
+ sudo -n -- /bin/bash -lc \
35
+ "cd $ENGINE_ROOT && npm install"
36
+
37
+ run_quiet \
38
+ "Sync secrets" \
39
+ "Target pod:" \
40
+ 14 \
41
+ sudo -n -- /bin/bash -lc \
42
+ "cd $ENGINE_ROOT && node bin run secret"
43
+
44
+ run_quiet \
45
+ "Run tests" \
46
+ "Target pod:" \
47
+ 14 \
48
+ sudo -n -- /bin/bash -lc \
49
+ "cd $ENGINE_ROOT && npm run test"
50
+
51
+ run_quiet \
52
+ "Clean cyberia public assets" \
53
+ "Target pod:" \
54
+ 14 \
55
+ sudo -n -- /bin/bash -lc \
56
+ "cd $ENGINE_ROOT && node bin run clean src/client/public/cyberia"
57
+
58
+ run_quiet \
59
+ "Clean underpost public assets" \
60
+ "Target pod:" \
61
+ 14 \
62
+ sudo -n -- /bin/bash -lc \
63
+ "cd $ENGINE_ROOT && node bin run clean src/client/public/underpost"
64
+
65
+ run_quiet \
66
+ "Initialize cyberia assets repository" \
67
+ "Target pod:" \
68
+ 14 \
69
+ sudo -n -- /bin/bash -lc \
70
+ "cd $ENGINE_ROOT && node bin cmt src/client/public/cyberia --init-repo"
71
+
72
+ run_quiet \
73
+ "Initialize underpost assets repository" \
74
+ "Target pod:" \
75
+ 14 \
76
+ sudo -n -- /bin/bash -lc \
77
+ "cd $ENGINE_ROOT && node bin cmt src/client/public/underpost --init-repo"
78
+
79
+ run_quiet \
80
+ "Pull cyberia public assets" \
81
+ "Target pod:" \
82
+ 14 \
83
+ sudo -n -- /bin/bash -lc \
84
+ "cd $ENGINE_ROOT && node bin fs src/client/public/cyberia --pull --recursive --deploy-id dd-cyberia"
85
+
86
+ run_quiet \
87
+ "Pull underpost public assets" \
88
+ "Target pod:" \
89
+ 14 \
90
+ sudo -n -- /bin/bash -lc \
91
+ "cd $ENGINE_ROOT && node bin fs src/client/public/underpost --pull --recursive --deploy-id dd-cyberia --storage-file-path './engine-private/conf/dd-cyberia/storage.underpost.json'"
92
+
93
+ if [ "$(has_changes src/client/public/cyberia)" = "1" ]; then
94
+ run_quiet \
95
+ "Commit cyberia public assets" \
96
+ "Target pod:" \
97
+ 14 \
98
+ sudo -n -- /bin/bash -lc \
99
+ "cd $ENGINE_ROOT && node bin cmt src/client/public/cyberia feat 'Update cyberia public assets'"
100
+ fi
101
+
102
+ if [ "$(has_changes src/client/public/underpost)" = "1" ]; then
103
+ run_quiet \
104
+ "Commit underpost public assets" \
105
+ "Target pod:" \
106
+ 14 \
107
+ sudo -n -- /bin/bash -lc \
108
+ "cd $ENGINE_ROOT && node bin cmt src/client/public/underpost feat 'Update underpost public assets'"
109
+ fi
110
+
111
+ run_quiet \
112
+ "Apply format fixes" \
113
+ "Target pod:" \
114
+ 14 \
115
+ sudo -n -- /bin/bash -lc \
116
+ "cd $ENGINE_ROOT && npm run fix"
117
+
118
+ run_quiet \
119
+ "Reinstall dependencies" \
120
+ "Target pod:" \
121
+ 14 \
122
+ sudo -n -- /bin/bash -lc \
123
+ "cd $ENGINE_ROOT && npm install"
124
+
125
+ run_quiet \
126
+ "Build cyberia deployment bundle" \
127
+ "Target pod:" \
128
+ 14 \
129
+ sudo -n -- /bin/bash -lc \
130
+ "cd $ENGINE_ROOT && node bin/deploy cyberia"
131
+
132
+ run_quiet \
133
+ "Clean build artifacts" \
134
+ "Target pod:" \
135
+ 14 \
136
+ sudo -n -- /bin/bash -lc \
137
+ "cd $ENGINE_ROOT && underpost run clean"
138
+
139
+ run_quiet \
140
+ "Load dd-cyberia production environment" \
141
+ "Target pod:" \
142
+ 14 \
143
+ sudo -n -- /bin/bash -lc \
144
+ "cd $ENGINE_ROOT && node bin env dd-cyberia production"
145
+
146
+ run_quiet \
147
+ "Build cyberia manifests" \
148
+ "Target pod:" \
149
+ 14 \
150
+ sudo -n -- /bin/bash -lc \
151
+ "cd $ENGINE_ROOT && node bin/cyberia run-workflow build-manifest"
152
+
153
+ run_quiet \
154
+ "Sync dd-cyberia cluster" \
155
+ "Target pod:" \
156
+ 14 \
157
+ sudo -n -- /bin/bash -lc \
158
+ "cd $ENGINE_ROOT && node bin run sync 'dd-cyberia,1,,underpost/engine-cyberia:latest' \
159
+ --kubeadm \
160
+ --deploy-id-cron-jobs none \
161
+ --timeout-response 300000ms \
162
+ --node-name ${TARGET_NODE} \
163
+ --gateway-api \
164
+ --ingress-node ${INGRESS_NODE} \
165
+ --ssh-key-path /home/dd/tmp/897as9dxhaskd9 \
166
+ --image-pull-policy Always \
167
+ --cmd 'cd /home/dd/engine, \
168
+ underpost clone underpostnet/engine-cyberia, \
169
+ mkdir -p /home/dd/engine/src/client/public/itemledger \
170
+ /home/dd/engine/src/client/public/cryptokoyn \
171
+ /home/dd/engine/src/client/components/cryptokoyn \
172
+ /home/dd/engine/src/client/components/itemledger \
173
+ /home/dd/engine/hardhat, \
174
+ cp -a ./engine-cyberia/src/client/public/itemledger/. /home/dd/engine/src/client/public/itemledger/, \
175
+ cp -a ./engine-cyberia/src/client/public/cryptokoyn/. /home/dd/engine/src/client/public/cryptokoyn/, \
176
+ cp -a ./engine-cyberia/src/client/components/cryptokoyn/. /home/dd/engine/src/client/components/cryptokoyn/, \
177
+ cp -a ./engine-cyberia/src/client/components/itemledger/. /home/dd/engine/src/client/components/itemledger/, \
178
+ cp -a ./engine-cyberia/src/client/Itemledger.index.js /home/dd/engine/src/client/Itemledger.index.js, \
179
+ cp -a ./engine-cyberia/src/client/Cryptokoyn.index.js /home/dd/engine/src/client/Cryptokoyn.index.js, \
180
+ rm -rf ./engine-cyberia, \
181
+ sudo rm -rf ./engine-private/, \
182
+ node bin clone underpostnet/engine-cyberia-private, \
183
+ sudo mv ./engine-cyberia-private ./engine-private, \
184
+ node bin env dd-cyberia production, \
185
+ node ./engine-private/itc-scripts/dd-cyberia-0.js, \
186
+ sudo chown -R dd:dd /home/dd/engine/src/client/public/cyberia, \
187
+ node bin/cyberia run-workflow import-default-items --clean, \
188
+ node bin/cyberia run-workflow import-default-items, \
189
+ node bin env dd-cyberia production, \
190
+ node bin client dd-cyberia, \
191
+ node bin start dd-cyberia production --run'"
192
+ }
193
+
194
+ main "$@"
@@ -0,0 +1,96 @@
1
+ # Shared logging helpers for deploy/<deploy-id>/*.sh. Sourced, never executed directly.
2
+ #
3
+ # Deploy script contract:
4
+ # - one run_quiet call per remote command, with its own label
5
+ # - the body lives in main(), invoked on the last line: the first remote command
6
+ # pulls this repository, rewriting the running script while bash reads it
7
+ #
8
+ # run_quiet hides normal output, prints only `patterns` matches plus the next
9
+ # `lines_after` lines, and returns the command's exit status so `set -e` stops
10
+ # the deployment. On failure it keeps two temp files and prints their paths in
11
+ # red instead of their contents: the command's own stderr (native error message
12
+ # and stack trace) and the full unfiltered log up to the error.
13
+
14
+ RUN_QUIET_RED=$'\033[0;31m'
15
+ RUN_QUIET_RESET=$'\033[0m'
16
+
17
+ RUN_QUIET_NODE_NAME=$(hostname 2>/dev/null | tr '[:upper:]' '[:lower:]')
18
+ RUN_QUIET_NODE_TAG=${RUN_QUIET_NODE_NAME:+ [$RUN_QUIET_NODE_NAME]}
19
+
20
+ run_quiet() {
21
+ local label="$1"
22
+ local patterns="$2"
23
+ local lines_after="$3"
24
+ shift 3
25
+
26
+ local debug_log
27
+ local error_log
28
+ local fifo_dir
29
+ local filter_pid
30
+ local stderr_pid
31
+ local status=0
32
+
33
+ echo "$(date -Is) $RUN_QUIET_NODE_TAG ▶ $label"
34
+
35
+ debug_log=$(mktemp --suffix=.debug.log)
36
+ error_log=$(mktemp --suffix=.error.log)
37
+ fifo_dir=$(mktemp -d)
38
+ mkfifo "$fifo_dir/merged" "$fifo_dir/stderr"
39
+
40
+ # The filter reads the live stream rather than the finished log: a deployment
41
+ # monitor prints its matches for minutes before exiting, so a pass over the
42
+ # completed file would show nothing until then. fflush defeats awk's block
43
+ # buffering, which otherwise withholds matches whenever stdout is a pipe.
44
+ # awk writes the debug log itself rather than piping through tee, so the
45
+ # reader stays a single process that a kill can always release.
46
+ awk \
47
+ -v pattern="$patterns" \
48
+ -v lines_after="$lines_after" \
49
+ -v debug_log="$debug_log" '
50
+ {
51
+ print > debug_log
52
+ }
53
+ $0 ~ pattern {
54
+ remaining = lines_after + 1
55
+ }
56
+ remaining > 0 {
57
+ print
58
+ fflush()
59
+ remaining--
60
+ }
61
+ ' <"$fifo_dir/merged" &
62
+ filter_pid=$!
63
+
64
+ # stderr is duplicated: on its own for the native error and stack trace, and
65
+ # into the merged stream so both the debug log and the filter see it in
66
+ # chronological order with stdout.
67
+ tee -a "$error_log" <"$fifo_dir/stderr" >"$fifo_dir/merged" &
68
+ stderr_pid=$!
69
+
70
+ "$@" >"$fifo_dir/merged" 2>"$fifo_dir/stderr" || status=$?
71
+
72
+ # Drain both readers before the paths are printed, or the trace can still be
73
+ # in flight. Bounded: a command that leaks a child holding a stream open must
74
+ # not hang the deployment, and by then everything read has been written.
75
+ run_quiet_drain "$stderr_pid"
76
+ run_quiet_drain "$filter_pid"
77
+ rm -rf "$fifo_dir"
78
+
79
+ if [ "$status" -ne 0 ]; then
80
+ printf '%s✖ %s failed (exit %s)\n error trace: %s\n debug log: %s%s\n' \
81
+ "$RUN_QUIET_RED" "$label" "$status" "$error_log" "$debug_log" "$RUN_QUIET_RESET" >&2
82
+ return "$status"
83
+ fi
84
+
85
+ rm -f "$debug_log" "$error_log"
86
+
87
+ return "$status"
88
+ }
89
+
90
+ run_quiet_drain() {
91
+ local pid="$1"
92
+
93
+ timeout 10 tail --pid="$pid" -f /dev/null 2>/dev/null || true
94
+ kill "$pid" 2>/dev/null || true
95
+ wait "$pid" 2>/dev/null || true
96
+ }
@@ -0,0 +1,72 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ source "$SCRIPT_DIR/../lib/logging.sh"
6
+
7
+ # Runs in the workflow's rockylinux:9 container against the checked-out
8
+ # workspace instead of over SSH, so the repository root is this script's
9
+ # grandparent rather than a fixed remote path.
10
+ REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
11
+
12
+ main() {
13
+ echo "Starting github pages deploy"
14
+
15
+ cd "$REPO_ROOT"
16
+
17
+ run_quiet \
18
+ "Install required packages" \
19
+ "Target pod:" \
20
+ 14 \
21
+ dnf install -y sudo tar gzip bzip2 git
22
+
23
+ run_quiet \
24
+ "Install curl" \
25
+ "Target pod:" \
26
+ 14 \
27
+ dnf install -y curl --allowerasing
28
+
29
+ run_quiet \
30
+ "Add Node.js repository" \
31
+ "Target pod:" \
32
+ 14 \
33
+ bash -c "curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -"
34
+
35
+ run_quiet \
36
+ "Install Node.js" \
37
+ "Target pod:" \
38
+ 14 \
39
+ dnf install nodejs -y
40
+
41
+ run_quiet \
42
+ "Install dependencies" \
43
+ "Target pod:" \
44
+ 14 \
45
+ npm install
46
+
47
+ run_quiet \
48
+ "Build dd-github-pages configuration" \
49
+ "Target pod:" \
50
+ 14 \
51
+ node bin new --default-conf --conf-workflow-id dd-github-pages
52
+
53
+ run_quiet \
54
+ "Create dd-github-pages deployment" \
55
+ "Target pod:" \
56
+ 14 \
57
+ node bin new --deploy-id dd-github-pages
58
+
59
+ run_quiet \
60
+ "Load dd-github-pages production environment" \
61
+ "Target pod:" \
62
+ 14 \
63
+ node bin env dd-github-pages production
64
+
65
+ run_quiet \
66
+ "Build dd-github-pages client" \
67
+ "Target pod:" \
68
+ 14 \
69
+ env NODE_ENV=production node bin client dd-github-pages '' underpostnet.github.io /pwa-microservices-template-ghpkg
70
+ }
71
+
72
+ main "$@"
@@ -0,0 +1,62 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ source "$SCRIPT_DIR/../lib/logging.sh"
6
+
7
+ ENGINE_ROOT=/home/dd/engine
8
+
9
+ main() {
10
+ echo "Starting remote release deploy"
11
+
12
+ run_quiet \
13
+ "Pull repository" \
14
+ "Target pod:" \
15
+ 14 \
16
+ sudo -n -- /bin/bash -lc \
17
+ "cd $ENGINE_ROOT && node bin run pull"
18
+
19
+ run_quiet \
20
+ "Install dependencies" \
21
+ "Target pod:" \
22
+ 14 \
23
+ sudo -n -- /bin/bash -lc \
24
+ "cd $ENGINE_ROOT && npm install"
25
+
26
+ run_quiet \
27
+ "Sync secrets" \
28
+ "Target pod:" \
29
+ 14 \
30
+ sudo -n -- /bin/bash -lc \
31
+ "cd $ENGINE_ROOT && node bin run secret"
32
+
33
+ run_quiet \
34
+ "Install underpost CLI" \
35
+ "Target pod:" \
36
+ 14 \
37
+ sudo -n -- /bin/bash -lc \
38
+ "cd $ENGINE_ROOT && npm install -g underpost"
39
+
40
+ run_quiet \
41
+ "Resync secrets" \
42
+ "Target pod:" \
43
+ 14 \
44
+ sudo -n -- /bin/bash -lc \
45
+ "cd $ENGINE_ROOT && node bin run secret"
46
+
47
+ run_quiet \
48
+ "Configure git" \
49
+ "Target pod:" \
50
+ 14 \
51
+ sudo -n -- /bin/bash -lc \
52
+ "cd $ENGINE_ROOT && node bin run --dev git-conf"
53
+
54
+ run_quiet \
55
+ "Build and publish docker images" \
56
+ "Target pod:" \
57
+ 14 \
58
+ sudo -n -- /bin/bash -lc \
59
+ "cd $ENGINE_ROOT && node bin run docker-image"
60
+ }
61
+
62
+ main "$@"
package/deployment.yaml CHANGED
@@ -20,7 +20,7 @@ spec:
20
20
  spec:
21
21
  containers:
22
22
  - name: dd-cyberia-development-blue
23
- image: underpost/underpost-engine:v3.2.90
23
+ image: underpost/underpost-engine:v3.3.0
24
24
  imagePullPolicy: IfNotPresent
25
25
  envFrom:
26
26
  - secretRef:
@@ -4,36 +4,6 @@
4
4
  # (MongoDB + Valkey + IPFS), then the Cyberia content-authority engine and its
5
5
  # per-instance server/client tiers, fronted by an nginx reverse proxy.
6
6
  #
7
- # Canonical location (custom docker-compose workflow):
8
- # engine-private/conf/dd-cyberia/docker-compose/cyberia/
9
- # ├── docker-compose.yml (this file — the ENTIRE stack, single source)
10
- # ├── compose.env (working env-file, used as-is — not generated)
11
- # ├── nginx.conf (custom per-variant sub-path routing)
12
- # └── mongodb/entrypoint.sh (replica-set bootstrap)
13
- # All bind mounts below are relative to this directory: the CLI runs compose with
14
- # `--project-directory` pinned here (see src/cli/docker-compose.js).
15
- #
16
- # Multi-instance: one engine-cyberia (content + asset authority) feeds three
17
- # cyberia-server + three cyberia-client tiers, one per conf.instances.json
18
- # multiInstance variant (amethyst-strata-expansion "/", FOREST "/FOREST",
19
- # TEST "/TEST"). This custom workflow owns nginx.conf and the services below;
20
- # keep both in sync when its instance topology changes.
21
- #
22
- # Startup is a strict health-gated chain: the stable gateway starts after the
23
- # engine, then each server/client pipeline advances independently:
24
- # mongodb + valkey -> engine runtime -> proxy -> 3x server -> 3x client
25
- #
26
- # Architecture boundaries (see CLAUDE.md "Cyberia architecture boundaries"):
27
- # engine-cyberia — content, validation, persistence, gRPC(:50051)+REST(:4005)
28
- # data services, asset metadata. The authority layer.
29
- # cyberia-server — authoritative real-time simulation / tick processing (Go).
30
- # cyberia-client — rendering, input, prediction, presentation (WASM bundle).
31
- #
32
- # Usage:
33
- # underpost docker-compose --up --deploy-id dd-cyberia --docker-compose-id cyberia
34
- # (or the docker:cyberia:* npm scripts). The engine-cyberia image bakes the
35
- # dd-cyberia build at image-build time, so no private-repo credentials are
36
- # required at container start.
37
7
 
38
8
  name: dd-cyberia
39
9
 
@@ -165,7 +135,7 @@ services:
165
135
  # server starts but rejects connections until seeded). Serves REST/WS on 4005
166
136
  # and the engine gRPC data service on 50051.
167
137
  engine-cyberia-runtime:
168
- image: ${ENGINE_CYBERIA_IMAGE:-underpost/engine-cyberia-dev}:${ENGINE_CYBERIA_TAG:-v3.2.90}
138
+ image: ${ENGINE_CYBERIA_IMAGE:-underpost/engine-cyberia-dev}:${ENGINE_CYBERIA_TAG:-v3.3.0}
169
139
  container_name: dd-cyberia-engine
170
140
  command:
171
141
  - /bin/sh
@@ -220,7 +190,7 @@ services:
220
190
  # gateway on host port 8081, so one port can route every instance path.
221
191
 
222
192
  cyberia-server-runtime:
223
- image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.2.90}
193
+ image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.0}
224
194
  container_name: dd-cyberia-server
225
195
  environment:
226
196
  INSTANCE_CODE: amethyst-strata-expansion
@@ -232,6 +202,14 @@ services:
232
202
  STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
233
203
  APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
234
204
  LOG_LEVEL: ${CYBERIA_SERVER_LOG_LEVEL:-}
205
+ CYBERIA_DISABLE_CONNECTION_LIMITS: ${CYBERIA_DISABLE_CONNECTION_LIMITS:-}
206
+ CYBERIA_MAX_CONNECTIONS: ${CYBERIA_MAX_CONNECTIONS:-}
207
+ CYBERIA_MAX_CONNECTIONS_PER_IP: ${CYBERIA_MAX_CONNECTIONS_PER_IP:-}
208
+ CYBERIA_CONNECT_RATE_PER_IP: ${CYBERIA_CONNECT_RATE_PER_IP:-}
209
+ CYBERIA_CONNECT_BURST_PER_IP: ${CYBERIA_CONNECT_BURST_PER_IP:-}
210
+ CYBERIA_MESSAGE_RATE: ${CYBERIA_MESSAGE_RATE:-}
211
+ CYBERIA_MESSAGE_BURST: ${CYBERIA_MESSAGE_BURST:-}
212
+ CYBERIA_MAX_STRIKES: ${CYBERIA_MAX_STRIKES:-}
235
213
  networks:
236
214
  - dd-cyberia-internal
237
215
  expose:
@@ -248,7 +226,7 @@ services:
248
226
  restart: unless-stopped
249
227
 
250
228
  cyberia-server-forest:
251
- image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.2.90}
229
+ image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.0}
252
230
  container_name: dd-cyberia-server-forest
253
231
  environment:
254
232
  INSTANCE_CODE: FOREST
@@ -260,6 +238,14 @@ services:
260
238
  STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
261
239
  APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
262
240
  LOG_LEVEL: ${CYBERIA_SERVER_LOG_LEVEL:-}
241
+ CYBERIA_DISABLE_CONNECTION_LIMITS: ${CYBERIA_DISABLE_CONNECTION_LIMITS:-}
242
+ CYBERIA_MAX_CONNECTIONS: ${CYBERIA_MAX_CONNECTIONS:-}
243
+ CYBERIA_MAX_CONNECTIONS_PER_IP: ${CYBERIA_MAX_CONNECTIONS_PER_IP:-}
244
+ CYBERIA_CONNECT_RATE_PER_IP: ${CYBERIA_CONNECT_RATE_PER_IP:-}
245
+ CYBERIA_CONNECT_BURST_PER_IP: ${CYBERIA_CONNECT_BURST_PER_IP:-}
246
+ CYBERIA_MESSAGE_RATE: ${CYBERIA_MESSAGE_RATE:-}
247
+ CYBERIA_MESSAGE_BURST: ${CYBERIA_MESSAGE_BURST:-}
248
+ CYBERIA_MAX_STRIKES: ${CYBERIA_MAX_STRIKES:-}
263
249
  networks:
264
250
  - dd-cyberia-internal
265
251
  expose:
@@ -276,7 +262,7 @@ services:
276
262
  restart: unless-stopped
277
263
 
278
264
  cyberia-server-test:
279
- image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.2.90}
265
+ image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.0}
280
266
  container_name: dd-cyberia-server-test
281
267
  environment:
282
268
  INSTANCE_CODE: TEST
@@ -288,6 +274,14 @@ services:
288
274
  STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
289
275
  APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
290
276
  LOG_LEVEL: ${CYBERIA_SERVER_LOG_LEVEL:-}
277
+ CYBERIA_DISABLE_CONNECTION_LIMITS: ${CYBERIA_DISABLE_CONNECTION_LIMITS:-}
278
+ CYBERIA_MAX_CONNECTIONS: ${CYBERIA_MAX_CONNECTIONS:-}
279
+ CYBERIA_MAX_CONNECTIONS_PER_IP: ${CYBERIA_MAX_CONNECTIONS_PER_IP:-}
280
+ CYBERIA_CONNECT_RATE_PER_IP: ${CYBERIA_CONNECT_RATE_PER_IP:-}
281
+ CYBERIA_CONNECT_BURST_PER_IP: ${CYBERIA_CONNECT_BURST_PER_IP:-}
282
+ CYBERIA_MESSAGE_RATE: ${CYBERIA_MESSAGE_RATE:-}
283
+ CYBERIA_MESSAGE_BURST: ${CYBERIA_MESSAGE_BURST:-}
284
+ CYBERIA_MAX_STRIKES: ${CYBERIA_MAX_STRIKES:-}
291
285
  networks:
292
286
  - dd-cyberia-internal
293
287
  expose:
@@ -315,7 +309,7 @@ services:
315
309
  # cyberia-server-test -> cyberia-client-test
316
310
 
317
311
  cyberia-client-runtime:
318
- image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.2.90}
312
+ image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.0}
319
313
  container_name: dd-cyberia-client
320
314
  environment:
321
315
  CYBERIA_PORT: '8081'
@@ -340,7 +334,7 @@ services:
340
334
  restart: unless-stopped
341
335
 
342
336
  cyberia-client-forest:
343
- image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.2.90}
337
+ image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.0}
344
338
  container_name: dd-cyberia-client-forest
345
339
  environment:
346
340
  CYBERIA_PORT: '8081'
@@ -365,7 +359,7 @@ services:
365
359
  restart: unless-stopped
366
360
 
367
361
  cyberia-client-test:
368
- image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.2.90}
362
+ image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.0}
369
363
  container_name: dd-cyberia-client-test
370
364
  environment:
371
365
  CYBERIA_PORT: '8081'
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "cyberia-hardhat",
3
- "version": "1.0.0",
3
+ "version": "3.3.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "cyberia-hardhat",
9
- "version": "1.0.0",
9
+ "version": "3.3.0",
10
10
  "dependencies": {
11
11
  "@openzeppelin/contracts": "~5.6.1",
12
12
  "dotenv": "~17.4.2",
@@ -15,7 +15,7 @@
15
15
  "devDependencies": {
16
16
  "@nomicfoundation/hardhat-toolbox-viem": "^5.0.7",
17
17
  "chai": "^6.2.2",
18
- "hardhat": "~3.12.0"
18
+ "hardhat": "~3.13.0"
19
19
  },
20
20
  "engines": {
21
21
  "node": ">=22.0.0"
@@ -2004,9 +2004,9 @@
2004
2004
  "license": "ISC"
2005
2005
  },
2006
2006
  "node_modules/hardhat": {
2007
- "version": "3.12.0",
2008
- "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-3.12.0.tgz",
2009
- "integrity": "sha512-HY1BPWJ+Pq/RvGDcK8M0gwawNiJqrjfF0LOdHM+pYa9EDybG8O9hX1RP7fWchNLrA49D7A1Ax8LlRkQglWozzg==",
2007
+ "version": "3.13.0",
2008
+ "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-3.13.0.tgz",
2009
+ "integrity": "sha512-ERVBunuWWBTT3BNfZlozqGB0cSG84xi/P380wGNUxt+pl5e309ZVmNvXiwrMxZn4Ua4LJYW93yC1RnAtf7fLNw==",
2010
2010
  "dev": true,
2011
2011
  "license": "MIT",
2012
2012
  "dependencies": {
@@ -2704,9 +2704,9 @@
2704
2704
  }
2705
2705
  },
2706
2706
  "node_modules/undici": {
2707
- "version": "6.27.0",
2708
- "resolved": "https://registry.npmjs.org/undici/-/undici-6.27.0.tgz",
2709
- "integrity": "sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==",
2707
+ "version": "6.28.0",
2708
+ "resolved": "https://registry.npmjs.org/undici/-/undici-6.28.0.tgz",
2709
+ "integrity": "sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==",
2710
2710
  "dev": true,
2711
2711
  "license": "MIT",
2712
2712
  "engines": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cyberia-hardhat",
3
- "version": "1.0.0",
3
+ "version": "3.3.0",
4
4
  "type": "module",
5
5
  "description": "Hardhat project for Cyberia Online ObjectLayerToken (ERC-1155) on Hyperledger Besu",
6
6
  "private": true,
@@ -21,7 +21,7 @@
21
21
  "devDependencies": {
22
22
  "@nomicfoundation/hardhat-toolbox-viem": "^5.0.7",
23
23
  "chai": "^6.2.2",
24
- "hardhat": "~3.12.0"
24
+ "hardhat": "~3.13.0"
25
25
  },
26
26
  "dependencies": {
27
27
  "@openzeppelin/contracts": "~5.6.1",
@@ -38,6 +38,6 @@
38
38
  "elliptic": ">=6.6.1",
39
39
  "lodash-es": "4.18.1",
40
40
  "ws": ">=8.21.0",
41
- "undici": "6.27.0"
41
+ "undici": "6.28.0"
42
42
  }
43
43
  }
@@ -14,6 +14,10 @@ spec:
14
14
  failedJobsHistoryLimit: 1
15
15
  suspend: false
16
16
  jobTemplate:
17
+ metadata:
18
+ labels:
19
+ app: dd-cron-backup
20
+ managed-by: underpost
17
21
  spec:
18
22
  template:
19
23
  metadata:
@@ -23,7 +27,7 @@ spec:
23
27
  spec:
24
28
  containers:
25
29
  - name: dd-cron-backup
26
- image: underpost/underpost-engine:v3.2.90
30
+ image: underpost/underpost-engine:v3.3.0
27
31
  command:
28
32
  - /bin/sh
29
33
  - -c
@@ -23,7 +23,7 @@ spec:
23
23
  spec:
24
24
  containers:
25
25
  - name: dd-cron-dns
26
- image: underpost/underpost-engine:v3.2.90
26
+ image: underpost/underpost-engine:v3.3.0
27
27
  command:
28
28
  - /bin/sh
29
29
  - -c