testeranto 0.221.6 → 0.222.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 (102) hide show
  1. package/Gemfile +0 -15
  2. package/README.md +14 -3
  3. package/bundle.js +16 -1
  4. package/dist/prebuild/testeranto.mjs +119 -18
  5. package/dist/ruby/ruby.rb +66 -0
  6. package/dist/vscode/extension.mjs +212 -44
  7. package/package.json +3 -3
  8. package/src/lib/pitono/PM/__pycache__/python.cpython-311.pyc +0 -0
  9. package/src/lib/pitono/PM/__pycache__/python.cpython-312.pyc +0 -0
  10. package/src/lib/pitono/PM/__pycache__/python.cpython-313.pyc +0 -0
  11. package/src/lib/pitono/__pycache__/Pitono.cpython-311.pyc +0 -0
  12. package/src/lib/pitono/__pycache__/Pitono.cpython-312.pyc +0 -0
  13. package/src/lib/pitono/__pycache__/Pitono.cpython-313.pyc +0 -0
  14. package/src/lib/pitono/__pycache__/__init__.cpython-311.pyc +0 -0
  15. package/src/lib/pitono/__pycache__/__init__.cpython-312.pyc +0 -0
  16. package/src/lib/pitono/__pycache__/__init__.cpython-313.pyc +0 -0
  17. package/src/lib/pitono/__pycache__/base_given.cpython-311.pyc +0 -0
  18. package/src/lib/pitono/__pycache__/base_given.cpython-312.pyc +0 -0
  19. package/src/lib/pitono/__pycache__/base_given.cpython-313.pyc +0 -0
  20. package/src/lib/pitono/__pycache__/base_suite.cpython-311.pyc +0 -0
  21. package/src/lib/pitono/__pycache__/base_suite.cpython-312.pyc +0 -0
  22. package/src/lib/pitono/__pycache__/base_suite.cpython-313.pyc +0 -0
  23. package/src/lib/pitono/__pycache__/base_then.cpython-311.pyc +0 -0
  24. package/src/lib/pitono/__pycache__/base_then.cpython-312.pyc +0 -0
  25. package/src/lib/pitono/__pycache__/base_then.cpython-313.pyc +0 -0
  26. package/src/lib/pitono/__pycache__/base_when.cpython-311.pyc +0 -0
  27. package/src/lib/pitono/__pycache__/base_when.cpython-312.pyc +0 -0
  28. package/src/lib/pitono/__pycache__/base_when.cpython-313.pyc +0 -0
  29. package/src/lib/pitono/__pycache__/core_generator.cpython-313.pyc +0 -0
  30. package/src/lib/pitono/__pycache__/simple_adapter.cpython-311.pyc +0 -0
  31. package/src/lib/pitono/__pycache__/simple_adapter.cpython-312.pyc +0 -0
  32. package/src/lib/pitono/__pycache__/simple_adapter.cpython-313.pyc +0 -0
  33. package/src/lib/pitono/__pycache__/types.cpython-311.pyc +0 -0
  34. package/src/lib/pitono/__pycache__/types.cpython-312.pyc +0 -0
  35. package/src/lib/pitono/__pycache__/types.cpython-313.pyc +0 -0
  36. package/src/lib/rubeno/README.md +4 -0
  37. package/src/lib/rubeno/bin/rubeno +1 -1
  38. package/src/lib/rubeno/lib/base_given.rb +9 -2
  39. package/src/lib/rubeno/lib/base_then.rb +2 -1
  40. package/src/lib/rubeno/lib/base_when.rb +2 -1
  41. package/src/lib/rubeno/lib/rubeno.rb +72 -10
  42. package/src/lib/rubeno/lib/simple_adapter.rb +1 -1
  43. package/src/lib/rubeno/rubeno-0.0.10.gem +0 -0
  44. package/src/lib/rubeno/rubeno-0.0.12.gem +0 -0
  45. package/src/lib/rubeno/rubeno-0.0.13.gem +0 -0
  46. package/src/lib/rubeno/rubeno-0.0.14.gem +0 -0
  47. package/src/lib/rubeno/rubeno-0.0.15.gem +0 -0
  48. package/src/lib/rubeno/rubeno-0.0.16.gem +0 -0
  49. package/src/lib/rubeno/rubeno-0.0.7.gem +0 -0
  50. package/src/lib/rubeno/rubeno-0.0.8.gem +0 -0
  51. package/src/lib/rubeno/rubeno-0.0.9.gem +0 -0
  52. package/src/lib/rubeno/rubeno.gemspec +3 -3
  53. package/src/lib/rubeno/rubeno.rb +3 -0
  54. package/src/lib/rubeno/tests/test_rubeno.rb +2 -2
  55. package/src/lib/rusto/target/debug/build/serde-8c1d9d91744ef37e/out/private.rs +6 -0
  56. package/src/lib/rusto/target/debug/build/serde_core-5bdb8f80c9f636ec/out/private.rs +5 -0
  57. package/src/lib/rusto/target/package/rusto-0.1.0/target/debug/build/serde_core-5bdb8f80c9f636ec/out/private.rs +5 -0
  58. package/src/server/runtimes/node/docker.ts +1 -25
  59. package/src/server/runtimes/ruby/docker.ts +6 -2
  60. package/src/server/runtimes/ruby/ruby.rb +63 -43
  61. package/src/server/serverClasees/Server_Docker.ts +157 -26
  62. package/src/server/serverClasees/Server_HTTP.ts +5 -2
  63. package/src/vscode/README.md +0 -12
  64. package/src/vscode/extension.ts +90 -7
  65. package/src/vscode/providers/TestTreeDataProvider.ts +172 -40
  66. package/testeranto/runtimes/python/__pycache__/python.cpython-311.pyc +0 -0
  67. package/src/lib/tiposkripto/dist/common/Types.js +0 -2
  68. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/BaseGiven.js +0 -96
  69. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/BaseSuite.js +0 -134
  70. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/BaseThen.js +0 -65
  71. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/BaseTiposkripto.js +0 -194
  72. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/BaseWhen.js +0 -46
  73. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/CoreTypes.js +0 -2
  74. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/Node.js +0 -40
  75. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/Web.js +0 -70
  76. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/index.js +0 -86
  77. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/types.js +0 -6
  78. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/MockGiven.js +0 -22
  79. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/MockThen.js +0 -16
  80. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/MockWhen.js +0 -18
  81. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/adapter.js +0 -24
  82. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/implementation.js +0 -38
  83. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/index.js +0 -17
  84. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/specification.js +0 -19
  85. package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/types.js +0 -2
  86. package/src/lib/tiposkripto/dist/common/package.json +0 -3
  87. package/src/lib/tiposkripto/dist/common/tsconfig.common.tsbuildinfo +0 -1
  88. package/src/lib/tiposkripto/dist/module/index.js +0 -693
  89. package/src/lib/tiposkripto/dist/module/package.json +0 -3
  90. package/src/lib/tiposkripto/dist/types/Types.d.ts +0 -67
  91. package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/BaseGiven.d.ts +0 -42
  92. package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/BaseSuite.d.ts +0 -46
  93. package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/BaseThen.d.ts +0 -28
  94. package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/BaseTiposkripto.d.ts +0 -35
  95. package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/BaseWhen.d.ts +0 -27
  96. package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/CoreTypes.d.ts +0 -55
  97. package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/Node.d.ts +0 -9
  98. package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/Web.d.ts +0 -9
  99. package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/index.d.ts +0 -8
  100. package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/types.d.ts +0 -60
  101. package/src/lib/tiposkripto/dist/types/tsconfig.types.tsbuildinfo +0 -1
  102. package/testeranto/allTests.json +0 -71
