@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.
- package/.env.example +16 -0
- package/.github/workflows/coverall.cyberia.ci.yml +87 -0
- package/.github/workflows/cyberia-client.cd.yml +1 -18
- package/.github/workflows/cyberia-server.cd.yml +1 -18
- 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/engine-cyberia.cd.yml +3 -78
- package/.github/workflows/ghpkg.ci.yml +7 -1
- package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -16
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/.github/workflows/release.cd.yml +1 -9
- package/CHANGELOG.md +110 -1
- package/CLI-HELP.md +139 -9
- package/Dockerfile +1 -1
- package/Dockerfile.dev +1 -1
- package/Dockerfile.test +1 -1
- package/bin/build.js +7 -5
- package/bin/cyberia.js +73 -53
- package/bin/deploy.js +1 -1
- package/bin/index.js +73 -53
- package/compose.env +16 -0
- package/conf.js +2 -0
- package/deploy/dd-cyberia/deploy.sh +42 -0
- package/deploy/dd-cyberia/init.sh +63 -0
- package/deploy/dd-cyberia/sync-deploy.sh +194 -0
- package/deploy/lib/logging.sh +96 -0
- package/deploy/pwa-microservices-template/deploy.sh +72 -0
- package/deploy/release/deploy.sh +62 -0
- package/deployment.yaml +1 -1
- package/docker-compose.yml +31 -37
- package/hardhat/package-lock.json +9 -9
- package/hardhat/package.json +3 -3
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +5 -1
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +52 -0
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +1 -1
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/package.json +2 -2
- package/scripts/audit-selinux.sh +64 -0
- package/scripts/coverall-test-cyberia.sh +24 -0
- package/scripts/coverall-test.sh +24 -0
- package/scripts/gpu-diag.sh +0 -0
- package/scripts/ip-info.sh +0 -0
- package/scripts/k3s-node-setup.sh +18 -15
- package/scripts/kubeadm-node-setup.sh +12 -23
- package/scripts/link-local-underpost-cli.sh +0 -0
- package/scripts/lxd-vm-setup.sh +0 -0
- package/scripts/maas-nat-firewalld.sh +0 -0
- package/scripts/nat-iptables.sh +2 -0
- package/scripts/rhel-grpc-setup.sh +0 -0
- package/scripts/rocky-kickstart.sh +25 -9
- package/scripts/test-monitor.sh +1 -1
- package/src/api/cyberia-instance/cyberia-fallback-default-items.js +63 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +8 -1
- package/src/api/cyberia-instance/cyberia-instance.controller.js +3 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +13 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +43 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +1 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +16 -3
- package/src/api/object-layer/object-layer.model.js +204 -3
- package/src/api/object-layer/object-layer.service.js +1 -14
- package/src/cli/baremetal.js +1 -2
- package/src/cli/cloud-init.js +1 -1
- package/src/cli/cluster.js +73 -68
- package/src/cli/db.js +9 -2
- package/src/cli/deploy.js +21 -5
- package/src/cli/docker-compose.js +1 -1
- package/src/cli/env.js +1 -1
- package/src/cli/image.js +0 -1
- package/src/cli/index.js +121 -9
- package/src/cli/lxd.js +1 -1
- package/src/cli/monitor.js +1 -1
- package/src/cli/release.js +57 -22
- package/src/cli/repository.js +11 -9
- package/src/cli/run.js +36 -9
- package/src/cli/ssh.js +198 -77
- package/src/cli/system.js +26 -13
- package/src/cli/test.js +1 -1
- package/src/cli/vultr.js +583 -0
- package/src/cli/wireguard.js +2125 -0
- package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +368 -0
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +33 -0
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +4 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +17 -3
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +1 -1
- 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-instance/cyberia-instance.service.js +40 -0
- package/src/client/services/object-layer/object-layer.management.js +4 -4
- package/src/client-builder/client-build.js +20 -14
- package/src/db/mongo/MongooseDB.js +4 -0
- package/src/index.js +25 -1
- package/src/projects/cyberia/catalog-cyberia.js +5 -0
- package/src/projects/cyberia/generate-saga.js +14 -23
- package/src/projects/cyberia/instance-data.js +21 -2
- package/src/projects/cyberia/object-layer.js +11 -21
- package/src/projects/underpost/catalog-underpost.js +4 -1
- package/src/runtime/cyberia-client/Dockerfile +1 -1
- package/src/runtime/cyberia-client/Dockerfile.dev +1 -1
- package/src/runtime/cyberia-server/Dockerfile +1 -1
- package/src/runtime/cyberia-server/Dockerfile.dev +1 -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 +1 -1
- package/src/runtime/engine-cyberia/compose.env +16 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +31 -37
- package/src/server/backup.js +1 -1
- package/src/server/conf.js +18 -108
- package/src/server/cron.js +249 -51
- package/src/server/dns.js +100 -6
- package/src/server/environment.js +98 -0
- package/src/server/forward-proxy.js +549 -0
- package/src/server/middlewares.js +56 -1
- package/src/server/process.js +0 -1
- package/src/server/selinux.js +185 -0
- package/src/server/systemd.js +205 -0
- package/src/server/underpost-compression.js +186 -0
- package/src/server/underpost-gateway.js +20 -10
- package/src/server/underpost-ingress.js +18 -2
- package/test/cyberia-instance-conf-defaults.test.js +1 -0
- package/test/selinux.test.js +71 -0
- package/test/underpost-gateway.test.js +41 -0
- package/test/underpost-ingress.test.js +52 -0
- 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
package/docker-compose.yml
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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": "
|
|
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": "
|
|
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.
|
|
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.
|
|
2008
|
-
"resolved": "https://registry.npmjs.org/hardhat/-/hardhat-3.
|
|
2009
|
-
"integrity": "sha512-
|
|
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.
|
|
2708
|
-
"resolved": "https://registry.npmjs.org/undici/-/undici-6.
|
|
2709
|
-
"integrity": "sha512-
|
|
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": {
|
package/hardhat/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cyberia-hardhat",
|
|
3
|
-
"version": "
|
|
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.
|
|
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.
|
|
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.
|
|
30
|
+
image: underpost/underpost-engine:v3.3.0
|
|
27
31
|
command:
|
|
28
32
|
- /bin/sh
|
|
29
33
|
- -c
|