@phystack/cli 5.0.2 → 5.1.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 (218) hide show
  1. package/bin/index.js +27 -1
  2. package/package.json +12 -65
  3. package/dist/commands/app/build-apps.js +0 -66
  4. package/dist/commands/app/build-apps.js.map +0 -1
  5. package/dist/commands/app/build-container-remote.js +0 -171
  6. package/dist/commands/app/build-container-remote.js.map +0 -1
  7. package/dist/commands/app/build-container.js +0 -330
  8. package/dist/commands/app/build-container.js.map +0 -1
  9. package/dist/commands/app/build.js +0 -398
  10. package/dist/commands/app/build.js.map +0 -1
  11. package/dist/commands/app/create.js +0 -463
  12. package/dist/commands/app/create.js.map +0 -1
  13. package/dist/commands/app/deploy.js +0 -176
  14. package/dist/commands/app/deploy.js.map +0 -1
  15. package/dist/commands/app/device-picker.js +0 -150
  16. package/dist/commands/app/device-picker.js.map +0 -1
  17. package/dist/commands/app/import.js +0 -336
  18. package/dist/commands/app/import.js.map +0 -1
  19. package/dist/commands/app/list.js +0 -26
  20. package/dist/commands/app/list.js.map +0 -1
  21. package/dist/commands/app/publish.js +0 -332
  22. package/dist/commands/app/publish.js.map +0 -1
  23. package/dist/commands/app/settings.js +0 -133
  24. package/dist/commands/app/settings.js.map +0 -1
  25. package/dist/commands/app/types.js +0 -14
  26. package/dist/commands/app/types.js.map +0 -1
  27. package/dist/commands/app/upload-description.js +0 -139
  28. package/dist/commands/app/upload-description.js.map +0 -1
  29. package/dist/commands/app/upload-settings.js +0 -29
  30. package/dist/commands/app/upload-settings.js.map +0 -1
  31. package/dist/commands/app/utils.js +0 -86
  32. package/dist/commands/app/utils.js.map +0 -1
  33. package/dist/commands/auth/login.js +0 -145
  34. package/dist/commands/auth/login.js.map +0 -1
  35. package/dist/commands/auth/logout.js +0 -19
  36. package/dist/commands/auth/logout.js.map +0 -1
  37. package/dist/commands/descriptor/create.js +0 -143
  38. package/dist/commands/descriptor/create.js.map +0 -1
  39. package/dist/commands/descriptor/index.js +0 -36
  40. package/dist/commands/descriptor/index.js.map +0 -1
  41. package/dist/commands/descriptor/publish.js +0 -163
  42. package/dist/commands/descriptor/publish.js.map +0 -1
  43. package/dist/commands/descriptor/show.js +0 -68
  44. package/dist/commands/descriptor/show.js.map +0 -1
  45. package/dist/commands/dev/cp.js +0 -764
  46. package/dist/commands/dev/cp.js.map +0 -1
  47. package/dist/commands/dev/develop.js +0 -175
  48. package/dist/commands/dev/develop.js.map +0 -1
  49. package/dist/commands/dev/forward.js +0 -132
  50. package/dist/commands/dev/forward.js.map +0 -1
  51. package/dist/commands/dev/index.js +0 -80
  52. package/dist/commands/dev/index.js.map +0 -1
  53. package/dist/commands/dev/list.js +0 -96
  54. package/dist/commands/dev/list.js.map +0 -1
  55. package/dist/commands/dev/screen-devtools.js +0 -156
  56. package/dist/commands/dev/screen-devtools.js.map +0 -1
  57. package/dist/commands/dev/select.js +0 -118
  58. package/dist/commands/dev/select.js.map +0 -1
  59. package/dist/commands/dev/shell.js +0 -186
  60. package/dist/commands/dev/shell.js.map +0 -1
  61. package/dist/commands/dev/vnc.js +0 -75
  62. package/dist/commands/dev/vnc.js.map +0 -1
  63. package/dist/commands/device/select.js +0 -118
  64. package/dist/commands/device/select.js.map +0 -1
  65. package/dist/commands/flash.js +0 -1120
  66. package/dist/commands/flash.js.map +0 -1
  67. package/dist/commands/inst/create.js +0 -55
  68. package/dist/commands/inst/create.js.map +0 -1
  69. package/dist/commands/inst/index.js +0 -15
  70. package/dist/commands/inst/index.js.map +0 -1
  71. package/dist/commands/inst/list.js +0 -26
  72. package/dist/commands/inst/list.js.map +0 -1
  73. package/dist/commands/legacydev/debug.js +0 -11
  74. package/dist/commands/legacydev/debug.js.map +0 -1
  75. package/dist/commands/legacydev/deploy.js +0 -15
  76. package/dist/commands/legacydev/deploy.js.map +0 -1
  77. package/dist/commands/legacydev/dumpTwin.js +0 -27
  78. package/dist/commands/legacydev/dumpTwin.js.map +0 -1
  79. package/dist/commands/legacydev/forward.js +0 -104
  80. package/dist/commands/legacydev/forward.js.map +0 -1
  81. package/dist/commands/legacydev/index.js +0 -188
  82. package/dist/commands/legacydev/index.js.map +0 -1
  83. package/dist/commands/legacydev/invoke.js +0 -29
  84. package/dist/commands/legacydev/invoke.js.map +0 -1
  85. package/dist/commands/legacydev/js.js +0 -69
  86. package/dist/commands/legacydev/js.js.map +0 -1
  87. package/dist/commands/legacydev/list.js +0 -196
  88. package/dist/commands/legacydev/list.js.map +0 -1
  89. package/dist/commands/legacydev/logs.js +0 -60
  90. package/dist/commands/legacydev/logs.js.map +0 -1
  91. package/dist/commands/legacydev/modules.js +0 -50
  92. package/dist/commands/legacydev/modules.js.map +0 -1
  93. package/dist/commands/legacydev/move.js +0 -23
  94. package/dist/commands/legacydev/move.js.map +0 -1
  95. package/dist/commands/legacydev/ota.js +0 -88
  96. package/dist/commands/legacydev/ota.js.map +0 -1
  97. package/dist/commands/legacydev/patchTwin.js +0 -21
  98. package/dist/commands/legacydev/patchTwin.js.map +0 -1
  99. package/dist/commands/legacydev/pin.js +0 -23
  100. package/dist/commands/legacydev/pin.js.map +0 -1
  101. package/dist/commands/legacydev/pub.js +0 -25
  102. package/dist/commands/legacydev/pub.js.map +0 -1
  103. package/dist/commands/legacydev/rdp.js +0 -64
  104. package/dist/commands/legacydev/rdp.js.map +0 -1
  105. package/dist/commands/legacydev/screen-devtools.js +0 -142
  106. package/dist/commands/legacydev/screen-devtools.js.map +0 -1
  107. package/dist/commands/legacydev/settingsShow.js +0 -89
  108. package/dist/commands/legacydev/settingsShow.js.map +0 -1
  109. package/dist/commands/legacydev/settingsUpdate.js +0 -114
  110. package/dist/commands/legacydev/settingsUpdate.js.map +0 -1
  111. package/dist/commands/legacydev/shell.js +0 -167
  112. package/dist/commands/legacydev/shell.js.map +0 -1
  113. package/dist/commands/legacydev/showTwin.js +0 -9
  114. package/dist/commands/legacydev/showTwin.js.map +0 -1
  115. package/dist/commands/legacydev/statusLog.js +0 -56
  116. package/dist/commands/legacydev/statusLog.js.map +0 -1
  117. package/dist/commands/legacydev/sub.js +0 -39
  118. package/dist/commands/legacydev/sub.js.map +0 -1
  119. package/dist/commands/legacydev/vnc.js +0 -61
  120. package/dist/commands/legacydev/vnc.js.map +0 -1
  121. package/dist/commands/simulator/index.js +0 -37
  122. package/dist/commands/simulator/index.js.map +0 -1
  123. package/dist/commands/simulator/list.js +0 -20
  124. package/dist/commands/simulator/list.js.map +0 -1
  125. package/dist/commands/simulator/remove.js +0 -19
  126. package/dist/commands/simulator/remove.js.map +0 -1
  127. package/dist/commands/simulator/run.js +0 -380
  128. package/dist/commands/simulator/run.js.map +0 -1
  129. package/dist/commands/simulator/start.js +0 -186
  130. package/dist/commands/simulator/start.js.map +0 -1
  131. package/dist/commands/tenant/index.js +0 -21
  132. package/dist/commands/tenant/index.js.map +0 -1
  133. package/dist/commands/tenant/list.js +0 -14
  134. package/dist/commands/tenant/list.js.map +0 -1
  135. package/dist/commands/tenant/select.js +0 -87
  136. package/dist/commands/tenant/select.js.map +0 -1
  137. package/dist/commands/vm/create.js +0 -959
  138. package/dist/commands/vm/create.js.map +0 -1
  139. package/dist/commands/vm/index.js +0 -130
  140. package/dist/commands/vm/index.js.map +0 -1
  141. package/dist/commands/vm/list.js +0 -124
  142. package/dist/commands/vm/list.js.map +0 -1
  143. package/dist/commands/vm/logs.js +0 -66
  144. package/dist/commands/vm/logs.js.map +0 -1
  145. package/dist/commands/vm/remove.js +0 -180
  146. package/dist/commands/vm/remove.js.map +0 -1
  147. package/dist/commands/vm/shell.js +0 -400
  148. package/dist/commands/vm/shell.js.map +0 -1
  149. package/dist/commands/vm/start.js +0 -861
  150. package/dist/commands/vm/start.js.map +0 -1
  151. package/dist/commands/vm/stop.js +0 -232
  152. package/dist/commands/vm/stop.js.map +0 -1
  153. package/dist/index.js +0 -169
  154. package/dist/index.js.map +0 -1
  155. package/dist/services/admin-api/admin-api.types.js +0 -3
  156. package/dist/services/admin-api/admin-api.types.js.map +0 -1
  157. package/dist/services/admin-api/device-modules.admin-api.service.js +0 -58
  158. package/dist/services/admin-api/device-modules.admin-api.service.js.map +0 -1
  159. package/dist/services/admin-api/devices-admin-api.service.js +0 -213
  160. package/dist/services/admin-api/devices-admin-api.service.js.map +0 -1
  161. package/dist/services/admin-api/gridapps-admin-api.service.js +0 -59
  162. package/dist/services/admin-api/gridapps-admin-api.service.js.map +0 -1
  163. package/dist/services/admin-api/index.js +0 -151
  164. package/dist/services/admin-api/index.js.map +0 -1
  165. package/dist/services/admin-api/installations-admin-api.service.js +0 -29
  166. package/dist/services/admin-api/installations-admin-api.service.js.map +0 -1
  167. package/dist/services/admin-api/organizations-admin-api.service.js +0 -53
  168. package/dist/services/admin-api/organizations-admin-api.service.js.map +0 -1
  169. package/dist/services/auth/device-grant-auth.service.js +0 -226
  170. package/dist/services/auth/device-grant-auth.service.js.map +0 -1
  171. package/dist/services/env.js +0 -21
  172. package/dist/services/env.js.map +0 -1
  173. package/dist/services/phyhub/index.js +0 -200
  174. package/dist/services/phyhub/index.js.map +0 -1
  175. package/dist/services/phyhub/phyhub.types.js +0 -3
  176. package/dist/services/phyhub/phyhub.types.js.map +0 -1
  177. package/dist/simulator/index.js +0 -162
  178. package/dist/simulator/index.js.map +0 -1
  179. package/dist/simulator/local-server.js +0 -147
  180. package/dist/simulator/local-server.js.map +0 -1
  181. package/dist/simulator/logger.js +0 -43
  182. package/dist/simulator/logger.js.map +0 -1
  183. package/dist/simulator/message-router.js +0 -379
  184. package/dist/simulator/message-router.js.map +0 -1
  185. package/dist/simulator/twin-cache.js +0 -58
  186. package/dist/simulator/twin-cache.js.map +0 -1
  187. package/dist/simulator/types.js +0 -16
  188. package/dist/simulator/types.js.map +0 -1
  189. package/dist/utils/device-fetcher.js +0 -92
  190. package/dist/utils/device-fetcher.js.map +0 -1
  191. package/dist/utils/devices.js +0 -41
  192. package/dist/utils/devices.js.map +0 -1
  193. package/dist/utils/docker-credentials.js +0 -720
  194. package/dist/utils/docker-credentials.js.map +0 -1
  195. package/dist/utils/emulated-device.js +0 -91
  196. package/dist/utils/emulated-device.js.map +0 -1
  197. package/dist/utils/index.js +0 -147
  198. package/dist/utils/index.js.map +0 -1
  199. package/dist/utils/modules.js +0 -36
  200. package/dist/utils/modules.js.map +0 -1
  201. package/dist/utils/org-selector.js +0 -108
  202. package/dist/utils/org-selector.js.map +0 -1
  203. package/dist/utils/proxy.js +0 -31
  204. package/dist/utils/proxy.js.map +0 -1
  205. package/dist/utils/registry-credentials.js +0 -113
  206. package/dist/utils/registry-credentials.js.map +0 -1
  207. package/dist/utils/simulator-config.js +0 -142
  208. package/dist/utils/simulator-config.js.map +0 -1
  209. package/dist/utils/statuses.js +0 -124
  210. package/dist/utils/statuses.js.map +0 -1
  211. package/dist/utils/templates.js +0 -197
  212. package/dist/utils/templates.js.map +0 -1
  213. package/dist/utils/tenant-storage.js +0 -88
  214. package/dist/utils/tenant-storage.js.map +0 -1
  215. package/dist/utils/vm.js +0 -434
  216. package/dist/utils/vm.js.map +0 -1
  217. package/dist/utils/with-spinner.js +0 -20
  218. package/dist/utils/with-spinner.js.map +0 -1
