cyberia 3.2.9 → 3.2.22

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 (184) hide show
  1. package/.github/workflows/engine-cyberia.cd.yml +7 -0
  2. package/.github/workflows/engine-cyberia.ci.yml +14 -2
  3. package/.github/workflows/ghpkg.ci.yml +1 -0
  4. package/.github/workflows/npmpkg.ci.yml +10 -5
  5. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  6. package/.github/workflows/release.cd.yml +1 -0
  7. package/.vscode/extensions.json +9 -9
  8. package/.vscode/settings.json +20 -4
  9. package/CHANGELOG.md +363 -1
  10. package/CLI-HELP.md +975 -1061
  11. package/README.md +190 -348
  12. package/bin/build.js +102 -125
  13. package/bin/build.template.js +33 -0
  14. package/bin/cyberia.js +238 -56
  15. package/bin/deploy.js +16 -3
  16. package/bin/index.js +238 -56
  17. package/bump.config.js +26 -0
  18. package/conf.js +131 -24
  19. package/deployment.yaml +76 -2
  20. package/hardhat/package-lock.json +113 -144
  21. package/hardhat/package.json +4 -3
  22. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
  23. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
  24. package/manifests/deployment/dd-cyberia-development/deployment.yaml +76 -2
  25. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  26. package/manifests/kind-config-dev.yaml +8 -0
  27. package/manifests/lxd/lxd-admin-profile.yaml +12 -3
  28. package/manifests/mongodb/pv-pvc.yaml +44 -8
  29. package/manifests/mongodb/statefulset.yaml +55 -68
  30. package/manifests/mongodb-4.4/headless-service.yaml +10 -0
  31. package/manifests/mongodb-4.4/kustomization.yaml +3 -1
  32. package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
  33. package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
  34. package/manifests/mongodb-4.4/statefulset.yaml +79 -0
  35. package/manifests/mongodb-4.4/storage-class.yaml +9 -0
  36. package/manifests/valkey/statefulset.yaml +1 -1
  37. package/manifests/valkey/valkey-nodeport.yaml +17 -0
  38. package/package.json +31 -19
  39. package/scripts/ipxe-setup.sh +52 -49
  40. package/scripts/k3s-node-setup.sh +81 -46
  41. package/scripts/link-local-underpost-cli.sh +6 -0
  42. package/scripts/lxd-vm-setup.sh +193 -8
  43. package/scripts/maas-nat-firewalld.sh +145 -0
  44. package/scripts/test-monitor.sh +250 -0
  45. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +38 -33
  46. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +16 -16
  47. package/src/api/core/core.router.js +19 -14
  48. package/src/api/core/core.service.js +5 -5
  49. package/src/api/crypto/crypto.router.js +18 -12
  50. package/src/api/crypto/crypto.service.js +3 -3
  51. package/src/api/cyberia-action/cyberia-action.model.js +1 -1
  52. package/src/api/cyberia-action/cyberia-action.router.js +22 -18
  53. package/src/api/cyberia-action/cyberia-action.service.js +5 -5
  54. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
  55. package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
  56. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
  57. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
  58. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +25 -20
  59. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +6 -6
  60. package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
  61. package/src/api/cyberia-entity/cyberia-entity.service.js +5 -5
  62. package/src/api/cyberia-instance/cyberia-fallback-world.js +79 -4
  63. package/src/api/cyberia-instance/cyberia-instance.router.js +57 -52
  64. package/src/api/cyberia-instance/cyberia-instance.service.js +10 -10
  65. package/src/api/cyberia-instance/cyberia-world-generator.js +3 -3
  66. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +14 -48
  67. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
  68. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +5 -5
  69. package/src/api/cyberia-map/cyberia-map.router.js +35 -30
  70. package/src/api/cyberia-map/cyberia-map.service.js +7 -7
  71. package/src/api/cyberia-quest/cyberia-quest.model.js +1 -1
  72. package/src/api/cyberia-quest/cyberia-quest.router.js +22 -18
  73. package/src/api/cyberia-quest/cyberia-quest.service.js +5 -5
  74. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +22 -18
  75. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +5 -5
  76. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +458 -0
  77. package/src/api/default/default.router.js +22 -18
  78. package/src/api/default/default.service.js +5 -5
  79. package/src/api/document/document.router.js +28 -23
  80. package/src/api/document/document.service.js +100 -23
  81. package/src/api/file/file.router.js +19 -13
  82. package/src/api/file/file.service.js +9 -7
  83. package/src/api/instance/instance.router.js +29 -24
  84. package/src/api/instance/instance.service.js +6 -6
  85. package/src/api/ipfs/ipfs.router.js +21 -16
  86. package/src/api/ipfs/ipfs.service.js +8 -8
  87. package/src/api/object-layer/object-layer.router.js +512 -507
  88. package/src/api/object-layer/object-layer.service.js +17 -14
  89. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +22 -18
  90. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +5 -5
  91. package/src/api/test/test.router.js +17 -12
  92. package/src/api/types.js +24 -0
  93. package/src/api/user/guest.service.js +5 -4
  94. package/src/api/user/user.router.js +297 -288
  95. package/src/api/user/user.service.js +100 -35
  96. package/src/cli/baremetal.js +132 -101
  97. package/src/cli/cluster.js +700 -232
  98. package/src/cli/db.js +59 -60
  99. package/src/cli/deploy.js +291 -294
  100. package/src/cli/env.js +1 -4
  101. package/src/cli/fs.js +13 -3
  102. package/src/cli/image.js +58 -4
  103. package/src/cli/index.js +127 -15
  104. package/src/cli/ipfs.js +4 -6
  105. package/src/cli/kubectl.js +4 -1
  106. package/src/cli/lxd.js +1099 -223
  107. package/src/cli/monitor.js +396 -9
  108. package/src/cli/release.js +355 -146
  109. package/src/cli/repository.js +169 -30
  110. package/src/cli/run.js +347 -117
  111. package/src/cli/secrets.js +11 -2
  112. package/src/cli/test.js +9 -3
  113. package/src/client/Default.index.js +9 -3
  114. package/src/client/components/core/Auth.js +5 -0
  115. package/src/client/components/core/ClientEvents.js +76 -0
  116. package/src/client/components/core/EventBus.js +4 -0
  117. package/src/client/components/core/Modal.js +82 -41
  118. package/src/client/components/core/PanelForm.js +14 -10
  119. package/src/client/components/core/Worker.js +162 -363
  120. package/src/client/components/cyberia/MapEngineCyberia.js +1 -1
  121. package/src/client/components/cyberia/SharedDefaultsCyberia.js +330 -0
  122. package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +55 -1
  123. package/src/client/public/cyberia-docs/ARCHITECTURE.md +223 -361
  124. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +114 -327
  125. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +200 -222
  126. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +212 -185
  127. package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
  128. package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +2 -2
  129. package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +23 -1
  130. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  131. package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
  132. package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
  133. package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
  134. package/src/client/ssr/views/CyberiaServerMetrics.js +982 -0
  135. package/src/client/sw/core.sw.js +174 -112
  136. package/src/db/DataBaseProvider.js +115 -15
  137. package/src/db/mariadb/MariaDB.js +2 -1
  138. package/src/db/mongo/MongoBootstrap.js +657 -0
  139. package/src/db/mongo/MongooseDB.js +130 -21
  140. package/src/grpc/cyberia/grpc-server.js +25 -57
  141. package/src/index.js +1 -1
  142. package/src/runtime/cyberia-client/Dockerfile +10 -7
  143. package/src/runtime/cyberia-client/Dockerfile.dev +67 -0
  144. package/src/runtime/cyberia-server/Dockerfile +11 -6
  145. package/src/runtime/cyberia-server/Dockerfile.dev +47 -0
  146. package/src/runtime/express/Express.js +2 -2
  147. package/src/runtime/wp/Dockerfile +3 -3
  148. package/src/runtime/wp/Wp.js +8 -5
  149. package/src/server/auth.js +2 -2
  150. package/src/server/catalog-underpost.js +61 -0
  151. package/src/server/catalog.js +77 -0
  152. package/src/server/client-build-docs.js +1 -1
  153. package/src/server/client-build.js +94 -129
  154. package/src/server/conf.js +496 -135
  155. package/src/server/ipfs-client.js +5 -3
  156. package/src/server/process.js +180 -19
  157. package/src/server/proxy.js +9 -2
  158. package/src/server/runtime-status.js +235 -0
  159. package/src/server/runtime.js +1 -1
  160. package/src/server/start.js +44 -11
  161. package/src/server/valkey.js +2 -0
  162. package/src/ws/IoInterface.js +16 -16
  163. package/src/ws/core/channels/core.ws.chat.js +11 -11
  164. package/src/ws/core/channels/core.ws.mailer.js +29 -29
  165. package/src/ws/core/channels/core.ws.stream.js +19 -19
  166. package/src/ws/core/core.ws.connection.js +8 -8
  167. package/src/ws/core/core.ws.server.js +6 -5
  168. package/src/ws/default/channels/default.ws.main.js +10 -10
  169. package/src/ws/default/default.ws.connection.js +4 -4
  170. package/src/ws/default/default.ws.server.js +4 -3
  171. package/test/deploy-monitor.test.js +251 -0
  172. package/bin/file.js +0 -202
  173. package/bin/vs.js +0 -74
  174. package/bin/zed.js +0 -84
  175. package/manifests/deployment/dd-test-development/deployment.yaml +0 -254
  176. package/manifests/deployment/dd-test-development/proxy.yaml +0 -102
  177. package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -574
  178. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +0 -467
  179. package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
  180. package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
  181. package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
  182. /package/src/client/ssr/{offline → views}/Maintenance.js +0 -0
  183. /package/src/client/ssr/{offline → views}/NoNetworkConnection.js +0 -0
  184. /package/src/client/ssr/{pages → views}/Test.js +0 -0
