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.
- package/Gemfile +0 -15
- package/README.md +14 -3
- package/bundle.js +16 -1
- package/dist/prebuild/testeranto.mjs +119 -18
- package/dist/ruby/ruby.rb +66 -0
- package/dist/vscode/extension.mjs +212 -44
- package/package.json +3 -3
- package/src/lib/pitono/PM/__pycache__/python.cpython-311.pyc +0 -0
- package/src/lib/pitono/PM/__pycache__/python.cpython-312.pyc +0 -0
- package/src/lib/pitono/PM/__pycache__/python.cpython-313.pyc +0 -0
- package/src/lib/pitono/__pycache__/Pitono.cpython-311.pyc +0 -0
- package/src/lib/pitono/__pycache__/Pitono.cpython-312.pyc +0 -0
- package/src/lib/pitono/__pycache__/Pitono.cpython-313.pyc +0 -0
- package/src/lib/pitono/__pycache__/__init__.cpython-311.pyc +0 -0
- package/src/lib/pitono/__pycache__/__init__.cpython-312.pyc +0 -0
- package/src/lib/pitono/__pycache__/__init__.cpython-313.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_given.cpython-311.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_given.cpython-312.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_given.cpython-313.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_suite.cpython-311.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_suite.cpython-312.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_suite.cpython-313.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_then.cpython-311.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_then.cpython-312.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_then.cpython-313.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_when.cpython-311.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_when.cpython-312.pyc +0 -0
- package/src/lib/pitono/__pycache__/base_when.cpython-313.pyc +0 -0
- package/src/lib/pitono/__pycache__/core_generator.cpython-313.pyc +0 -0
- package/src/lib/pitono/__pycache__/simple_adapter.cpython-311.pyc +0 -0
- package/src/lib/pitono/__pycache__/simple_adapter.cpython-312.pyc +0 -0
- package/src/lib/pitono/__pycache__/simple_adapter.cpython-313.pyc +0 -0
- package/src/lib/pitono/__pycache__/types.cpython-311.pyc +0 -0
- package/src/lib/pitono/__pycache__/types.cpython-312.pyc +0 -0
- package/src/lib/pitono/__pycache__/types.cpython-313.pyc +0 -0
- package/src/lib/rubeno/README.md +4 -0
- package/src/lib/rubeno/bin/rubeno +1 -1
- package/src/lib/rubeno/lib/base_given.rb +9 -2
- package/src/lib/rubeno/lib/base_then.rb +2 -1
- package/src/lib/rubeno/lib/base_when.rb +2 -1
- package/src/lib/rubeno/lib/rubeno.rb +72 -10
- package/src/lib/rubeno/lib/simple_adapter.rb +1 -1
- package/src/lib/rubeno/rubeno-0.0.10.gem +0 -0
- package/src/lib/rubeno/rubeno-0.0.12.gem +0 -0
- package/src/lib/rubeno/rubeno-0.0.13.gem +0 -0
- package/src/lib/rubeno/rubeno-0.0.14.gem +0 -0
- package/src/lib/rubeno/rubeno-0.0.15.gem +0 -0
- package/src/lib/rubeno/rubeno-0.0.16.gem +0 -0
- package/src/lib/rubeno/rubeno-0.0.7.gem +0 -0
- package/src/lib/rubeno/rubeno-0.0.8.gem +0 -0
- package/src/lib/rubeno/rubeno-0.0.9.gem +0 -0
- package/src/lib/rubeno/rubeno.gemspec +3 -3
- package/src/lib/rubeno/rubeno.rb +3 -0
- package/src/lib/rubeno/tests/test_rubeno.rb +2 -2
- package/src/lib/rusto/target/debug/build/serde-8c1d9d91744ef37e/out/private.rs +6 -0
- package/src/lib/rusto/target/debug/build/serde_core-5bdb8f80c9f636ec/out/private.rs +5 -0
- package/src/lib/rusto/target/package/rusto-0.1.0/target/debug/build/serde_core-5bdb8f80c9f636ec/out/private.rs +5 -0
- package/src/server/runtimes/node/docker.ts +1 -25
- package/src/server/runtimes/ruby/docker.ts +6 -2
- package/src/server/runtimes/ruby/ruby.rb +63 -43
- package/src/server/serverClasees/Server_Docker.ts +157 -26
- package/src/server/serverClasees/Server_HTTP.ts +5 -2
- package/src/vscode/README.md +0 -12
- package/src/vscode/extension.ts +90 -7
- package/src/vscode/providers/TestTreeDataProvider.ts +172 -40
- package/testeranto/runtimes/python/__pycache__/python.cpython-311.pyc +0 -0
- package/src/lib/tiposkripto/dist/common/Types.js +0 -2
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/BaseGiven.js +0 -96
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/BaseSuite.js +0 -134
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/BaseThen.js +0 -65
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/BaseTiposkripto.js +0 -194
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/BaseWhen.js +0 -46
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/CoreTypes.js +0 -2
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/Node.js +0 -40
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/Web.js +0 -70
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/index.js +0 -86
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/src/types.js +0 -6
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/MockGiven.js +0 -22
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/MockThen.js +0 -16
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/MockWhen.js +0 -18
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/adapter.js +0 -24
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/implementation.js +0 -38
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/index.js +0 -17
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/specification.js +0 -19
- package/src/lib/tiposkripto/dist/common/lib/tiposkripto/tests/abstractBase.test/types.js +0 -2
- package/src/lib/tiposkripto/dist/common/package.json +0 -3
- package/src/lib/tiposkripto/dist/common/tsconfig.common.tsbuildinfo +0 -1
- package/src/lib/tiposkripto/dist/module/index.js +0 -693
- package/src/lib/tiposkripto/dist/module/package.json +0 -3
- package/src/lib/tiposkripto/dist/types/Types.d.ts +0 -67
- package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/BaseGiven.d.ts +0 -42
- package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/BaseSuite.d.ts +0 -46
- package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/BaseThen.d.ts +0 -28
- package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/BaseTiposkripto.d.ts +0 -35
- package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/BaseWhen.d.ts +0 -27
- package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/CoreTypes.d.ts +0 -55
- package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/Node.d.ts +0 -9
- package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/Web.d.ts +0 -9
- package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/index.d.ts +0 -8
- package/src/lib/tiposkripto/dist/types/lib/tiposkripto/src/types.d.ts +0 -60
- package/src/lib/tiposkripto/dist/types/tsconfig.types.tsbuildinfo +0 -1
- 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
|
-
|
|
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
|
|
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()}
|
|
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 `
|
|
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.
|
|
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(
|
|
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
|
-
|
|
1224
|
-
|
|
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 =
|
|
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.
|
|
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)
|