@glubean/runner 0.2.2 → 0.2.4
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/dist/bootstrap.d.ts +84 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +169 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/env.d.ts +103 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +134 -0
- package/dist/env.js.map +1 -0
- package/dist/harness.d.ts +0 -13
- package/dist/harness.d.ts.map +1 -1
- package/dist/harness.js +62 -6
- package/dist/harness.js.map +1 -1
- package/dist/index.d.ts +72 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +78 -5
- package/dist/index.js.map +1 -1
- package/dist/project-runner.d.ts +174 -0
- package/dist/project-runner.d.ts.map +1 -0
- package/dist/project-runner.js +202 -0
- package/dist/project-runner.js.map +1 -0
- package/package.json +3 -2
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module project-runner
|
|
3
|
+
*
|
|
4
|
+
* `ProjectRunner` — single top-level API for "run the tests of a project".
|
|
5
|
+
*
|
|
6
|
+
* Wraps the orchestration primitives (`loadProjectEnv`, `bootstrap`,
|
|
7
|
+
* `RunOrchestrator`, `TestExecutor`) into one coherent pipeline with a
|
|
8
|
+
* well-typed event stream. Consumers (CLI, MCP, VSCode extension,
|
|
9
|
+
* third-party embedders) all go through this facade rather than re-
|
|
10
|
+
* assembling the primitives themselves.
|
|
11
|
+
*
|
|
12
|
+
* **Scope boundary:**
|
|
13
|
+
* - Facade does: env load → bootstrap → per-file-batched TestExecutor
|
|
14
|
+
* loop with session setup/teardown, metric recording
|
|
15
|
+
* - Facade does NOT: console presentation, trace-file writing, upload,
|
|
16
|
+
* result.json formatting, CI-specific flag guards, summary judgment.
|
|
17
|
+
* Consumers build their own summary by observing events.
|
|
18
|
+
*
|
|
19
|
+
* Batching is fixed at per-file batched (one tsx subprocess per file,
|
|
20
|
+
* all of that file's testIds batched into `TestExecutor.run(fileUrl, "",
|
|
21
|
+
* ctx, {testIds})`).
|
|
22
|
+
*/
|
|
23
|
+
import { resolve } from "node:path";
|
|
24
|
+
import { pathToFileURL } from "node:url";
|
|
25
|
+
import { bootstrap } from "./bootstrap.js";
|
|
26
|
+
import { TestExecutor } from "./executor.js";
|
|
27
|
+
import { discoverSessionFile, RunOrchestrator, } from "./orchestrator.js";
|
|
28
|
+
import { MetricCollector } from "./thresholds.js";
|
|
29
|
+
import { toSingleExecutionOptions } from "./config.js";
|
|
30
|
+
// =============================================================================
|
|
31
|
+
// ProjectRunner
|
|
32
|
+
// =============================================================================
|
|
33
|
+
export class ProjectRunner {
|
|
34
|
+
options;
|
|
35
|
+
constructor(options) {
|
|
36
|
+
this.options = options;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Run the full pipeline as an async event stream.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* const runner = new ProjectRunner({...});
|
|
44
|
+
* for await (const event of runner.run()) {
|
|
45
|
+
* switch (event.type) { ... }
|
|
46
|
+
* }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
async *run() {
|
|
50
|
+
const { rootDir, sharedConfig, vars: envVars, secrets, tests, noSession = false, interactive = false, signal, } = this.options;
|
|
51
|
+
const sessionStartDir = this.options.sessionStartDir ?? rootDir;
|
|
52
|
+
const metricCollector = this.options.metricCollector ?? new MetricCollector();
|
|
53
|
+
// ── 1. Bootstrap ─────────────────────────────────────────────────
|
|
54
|
+
yield { type: "bootstrap:start", projectRoot: rootDir };
|
|
55
|
+
try {
|
|
56
|
+
await bootstrap(rootDir);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
60
|
+
yield { type: "bootstrap:failed", error };
|
|
61
|
+
yield { type: "run:failed", reason: "bootstrap-failed", error: error.message };
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
yield { type: "bootstrap:done" };
|
|
65
|
+
// ── 3. Group tests by file (per-file batching) ───────────────────
|
|
66
|
+
const fileGroups = new Map();
|
|
67
|
+
for (const t of tests) {
|
|
68
|
+
const group = fileGroups.get(t.filePath) || [];
|
|
69
|
+
group.push(t);
|
|
70
|
+
fileGroups.set(t.filePath, group);
|
|
71
|
+
}
|
|
72
|
+
yield { type: "discovery:done", totalFiles: fileGroups.size, totalTests: tests.length };
|
|
73
|
+
// ── 4. Build executor (shared across all files) ──────────────────
|
|
74
|
+
const executor = this.options.executor ?? TestExecutor.fromSharedConfig(sharedConfig, {
|
|
75
|
+
cwd: rootDir,
|
|
76
|
+
...(this.options.inspectBrk !== undefined && { inspectBrk: this.options.inspectBrk }),
|
|
77
|
+
});
|
|
78
|
+
const orchestrator = new RunOrchestrator(executor);
|
|
79
|
+
const sessionState = {};
|
|
80
|
+
let sessionSetupSucceeded = false;
|
|
81
|
+
// Wrap all post-executor-construction work in try/finally so the
|
|
82
|
+
// executor's own cleanup path (zero-project scratch teardown, any
|
|
83
|
+
// future finalizers) always runs — even on early return from
|
|
84
|
+
// session-setup failure or signal abort. This also covers the case
|
|
85
|
+
// where the generator is abandoned by its caller (iterator .return()
|
|
86
|
+
// triggers the finally block).
|
|
87
|
+
try {
|
|
88
|
+
// ── 5. Session setup ───────────────────────────────────────────
|
|
89
|
+
const sessionFile = noSession ? undefined : discoverSessionFile(sessionStartDir, rootDir);
|
|
90
|
+
yield { type: "session:discovered", sessionFile };
|
|
91
|
+
if (sessionFile) {
|
|
92
|
+
yield { type: "session:setup:start", sessionFile };
|
|
93
|
+
let setupFailed = false;
|
|
94
|
+
let failureInfo;
|
|
95
|
+
for await (const event of orchestrator.runSessionSetup(sessionFile, { vars: envVars, secrets, interactive }, toSingleExecutionOptions(sharedConfig))) {
|
|
96
|
+
if (event.type === "session:set") {
|
|
97
|
+
sessionState[event.key] = event.value;
|
|
98
|
+
}
|
|
99
|
+
else if (event.type === "status" && event.status === "failed") {
|
|
100
|
+
setupFailed = true;
|
|
101
|
+
failureInfo = { error: event.error, stack: event.stack };
|
|
102
|
+
}
|
|
103
|
+
yield { type: "session:setup:event", event };
|
|
104
|
+
}
|
|
105
|
+
if (setupFailed) {
|
|
106
|
+
yield { type: "session:setup:failed", ...(failureInfo ?? {}) };
|
|
107
|
+
// Best-effort teardown before bailing.
|
|
108
|
+
yield { type: "session:teardown:start", sessionFile };
|
|
109
|
+
for await (const event of orchestrator.runSessionTeardown(sessionFile, { vars: envVars, secrets }, sessionState, toSingleExecutionOptions(sharedConfig))) {
|
|
110
|
+
yield { type: "session:teardown:event", event };
|
|
111
|
+
}
|
|
112
|
+
yield { type: "session:teardown:done" };
|
|
113
|
+
yield {
|
|
114
|
+
type: "run:failed",
|
|
115
|
+
reason: "session-setup-failed",
|
|
116
|
+
...(failureInfo?.error !== undefined && { error: failureInfo.error }),
|
|
117
|
+
};
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
sessionSetupSucceeded = true;
|
|
121
|
+
yield { type: "session:setup:done", stateKeys: Object.keys(sessionState) };
|
|
122
|
+
}
|
|
123
|
+
// ── 6. File loop (per-file batched) ────────────────────────────
|
|
124
|
+
let passedCount = 0;
|
|
125
|
+
let failedCount = 0;
|
|
126
|
+
let skippedCount = 0;
|
|
127
|
+
const failureLimit = sharedConfig.failAfter ??
|
|
128
|
+
(sharedConfig.failFast ? 1 : undefined);
|
|
129
|
+
for (const [filePath, fileTests] of fileGroups) {
|
|
130
|
+
if (signal?.aborted)
|
|
131
|
+
break;
|
|
132
|
+
if (failureLimit !== undefined && failedCount >= failureLimit)
|
|
133
|
+
break;
|
|
134
|
+
const testFileUrl = pathToFileURL(resolve(filePath)).href;
|
|
135
|
+
const testIds = fileTests.map((t) => t.meta.id);
|
|
136
|
+
const exportNames = {};
|
|
137
|
+
for (const t of fileTests)
|
|
138
|
+
exportNames[t.meta.id] = t.exportName;
|
|
139
|
+
yield { type: "file:start", filePath, testCount: fileTests.length };
|
|
140
|
+
const fileStart = Date.now();
|
|
141
|
+
for await (const event of executor.run(testFileUrl, "", {
|
|
142
|
+
vars: envVars,
|
|
143
|
+
secrets,
|
|
144
|
+
...(Object.keys(sessionState).length > 0 && { session: sessionState }),
|
|
145
|
+
}, {
|
|
146
|
+
...toSingleExecutionOptions(sharedConfig),
|
|
147
|
+
testIds,
|
|
148
|
+
exportNames,
|
|
149
|
+
...(fileTests.some((t) => t.meta.parallel) && sharedConfig.concurrency > 1
|
|
150
|
+
? { concurrency: sharedConfig.concurrency }
|
|
151
|
+
: {}),
|
|
152
|
+
})) {
|
|
153
|
+
if (event.type === "session:set") {
|
|
154
|
+
sessionState[event.key] = event.value;
|
|
155
|
+
}
|
|
156
|
+
if (event.type === "metric") {
|
|
157
|
+
metricCollector.add(event.name, event.value);
|
|
158
|
+
}
|
|
159
|
+
if (event.type === "status") {
|
|
160
|
+
if (event.status === "completed")
|
|
161
|
+
passedCount += 1;
|
|
162
|
+
else if (event.status === "skipped")
|
|
163
|
+
skippedCount += 1;
|
|
164
|
+
else
|
|
165
|
+
failedCount += 1;
|
|
166
|
+
}
|
|
167
|
+
yield { type: "file:event", filePath, event };
|
|
168
|
+
}
|
|
169
|
+
yield { type: "file:complete", filePath, duration: Date.now() - fileStart };
|
|
170
|
+
}
|
|
171
|
+
// ── 7. Session teardown ────────────────────────────────────────
|
|
172
|
+
if (sessionFile && sessionSetupSucceeded) {
|
|
173
|
+
yield { type: "session:teardown:start", sessionFile };
|
|
174
|
+
for await (const event of orchestrator.runSessionTeardown(sessionFile, { vars: envVars, secrets }, sessionState, toSingleExecutionOptions(sharedConfig))) {
|
|
175
|
+
yield { type: "session:teardown:event", event };
|
|
176
|
+
}
|
|
177
|
+
yield { type: "session:teardown:done" };
|
|
178
|
+
}
|
|
179
|
+
// ── 8. Done ────────────────────────────────────────────────────
|
|
180
|
+
yield { type: "run:complete", passedCount, failedCount, skippedCount };
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
// Drain executor.finalize() — zero-project scratch cleanup and any
|
|
184
|
+
// future executor-level finalizers. Safe to call even after session
|
|
185
|
+
// teardown already ran (executor.finalize() guards on _sessionSetupDone,
|
|
186
|
+
// which stays false when sessions are driven by RunOrchestrator rather
|
|
187
|
+
// than executor auto-session). Discard yielded events; this is pure
|
|
188
|
+
// cleanup, not part of the user-visible run.
|
|
189
|
+
try {
|
|
190
|
+
for await (const _ of executor.finalize()) {
|
|
191
|
+
// intentionally drain
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// Finalize errors are non-fatal — surface silently to avoid masking
|
|
196
|
+
// the primary run outcome. Could be upgraded to a warning event
|
|
197
|
+
// later if needed.
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=project-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-runner.js","sourceRoot":"","sources":["../src/project-runner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@glubean/runner",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -16,10 +16,11 @@
|
|
|
16
16
|
"access": "public"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
+
"dotenv": "^16.4.0",
|
|
19
20
|
"ky": "^1.14.0",
|
|
20
21
|
"p-queue": "^9.1.0",
|
|
21
22
|
"tsx": "^4.19.0",
|
|
22
|
-
"@glubean/sdk": "0.2.
|
|
23
|
+
"@glubean/sdk": "0.2.2"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
|
25
26
|
"@types/node": "^22.0.0",
|