package/package.json CHANGED
@@ -2,12 +2,13 @@
2
2
  "type": "module",
3
3
  "main": "src/index.js",
4
4
  "name": "cyberia",
5
- "version": "3.2.9",
6
- "description": "Cyberia Engine - Object Layer and Assets Management Microservice",
5
+ "version": "3.2.22",
6
+ "description": "Cyberia CLI toolchain for the Cyberia MMO data layer, content pipeline, persistence, gRPC services, and ERC-1155 lifecycle on Hyperledger Besu.",
7
7
  "scripts": {
8
8
  "start": "node --max-old-space-size=8192 src/server",
9
9
  "build": "node bin client",
10
10
  "test": "NODE_ENV=test c8 mocha",
11
+ "test:monitor": "NODE_ENV=test c8 mocha test/deploy-monitor.test.js",
11
12
  "dev": "NODE_ENV=development nodemon src/server",
12
13
  "dev:container": "NODE_ENV=development node src/server",
13
14
  "prod:container": "NODE_ENV=production node src/server",
@@ -36,11 +37,21 @@
36
37
  },
37
38
  "keywords": [
38
39
  "cyberia",
40
+ "cyberia-cli",
41
+ "engine-cyberia",
42
+ "sidecar",
43
+ "data-layer",
39
44
  "object-layer",
40
- "game-engine",
41
- "assets-management",
45
+ "atlas-sprite-sheet",
46
+ "ipfs",
47
+ "erc-1155",
48
+ "object-layer-token",
49
+ "hardhat",
50
+ "hyperledger-besu",
51
+ "blockchain",
42
52
  "web3",
43
- "atlas-sprite-sheet"
53
+ "underpost-platform",
54
+ "mmorpg"
44
55
  ],