package/Gemfile CHANGED
@@ -1,18 +1,3 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rubeno', '0.0.5'
4
-
5
- # Add any required gems here
6
- # For now, we'll keep it minimal
7
- gem 'json', '~> 2.6'
8
- source 'https://rubygems.org'
9
-
10
- # Add any required gems here
11
- # For now, we'll keep it minimal
12
1
  gem 'json', '~> 2.6'
13
2
  source 'https://rubygems.org'
14
3
 
15
- # Add any required gems here
16
- # For now, we'll keep it minimal
17
- gem 'json', '~> 2.6'
18
-
package/README.md CHANGED
@@ -9,15 +9,26 @@ In more conrete terms, testeranto is
9
9
  - a VS code extension
10
10
  - integrates static tests, unit tests, integration tests and source code into focused Aider sessions.
11
11
  - turns github issues, BDD specs and markdown documentation into packaged artifacts and human readable test reports.
12
- - a library of code split across 7 packages
13
12
 
14
- 1) testeranto (the server) npm - https://www.npmjs.com/package/testeranto
13
+ - a library of code split across 7 languages and 2 purposes
14
+
15
+ ## the server
16
+
17
+ testeranto.ts - the server
18
+ testeranto.rb
19
+ testeranto.py
20
+ testeranto.golang
21
+ testeranto.java
22
+ testeranto.rust
23
+
24
+ ## libraries
25
+
15
26
  2) tiposkripto (ts) npm
