testeranto 0.219.13 → 0.219.15

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 (237) hide show
  1. package/package.json +1 -1
  2. package/src/testeranto.ts +1 -1
  3. package/dist/common/allTestsUtils.js +0 -17
  4. package/dist/common/package.json +0 -3
  5. package/dist/common/scripts/build-example.js +0 -105
  6. package/dist/common/src/Init.js +0 -38
  7. package/dist/common/src/Types.js +0 -63
  8. package/dist/common/src/esbuildConfigs/consoleDetectorPlugin.js +0 -38
  9. package/dist/common/src/esbuildConfigs/eslint-formatter-testeranto.js +0 -21
  10. package/dist/common/src/esbuildConfigs/featuresPlugin.js +0 -39
  11. package/dist/common/src/esbuildConfigs/index.js +0 -22
  12. package/dist/common/src/esbuildConfigs/inputFilesPlugin.js +0 -30
  13. package/dist/common/src/esbuildConfigs/nativeImportDetectorPlugin.js +0 -24
  14. package/dist/common/src/esbuildConfigs/rebuildPlugin.js +0 -19
  15. package/dist/common/src/init-docs.js +0 -9
  16. package/dist/common/src/lib/tiposkripto/BaseGiven.js +0 -96
  17. package/dist/common/src/lib/tiposkripto/BaseSuite.js +0 -134
  18. package/dist/common/src/lib/tiposkripto/BaseThen.js +0 -65
  19. package/dist/common/src/lib/tiposkripto/BaseTiposkripto.js +0 -193
  20. package/dist/common/src/lib/tiposkripto/BaseWhen.js +0 -46
  21. package/dist/common/src/lib/tiposkripto/CoreTypes.js +0 -2
  22. package/dist/common/src/lib/tiposkripto/Node.js +0 -40
  23. package/dist/common/src/lib/tiposkripto/Tiposkripto.js +0 -49
  24. package/dist/common/src/lib/tiposkripto/Types.js +0 -2
  25. package/dist/common/src/lib/tiposkripto/Web.js +0 -70
  26. package/dist/common/src/lib/tiposkripto/abstractBase.test/MockGiven.js +0 -22
  27. package/dist/common/src/lib/tiposkripto/abstractBase.test/MockThen.js +0 -16
  28. package/dist/common/src/lib/tiposkripto/abstractBase.test/MockWhen.js +0 -18
  29. package/dist/common/src/lib/tiposkripto/abstractBase.test/adapter.js +0 -24
  30. package/dist/common/src/lib/tiposkripto/abstractBase.test/implementation.js +0 -38
  31. package/dist/common/src/lib/tiposkripto/abstractBase.test/index.js +0 -17
  32. package/dist/common/src/lib/tiposkripto/abstractBase.test/specification.js +0 -19
  33. package/dist/common/src/lib/tiposkripto/abstractBase.test/types.js +0 -2
  34. package/dist/common/src/lib/tiposkripto/index.js +0 -29
  35. package/dist/common/src/runtimes.js +0 -4
  36. package/dist/common/src/server/aider/configParser.js +0 -124
  37. package/dist/common/src/server/aider/docker.js +0 -30
  38. package/dist/common/src/server/getRunnables.js +0 -36
  39. package/dist/common/src/server/htmlTemplate.js +0 -44
  40. package/dist/common/src/server/nodeVersion.js +0 -5
  41. package/dist/common/src/server/runtimes/common.js +0 -136
  42. package/dist/common/src/server/runtimes/golang/docker.js +0 -62
  43. package/dist/common/src/server/runtimes/java/docker.js +0 -46
  44. package/dist/common/src/server/runtimes/node/docker.js +0 -42
  45. package/dist/common/src/server/runtimes/node/esbuild.js +0 -40
  46. package/dist/common/src/server/runtimes/node/node.js +0 -75
  47. package/dist/common/src/server/runtimes/python/docker.js +0 -31
  48. package/dist/common/src/server/runtimes/ruby/docker.js +0 -34
  49. package/dist/common/src/server/runtimes/rust/docker.js +0 -35
  50. package/dist/common/src/server/runtimes/web/docker.js +0 -42
  51. package/dist/common/src/server/runtimes/web/esbuild.js +0 -29
  52. package/dist/common/src/server/runtimes/web/hoist.js +0 -16
  53. package/dist/common/src/server/runtimes/web/web.js +0 -157
  54. package/dist/common/src/server/serverClasees/Server.js +0 -47
  55. package/dist/common/src/server/serverClasees/Server_Base.js +0 -18
  56. package/dist/common/src/server/serverClasees/Server_Docker.js +0 -904
  57. package/dist/common/src/server/serverClasees/Server_FS.js +0 -119
  58. package/dist/common/src/server/serverClasees/Server_HTTP.js +0 -189
  59. package/dist/common/src/server/serverClasees/Server_WS.js +0 -262
  60. package/dist/common/src/server/serverManagers/DockerManager.js +0 -28
  61. package/dist/common/src/server/serverManagers/HttpManager.js +0 -114
  62. package/dist/common/src/server/serverManagers/WsManager.js +0 -230
  63. package/dist/common/src/server/serverManagers/fs.js +0 -32
  64. package/dist/common/src/server/serverManagers/tcp.js +0 -51
  65. package/dist/common/src/server/types.js +0 -2
  66. package/dist/common/src/testeranto.js +0 -75
  67. package/dist/common/src/vscode/TerminalManager.js +0 -129
  68. package/dist/common/src/vscode/TestTreeItem.js +0 -77
  69. package/dist/common/src/vscode/extension.js +0 -185
  70. package/dist/common/src/vscode/providers/FeaturesTreeDataProvider.js +0 -445
  71. package/dist/common/src/vscode/providers/FileTreeDataProvider.js +0 -190
  72. package/dist/common/src/vscode/providers/ProcessesTreeDataProvider.js +0 -270
  73. package/dist/common/src/vscode/providers/ResultsTreeDataProvider.js +0 -87
  74. package/dist/common/src/vscode/providers/TestTreeDataProvider.js +0 -309
  75. package/dist/common/src/vscode/types.js +0 -9
  76. package/dist/common/testeranto/runtimes/node/node.js +0 -7
  77. package/dist/common/testeranto/runtimes/web/web.js +0 -6
  78. package/dist/common/testeranto/testeranto.js +0 -70
  79. package/dist/common/tsconfig.common.tsbuildinfo +0 -1
  80. package/dist/module/allTestsUtils.js +0 -13
  81. package/dist/module/package.json +0 -3
  82. package/dist/module/scripts/build-example.js +0 -100
  83. package/dist/module/src/Init.js +0 -33
  84. package/dist/module/src/Types.js +0 -62
  85. package/dist/module/src/esbuildConfigs/consoleDetectorPlugin.js +0 -32
  86. package/dist/module/src/esbuildConfigs/eslint-formatter-testeranto.js +0 -18
  87. package/dist/module/src/esbuildConfigs/featuresPlugin.js +0 -34
  88. package/dist/module/src/esbuildConfigs/index.js +0 -20
  89. package/dist/module/src/esbuildConfigs/inputFilesPlugin.js +0 -25
  90. package/dist/module/src/esbuildConfigs/nativeImportDetectorPlugin.js +0 -21
  91. package/dist/module/src/esbuildConfigs/rebuildPlugin.js +0 -14
  92. package/dist/module/src/init-docs.js +0 -4
  93. package/dist/module/src/lib/tiposkripto/BaseGiven.js +0 -92
  94. package/dist/module/src/lib/tiposkripto/BaseSuite.js +0 -130
  95. package/dist/module/src/lib/tiposkripto/BaseThen.js +0 -61
  96. package/dist/module/src/lib/tiposkripto/BaseTiposkripto.js +0 -190
  97. package/dist/module/src/lib/tiposkripto/BaseWhen.js +0 -42
  98. package/dist/module/src/lib/tiposkripto/CoreTypes.js +0 -1
  99. package/dist/module/src/lib/tiposkripto/Node.js +0 -33
  100. package/dist/module/src/lib/tiposkripto/Tiposkripto.js +0 -14
  101. package/dist/module/src/lib/tiposkripto/Types.js +0 -1
  102. package/dist/module/src/lib/tiposkripto/Web.js +0 -63
  103. package/dist/module/src/lib/tiposkripto/abstractBase.test/MockGiven.js +0 -18
  104. package/dist/module/src/lib/tiposkripto/abstractBase.test/MockThen.js +0 -12
  105. package/dist/module/src/lib/tiposkripto/abstractBase.test/MockWhen.js +0 -14
  106. package/dist/module/src/lib/tiposkripto/abstractBase.test/adapter.js +0 -21
  107. package/dist/module/src/lib/tiposkripto/abstractBase.test/implementation.js +0 -35
  108. package/dist/module/src/lib/tiposkripto/abstractBase.test/index.js +0 -12
  109. package/dist/module/src/lib/tiposkripto/abstractBase.test/specification.js +0 -15
  110. package/dist/module/src/lib/tiposkripto/abstractBase.test/types.js +0 -1
  111. package/dist/module/src/lib/tiposkripto/index.js +0 -24
  112. package/dist/module/src/runtimes.js +0 -1
  113. package/dist/module/src/server/aider/configParser.js +0 -116
  114. package/dist/module/src/server/aider/docker.js +0 -28
  115. package/dist/module/src/server/getRunnables.js +0 -29
  116. package/dist/module/src/server/htmlTemplate.js +0 -40
  117. package/dist/module/src/server/nodeVersion.js +0 -2
  118. package/dist/module/src/server/runtimes/common.js +0 -127
  119. package/dist/module/src/server/runtimes/golang/docker.js +0 -55
  120. package/dist/module/src/server/runtimes/java/docker.js +0 -40
  121. package/dist/module/src/server/runtimes/node/docker.js +0 -36
  122. package/dist/module/src/server/runtimes/node/esbuild.js +0 -35
  123. package/dist/module/src/server/runtimes/node/node.js +0 -37
  124. package/dist/module/src/server/runtimes/python/docker.js +0 -25
  125. package/dist/module/src/server/runtimes/ruby/docker.js +0 -28
  126. package/dist/module/src/server/runtimes/rust/docker.js +0 -29
  127. package/dist/module/src/server/runtimes/web/docker.js +0 -36
  128. package/dist/module/src/server/runtimes/web/esbuild.js +0 -24
  129. package/dist/module/src/server/runtimes/web/hoist.js +0 -11
  130. package/dist/module/src/server/runtimes/web/web.js +0 -119
  131. package/dist/module/src/server/serverClasees/Server.js +0 -40
  132. package/dist/module/src/server/serverClasees/Server_Base.js +0 -14
  133. package/dist/module/src/server/serverClasees/Server_Docker.js +0 -897
  134. package/dist/module/src/server/serverClasees/Server_FS.js +0 -119
  135. package/dist/module/src/server/serverClasees/Server_HTTP.js +0 -182
  136. package/dist/module/src/server/serverClasees/Server_WS.js +0 -258
  137. package/dist/module/src/server/serverManagers/DockerManager.js +0 -28
  138. package/dist/module/src/server/serverManagers/HttpManager.js +0 -110
  139. package/dist/module/src/server/serverManagers/WsManager.js +0 -226
  140. package/dist/module/src/server/serverManagers/fs.js +0 -32
  141. package/dist/module/src/server/serverManagers/tcp.js +0 -47
  142. package/dist/module/src/server/types.js +0 -1
  143. package/dist/module/src/testeranto.js +0 -40
  144. package/dist/module/src/vscode/TerminalManager.js +0 -92
  145. package/dist/module/src/vscode/TestTreeItem.js +0 -40
  146. package/dist/module/src/vscode/extension.js +0 -148
  147. package/dist/module/src/vscode/providers/FeaturesTreeDataProvider.js +0 -408
  148. package/dist/module/src/vscode/providers/FileTreeDataProvider.js +0 -153
  149. package/dist/module/src/vscode/providers/ProcessesTreeDataProvider.js +0 -233
  150. package/dist/module/src/vscode/providers/ResultsTreeDataProvider.js +0 -50
  151. package/dist/module/src/vscode/providers/TestTreeDataProvider.js +0 -272
  152. package/dist/module/src/vscode/types.js +0 -6
  153. package/dist/module/testeranto/runtimes/node/node.js +0 -5
  154. package/dist/module/testeranto/runtimes/web/web.js +0 -4
  155. package/dist/module/testeranto/testeranto.js +0 -68
  156. package/dist/module/tsconfig.module.tsbuildinfo +0 -1
  157. package/dist/prebuild/chunk-QLT7PNPK.mjs +0 -162
  158. package/dist/prebuild/esbuildConfigs/eslint-formatter-testeranto.mjs +0 -20
  159. package/dist/prebuild/init-docs.mjs +0 -56
  160. package/dist/prebuild/server/runtimes/node/node.mjs +0 -80
  161. package/dist/prebuild/server/runtimes/web/hoist.mjs +0 -12
  162. package/dist/prebuild/server/runtimes/web/web.mjs +0 -162
  163. package/dist/prebuild/testeranto-6SAYRVSE.mjs +0 -72
  164. package/dist/prebuild/testeranto.mjs +0 -1692
  165. package/dist/types/src/Init.d.ts +0 -2
  166. package/dist/types/src/Types.d.ts +0 -87
  167. package/dist/types/src/esbuildConfigs/consoleDetectorPlugin.d.ts +0 -2
  168. package/dist/types/src/esbuildConfigs/eslint-formatter-testeranto.d.ts +0 -2
  169. package/dist/types/src/esbuildConfigs/featuresPlugin.d.ts +0 -5
  170. package/dist/types/src/esbuildConfigs/index.d.ts +0 -3
  171. package/dist/types/src/esbuildConfigs/inputFilesPlugin.d.ts +0 -7
  172. package/dist/types/src/esbuildConfigs/nativeImportDetectorPlugin.d.ts +0 -2
  173. package/dist/types/src/esbuildConfigs/rebuildPlugin.d.ts +0 -6
  174. package/dist/types/src/init-docs.d.ts +0 -1
  175. package/dist/types/src/lib/tiposkripto/BaseGiven.d.ts +0 -42
  176. package/dist/types/src/lib/tiposkripto/BaseSuite.d.ts +0 -46
  177. package/dist/types/src/lib/tiposkripto/BaseThen.d.ts +0 -28
  178. package/dist/types/src/lib/tiposkripto/BaseTiposkripto.d.ts +0 -35
  179. package/dist/types/src/lib/tiposkripto/BaseWhen.d.ts +0 -27
  180. package/dist/types/src/lib/tiposkripto/CoreTypes.d.ts +0 -51
  181. package/dist/types/src/lib/tiposkripto/Node.d.ts +0 -9
  182. package/dist/types/src/lib/tiposkripto/Tiposkripto.d.ts +0 -5
  183. package/dist/types/src/lib/tiposkripto/Types.d.ts +0 -9
  184. package/dist/types/src/lib/tiposkripto/Web.d.ts +0 -9
  185. package/dist/types/src/lib/tiposkripto/abstractBase.test/MockGiven.d.ts +0 -9
  186. package/dist/types/src/lib/tiposkripto/abstractBase.test/MockThen.d.ts +0 -6
  187. package/dist/types/src/lib/tiposkripto/abstractBase.test/MockWhen.d.ts +0 -6
  188. package/dist/types/src/lib/tiposkripto/abstractBase.test/adapter.d.ts +0 -3
  189. package/dist/types/src/lib/tiposkripto/abstractBase.test/implementation.d.ts +0 -3
  190. package/dist/types/src/lib/tiposkripto/abstractBase.test/index.d.ts +0 -28
  191. package/dist/types/src/lib/tiposkripto/abstractBase.test/specification.d.ts +0 -3
  192. package/dist/types/src/lib/tiposkripto/abstractBase.test/types.d.ts +0 -39
  193. package/dist/types/src/lib/tiposkripto/index.d.ts +0 -56
  194. package/dist/types/src/runtimes.d.ts +0 -2
  195. package/dist/types/src/server/aider/configParser.d.ts +0 -11
  196. package/dist/types/src/server/aider/docker.d.ts +0 -2
  197. package/dist/types/src/server/getRunnables.d.ts +0 -3
  198. package/dist/types/src/server/htmlTemplate.d.ts +0 -2
  199. package/dist/types/src/server/nodeVersion.d.ts +0 -2
  200. package/dist/types/src/server/runtimes/common.d.ts +0 -12
  201. package/dist/types/src/server/runtimes/golang/docker.d.ts +0 -5
  202. package/dist/types/src/server/runtimes/java/docker.d.ts +0 -14
  203. package/dist/types/src/server/runtimes/node/docker.d.ts +0 -14
  204. package/dist/types/src/server/runtimes/node/esbuild.d.ts +0 -4
  205. package/dist/types/src/server/runtimes/node/node.d.ts +0 -1
  206. package/dist/types/src/server/runtimes/python/docker.d.ts +0 -14
  207. package/dist/types/src/server/runtimes/ruby/docker.d.ts +0 -14
  208. package/dist/types/src/server/runtimes/rust/docker.d.ts +0 -14
  209. package/dist/types/src/server/runtimes/web/docker.d.ts +0 -15
  210. package/dist/types/src/server/runtimes/web/esbuild.d.ts +0 -4
  211. package/dist/types/src/server/runtimes/web/hoist.d.ts +0 -1
  212. package/dist/types/src/server/runtimes/web/web.d.ts +0 -1
  213. package/dist/types/src/server/serverClasees/Server.d.ts +0 -8
  214. package/dist/types/src/server/serverClasees/Server_Base.d.ts +0 -9
  215. package/dist/types/src/server/serverClasees/Server_Docker.d.ts +0 -81
  216. package/dist/types/src/server/serverClasees/Server_FS.d.ts +0 -0
  217. package/dist/types/src/server/serverClasees/Server_HTTP.d.ts +0 -20
  218. package/dist/types/src/server/serverClasees/Server_WS.d.ts +0 -23
  219. package/dist/types/src/server/serverManagers/DockerManager.d.ts +0 -0
  220. package/dist/types/src/server/serverManagers/HttpManager.d.ts +0 -9
  221. package/dist/types/src/server/serverManagers/WsManager.d.ts +0 -10
  222. package/dist/types/src/server/serverManagers/fs.d.ts +0 -0
  223. package/dist/types/src/server/serverManagers/tcp.d.ts +0 -27
  224. package/dist/types/src/server/types.d.ts +0 -68
  225. package/dist/types/src/testeranto.d.ts +0 -1
  226. package/dist/types/src/vscode/TerminalManager.d.ts +0 -18
  227. package/dist/types/src/vscode/TestTreeItem.d.ts +0 -13
  228. package/dist/types/src/vscode/extension.d.ts +0 -3
  229. package/dist/types/src/vscode/providers/FeaturesTreeDataProvider.d.ts +0 -17
  230. package/dist/types/src/vscode/providers/FileTreeDataProvider.d.ts +0 -13
  231. package/dist/types/src/vscode/providers/ProcessesTreeDataProvider.d.ts +0 -23
  232. package/dist/types/src/vscode/providers/ResultsTreeDataProvider.d.ts +0 -10
  233. package/dist/types/src/vscode/providers/TestTreeDataProvider.d.ts +0 -16
  234. package/dist/types/src/vscode/types.d.ts +0 -14
  235. package/dist/types/testeranto/testeranto.d.ts +0 -3
  236. package/dist/types/tsconfig.types.tsbuildinfo +0 -1
  237. package/dist/vscode/extension.mjs +0 -5116