45
56
  "author": "https://github.com/underpostnet",
46
57
  "license": "MIT",
@@ -51,35 +62,36 @@
51
62
  "dependencies": {
52
63
  "@fortawesome/fontawesome-free": "^7.2.0",
53
64
  "@fullcalendar/rrule": "^6.1.20",
54
- "@grpc/grpc-js": "^1.12.5",
55
- "@grpc/proto-loader": "^0.8.0",
65
+ "@grpc/grpc-js": "^1.14.4",
66
+ "@grpc/proto-loader": "^0.8.1",
56
67
  "@neodrag/vanilla": "^2.3.1",
57
68
  "adm-zip": "^0.5.17",
58
- "ag-grid-community": "^35.2.1",
59
- "axios": "^1.16.0",
69
+ "ag-grid-community": "^35.3.0",
70
+ "axios": "^1.16.1",
71
+ "bumpp": "^11.1.0",
60
72
  "chai": "^6.2.2",
61
73
  "clipboardy": "^5.3.1",
62
74
  "cloudinary": "^2.10.0",
63
75
  "colors": "^1.4.0",
64
- "commander": "^14.0.3",
76
+ "commander": "^15.0.0",
65
77
  "compression": "^1.7.4",
66
78
  "cookie-parser": "^1.4.7",
67
79
  "cors": "^2.8.6",
68
80
  "d3": "^7.9.0",
69
- "dexie": "^4.2.1",
81
+ "dexie": "^4.4.3",
70
82
  "dotenv": "^17.4.2",
71
83
  "easymde": "^2.21.0",
72
84
  "esbuild": "^0.28.0",
73
85
  "escape-string-regexp": "^5.0.0",
74
86
  "express": "^5.2.1",
75
87
  "express-fileupload": "^1.4.3",
76
- "express-rate-limit": "^8.4.1",
88
+ "express-rate-limit": "^8.5.2",
77
89
  "express-slow-down": "^3.1.0",
78
90
  "fast-json-stable-stringify": "^2.1.0",
79
- "favicons": "^7.2.0",
91
+ "favicons": "^7.3.0",
80
92
  "fs-extra": "^11.3.5",
81
93
  "fullcalendar": "^6.1.15",
82
- "helmet": "^8.1.0",
94
+ "helmet": "^8.2.0",
83
95
  "html-minifier-terser": "^7.2.0",
84
96
  "http-proxy-middleware": "^4.0.0",
85
97
  "ignore-walk": "^9.0.0",
@@ -87,16 +99,16 @@
87
99
  "json-colorizer": "^3.0.1",
88
100
  "jsonwebtoken": "^9.0.3",
89
101
  "mariadb": "^3.2.2",
90
- "marked": "^18.0.3",
91
- "mocha": "^11.3.0",
92
- "mongoose": "^9.6.2",
102
+ "mocha": "^11.7.6",
103
+ "marked": "^18.0.4",
104
+ "mongoose": "^9.6.3",
93
105
  "morgan": "^1.10.0",
94
- "nodemailer": "^8.0.7",
106
+ "nodemailer": "^8.0.10",
95
107
  "nodemon": "^3.0.1",
96
108
  "peer": "^1.0.2",
97
109
  "peerjs": "^1.5.5",
98
110
  "prom-client": "^15.1.2",
99
- "read": "^5.0.1",
111
+ "read": "^6.0.0",
100
112
  "rrule": "^2.8.1",
101
113
  "shelljs": "^0.10.0",
102
114
  "sitemap": "^9.0.1",
@@ -14,39 +14,39 @@ REBUILD=false
14
14
  EMBED_SCRIPT=""
15
15
 
16
16
  while [[ $# -gt 0 ]]; do
17
- case $1 in
18
- --rebuild)
19
- REBUILD=true
20
- shift # past argument
21
- ;;
22
- --target-arch)
23
- case "$2" in
24
- arm64)
25
- TARGET_ARCH="aarch64"
26
- ;;
27
- amd64)
28
- TARGET_ARCH="x86_64"
29
- ;;
17
+ case $1 in
18
+ --rebuild)
19
+ REBUILD=true
20
+ shift # past argument
21
+ ;;
22
+ --target-arch)
23
+ case "$2" in
24
+ arm64)
25
+ TARGET_ARCH="aarch64"
26
+ ;;
27
+ amd64)
28
+ TARGET_ARCH="x86_64"
29
+ ;;
30
+ *)
31
+ echo "Error: Unsupported architecture '$2'. Use 'arm64' or 'amd64'."
32
+ exit 1
33
+ ;;
34
+ esac
35
+ shift # past argument
36
+ shift # past value
37
+ ;;
38
+ --embed-script)
39
+ EMBED_SCRIPT="$2"
40
+ shift # past argument
41
+ shift # past value
42
+ ;;
30
43
  *)