16
27
  3) rusto (rust) cargo
17
28
  4) pitono (python) pypi
18
29
  5) golingvu (go) TBD
19
30
  6) kafe (java) TBD
20
- 7) rubeno (ruby ) rubygems - https://rubygems.org/gems/rubeno
31
+ 7) rubeno (ruby ) rubygems
21
32
 
22
33
  ## Philosophy
23
34
 
package/bundle.js CHANGED
@@ -54,7 +54,6 @@ try {
54
54
 
55
55
  // Copy media files for webview
56
56
 
57
-
58
57
  const mediaDir = 'media';
59
58
  const distMediaDir = 'dist/vscode/media';
60
59
 
@@ -74,3 +73,19 @@ for (const file of mediaFiles) {
74
73
  console.warn(`Media file not found: ${src}`);
75
74
  }
76
75
  }
76
+
77
+ // Copy Ruby artifact to dist/ruby folder
78
+ const rubySrcPath = 'src/server/runtimes/ruby/ruby.rb';
79
+ const rubyDistDir = 'dist/ruby';
80
+ const rubyDestPath = path.join(rubyDistDir, 'ruby.rb');
81
+
82
+ if (!fs.existsSync(rubyDistDir)) {
83
+ fs.mkdirSync(rubyDistDir, { recursive: true });
84
+ }
85
+
86
+ if (fs.existsSync(rubySrcPath)) {
87
+ fs.copyFileSync(rubySrcPath, rubyDestPath);
88
+ console.log(`Copied Ruby artifact from ${rubySrcPath} to ${rubyDestPath}`);
89
+ } else {
90
+ console.warn(`Ruby source file not found: ${rubySrcPath}`);
91
+ }
@@ -83,6 +83,7 @@ var nodeDockerComposeFile = (config, container_name, projectConfigPath, nodeConf
83
83
  environment: {
84
84
  NODE_ENV: "production",
85
85
  ENV: "node",
86
+ // <- important
86
87
  ...config.env
87
88
  },
88
89
  working_dir: "/workspace",
@@ -149,13 +150,13 @@ var rubyDockerComposeFile = (config, container_name, projectConfigPath, rubyConf
149
150
  `${process.cwd()}/src:/workspace/src`,
150
151
  `${process.cwd()}/example:/workspace/example`,
151
152
  `${process.cwd()}/dist:/workspace/dist`,
152
- `${process.cwd()}/testeranto:/workspace/testeranto`
153
+ `${process.cwd()}/../../testeranto:/workspace/testeranto`
153
154
  ],
154
155
  command: rubyBuildCommand(projectConfigPath, rubyConfigPath, testName)
155
156
  };
156
157
  };