package/bin/index.js CHANGED
@@ -1,2 +1,28 @@
1
1
  #!/usr/bin/env node
2
- require('../dist/index.js');
2
+ const { spawnSync } = require('child_process');
3
+ const path = require('path');
4
+
5
+ const BINARY = 'phy';
6
+ const key = `${process.platform}-${process.arch}`;
7
+ const pkg = `@phystack/${BINARY}-${key}`;
8
+ const ext = process.platform === 'win32' ? '.exe' : '';
9
+
10
+ let binPath;
11
+ try {
12
+ binPath = path.join(
13
+ path.dirname(require.resolve(`${pkg}/package.json`)),
14
+ 'bin',
15
+ BINARY + ext,
16
+ );
17
+ } catch {
18
+ console.error(
19
+ `Unsupported or missing platform package: ${pkg}\n` +
20
+ `Platform: ${key}\n\n` +
21
+ `Install manually: npm install ${pkg}\n` +
22
+ `Or download: bunx ${pkg}`,
23
+ );
24
+ process.exit(1);
25
+ }
26
+
27
+ const result = spawnSync(binPath, process.argv.slice(2), { stdio: 'inherit' });
28
+ process.exit(result.status ?? 1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phystack/cli",
3
- "version": "5.0.2",
3
+ "version": "5.1.0",
4
4
  "description": "Phygrid CLI.",
5
5
  "main": "index.js",
6
6
  "homepage": "./",
@@ -17,6 +17,7 @@
17
17
  },