31
- echo "Error: Unsupported architecture '$2'. Use 'arm64' or 'amd64'."
32
- exit 1
33
- ;;
34
- esac
35
- shift # past argument
36
- shift # past value
37
- ;;
38
- --embed-script)
39
- EMBED_SCRIPT="$2"
40
- shift # past argument
41
- shift # past value
42
- ;;
43
- *)
44
- if [ -z "$TARGET_DIR_ARG" ]; then
45
- TARGET_DIR_ARG="$1"
46
- fi
47
- shift # past argument
48
- ;;
49
- esac
44
+ if [ -z "$TARGET_DIR_ARG" ]; then
45
+ TARGET_DIR_ARG="$1"
46
+ fi
47
+ shift # past argument
48
+ ;;
49
+ esac
50
50
  done
51
51
 
52
52
  # Use argument if provided, otherwise env var, otherwise current dir
@@ -64,7 +64,7 @@ echo "Embed Script: ${EMBED_SCRIPT:-none}"
64
64
  # Determine iPXE build target based on requested architecture
65
65
  if [ "$TARGET_ARCH" = "aarch64" ]; then
66
66
  BUILD_TARGET="bin-arm64-efi/ipxe.efi"
67
- elif [ "$TARGET_ARCH" = "x86_64" ]; then
67
+ elif [ "$TARGET_ARCH" = "x86_64" ]; then
68
68
  BUILD_TARGET="bin-x86_64-efi/ipxe.efi"