157
158
  var rubyBuildCommand = (projectConfigPath, rubyConfigPath, testName) => {
158
- return `bundle exec rubeno /workspace/testeranto/testeranto.ts /workspace/${rubyConfigPath} ${testName}`;
159
+ return `ruby /workspace/testeranto/src/server/runtimes/ruby/ruby.rb /workspace/${rubyConfigPath} ${testName}`;
159
160
  };
160
161
  var rubyBddCommand = (fpath) => {
161
162
  const jsonStr = JSON.stringify({ ports: [1111] });
@@ -515,8 +516,9 @@ var Server_HTTP = class extends Server_Base {
515
516
  async start() {
516
517
  console.log(`[Server_HTTP] start()`);
517
518
  super.start();
519
+ const port = 3e3;
518
520
  return new Promise((resolve) => {
519
- this.httpServer.on("listening", () => {
521
+ this.httpServer.listen(port, () => {
520
522
  const addr = this.httpServer.address();
521
523
  console.log(`[HTTP] HTTP server is now listening on ${addr}`);
522
524
  resolve();
@@ -1064,26 +1066,26 @@ ${x}
1064
1066
  `;
1065
1067
  }
1066
1068
  getUpCommand() {
1067
- return `docker compose up -d`;
1069
+ return `docker compose -f "testeranto/docker-compose.yml" up -d`;
1068
1070
  }
1069
1071
  getDownCommand() {
1070
- return `docker compose down -v --remove-orphans`;
1072
+ return `docker compose -f "testeranto/docker-compose.yml" down -v --remove-orphans`;
1071
1073
  }
1072
1074
  getPsCommand() {
1073
- return `docker compose ps`;
1075
+ return `docker compose -f "testeranto/docker-compose.yml" ps`;
1074
1076
  }
1075
1077
  getLogsCommand(serviceName, tail = 100) {
1076
- const base = `docker compose logs --no-color --tail=${tail}`;
1078
+ const base = `docker compose -f "testeranto/docker-compose.yml" logs --no-color --tail=${tail}`;
1077
1079
  return serviceName ? `${base} ${serviceName}` : base;
1078
1080
  }
1079
1081
  getConfigServicesCommand() {
1080
- return `docker compose config --services`;
1082
+ return `docker compose -f "testeranto/docker-compose.yml" config --services`;
1081
1083
  }
1082
1084
  getBuildCommand() {
1083
- return `docker compose build`;
1085
+ return `docker compose -f "testeranto/docker-compose.yml" build`;
1084
1086
  }
1085
1087
  getStartCommand() {
1086
- return `docker compose start`;
1088
+ return `docker compose -f "testeranto/docker-compose.yml" start`;
1087
1089
  }
1088
1090
  // private async waitForContainerExists(serviceName: string, maxAttempts: number = 30, delayMs: number = 1000): Promise<boolean> {
1089
1091
  // for (let attempt = 1; attempt <= maxAttempts; attempt++) {
@@ -1138,7 +1140,8 @@ ${x}
1138
1140
  console.log(`[Server_Docker] Starting log capture for ${serviceName} to ${logFilePath}`);
1139
1141
  const logStream = fs2.createWriteStream(logFilePath, { flags: "a" });
1140
1142
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
1141
- logStream.write(`=== Log started at ${timestamp} for service ${serviceName} ===
1143
+ logStream.write(`
1144
+ === Log started at ${timestamp} for service ${serviceName} ===
1142
1145
 
1143
1146
  `);
1144
1147
  const child = spawn("bash", ["-c", logScript], {
@@ -1220,8 +1223,17 @@ ${x}
1220
1223
  }
1221
1224
  async start() {
1222
1225
  console.log(`[Server_Docker] start()`);
1223
- super.start();
1224
- await this.setupDockerCompose();
1226
+ try {
1227
+ await super.start();
1228
+ } catch (error) {
1229
+ console.error(`[Server_Docker] Error in super.start():`, error);
1230
+ }
1231
+ this.writeConfigForExtension();
1232
+ try {
1233
+ await this.setupDockerCompose();
1234
+ } catch (error) {
1235
+ console.error(`[Server_Docker] Error in setupDockerCompose():`, error);
1236
+ }
1225
1237
  const baseReportsDir = path2.join(process.cwd(), "testeranto", "reports");
1226
1238
  try {
1227
1239
  fs2.mkdirSync(baseReportsDir, { recursive: true });
@@ -1231,20 +1243,31 @@ ${x}
1231
1243
  }
1232
1244
  console.log(`[Server_Docker] Dropping everything...`);
1233
1245
  try {
1234
- const downCmd = `docker compose -f "testeranto/docker-compose.yml" down -v --remove-orphans`;
1246
+ const downCmd = this.getDownCommand();
1235
1247
  console.log(`[Server_Docker] Running: ${downCmd}`);
1236
1248
  await this.spawnPromise(downCmd);
1237
1249
  console.log(`[Server_Docker] Docker compose down completed`);
1238
1250
  } catch (error) {
1239
1251
  console.log(`[Server_Docker] Docker compose down noted: ${error.message}`);
1240
1252
  }
1253
+ console.log(`[Server_Docker] Rebuilding all services...`);
1254
+ try {
1255
+ const buildResult = await this.DC_build();
1256
+ if (buildResult.exitCode !== 0) {
1257
+ console.error(`[Server_Docker] Build failed: ${buildResult.err}`);
1258
+ } else {
1259
+ console.log(`[Server_Docker] Build completed successfully`);
1260
+ }
1261
+ } catch (error) {
1262
+ console.error(`[Server_Docker] Build error: ${error.message}`);
1263
+ }
1241
1264
  for (const runtime of RUN_TIMES) {
1242
1265
  const serviceName = `${runtime}-builder`;
1243
1266
  console.log(`[Server_Docker] Starting builder service: ${serviceName}`);
1244
1267
  try {
1245
1268
  await this.spawnPromise(`docker compose -f "testeranto/docker-compose.yml" up -d ${serviceName}`);
1269
+ await this.captureExistingLogs(serviceName, runtime);
1246
1270
  this.startServiceLogging(serviceName, runtime).catch((error) => console.error(`[Server_Docker] Failed to start logging for ${serviceName}:`, error));
1247
- this.captureExistingLogs(serviceName, runtime);
1248
1271
  } catch (error) {
1249
1272
  console.error(`[Server_Docker] Failed to start ${serviceName}: ${error.message}`);
1250
1273
  }
@@ -1267,8 +1290,8 @@ ${x}
1267
1290
  console.log(`[Server_Docker] Starting aider service: ${aiderServiceName} for test ${testName}`);
1268
1291
  try {
1269
1292
  await this.spawnPromise(`docker compose -f "testeranto/docker-compose.yml" up -d ${aiderServiceName}`);
1293
+ await this.captureExistingLogs(aiderServiceName, runtime);
1270
1294
  this.startServiceLogging(aiderServiceName, runtime).catch((error) => console.error(`[Server_Docker] Failed to start logging for ${aiderServiceName}:`, error));
1271
- this.captureExistingLogs(aiderServiceName, runtime).catch((error) => console.error(`[Server_Docker] Failed to capture existing logs for ${aiderServiceName}:`, error));
1272
1295
  } catch (error) {
1273
1296
  console.error(`[Server_Docker] Failed to start ${aiderServiceName}: ${error.message}`);
1274
1297
  }
@@ -1284,8 +1307,8 @@ ${x}
1284
1307
  console.log(`[Server_Docker] Starting BDD service: ${bddServiceName}, ${configKey}, ${configValue}`);
1285
1308
  try {
1286
1309
  await this.spawnPromise(`docker compose -f "testeranto/docker-compose.yml" up -d ${bddServiceName}`);
1310
+ await this.captureExistingLogs(bddServiceName, runtime);
1287
1311
  this.startServiceLogging(bddServiceName, runtime).catch((error) => console.error(`[Server_Docker] Failed to start logging for ${bddServiceName}:`, error));
1288
- this.captureExistingLogs(bddServiceName, runtime).catch((error) => console.error(`[Server_Docker] Failed to capture existing logs for ${bddServiceName}:`, error));
1289
1312
  } catch (error) {
1290
1313
  console.error(`[Server_Docker] Failed to start ${bddServiceName}: ${error.message}`);
1291
1314
  this.captureExistingLogs(bddServiceName, runtime).catch((err) => console.error(`[Server_Docker] Also failed to capture logs:`, err));
@@ -1348,8 +1371,10 @@ ${x}
1348
1371
  // 10MB
1349
1372
  });
1350
1373
  if (existingLogs && existingLogs.trim().length > 0) {
1351
- fs2.appendFileSync(logFilePath, existingLogs);
1374
+ fs2.writeFileSync(logFilePath, existingLogs);
1352
1375
  console.log(`[Server_Docker] Captured ${existingLogs.length} bytes of existing logs for ${serviceName}`);
1376
+ } else {
1377
+ fs2.writeFileSync(logFilePath, "");
1353
1378
  }
1354
1379
  this.captureContainerExitCode(serviceName, reportDir);
1355
1380
  } catch (error) {
@@ -1390,6 +1415,82 @@ ${x}
1390
1415
  throw err;
1391
1416
  }
1392
1417
  }
1418
+ writeConfigForExtension() {
1419
+ try {
1420
+ const configDir = path2.join(process.cwd(), "testeranto");
1421
+ const configPath = path2.join(configDir, "extension-config.json");
1422
+ if (!fs2.existsSync(configDir)) {
1423
+ fs2.mkdirSync(configDir, { recursive: true });
1424
+ console.log(`[Server_Docker] Created directory: ${configDir}`);
1425
+ }
1426
+ console.log(`[Server_Docker] Writing extension config to: ${configPath}`);
1427
+ console.log(`[Server_Docker] Current working directory: ${process.cwd()}`);
1428
+ console.log(`[Server_Docker] Configs runtimes exists: ${!!this.configs.runtimes}`);
1429
+ console.log(`[Server_Docker] Configs runtimes type: ${typeof this.configs.runtimes}`);
1430
+ if (this.configs.runtimes) {
1431
+ console.log(`[Server_Docker] Configs runtimes keys:`, Object.keys(this.configs.runtimes));
1432
+ }
1433
+ const runtimesArray = [];
1434
+ if (this.configs.runtimes && typeof this.configs.runtimes === "object") {
1435
+ for (const [key, value] of Object.entries(this.configs.runtimes)) {
1436
+ console.log(`[Server_Docker] Processing runtime key: ${key}`);
1437
+ console.log(`[Server_Docker] Runtime value type: ${typeof value}`, value);
1438
+ const runtimeObj = value;
1439
+ if (runtimeObj && typeof runtimeObj === "object") {
1440
+ const runtime = runtimeObj.runtime;
1441
+ const tests = runtimeObj.tests || [];
1442
+ console.log(`[Server_Docker] Found runtime: ${runtime}, tests:`, tests);
1443
+ if (runtime) {
1444
+ runtimesArray.push({
1445
+ key,
1446
+ runtime,
1447
+ label: this.getRuntimeLabel(runtime),
1448
+ tests: Array.isArray(tests) ? tests : []
1449
+ });
1450
+ } else {
1451
+ console.warn(`[Server_Docker] No runtime property found for key: ${key}`, runtimeObj);
1452
+ }
1453
+ } else {
1454
+ console.warn(`[Server_Docker] Invalid runtime configuration for key: ${key}, value type: ${typeof value}`);
1455
+ }
1456
+ }
1457
+ } else {
1458
+ console.warn(`[Server_Docker] No runtimes found in config`);
1459
+ }
1460
+ const configData = {
1461
+ runtimes: runtimesArray,
1462
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1463
+ source: "testeranto.ts",
1464
+ serverStarted: true
1465
+ };
1466
+ const configJson = JSON.stringify(configData, null, 2);
1467
+ fs2.writeFileSync(configPath, configJson);
1468
+ console.log(`[Server_Docker] Successfully wrote extension config to ${configPath} with ${runtimesArray.length} runtimes`);
1469
+ if (fs2.existsSync(configPath)) {
1470
+ const fileStats = fs2.statSync(configPath);
1471
+ console.log(`[Server_Docker] Config file exists, size: ${fileStats.size} bytes`);
1472
+ const fileContent = fs2.readFileSync(configPath, "utf-8");
1473
+ console.log(`[Server_Docker] Config file contents:`, fileContent);
1474
+ } else {
1475
+ console.error(`[Server_Docker] Config file was not created at ${configPath}`);
1476
+ }
1477
+ } catch (error) {
1478
+ console.error(`[Server_Docker] Failed to write extension config:`, error);
1479
+ console.error(`[Server_Docker] Error stack:`, error.stack);
1480
+ }
1481
+ }
1482
+ getRuntimeLabel(runtime) {
1483
+ const labels = {
1484
+ "node": "Node",
1485
+ "web": "Web",
1486
+ "python": "Python",
1487
+ "golang": "Golang",
1488
+ "ruby": "Ruby",
1489
+ "rust": "Rust",
1490
+ "java": "Java"
1491
+ };
1492
+ return labels[runtime] || runtime.charAt(0).toUpperCase() + runtime.slice(1);
1493
+ }
1393
1494
  writeComposeFile(services) {
1394
1495
  const dockerComposeFileContents = this.BaseCompose(services);
1395
1496
  fs2.writeFileSync(
@@ -0,0 +1,66 @@
1
+ require 'json'
2
+ require 'fileutils'
3
+
4
+ puts "hello ruby builder", ARGV
5
+
6
+ # config_file_path is a ruby file
7
+ config_file_path = ARGV[0]
8
+ # Ensure the config file path is valid before requiring
9
+ if File.exist?(config_file_path)
10
+ require config_file_path
11
+ else
12
+ puts "Config file not found: #{config_file_path}"
13
+ exit(1)
14
+ end
15
+
16
+ test_name = ARGV[1] || "allTests"
17
+
18
+ # Create necessary directories
19
+ input_files_path = "testeranto/bundles/allTests/ruby/example/Calculator.test.rb-inputFiles.json"
20
+ dummy_ruby_file_path = "testeranto/bundles/allTests/ruby/example/Calculator.test.rb"
21
+
22
+ # Ensure the directory exists
23
+ FileUtils.mkdir_p(File.dirname(input_files_path))
24
+ FileUtils.mkdir_p(File.dirname(dummy_ruby_file_path))
25
+
26
+ # Write input files JSON
27
+ input_files_content = {
28
+ testName: test_name,
29
+ configFile: config_file_path,
30
+ timestamp: Time.now.to_i
31
+ }
32
+ File.write(input_files_path, JSON.pretty_generate(input_files_content))
33
+
34
+ # Write a dummy Ruby file that executes the actual test
35
+ dummy_ruby_content = <<-RUBY
36
+ #!/usr/bin/env ruby
37
+ # This file is generated by the ruby builder
38
+ # It executes the actual Calculator test
39
+
40
+ require 'json'
41
+
42
+ # Build the test resource configuration
43
+ config = {
44
+ name: 'calculator-test',
45
+ fs: '.',
46
+ ports: [],
47
+ timeout: 30000,
48
+ retries: 0,
49
+ environment: {}
50
+ }.to_json
51
+
52
+ # Execute the test file directly with the configuration
53
+ exec("ruby", "../../../../../example/Calculator-test.rb", config)
54
+ RUBY
55
+
56
+ File.write(dummy_ruby_file_path, dummy_ruby_content)
57
+ File.chmod(0755, dummy_ruby_file_path)
58
+
59
+ puts "Generated test files:"
60
+ puts " - #{input_files_path}"
61
+ puts " - #{dummy_ruby_file_path}"
62
+
63
+ # Now execute the generated test file
64
+ puts "Executing test..."
65
+ system("ruby #{dummy_ruby_file_path}")
66
+ exit($?.exitstatus)