18
18
  "scripts": {
19
19
  "build": "tsc",
20
+ "build:binary": "bash build-binary.sh",
20
21
  "start": "bun dist/src/index.js",
21
22
  "dev": "bun --watch src/index.ts",
22
23
  "lint": "tsc --noEmit",
@@ -27,74 +28,20 @@
27
28
  "phy": "./bin/index.js"
28
29
  },
29
30
  "files": [
30
- "bin/**/*",
31
- "dist/**/*"
31
+ "bin/**/*"
32
32
  ],
33
33
  "author": "PhyStack.com",
34
- "devDependencies": {
35
- "@types/ajv": "^1.0.0",
36
- "@types/clui": "^0.3.0",
37
- "@types/cross-spawn": "^6.0.2",
38
- "@types/fs-extra": "^8.0.1",
39
- "@types/inquirer": "^6.5.0",
40
- "@types/node": "^13.1.1",
41
- "@types/tar": "^4.0.3",
42
- "@typescript-eslint/eslint-plugin": "^2.13.0",
43
- "@typescript-eslint/parser": "^2.13.0",
44
- "bufferutil": "^4.0.6",
45
- "copyfiles": "^2.1.1",
46
- "eslint": "^6.8.0",
47
- "eslint-config-airbnb-base": "^14.0.0",
48
- "eslint-config-prettier": "^6.9.0",
49
- "eslint-plugin-import": "^2.19.1",
50
- "eslint-plugin-prettier": "^3.1.2",
51
- "prettier": "^1.19.1",
52
- "ts-loader": "^9.3.1",
53
- "ts-node": "^8.5.4",
54
- "utf-8-validate": "^5.0.9"
55
- },
56
- "dependencies": {
57
- "@phystack/hub-device": "5.0.2",
58
- "@types/cheerio": "^0.22.35",
59
- "@types/mkdirp": "^1.0.0",
60
- "ajv": "^8.18.0",
61
- "axios": "^1.7.9",
62
- "axios-auth-refresh": "^3.3.6",
63
- "azure-storage": "^2.10.3",
64
- "boxen": "^4.2.0",
65
- "chalk": "^3.0.0",
66
- "cheerio": "^1.0.0-rc.12",
67
- "cli-table3": "^0.6.3",
68
- "clui": "^0.3.6",
69
- "commander": "^5.0.0",
70
- "cross-spawn": "^7.0.3",
71
- "dotenv": "^8.2.0",
72
- "fs-extra": "^8.1.0",
73
- "fuzzy": "^0.1.3",
74
- "http-proxy-agent": "^7.0.2",
75
- "https-proxy-agent": "^7.0.6",
76
- "inquirer": "^8.0.0",
77
- "inquirer-autocomplete-prompt": "^2.0.0",
78
- "isomorphic-fetch": "^2.2.1",
79
- "lodash": "^4.17.15",
80
- "md5": "^2.2.1",
81
- "mkdirp": "^1.0.4",
82
- "moment": "^2.29.1",
83
- "node-fetch": "^3.3.2",
84
- "open": "7.4.2",
85
- "openid-client": "^5.6.5",
86
- "rimraf": "^6.0.1",
87
- "socket.io": "^4.7.5",
88
- "socket.io-client": "^4.7.5",
89
- "tar": "^5.0.5",
90
- "typescript": "^5.4.5",
91
- "uuid": "^11.0.5",
92
- "websocket-stream": "^5.5.2",
93
- "ws": "^7.4.5"
94
- },
95
34
  "resolutions": {
96
35
  "string-width": "^4.2.3",
97
36
  "strip-ansi": "^6.0.1"
98
37
  },