69
69
  else
70
70
  echo "Error: Unsupported target architecture '$TARGET_ARCH'"
@@ -79,49 +79,50 @@ DO_BUILD=false
79
79
 
80
80
  if [ "$REBUILD" = true ]; then
81
81
  DO_BUILD=true
82
- elif [ ! -f "$COMPILED_SRC_PATH" ]; then
82
+ elif [ ! -f "$COMPILED_SRC_PATH" ]; then
83
83
  echo "Binary not found at $COMPILED_SRC_PATH. Initiating build..."
84
84
  DO_BUILD=true
85
+
85
86
  else
86
- echo "Binary found at $COMPILED_SRC_PATH. Skipping build."
87
+ echo "Binary found at $COMPILED_SRC_PATH with matching embedded script. Skipping build."
87
88
  fi
88
89
 
89
90
  if [ "$DO_BUILD" = true ]; then
90
-
91
+
91
92
  # Helper function for package manager
92
93
  if command -v dnf &> /dev/null; then
93
94
  PKG_MGR="dnf"
94
95
  else
95
96
  PKG_MGR="yum"
96
97
  fi
97
-
98
+
98
99
  # --- 2. Install Dependencies (RHEL/CentOS/Fedora) ---
99
100
  echo ""
100
101
  echo "--- Installing Build Dependencies ---"
101
102
  echo "Requesting sudo permissions..."
102
-
103
+
103
104
  COMMON_PKGS="git make binutils-devel xz-devel perl"
104
-
105
+
105
106
  # Logic to determine if we need native or cross-compilers
106
107
  if [ "$HOST_ARCH" = "$TARGET_ARCH" ]; then
107
108
  # Native compilation
108
109
  echo "Architecture match ($HOST_ARCH). Installing native GCC..."
109
110
  sudo $PKG_MGR install -y $COMMON_PKGS gcc
110
111
  CROSS_COMPILE_PREFIX=""