@@ -1,904 +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.Server_Docker = void 0;
7
- const ansi_colors_1 = __importDefault(require("ansi-colors"));
8
- const child_process_1 = require("child_process");
9
- const fs_1 = __importDefault(require("fs"));
10
- const js_yaml_1 = __importDefault(require("js-yaml"));
11
- const path_1 = __importDefault(require("path"));
12
- const util_1 = require("util");
13
- const runtimes_1 = require("../../runtimes");
14
- const docker_1 = require("../runtimes/golang/docker");
15
- const docker_2 = require("../runtimes/java/docker");
16
- const docker_3 = require("../runtimes/node/docker");
17
- const docker_4 = require("../runtimes/python/docker");
18
- const docker_5 = require("../runtimes/ruby/docker");
19
- const docker_6 = require("../runtimes/rust/docker");
20
- const docker_7 = require("../runtimes/web/docker");
21
- const Server_WS_1 = require("./Server_WS");
22
- class Server_Docker extends Server_WS_1.Server_WS {
23
- constructor(configs, mode) {
24
- super(configs, mode);
25
- this.logProcesses = new Map();
26
- }
27
- BaseCompose(services) {
28
- return {
29
- services,
30
- volumes: {
31
- node_modules: {
32
- driver: "local",
33
- },
34
- },
35
- networks: {
36
- allTests_network: {
37
- driver: "bridge",
38
- },
39
- },
40
- };
41
- }
42
- staticTestDockerComposeFile(runtime, container_name, command) {
43
- // Find the dockerfile path from configs
44
- let dockerfilePath = '';
45
- for (const [key, value] of Object.entries(this.configs.runtimes)) {
46
- if (value.runtime === runtime) {
47
- dockerfilePath = value.dockerfile;
48
- break;
49
- }
50
- }
51
- // If no dockerfile found, use a default based on runtime
52
- if (!dockerfilePath) {
53
- throw (`[Docker] [staticTestDockerComposeFile] no dockerfile found for ${dockerfilePath}, ${Object.entries(this.configs)}`);
54
- }
55
- return {
56
- build: {
57
- context: process.cwd(),
58
- dockerfile: dockerfilePath,
59
- },
60
- container_name,
61
- environment: {
62
- // NODE_ENV: "production",
63
- // ...config.env,
64
- },
65
- working_dir: "/workspace",
66
- command: command,
67
- networks: ["allTests_network"],
68
- };
69
- }
70
- ;
71
- bddTestDockerComposeFile(runtime, container_name, command) {
72
- // Find the dockerfile path from configs
73
- let dockerfilePath = '';
74
- for (const [key, value] of Object.entries(this.configs.runtimes)) {
75
- if (value.runtime === runtime) {
76
- dockerfilePath = value.dockerfile;
77
- break;
78
- }
79
- }
80
- // If no dockerfile found, use a default based on runtime
81
- if (!dockerfilePath) {
82
- throw (`[Docker] [bddTestDockerComposeFile] no dockerfile found for ${dockerfilePath}, ${Object.entries(this.configs)}`);
83
- }
84
- const service = {
85
- build: {
86
- context: process.cwd(),
87
- dockerfile: dockerfilePath,
88
- },
89
- container_name,
90
- environment: {
91
- // NODE_ENV: "production",
92
- // ...config.env,
93
- },
94
- working_dir: "/workspace",
95
- volumes: [
96
- `${process.cwd()}/src:/workspace/src`,
97
- `${process.cwd()}/example:/workspace/example`,
98
- `${process.cwd()}/dist:/workspace/dist`,
99
- `${process.cwd()}/testeranto:/workspace/testeranto`,
100
- ],
101
- command: command,
102
- networks: ["allTests_network"],
103
- };
104
- return service;
105
- }
106
- ;
107
- aiderDockerComposeFile(container_name) {
108
- return {
109
- build: {
110
- context: process.cwd(),
111
- dockerfile: 'aider.Dockerfile',
112
- },
113
- container_name,
114
- environment: {
115
- // NODE_ENV: "production",
116
- // ...config.env,
117
- },
118
- working_dir: "/workspace",
119
- command: "aider",
120
- networks: ["allTests_network"],
121
- };
122
- }
123
- ;
124
- generateServices(
125
- // config: IBuiltConfig,
126
- ) {
127
- const services = {};
128
- console.log("mark1");
129
- // // Add browser service
130
- // services['browser'] = {
131
- // build:
132
- // {
133
- // context: `/Users/adam/Code/testeranto`,
134
- // dockerfile: `src/server/runtimes/web/web.Dockerfile`
135
- // },
136
- // // image: 'browserless/chrome:latest',
137
- // shm_size: '2gb',
138
- // // environment: [ "DEFAULT_ARGS=--disable-dev-shm-usage"],
139
- // container_name: 'browser-allTests',
140
- // // environment: {
141
- // // CONNECTION_TIMEOUT: '60000',
142
- // // MAX_CONCURRENT_SESSIONS: '10',
143
- // // ENABLE_CORS: 'true',
144
- // // TOKEN: '',
145
- // // DEFAULT_ARGS: '--disable-dev-shm-usage'
146
- // // },
147
- // ports: [
148
- // '3000:3000',
149
- // '9222:9222'
150
- // ],
151
- // networks: ["default"],
152
- // };
153
- const runTimeToCompose = {
154
- 'node': [docker_3.nodeDockerComposeFile, docker_3.nodeBuildCommand, docker_3.nodeBddCommand],
155
- 'web': [docker_7.webDockerComposeFile, docker_7.webBuildCommand, docker_7.webBddCommand],
156
- 'python': [docker_4.pythonDockerComposeFile, docker_4.pythonBuildCommand, docker_4.pythonBddCommand],
157
- 'golang': [docker_1.golangDockerComposeFile, docker_1.golangBuildCommand, docker_1.golangBddCommand],
158
- 'ruby': [docker_5.rubyDockerComposeFile, docker_5.rubyBuildCommand, docker_5.rubyBddCommand],
159
- 'rust': [docker_6.rustDockerComposeFile, docker_6.rustBuildCommand, docker_6.rustBddCommand],
160
- "java": [docker_2.javaDockerComposeFile, docker_2.javaBuildCommand, docker_2.javaBddCommand]
161
- };
162
- // Iterate through each entry in the config Map
163
- for (const [runtimeTestsName, runtimeTests] of Object.entries(this.configs.runtimes)) {
164
- const runtime = runtimeTests.runtime;
165
- const dockerfile = runtimeTests.dockerfile;
166
- const buildOptions = runtimeTests.buildOptions;
167
- const testsObj = runtimeTests.tests;
168
- // loop over all suites which are of the right runtime
169
- for (const [t, c] of Object.entries(this.configs.runtimes)) {
170
- if (c.runtime === runtime) {
171
- if (runtimes_1.RUN_TIMES.includes(runtime)) {
172
- const buildCommand = runTimeToCompose[runtime][1](buildOptions, c.buildOptions, runtimeTestsName);
173
- // Add builder service for this runtime
174
- const builderServiceName = `${runtime}-builder`;
175
- // Ensure dockerfile path is valid and exists
176
- let dockerfilePath = dockerfile;
177
- const fullDockerfilePath = path_1.default.join(process.cwd(), dockerfilePath);
178
- if (!fs_1.default.existsSync(fullDockerfilePath)) {
179
- throw (`[Server_Docker] Dockerfile not found at ${fullDockerfilePath}`);
180
- }
181
- services[builderServiceName] = {
182
- build: {
183
- context: process.cwd(),
184
- dockerfile: dockerfilePath,
185
- },
186
- container_name: builderServiceName,
187
- environment: {},
188
- working_dir: "/workspace",
189
- volumes: [
190
- `${process.cwd()}/src:/workspace/src`,
191
- `${process.cwd()}/example:/workspace/example`,
192
- `${process.cwd()}/dist:/workspace/dist`,
193
- `${process.cwd()}/testeranto:/workspace/testeranto`,
194
- ],
195
- command: buildCommand,
196
- networks: ["allTests_network"],
197
- };
198
- for (const tName of testsObj) {
199
- // Clean the test name for use in container names
200
- // Handle numeric test names (like '0') by converting to string
201
- // const testNameStr = String(testName);
202
- const cleanTestName = tName.toLowerCase()
203
- .replaceAll("/", "_")
204
- .replaceAll(".", "-")
205
- .replace(/[^a-z0-9_-]/g, '');
206
- // Generate UID using the runtimeTestsName (e.g., 'nodeTests') and clean test name
207
- const uid = `${runtimeTestsName.toLowerCase()}-${cleanTestName}`;
208
- // Add BDD service for this test
209
- const bddCommandFunc = runTimeToCompose[runtime][2];
210
- // TODO find filepath
211
- // const filePath = "testeranto/bundles/allTests/ruby/example/Calculator.test.rb"
212
- const filePath = `testeranto/bundles/allTests/${runtime}/${tName}`;
213
- const command = bddCommandFunc(filePath);
214
- console.log("wtf command", command);
215
- services[`${uid}-bdd`] = this.bddTestDockerComposeFile(runtime, `${uid}-bdd`, command);
216
- services[`${uid}-aider`] = this.aiderDockerComposeFile(`${uid}-aider`);
217
- }
218
- }
219
- else {
220
- throw `unknown runtime ${runtime}`;
221
- }
222
- }
223
- }
224
- }
225
- // Ensure all services use the same network configuration
226
- for (const serviceName in services) {
227
- if (!services[serviceName].networks) {
228
- services[serviceName].networks = ["allTests_network"];
229
- }
230
- }
231
- return services;
232
- }
233
- autogenerateStamp(x) {
234
- return `# This file is autogenerated. Do not edit it directly
235
- ${x}
236
- `;
237
- }
238
- getUpCommand() {
239
- return `docker compose up -d`;
240
- }
241
- getDownCommand() {
242
- return `docker compose down -v --remove-orphans`;
243
- }
244
- getPsCommand() {
245
- return `docker compose ps`;
246
- }
247
- getLogsCommand(serviceName, tail = 100) {
248
- const base = `docker compose logs --no-color --tail=${tail}`;
249
- return serviceName ? `${base} ${serviceName}` : base;
250
- }
251
- getConfigServicesCommand() {
252
- return `docker compose config --services`;
253
- }
254
- getBuildCommand() {
255
- return `docker compose build`;
256
- }
257
- getStartCommand() {
258
- return `docker compose start`;
259
- }
260
- // private async waitForContainerExists(serviceName: string, maxAttempts: number = 30, delayMs: number = 1000): Promise<boolean> {
261
- // for (let attempt = 1; attempt <= maxAttempts; attempt++) {
262
- // try {
263
- // const cmd = `docker compose -f "testeranto/docker-compose.yml" ps -q ${serviceName}`;
264
- // const { execSync } = require('child_process');
265
- // const containerId = execSync(cmd, {
266
- // // cwd:this.dockerManager.cwd
267
- // }).toString().trim();
268
- // if (containerId && containerId.length > 0) {
269
- // console.log(`[Server_Docker] Container for ${serviceName} exists with ID: ${containerId.substring(0, 12)}`);
270
- // return true;
271
- // }
272
- // } catch (error) {
273
- // // Container doesn't exist yet or command failed
274
- // }
275
- // if (attempt < maxAttempts) {
276
- // await new Promise(resolve => setTimeout(resolve, delayMs));
277
- // }
278
- // }
279
- // console.warn(`[Server_Docker] Container for ${serviceName} did not appear after ${maxAttempts} attempts`);
280
- // return false;
281
- // }
282
- async startServiceLogging(serviceName, runtime) {
283
- var _a, _b;
284
- // Create report directory
285
- const reportDir = path_1.default.join(process.cwd(), "testeranto", "reports", "allTests", "example", runtime);
286
- try {
287
- fs_1.default.mkdirSync(reportDir, { recursive: true });
288
- }
289
- catch (error) {
290
- console.error(`[Server_Docker] Failed to create report directory ${reportDir}: ${error.message}`);
291
- return;
292
- }
293
- const logFilePath = path_1.default.join(reportDir, `${serviceName}.log`);
294
- const exitCodeFilePath = path_1.default.join(reportDir, `${serviceName}.exitcode`);
295
- // Start a process to capture logs - use a more robust approach
296
- // We'll use a shell script that handles waiting for the container
297
- const logScript = `
298
- # Wait for container to exist
299
- for i in {1..30}; do
300
- if docker compose -f "testeranto/docker-compose.yml" ps -q ${serviceName} > /dev/null 2>&1; then
301
- break
302
- fi
303
- sleep 1
304
- done
305
- # Capture logs from the beginning
306
- docker compose -f "testeranto/docker-compose.yml" logs --no-color -f ${serviceName}
307
- `;
308
- console.log(`[Server_Docker] Starting log capture for ${serviceName} to ${logFilePath}`);
309
- const logStream = fs_1.default.createWriteStream(logFilePath, { flags: 'a' });
310
- const timestamp = new Date().toISOString();
311
- logStream.write(`=== Log started at ${timestamp} for service ${serviceName} ===\n\n`);
312
- const child = (0, child_process_1.spawn)('bash', ['-c', logScript], {
313
- stdio: ['ignore', 'pipe', 'pipe'],
314
- // cwd: this.dockerManager.cwd
315
- });
316
- // Get container ID for tracking
317
- let containerId = null;
318
- try {
319
- // Try to get container ID, but don't fail if we can't
320
- const containerIdCmd = `docker compose -f "testeranto/docker-compose.yml" ps -q ${serviceName}`;
321
- containerId = (0, child_process_1.execSync)(containerIdCmd, {
322
- // cwd: this.dockerManager.cwd
323
- }).toString().trim();
324
- }
325
- catch (error) {
326
- console.warn(`[Server_Docker] Could not get container ID for ${serviceName}, will track by service name`);
327
- }
328
- (_a = child.stdout) === null || _a === void 0 ? void 0 : _a.on('data', (data) => {
329
- logStream.write(data);
330
- });
331
- (_b = child.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (data) => {
332
- logStream.write(data);
333
- });
334
- child.on('error', (error) => {
335
- console.error(`[Server_Docker] Log process error for ${serviceName}:`, error);
336
- logStream.write(`\n=== Log process error: ${error.message} ===\n`);
337
- logStream.end();
338
- // Write error exit code
339
- fs_1.default.writeFileSync(exitCodeFilePath, '-1');
340
- });
341
- child.on('close', (code) => {
342
- const endTimestamp = new Date().toISOString();
343
- logStream.write(`\n=== Log ended at ${endTimestamp}, process exited with code ${code} ===\n`);
344
- logStream.end();
345
- console.log(`[Server_Docker] Log process for ${serviceName} exited with code ${code}`);
346
- // Write exit code to file
347
- fs_1.default.writeFileSync(exitCodeFilePath, (code === null || code === void 0 ? void 0 : code.toString()) || '0');
348
- // Also capture the actual container exit code
349
- this.captureContainerExitCode(serviceName, reportDir);
350
- if (containerId) {
351
- this.logProcesses.delete(containerId);
352
- }
353
- else {
354
- // Remove by service name if we couldn't get container ID
355
- for (const [id, proc] of this.logProcesses.entries()) {
356
- if (proc.serviceName === serviceName) {
357
- this.logProcesses.delete(id);
358
- break;
359
- }
360
- }
361
- }
362
- });
363
- // Track the process
364
- const trackingKey = containerId || serviceName;
365
- this.logProcesses.set(trackingKey, { process: child, serviceName });
366
- }
367
- async captureContainerExitCode(serviceName, reportDir) {
368
- try {
369
- // Get container ID including stopped containers
370
- const containerIdCmd = `docker compose -f "testeranto/docker-compose.yml" ps -a -q ${serviceName}`;
371
- const containerId = (0, child_process_1.execSync)(containerIdCmd, {
372
- // cwd: this.dockerManager.cwd
373
- }).toString().trim();
374
- if (containerId) {
375
- // Check if container exists and get its exit code
376
- const inspectCmd = `docker inspect --format='{{.State.ExitCode}}' ${containerId}`;
377
- const exitCode = (0, child_process_1.execSync)(inspectCmd, {
378
- // cwd: this.dockerManager.cwd
379
- }).toString().trim();
380
- // Write container exit code to a separate file
381
- const containerExitCodeFilePath = path_1.default.join(reportDir, `${serviceName}.container.exitcode`);
382
- fs_1.default.writeFileSync(containerExitCodeFilePath, exitCode);
383
- console.log(`[Server_Docker] Container ${serviceName} (${containerId.substring(0, 12)}) exited with code ${exitCode}`);
384
- // Also capture the container's status
385
- const statusCmd = `docker inspect --format='{{.State.Status}}' ${containerId}`;
386
- const status = (0, child_process_1.execSync)(statusCmd, {
387
- // cwd: this.dockerManager.cwd
388
- }).toString().trim();
389
- const statusFilePath = path_1.default.join(reportDir, `${serviceName}.container.status`);
390
- fs_1.default.writeFileSync(statusFilePath, status);
391
- }
392
- else {
393
- console.debug(`[Server_Docker] No container found for service ${serviceName}`);
394
- }
395
- }
396
- catch (error) {
397
- // Container might not exist anymore, which is fine
398
- console.debug(`[Server_Docker] Could not capture container exit code for ${serviceName}: ${error.message}`);
399
- }
400
- }
401
- async start() {
402
- console.log(`[Server_Docker] start()`);
403
- super.start();
404
- await this.setupDockerCompose();
405
- // Ensure base reports directory exists
406
- const baseReportsDir = path_1.default.join(process.cwd(), "testeranto", "reports");
407
- try {
408
- fs_1.default.mkdirSync(baseReportsDir, { recursive: true });
409
- console.log(`[Server_Docker] Created base reports directory: ${baseReportsDir}`);
410
- }
411
- catch (error) {
412
- console.error(`[Server_Docker] Failed to create base reports directory ${baseReportsDir}: ${error.message}`);
413
- }
414
- console.log(`[Server_Docker] Dropping everything...`);
415
- try {
416
- const downCmd = `docker compose -f "testeranto/docker-compose.yml" down -v --remove-orphans`;
417
- console.log(`[Server_Docker] Running: ${downCmd}`);
418
- await this.spawnPromise(downCmd);
419
- console.log(`[Server_Docker] Docker compose down completed`);
420
- }
421
- catch (error) {
422
- console.log(`[Server_Docker] Docker compose down noted: ${error.message}`);
423
- }
424
- // Start builder services
425
- for (const runtime of runtimes_1.RUN_TIMES) {
426
- const serviceName = `${runtime}-builder`;
427
- console.log(`[Server_Docker] Starting builder service: ${serviceName}`);
428
- try {
429
- await this.spawnPromise(`docker compose -f "testeranto/docker-compose.yml" up -d ${serviceName}`);
430
- this.startServiceLogging(serviceName, runtime)
431
- .catch(error => console.error(`[Server_Docker] Failed to start logging for ${serviceName}:`, error));
432
- this.captureExistingLogs(serviceName, runtime);
433
- }
434
- catch (error) {
435
- console.error(`[Server_Docker] Failed to start ${serviceName}: ${error.message}`);
436
- }
437
- }
438
- // Start browser service
439
- console.log(`[Server_Docker] Starting browser service...`);
440
- try {
441
- await this.spawnPromise(`docker compose -f "testeranto/docker-compose.yml" up -d browser`);
442
- }
443
- catch (error) {
444
- console.error(`[Server_Docker] Failed to start browser service: ${error.message}`);
445
- }
446
- // Wait for browser service to be healthy before starting web BDD services
447
- console.log(`[Server_Docker] Waiting for browser container to be healthy...`);
448
- await this.waitForContainerHealthy('browser-allTests', 60000); // 60 seconds max
449
- // Start aider services
450
- for (const [configKey, configValue] of Object.entries(this.configs.runtimes)) {
451
- const runtime = configValue.runtime;
452
- // const testsObj = configValue[3];
453
- const tests = configValue.tests;
454
- console.log(`[Server_Docker] Found tests for ${runtime}:`, (JSON.stringify(tests)));
455
- for (const testName of tests) {
456
- // Generate the UID exactly as DockerManager does
457
- const uid = `${configKey}-${testName.toLowerCase().replaceAll("/", "_").replaceAll(".", "-")}`;
458
- const aiderServiceName = `${uid}-aider`;
459
- console.log(`[Server_Docker] Starting aider service: ${aiderServiceName} for test ${testName}`);
460
- try {
461
- await this.spawnPromise(`docker compose -f "testeranto/docker-compose.yml" up -d ${aiderServiceName}`);
462
- // Start logging for aider services
463
- this.startServiceLogging(aiderServiceName, runtime)
464
- .catch(error => console.error(`[Server_Docker] Failed to start logging for ${aiderServiceName}:`, error));
465
- this.captureExistingLogs(aiderServiceName, runtime)
466
- .catch(error => console.error(`[Server_Docker] Failed to capture existing logs for ${aiderServiceName}:`, error));
467
- }
468
- catch (error) {
469
- console.error(`[Server_Docker] Failed to start ${aiderServiceName}: ${error.message}`);
470
- }
471
- }
472
- }
473
- // Start BDD test services
474
- // TODO these logs from these services should be saved into reports
475
- for (const [configKey, configValue] of Object.entries(this.configs.runtimes)) {
476
- const runtime = configValue.runtime;
477
- // const testsObj = configValue[3];
478
- const tests = configValue.tests;
479
- console.log(`[Server_Docker] Found tests for ${runtime}:`, (JSON.stringify(tests)));
480
- // const runtime = configValue[0];
481
- // const testsObj = configValue[3];
482
- // const tests = testsObj?.tests || {};
483
- for (const testName of tests) {
484
- const uid = `${configKey}-${testName.toLowerCase().replaceAll("/", "_").replaceAll(".", "-")}`;
485
- const bddServiceName = `${uid}-bdd`;
486
- console.log(`[Server_Docker] Starting BDD service: ${bddServiceName}, ${configKey}, ${configValue}`);
487
- try {
488
- // Start the service
489
- await this.spawnPromise(`docker compose -f "testeranto/docker-compose.yml" up -d ${bddServiceName}`);
490
- // Immediately start logging in the background
491
- // Don't wait for it to complete
492
- this.startServiceLogging(bddServiceName, runtime)
493
- .catch(error => console.error(`[Server_Docker] Failed to start logging for ${bddServiceName}:`, error));
494
- // Also capture any existing logs from the container (in case it already produced output)
495
- this.captureExistingLogs(bddServiceName, runtime)
496
- .catch(error => console.error(`[Server_Docker] Failed to capture existing logs for ${bddServiceName}:`, error));
497
- }
498
- catch (error) {
499
- console.error(`[Server_Docker] Failed to start ${bddServiceName}: ${error.message}`);
500
- // Even if starting failed, try to capture any logs that might exist
501
- this.captureExistingLogs(bddServiceName, runtime)
502
- .catch(err => console.error(`[Server_Docker] Also failed to capture logs:`, err));
503
- }
504
- }
505
- }
506
- // Start static test services
507
- // TODO these logs from these services should be saved into reports
508
- for (const [configKey, configValue] of Object.entries(this.configs)) {
509
- const runtime = configValue[0];
510
- const testsObj = configValue[3];
511
- const tests = (testsObj === null || testsObj === void 0 ? void 0 : testsObj.tests) || {};
512
- for (const testName in tests) {
513
- const uid = `${configKey}-${testName.toLowerCase().replaceAll("/", "_").replaceAll(".", "-")}`;
514
- const checks = (testsObj === null || testsObj === void 0 ? void 0 : testsObj.checks) || [];
515
- for (let i = 0; i < checks.length; i++) {
516
- const staticServiceName = `${uid}-static-${i}`;
517
- console.log(`[Server_Docker] Starting static test service: ${staticServiceName}`);
518
- try {
519
- await this.spawnPromise(`docker compose -f "testeranto/docker-compose.yml" up -d ${staticServiceName}`);
520
- // Start logging for this service
521
- this.startServiceLogging(staticServiceName, runtime)
522
- .catch(error => console.error(`[Server_Docker] Failed to start logging for ${staticServiceName}:`, error));
523
- // Also capture any existing logs
524
- this.captureExistingLogs(staticServiceName, runtime)
525
- .catch(error => console.error(`[Server_Docker] Failed to capture existing logs for ${staticServiceName}:`, error));
526
- }
527
- catch (error) {
528
- console.error(`[Server_Docker] Failed to start ${staticServiceName}: ${error.message}`);
529
- // Try to capture logs even if starting failed
530
- this.captureExistingLogs(staticServiceName, runtime)
531
- .catch(err => console.error(`[Server_Docker] Also failed to capture logs:`, err));
532
- }
533
- }
534
- }
535
- }
536
- }
537
- async captureExistingLogs(serviceName, runtime) {
538
- // Create report directory
539
- const reportDir = path_1.default.join(process.cwd(), "testeranto", "reports", "allTests", "example", runtime);
540
- try {
541
- fs_1.default.mkdirSync(reportDir, { recursive: true });
542
- }
543
- catch (error) {
544
- console.error(`[Server_Docker] Failed to create report directory ${reportDir}: ${error.message}`);
545
- return;
546
- }
547
- const logFilePath = path_1.default.join(reportDir, `${serviceName}.log`);
548
- try {
549
- // First, check if the container exists (including stopped ones)
550
- const checkCmd = `docker compose -f "testeranto/docker-compose.yml" ps -a -q ${serviceName}`;
551
- const containerId = (0, child_process_1.execSync)(checkCmd, {
552
- // cwd: this.dockerManager.cwd,
553
- encoding: 'utf-8'
554
- }).toString().trim();
555
- if (!containerId) {
556
- console.debug(`[Server_Docker] No container found for service ${serviceName}`);
557
- return;
558
- }
559
- // Get existing logs from the container
560
- const cmd = `docker compose -f "testeranto/docker-compose.yml" logs --no-color ${serviceName} 2>/dev/null || true`;
561
- const existingLogs = (0, child_process_1.execSync)(cmd, {
562
- // cwd: this.dockerManager.cwd,
563
- encoding: 'utf-8',
564
- maxBuffer: 10 * 1024 * 1024 // 10MB
565
- });
566
- if (existingLogs && existingLogs.trim().length > 0) {
567
- // Append to the log file
568
- fs_1.default.appendFileSync(logFilePath, existingLogs);
569
- console.log(`[Server_Docker] Captured ${existingLogs.length} bytes of existing logs for ${serviceName}`);
570
- }
571
- // Also try to capture the container exit code if it has exited
572
- this.captureContainerExitCode(serviceName, reportDir);
573
- }
574
- catch (error) {
575
- // It's okay if this fails - the container might not exist yet
576
- console.debug(`[Server_Docker] No existing logs for ${serviceName}: ${error.message}`);
577
- }
578
- }
579
- async waitForContainerHealthy(containerName, timeoutMs) {
580
- const startTime = Date.now();
581
- const checkInterval = 2000; // Check every 2 seconds
582
- // while (Date.now() - startTime < timeoutMs) {
583
- // try {
584
- // // Use docker inspect to check container health status
585
- // const cmd = `docker inspect --format="{{.State.Health.Status}}" ${containerName}`;
586
- // const { exec } = require('child_process');
587
- // const { promisify } = require('util');
588
- // const execAsync = promisify(exec);
589
- // const { stdout, stderr } = await execAsync(cmd);
590
- // const healthStatus = stdout.trim();
591
- // if (healthStatus === 'healthy') {
592
- // console.log(`[Server_Docker] Container ${containerName} is healthy`);
593
- // return;
594
- // } else if (healthStatus === 'unhealthy') {
595
- // throw new Error(`Container ${containerName} is unhealthy`);
596
- // } else {
597
- // console.log(`[Server_Docker] Container ${containerName} health status: ${healthStatus}`);
598
- // }
599
- // } catch (error: any) {
600
- // // Container might not exist yet or command failed
601
- // console.log(`[Server_Docker] Waiting for container ${containerName} to be healthy...`);
602
- // }
603
- // // Wait before checking again
604
- // await new Promise(resolve => setTimeout(resolve, checkInterval));
605
- // }
606
- // throw new Error(`Timeout waiting for container ${containerName} to become healthy`);
607
- }
608
- async stop() {
609
- console.log(`[Server_Docker] stop()`);
610
- // Stop all log processes first
611
- for (const [containerId, logProcess] of this.logProcesses.entries()) {
612
- try {
613
- logProcess.process.kill('SIGTERM');
614
- console.log(`[Server_Docker] Stopped log process for container ${containerId} (${logProcess.serviceName})`);
615
- }
616
- catch (error) {
617
- console.error(`[Server_Docker] Error stopping log process for ${containerId}:`, error);
618
- }
619
- }
620
- this.logProcesses.clear();
621
- const result = await this.DC_down();
622
- if (result.exitCode !== 0) {
623
- console.error(`Docker Compose down failed: ${result.err}`);
624
- }
625
- super.stop();
626
- }
627
- async setupDockerCompose() {
628
- // First, ensure all necessary directories exist
629
- const composeDir = path_1.default.join(process.cwd(), "testeranto", "bundles");
630
- try {
631
- // Setup directories
632
- fs_1.default.mkdirSync(composeDir, { recursive: true });
633
- // Generate Dockerfiles for each runtime
634
- // Note: runtimes needs to be defined - we'll get it from config
635
- // const runtimes: IRunTime[] = ["node", "web", "golang", "python", "ruby"];
636
- // deprecated
637
- // this.generateRuntimeDockerfiles(config, runtimes, composeDir, log, error);
638
- const services = this.generateServices(
639
- // config,
640
- );
641
- this.writeComposeFile(services);
642
- }
643
- catch (err) {
644
- console.error(`Error in setupDockerCompose:`, err);
645
- throw err;
646
- }
647
- }
648
- writeComposeFile(services) {
649
- const dockerComposeFileContents = this.BaseCompose(services);
650
- fs_1.default.writeFileSync('testeranto/docker-compose.yml', js_yaml_1.default.dump(dockerComposeFileContents, {
651
- lineWidth: -1,
652
- noRefs: true,
653
- }));
654
- }
655
- async exec(cmd, options) {
656
- const execAsync = (0, util_1.promisify)(child_process_1.exec);
657
- return execAsync(cmd, { cwd: options.cwd });
658
- }
659
- spawnPromise(command) {
660
- return new Promise((resolve, reject) => {
661
- console.log(`[spawnPromise] Executing: ${command}`);
662
- // Use shell: true to let the shell handle command parsing (including quotes)
663
- const child = (0, child_process_1.spawn)(command, {
664
- stdio: 'inherit',
665
- shell: true,
666
- // cwd: this.dockerManager.cwd
667
- });
668
- child.on('error', (error) => {
669
- console.error(`[spawnPromise] Failed to start process: ${error.message}`);
670
- reject(error);
671
- });
672
- child.on('close', (code) => {
673
- if (code === 0) {
674
- console.log(`[spawnPromise] Process completed successfully`);
675
- resolve(code);
676
- }
677
- else {
678
- console.error(`[spawnPromise] Process exited with code ${code}`);
679
- reject(new Error(`Process exited with code ${code}`));
680
- }
681
- });
682
- });
683
- }
684
- async DC_upAll() {
685
- try {
686
- const cmd = this.getUpCommand();
687
- await this.spawnPromise(cmd);
688
- return {
689
- exitCode: 0,
690
- out: '',
691
- err: '',
692
- data: null,
693
- };
694
- }
695
- catch (error) {
696
- console.error(`[Docker] docker compose up ❌ ${ansi_colors_1.default.bgBlue(error.message.replaceAll('\\n', '\n'))}`);
697
- return {
698
- exitCode: 1,
699
- out: '',
700
- err: `Error starting services: ${error.message}`,
701
- data: null,
702
- };
703
- }
704
- }
705
- async DC_down() {
706
- try {
707
- const cmd = this.getDownCommand();
708
- await this.spawnPromise(cmd);
709
- return {
710
- exitCode: 0,
711
- out: "",
712
- err: "",
713
- data: null,
714
- };
715
- }
716
- catch (error) {
717
- console.log(`[DC_down] Error during down: ${error.message}`);
718
- return {
719
- exitCode: 1,
720
- out: "",
721
- err: `Error stopping services: ${error.message}`,
722
- data: null,
723
- };
724
- }
725
- }
726
- async DC_ps() {
727
- try {
728
- const cmd = this.getPsCommand();
729
- const { stdout, stderr } = await this.exec(cmd, {
730
- // cwd: this.dockerManager.cwd
731
- });
732
- return {
733
- exitCode: 0,
734
- out: stdout,
735
- err: stderr,
736
- data: null,
737
- };
738
- }
739
- catch (error) {
740
- return {
741
- exitCode: 1,
742
- out: "",
743
- err: `Error getting service status: ${error.message}`,
744
- data: null,
745
- };
746
- }
747
- }
748
- async DC_logs(serviceName, options) {
749
- var _a;
750
- const tail = (_a = options === null || options === void 0 ? void 0 : options.tail) !== null && _a !== void 0 ? _a : 100;
751
- try {
752
- const cmd = this.getLogsCommand(serviceName, tail);
753
- const { stdout, stderr } = await this.exec(cmd, {
754
- // cwd: this.dockerManager.cwd
755
- });
756
- return {
757
- exitCode: 0,
758
- out: stdout,
759
- err: stderr,
760
- data: null,
761
- };
762
- }
763
- catch (error) {
764
- return {
765
- exitCode: 1,
766
- out: "",
767
- err: `Error getting logs for ${serviceName}: ${error.message}`,
768
- data: null,
769
- };
770
- }
771
- }
772
- async DC_configServices() {
773
- try {
774
- const cmd = this.getConfigServicesCommand();
775
- const { stdout, stderr } = await this.exec(cmd, {
776
- // cwd: this.dockerManager.cwd
777
- });
778
- return {
779
- exitCode: 0,
780
- out: stdout,
781
- err: stderr,
782
- data: null,
783
- };
784
- }
785
- catch (error) {
786
- return {
787
- exitCode: 1,
788
- out: "",
789
- err: `Error getting services from config: ${error.message}`,
790
- data: null,
791
- };
792
- }
793
- }
794
- async DC_start() {
795
- try {
796
- const startCommand = this.getStartCommand();
797
- await this.spawnPromise(startCommand);
798
- return {
799
- exitCode: 0,
800
- data: null,
801
- };
802
- }
803
- catch (error) {
804
- console.error(`[Docker] docker compose start ❌ ${ansi_colors_1.default.bgBlue(error.message.replaceAll('\\n', '\n'))}`);
805
- return {
806
- exitCode: 1,
807
- data: null,
808
- };
809
- }
810
- }
811
- async DC_build() {
812
- try {
813
- const buildCommand = this.getBuildCommand();
814
- await this.spawnPromise(buildCommand);
815
- console.log(`[DC_build] Build completed successfully`);
816
- return {
817
- exitCode: 0,
818
- out: '',
819
- err: '',
820
- data: null,
821
- };
822
- }
823
- catch (error) {
824
- console.error(`[Docker] docker-compose build ❌ ${ansi_colors_1.default.bgBlue(error.message.replaceAll('\\n', '\n'))}`);
825
- return {
826
- exitCode: 1,
827
- out: '',
828
- err: `Error building services: ${error.message}`,
829
- data: null,
830
- };
831
- }
832
- }
833
- getProcessSummary() {
834
- console.log(`[Server_Docker] getProcessSummary called`);
835
- try {
836
- // Get running containers
837
- const output = (0, child_process_1.execSync)('docker ps --format "{{.Names}}|{{.Image}}|{{.Status}}|{{.Ports}}|{{.State}}|{{.Command}}"').toString();
838
- const processes = output.trim().split('\n').filter(line => line.trim()).map(line => {
839
- const parts = line.split('|');
840
- const [name, image, status, ports, state, command] = parts;
841
- // Try to get exit code for stopped containers
842
- let exitCode = null;
843
- try {
844
- // Check if container exists (including stopped ones)
845
- const inspectCmd = `docker inspect --format='{{.State.ExitCode}}' ${name} 2>/dev/null || echo ""`;
846
- const exitCodeStr = (0, child_process_1.execSync)(inspectCmd).toString().trim();
847
- if (exitCodeStr !== '') {
848
- exitCode = parseInt(exitCodeStr, 10);
849
- // Only include exit code if container is not running
850
- if (state === 'running') {
851
- exitCode = null;
852
- }
853
- }
854
- }
855
- catch (error) {
856
- // Container might not exist, which is fine
857
- }
858
- return {
859
- processId: name,
860
- command: command || image,
861
- image: image,
862
- timestamp: new Date().toISOString(),
863
- status: status,
864
- state: state,
865
- ports: ports,
866
- exitCode: exitCode,
867
- // Add additional fields that might be useful for the frontend
868
- runtime: this.getRuntimeFromName(name),
869
- health: 'unknown' // We could add health check status here
870
- };
871
- });
872
- return {
873
- processes: processes,
874
- total: processes.length,
875
- timestamp: new Date().toISOString()
876
- };
877
- }
878
- catch (error) {
879
- console.error(`[Server_Docker] Error getting docker processes: ${error.message}`);
880
- return {
881
- processes: [],
882
- total: 0,
883
- timestamp: new Date().toISOString(),
884
- error: error.message
885
- };
886
- }
887
- }
888
- getRuntimeFromName(name) {
889
- if (name.includes('node'))
890
- return 'node';
891
- if (name.includes('web'))
892
- return 'web';
893
- if (name.includes('golang'))
894
- return 'golang';
895
- if (name.includes('python'))
896
- return 'python';
897
- if (name.includes('ruby'))
898
- return 'ruby';
899
- if (name.includes('browser'))
900
- return 'browser';
901
- return 'unknown';
902
- }
903
- }
904
- exports.Server_Docker = Server_Docker;