99
- "gitHead": "4b0803f6728ceb0665bd999b88ecbb31f8ea025c"
38
+ "gitHead": "4b0803f6728ceb0665bd999b88ecbb31f8ea025c",
39
+ "optionalDependencies": {
40
+ "@phystack/phy-darwin-arm64": "5.1.0",
41
+ "@phystack/phy-darwin-x64": "5.1.0",
42
+ "@phystack/phy-linux-arm64": "5.1.0",
43
+ "@phystack/phy-linux-x64": "5.1.0",
44
+ "@phystack/phy-win32-x64": "5.1.0",
45
+ "@phystack/phy-win32-arm64": "5.1.0"
46
+ }
100
47
  }
@@ -1,66 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const fs_extra_1 = __importDefault(require("fs-extra"));
7
- const path_1 = __importDefault(require("path"));
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const cross_spawn_1 = __importDefault(require("cross-spawn"));
10
- const execCommand = (cmd, cwd, args = []) => {
11
- const result = cross_spawn_1.default.sync(cmd, args, {
12
- cwd,
13
- stdio: ['inherit', 'inherit'],
14
- shell: true,
15
- });
16
- const stderrStr = result.stderr?.toString() || '';
17
- if (result.status !== 0 ||
18
- stderrStr.indexOf('UnhandledPromiseRejectionWarning') !== -1) {
19
- throw new Error(`Error running: ${cmd}: ${stderrStr}`);
20
- }
21
- };
22
- exports.default = async () => {
23
- try {
24
- const cwd = process.cwd();
25
- const gridAppsPath = path_1.default.join(cwd, 'public', 'gridapps');
26
- const gridSettingsPath = path_1.default.join(cwd, 'grid-settings');
27
- if (!fs_extra_1.default.existsSync(gridSettingsPath)) {
28
- throw new Error(`Grid settings not found: ${gridSettingsPath}`);
29
- }
30
- fs_extra_1.default.ensureDirSync(gridAppsPath);
31
- console.log(`Created dir: ${gridAppsPath}`);
32
- // eslint-disable-next-line
33
- const { general: generalSettings } = require(gridSettingsPath);
34
- // example release value: GridApp v1.1.0
35
- const packageVersion = generalSettings.release.split('v')[1];
36
- try {
37
- // download pre-built version of app-container
38
- fs_extra_1.default.mkdirSync(`${gridAppsPath}/app-container`);
39
- execCommand(`curl https://app.omborigrid.com/app-container/${packageVersion}/app-container.tar | tar xf - -C app-container`, gridAppsPath);
40
- }
41
- catch (e) {
42
- const packageNameProviderPart = `ga-${generalSettings.provider}`;
43
- const packageName = `@ombori/${packageNameProviderPart}@<=${packageVersion}`;
44
- console.log(`Downloading package: ${packageName}`);
45
- execCommand(`npm pack "${packageName}"`, gridAppsPath);
46
- execCommand(`tar xf ombori-${packageNameProviderPart}*.tgz && rm ombori-${packageNameProviderPart}*.tgz`, gridAppsPath);
47
- console.log(`Building package: ${packageName}`);
48
- execCommand(`yarn && yarn build`, path_1.default.join(gridAppsPath, 'package'));
49
- execCommand(`rm -rf ${generalSettings.provider}`, gridAppsPath); // remove directory if exists
50
- execCommand(`mv package/build ${generalSettings.provider}`, gridAppsPath);
51
- execCommand(`rm -rf package`, gridAppsPath);
52
- }
53
- // copy all grid apps that were part of grid settings to output dir
54
- const gridAppDirs = fs_extra_1.default
55
- .readdirSync(gridSettingsPath)
56
- .filter((file) => fs_extra_1.default.statSync(path_1.default.join(gridSettingsPath, file)).isDirectory());
57
- console.log(`Found grid app directories: ${gridAppDirs}, will be copied to output dir`);
58
- await Promise.all(gridAppDirs.map((dir) => fs_extra_1.default.copy(path_1.default.join(gridSettingsPath, dir), path_1.default.join(gridAppsPath, dir))));
59
- console.log(chalk_1.default.green(`✓ Build apps successful`));
60
- }
61
- catch (err) {
62
- console.error(chalk_1.default.red(`❗️There was an error: ${err.message}`));
63
- throw err;
64
- }
65
- };
66
- //# sourceMappingURL=build-apps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-apps.js","sourceRoot":"","sources":["../../../src/commands/app/build-apps.ts"],"names":[],"mappings":"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"}
@@ -1,171 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.findArchs = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
- const child_process_1 = require("child_process");
10
- const chalk_1 = __importDefault(require("chalk"));
11
- const crypto_1 = __importDefault(require("crypto"));
12
- const DEFAULT_REGISTRY = 'docker.io';
13
- // Function to generate a random short unique ID
14
- const generateShortId = () => {
15
- return crypto_1.default.randomBytes(4).toString('hex');
16
- };
17
- const runRemoteCommand = async (deviceHostname, command, checkOutput = false) => {
18
- return new Promise((resolve, reject) => {
19
- let output = '';
20
- const sshProcess = (0, child_process_1.spawn)('ssh', ['-tt', `dev@${deviceHostname}`, `TERM=xterm-256color ${command}`], {
21
- stdio: checkOutput
22
- ? ['inherit', 'pipe', 'inherit']
23
- : ['inherit', 'inherit', 'inherit'],
24
- });
25
- if (checkOutput) {
26
- sshProcess.stdout?.on('data', (data) => {
27
- output += data.toString();
28
- });
29
- }
30
- sshProcess.on('close', (code) => {
31
- if (checkOutput) {
32
- resolve(output.trim());
33
- }
34
- else {
35
- resolve(code === 0);
36
- }
37
- });
38
- sshProcess.on('error', (error) => {
39
- console.error(chalk_1.default.red(`Failed to execute remote command: ${error.message}`));
40
- reject(error);
41
- });
42
- });
43
- };
44
- const getSystemArch = async (deviceHostname) => {
45
- const arch = (await runRemoteCommand(deviceHostname, 'uname -m', true));
46
- // Map common architecture names to our standard names
47
- switch (arch) {
48
- case 'x86_64':
49
- return 'amd64';
50
- case 'aarch64':
51
- return 'arm64';
52
- default:
53
- throw new Error(`Unsupported architecture: ${arch}`);
54
- }
55
- };
56
- const findArchs = (dir, currentArch) => {
57
- const result = {};
58
- // Check for architecture-specific Dockerfile
59
- const specificDockerfile = `Dockerfile.${currentArch}`;
60
- const hasSpecificDockerfile = fs_1.default.existsSync(path_1.default.join(dir, specificDockerfile));
61
- // Check for generic Dockerfile
62
- const hasGenericDockerfile = fs_1.default.existsSync(path_1.default.join(dir, 'Dockerfile'));
63
- if (!hasSpecificDockerfile && !hasGenericDockerfile) {
64
- throw new Error(`No Dockerfile found for architecture ${currentArch}. ` +
65
- `Expected either 'Dockerfile.${currentArch}' or 'Dockerfile'`);
66
- }
67
- // If we have a specific Dockerfile for this architecture, use it
68
- if (hasSpecificDockerfile) {
69
- result[currentArch] = specificDockerfile;
70
- }
71
- // Otherwise use the generic Dockerfile if it exists
72
- else if (hasGenericDockerfile) {
73
- result[currentArch] = 'Dockerfile';
74
- }
75
- return result;
76
- };
77
- exports.findArchs = findArchs;
78
- async function build({ tag, dir, arch, dockerfile, deviceHostname, remoteDir, phygridLocalNpm = false, isInProjectsDir = false }) {
79
- // Convert ~ to /home/dev for remote paths
80
- const fullRemoteDir = remoteDir.replace('~', '/home/dev');
81
- console.log(chalk_1.default.dim('Checking for yarn installation...'));
82
- await runRemoteCommand(deviceHostname, 'which yarn || sudo npm install -g yarn');
83
- console.log(chalk_1.default.dim('Installing dependencies...'));
84
- await runRemoteCommand(deviceHostname, `cd ${fullRemoteDir} && yarn install`);
85
- console.log(chalk_1.default.dim('Building application...'));
86
- await runRemoteCommand(deviceHostname, `cd ${fullRemoteDir} && yarn devbuild`);
87
- const platform = arch === 'arm64' ? 'linux/arm64/v8' : 'linux/amd64';
88
- console.log(chalk_1.default.dim(`Building Docker container for ${platform}...`));
89
- // Add the build arg for PHYGRID_LOCAL_NPM if enabled
90
- const buildArgs = phygridLocalNpm
91
- ? `--build-arg PHYGRID_LOCAL_NPM=true`
92
- : '';
93
- await runRemoteCommand(deviceHostname, `cd ${fullRemoteDir} && sudo docker buildx build ${buildArgs} --platform ${platform} --load --rm -f "${dockerfile}" -t ${tag} .`);
94
- return true;
95
- }
96
- async function buildContainer({ name, version, registry, deviceHostname, remoteDir, customImageName, phygridLocalNpm = false, isInProjectsDir = false }) {
97
- const currentArch = await getSystemArch(deviceHostname);
98
- const archs = (0, exports.findArchs)(process.cwd(), currentArch);
99
- console.log(chalk_1.default.dim(`Building ${chalk_1.default.blueBright(name)} for architecture ${chalk_1.default.greenBright(currentArch)}`));
100
- // Use the custom image name if provided, otherwise construct it
101
- const tag = customImageName || `${name}:${version}-${currentArch}`;
102
- await build({
103
- dir: process.cwd(),
104
- tag,
105
- arch: currentArch,
106
- dockerfile: archs[currentArch],
107
- deviceHostname,
108
- remoteDir,
109
- phygridLocalNpm,
110
- isInProjectsDir
111
- });
112
- console.log(chalk_1.default.dim(`Build done ${tag}`));
113
- return tag;
114
- }
115
- async function createLocalTwin(deviceHostname, image, createOptions) {
116
- const twinConfig = {
117
- type: 'Edge',
118
- properties: {
119
- desired: {
120
- image,
121
- createOptions,
122
- },
123
- },
124
- };
125
- const twinConfigJson = JSON.stringify(twinConfig).replace(/'/g, "\\'");
126
- const command = `phyctl local create -t '${twinConfigJson}'`;
127
- console.log(chalk_1.default.dim('Creating local twin...'));
128
- await runRemoteCommand(deviceHostname, command);
129
- }
130
- exports.default = async (moduleName, { deviceHostname, remoteDir, phygridLocalNpm = false, isInProjectsDir = false }) => {
131
- const cwd = process.cwd();
132
- const packageFile = path_1.default.join(cwd, 'package.json');
133
- const settingsFile = path_1.default.join(cwd, 'settings.json');
134
- if (!fs_1.default.existsSync(packageFile)) {
135
- throw new Error('Run this command from a module repository');
136
- }
137
- if (!fs_1.default.existsSync(settingsFile)) {
138
- throw new Error('settings.json file is required');
139
- }
140
- const info = JSON.parse(fs_1.default.readFileSync(packageFile).toString());
141
- const createOptions = JSON.parse(fs_1.default.readFileSync(settingsFile).toString());
142
- const { name } = info;
143
- const dockerCredentials = info['docker-credentials'];
144
- const registry = dockerCredentials?.registry || info['container-registry'] || DEFAULT_REGISTRY;
145
- const version = generateShortId();
146
- // Check if a custom image name is specified in docker-credentials
147
- let customImageName = null;
148
- if (dockerCredentials?.image) {
149
- customImageName = dockerCredentials.image;
150
- console.log(chalk_1.default.dim(`Using custom image name from docker-credentials: ${chalk_1.default.blue(customImageName)}`));
151
- }
152
- // Log if using local phygrid-npm
153
- if (phygridLocalNpm) {
154
- console.log(chalk_1.default.cyan('Using local phygrid-npm packages for Docker build'));
155
- }
156
- console.log(chalk_1.default.dim(`Building ${name}...`));
157
- const imageName = await buildContainer({
158
- name,
159
- version,
160
- registry,
161
- deviceHostname,
162
- remoteDir,
163
- customImageName,
164
- phygridLocalNpm,
165
- isInProjectsDir
166
- });
167
- // Create local twin with the built image
168
- await createLocalTwin(deviceHostname, imageName, createOptions);
169
- return imageName;
170
- };
171
- //# sourceMappingURL=build-container-remote.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-container-remote.js","sourceRoot":"","sources":["../../../src/commands/app/build-container-remote.ts"],"names":[],"mappings":"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"}