111
-
112
- elif [ "$HOST_ARCH" = "x86_64" ] && [ "$TARGET_ARCH" = "aarch64" ]; then
112
+
113
+ elif [ "$HOST_ARCH" = "x86_64" ] && [ "$TARGET_ARCH" = "aarch64" ]; then
113
114
  # Cross-compilation: x86_64 host -> aarch64 target
114
115
  echo "Cross-compiling for $TARGET_ARCH on $HOST_ARCH..."
115
116
  # Note: Ensure EPEL repo is enabled on RHEL/CentOS for this package
116
117
  sudo $PKG_MGR install -y $COMMON_PKGS gcc-aarch64-linux-gnu
117
118
  CROSS_COMPILE_PREFIX="aarch64-linux-gnu-"
118
-
119
+
119
120
  else
120
121
  echo "Error: No automated path defined for Host: $HOST_ARCH -> Target: $TARGET_ARCH"
121
122
  echo "You may need to install specific cross-compilers manually."
122
123
  exit 1
123
124
  fi
124
-
125
+
125
126
  # --- 3. Clone iPXE Source ---
126
127
  echo ""
127
128
  echo "--- Downloading iPXE Source Code ---"
@@ -133,15 +134,15 @@ if [ "$DO_BUILD" = true ]; then
133
134
  git clone https://github.com/ipxe/ipxe.git $IPXE_SRC_DIR
134
135
  cd $IPXE_SRC_DIR
135
136
  fi
136
-
137
+
137
138
  # --- 4. Compile the Binary ---
138
139
  echo ""
139
140
  echo "--- Compiling $EFI_FILENAME for $TARGET_ARCH ---"
140
141
  cd src
141
-
142
+
142
143
  # Clean previous builds to ensure no arch mismatch
143
144
  make clean
144
-
145
+
145
146
  # Build with embedded script if provided
146
147
  if [ -n "$EMBED_SCRIPT" ]; then
147
148
  echo "Embedding script into iPXE binary..."
@@ -155,7 +156,7 @@ if [ "$DO_BUILD" = true ]; then
155
156
  echo "Running make for target: $BUILD_TARGET..."
156
157
  make CROSS_COMPILE=$CROSS_COMPILE_PREFIX $BUILD_TARGET
157
158
  fi
158
-
159
+
159
160
  if [ $? -ne 0 ]; then
160
161
  echo "Error: Compilation failed."
161
162
  if [ -n "$CROSS_COMPILE_PREFIX" ]; then
@@ -163,6 +164,8 @@ if [ "$DO_BUILD" = true ]; then
163
164
  fi
164
165
  exit 1
165
166
  fi
167
+
168
+
166
169
  fi
167
170
 
168
171
  # --- 5. Deploy Binary ---
@@ -176,10 +179,10 @@ if [ -f "$COMPILED_SRC_PATH" ]; then
176
179
  echo "Creating target directory: $TARGET_DIR"
177
180
  mkdir -p "$TARGET_DIR"
178
181
  fi
179
-
182
+
180
183
  echo "Copying $COMPILED_SRC_PATH to $TARGET_DIR/$EFI_FILENAME..."
181
184
  cp "$COMPILED_SRC_PATH" "$TARGET_DIR/$EFI_FILENAME"
182
-
185
+
183
186
  if [ $? -eq 0 ]; then
184
187
  echo "✓ Success!"
185
188
  echo "---------------------------------------------------"
@@ -1,39 +1,70 @@
1
1
  #!/bin/bash
2
- set -e
2
+ set -euo pipefail
3
3
 
4
4
  # ---------------------------------------------------------------------------
5
5
  # Underpost K3s Node Setup
6
+ #
7
+ # This script runs INSIDE an LXD VM. It assumes the host has already mirrored
8
+ # the project source into $ENGINE_ROOT (default /home/dd/engine) via the
9
+ # `underpost lxd [vm-id] --vm-init` flow in `src/cli/lxd.js`. There is no
10
+ # fallback to a globally installed `underpost`: every operational command
11
+ # resolves from the local project so the latest local changes are always what
12
+ # runs in the VM.
13
+ #
6
14
  # Usage:
7
- # --control Initialize as K3s control plane node (default)
8
- # --worker Initialize as K3s worker node
9
- # --control-ip=<ip> Control plane IP (required for --worker)
10
- # --token=<token> K3s node token (required for --worker)
15
+ # --engine-root=<path> Path to the mirrored engine source (default: /home/dd/engine)
16
+ # --control Initialize as K3s control plane node (default)
17
+ # --worker Initialize as K3s worker node
18
+ # --control-ip=<ip> Control plane IP (required for --worker)
19
+ # --token=<token> K3s node token (required for --worker)
11
20
  # ---------------------------------------------------------------------------
12
21
 
13
22
  ROLE="control"
14
23
  CONTROL_IP=""
15
24
  K3S_TOKEN=""
25
+ ENGINE_ROOT="/home/dd/engine"
16
26
 
17
27
  for arg in "$@"; do
18
- case $arg in
19
- --worker) ROLE="worker" ;;
20
- --control) ROLE="control" ;;
21
- --control-ip=*) CONTROL_IP="${arg#*=}" ;;
22
- --token=*) K3S_TOKEN="${arg#*=}" ;;
23
- esac
28
+ case $arg in
29
+ --worker) ROLE="worker" ;;
30
+ --control) ROLE="control" ;;
31
+ --control-ip=*) CONTROL_IP="${arg#*=}" ;;
32
+ --token=*) K3S_TOKEN="${arg#*=}" ;;
33
+ --engine-root=*) ENGINE_ROOT="${arg#*=}" ;;
34
+ esac
24
35
  done
36
+
37
+ # Fail fast if the bootstrap step did not run / left the directory empty.
38
+ # Split into two checks so `ls -A` only runs against a path that exists; this
39
+ # avoids needing an error-swallowing redirect.
40
+ if [ ! -d "$ENGINE_ROOT" ]; then
41
+ echo "ERROR: engine source directory $ENGINE_ROOT does not exist."
42
+ echo "The LXD [vm-id] --vm-init flow must mirror the project here before running this script."
43
+ exit 1
44
+ fi
45
+ if [ -z "$(ls -A "$ENGINE_ROOT")" ]; then
46
+ echo "ERROR: engine source directory $ENGINE_ROOT is empty."
47
+ echo "The LXD [vm-id] --vm-init flow must mirror the project here before running this script."
48
+ exit 1
49
+ fi
50
+
25
51
  # ---------------------------------------------------------------------------
26
- # NVM and Node.js
52
+ # NVM and Node.js — required for `node bin ...` entrypoints
27
53
  # ---------------------------------------------------------------------------
28
- echo "Installing NVM and Node.js v24.10.0..."
54
+ echo "Installing NVM and Node.js v24.15.0..."
29
55
 
30
56
  curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.40.1/install.sh | bash
31
57
 
32
58
  export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
59
+ # shellcheck disable=SC1090
33
60
  [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
34
61
 
35
62
  nvm install 24.15.0
36
63
  nvm use 24.15.0
64
+ nvm alias default 24.15.0
65
+ ln -sf "$(command -v node)" /usr/local/bin/node
66
+ ln -sf "$(command -v npm)" /usr/local/bin/npm
67
+ ln -sf "$(command -v npx)" /usr/local/bin/npx
37
68
 
38
69
  echo "
39
70
  ██╗░░░██╗███╗░░██╗██████╗░███████╗██████╗░██████╗░░█████╗░░██████╗████████╗
@@ -43,47 +74,51 @@ echo "
43
74
  ╚██████╔╝██║░╚███║██████╔╝███████╗██║░░██║██║░░░░░╚█████╔╝██████╔╝░░░██║░░░
44
75
  ░╚═════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚═╝░░░░░░╚════╝░╚═════╝░░░░╚═╝░░░
45
76
 
46
- Installing underpost VM node...
77
+ Bringing up underpost VM node from $ENGINE_ROOT (role=$ROLE)
47
78
  "
48
79
 
49
- npm install -g underpost
50
-
51
- cd /home/dd/engine
52
-
53
- echo "Applying host configuration..."
80
+ cd "$ENGINE_ROOT"
54
81
 
82
+ # Install JS deps and generate secrets using the local engine entrypoint only.
55
83
  npm install
56
-
57
84
  node bin run secret
58
85
 
59
- node bin cluster --dev --config
60
-
61
86
  if [ "$ROLE" = "control" ]; then
62
- echo "Initializing K3s control plane..."
63
- node bin cluster --dev --k3s
64
-
65
- echo ""
66
- echo "K3s control plane is ready."
67
- echo "Node token (share with workers to join this cluster):"
68
- sudo cat /var/lib/rancher/k3s/server/node-token
69
- echo ""
70
- echo "Control plane IP addresses:"
71
- ip -4 addr show scope global | grep inet | awk '{print $2}' | cut -d/ -f1
72
-
73
- elif [ "$ROLE" = "worker" ]; then
74
- if [ -z "$CONTROL_IP" ] || [ -z "$K3S_TOKEN" ]; then
75
- echo "ERROR: --control-ip and --token are required for worker role."
76
- echo "Usage: bash k3s-node-setup.sh --worker --control-ip=<ip> --token=<token>"
77
- exit 1
78
- fi
79
-
80
- echo "Joining K3s cluster at https://${CONTROL_IP}:6443..."
81
- curl -sfL https://get.k3s.io | \
87
+ echo "Installing underpost CLI..."
88
+ npm install -g underpost
89
+ underpost --version
90
+ echo "Initializing K3s control plane via local engine..."
91
+ node bin cluster --dev --k3s
92
+ ln -s /usr/local/bin/k3s /bin/k3s
93
+ ln -s /usr/local/bin/kubectl /bin/kubectl
94
+
95
+ echo ""
96
+ echo "K3s control plane is ready."
97
+ echo "Node token (share with workers to join this cluster):"
98
+ sudo cat /var/lib/rancher/k3s/server/node-token
99
+ echo ""
100
+ echo "Control plane IP addresses:"
101
+ ip -4 addr show scope global | grep inet | awk '{print $2}' | cut -d/ -f1
102
+
103
+ elif [ "$ROLE" = "worker" ]; then
104
+ if [ -z "$CONTROL_IP" ] || [ -z "$K3S_TOKEN" ]; then
105
+ echo "ERROR: --control-ip and --token are required for worker role."
106
+ echo "Usage: bash k3s-node-setup.sh --worker --control-ip=<ip> --token=<token>"
107
+ exit 1
108
+ fi
109
+
110
+ # Worker nodes still need the minimal K3s host prep even though they join via
111
+ # the upstream installer rather than `node bin cluster --k3s`.
112
+ echo "Applying minimal K3s host configuration via local engine..."
113
+ node bin cluster --dev --config --k3s
114
+
115
+ echo "Joining K3s cluster at https://${CONTROL_IP}:6443..."
116
+ curl -sfL https://get.k3s.io | \
82
117
  K3S_URL="https://${CONTROL_IP}:6443" \
83
118
  K3S_TOKEN="${K3S_TOKEN}" \
84
119
  sh -s - agent
85
-
86
- echo ""
87
- echo "K3s worker node joined the cluster at https://${CONTROL_IP}:6443 successfully."
88
- sudo systemctl status k3s-agent --no-pager
120
+
121
+ echo ""
122
+ echo "K3s worker joined https://${CONTROL_IP}:6443 successfully."
123
+ sudo systemctl status k3s-agent --no-pager
89
124
  fi
@@ -0,0 +1,6 @@
1
+
2
+ #!/usr/bin/env bash
3
+ set -euo pipefail
4
+
5
+ cd /home/dd && underpost clone underpostnet/pwa-microservices-template
6
+ cd /home/dd/pwa-microservices-template && npm install && npm link