@c9up/helix-plugin-ream 0.1.5 → 0.1.7
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/runTests.d.ts +16 -0
- package/dist/runTests.d.ts.map +1 -1
- package/dist/runTests.js +6 -4
- package/dist/runTests.js.map +1 -1
- package/package.json +1 -1
- package/src/runTests.ts +31 -5
package/dist/runTests.d.ts
CHANGED
|
@@ -24,6 +24,22 @@ import type { TestsConfig } from "@c9up/ream";
|
|
|
24
24
|
export interface RunTestsOptions {
|
|
25
25
|
/** Project root the suites resolve against. Defaults to `process.cwd()`. */
|
|
26
26
|
root?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Watch for a run that finishes but leaves the process alive, and after a
|
|
29
|
+
* grace period say what is still open — then exit with the run's code.
|
|
30
|
+
*
|
|
31
|
+
* OFF by default, because it ends the process and this function is a
|
|
32
|
+
* library: it is called from a `bin/test.ts`, from a console command, and
|
|
33
|
+
* from tests of its own, and the documented contract is that the caller
|
|
34
|
+
* decides what to do with the returned code. Arming it unconditionally
|
|
35
|
+
* broke that — a caller's own runner was killed mid-run by an exit it never
|
|
36
|
+
* asked for.
|
|
37
|
+
*
|
|
38
|
+
* `ream test` turns it on: there the process IS the run, and a summary
|
|
39
|
+
* followed by an unexplained hang is worse than an exit that names what is
|
|
40
|
+
* still open.
|
|
41
|
+
*/
|
|
42
|
+
drainGuard?: boolean;
|
|
27
43
|
/**
|
|
28
44
|
* Suite names to run. Empty (the default) runs every declared suite, in
|
|
29
45
|
* order — the AdonisJS behaviour for `ream test` with no argument.
|
package/dist/runTests.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runTests.d.ts","sourceRoot":"","sources":["../src/runTests.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,YAAY,CAAC;AAG/D,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC/B,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,2DAA2D;AAC3D,qBAAa,iBAAkB,SAAQ,KAAK;gBAC/B,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;CAQ5C;AAED;;;;;;GAMG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;gBAC5C,KAAK,EAAE,MAAM,EAAE;CAU3B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CAEjE;AAkBD;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAC7B,KAAK,EAAE,WAAW,GAAG,SAAS,EAC9B,OAAO,GAAE,eAAoB,GAC3B,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"runTests.d.ts","sourceRoot":"","sources":["../src/runTests.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,YAAY,CAAC;AAG/D,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC/B,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,2DAA2D;AAC3D,qBAAa,iBAAkB,SAAQ,KAAK;gBAC/B,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;CAQ5C;AAED;;;;;;GAMG;AACH,qBAAa,8BAA+B,SAAQ,KAAK;gBAC5C,KAAK,EAAE,MAAM,EAAE;CAU3B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CAEjE;AAkBD;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAC7B,KAAK,EAAE,WAAW,GAAG,SAAS,EAC9B,OAAO,GAAE,eAAoB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAmHjB;AA2BD;;;GAGG;AACH,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,eAAoB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAmBjB"}
|
package/dist/runTests.js
CHANGED
|
@@ -98,6 +98,8 @@ export async function runTests(tests, options = {}) {
|
|
|
98
98
|
// Assigned either way: a second call in the same process must not inherit
|
|
99
99
|
// the first one's flag. A plugin reads it back off `api.cliArgs.forceExit`.
|
|
100
100
|
const forceExit = tests?.forceExit === true;
|
|
101
|
+
// Opt-in: this is a library, and the guard ends the process.
|
|
102
|
+
const drainGuard = options.drainGuard === true;
|
|
101
103
|
process.env.HELIX_FORCE_EXIT = forceExit ? "1" : "";
|
|
102
104
|
// Only named when a suite actually declares `configure`: pointing at it makes
|
|
103
105
|
// every worker import the rc file, which a project not using the callback
|
|
@@ -132,7 +134,7 @@ export async function runTests(tests, options = {}) {
|
|
|
132
134
|
if (selected.length === 0) {
|
|
133
135
|
try {
|
|
134
136
|
const outcome = await helix.run(base);
|
|
135
|
-
return finish(outcome.exitCode, forceExit, helix.armDrainGuard);
|
|
137
|
+
return finish(outcome.exitCode, forceExit, drainGuard ? helix.armDrainGuard : undefined);
|
|
136
138
|
}
|
|
137
139
|
finally {
|
|
138
140
|
await dropGlobalHooks();
|
|
@@ -162,11 +164,11 @@ export async function runTests(tests, options = {}) {
|
|
|
162
164
|
}
|
|
163
165
|
if (steps.length === 0) {
|
|
164
166
|
await dropGlobalHooks();
|
|
165
|
-
return finish(0, forceExit, helix.armDrainGuard);
|
|
167
|
+
return finish(0, forceExit, drainGuard ? helix.armDrainGuard : undefined);
|
|
166
168
|
}
|
|
167
169
|
try {
|
|
168
170
|
const outcome = await helix.runSuites(steps, base);
|
|
169
|
-
return finish(outcome.exitCode, forceExit, helix.armDrainGuard);
|
|
171
|
+
return finish(outcome.exitCode, forceExit, drainGuard ? helix.armDrainGuard : undefined);
|
|
170
172
|
}
|
|
171
173
|
finally {
|
|
172
174
|
await dropGlobalHooks();
|
|
@@ -189,7 +191,7 @@ function finish(code, forceExit, armDrainGuard) {
|
|
|
189
191
|
// further output, and under a CI timeout that is a non-zero exit for a run in
|
|
190
192
|
// which every test passed. helix's own CLI already said so; this entry point
|
|
191
193
|
// did not, and it is the one `ream test` goes through.
|
|
192
|
-
armDrainGuard(code);
|
|
194
|
+
armDrainGuard?.(code);
|
|
193
195
|
return code;
|
|
194
196
|
}
|
|
195
197
|
/**
|
package/dist/runTests.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runTests.js","sourceRoot":"","sources":["../src/runTests.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"runTests.js","sourceRoot":"","sources":["../src/runTests.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/runTests.ts
CHANGED
|
@@ -29,6 +29,22 @@ import { loadEnvFiles } from "@c9up/ream/env";
|
|
|
29
29
|
export interface RunTestsOptions {
|
|
30
30
|
/** Project root the suites resolve against. Defaults to `process.cwd()`. */
|
|
31
31
|
root?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Watch for a run that finishes but leaves the process alive, and after a
|
|
34
|
+
* grace period say what is still open — then exit with the run's code.
|
|
35
|
+
*
|
|
36
|
+
* OFF by default, because it ends the process and this function is a
|
|
37
|
+
* library: it is called from a `bin/test.ts`, from a console command, and
|
|
38
|
+
* from tests of its own, and the documented contract is that the caller
|
|
39
|
+
* decides what to do with the returned code. Arming it unconditionally
|
|
40
|
+
* broke that — a caller's own runner was killed mid-run by an exit it never
|
|
41
|
+
* asked for.
|
|
42
|
+
*
|
|
43
|
+
* `ream test` turns it on: there the process IS the run, and a summary
|
|
44
|
+
* followed by an unexplained hang is worse than an exit that names what is
|
|
45
|
+
* still open.
|
|
46
|
+
*/
|
|
47
|
+
drainGuard?: boolean;
|
|
32
48
|
/**
|
|
33
49
|
* Suite names to run. Empty (the default) runs every declared suite, in
|
|
34
50
|
* order — the AdonisJS behaviour for `ream test` with no argument.
|
|
@@ -148,6 +164,8 @@ export async function runTests(
|
|
|
148
164
|
// Assigned either way: a second call in the same process must not inherit
|
|
149
165
|
// the first one's flag. A plugin reads it back off `api.cliArgs.forceExit`.
|
|
150
166
|
const forceExit = tests?.forceExit === true;
|
|
167
|
+
// Opt-in: this is a library, and the guard ends the process.
|
|
168
|
+
const drainGuard = options.drainGuard === true;
|
|
151
169
|
process.env.HELIX_FORCE_EXIT = forceExit ? "1" : "";
|
|
152
170
|
|
|
153
171
|
// Only named when a suite actually declares `configure`: pointing at it makes
|
|
@@ -190,7 +208,11 @@ export async function runTests(
|
|
|
190
208
|
if (selected.length === 0) {
|
|
191
209
|
try {
|
|
192
210
|
const outcome = await helix.run(base);
|
|
193
|
-
return finish(
|
|
211
|
+
return finish(
|
|
212
|
+
outcome.exitCode,
|
|
213
|
+
forceExit,
|
|
214
|
+
drainGuard ? helix.armDrainGuard : undefined,
|
|
215
|
+
);
|
|
194
216
|
} finally {
|
|
195
217
|
await dropGlobalHooks();
|
|
196
218
|
}
|
|
@@ -224,12 +246,16 @@ export async function runTests(
|
|
|
224
246
|
}
|
|
225
247
|
if (steps.length === 0) {
|
|
226
248
|
await dropGlobalHooks();
|
|
227
|
-
return finish(0, forceExit, helix.armDrainGuard);
|
|
249
|
+
return finish(0, forceExit, drainGuard ? helix.armDrainGuard : undefined);
|
|
228
250
|
}
|
|
229
251
|
|
|
230
252
|
try {
|
|
231
253
|
const outcome = await helix.runSuites(steps, base);
|
|
232
|
-
return finish(
|
|
254
|
+
return finish(
|
|
255
|
+
outcome.exitCode,
|
|
256
|
+
forceExit,
|
|
257
|
+
drainGuard ? helix.armDrainGuard : undefined,
|
|
258
|
+
);
|
|
233
259
|
} finally {
|
|
234
260
|
await dropGlobalHooks();
|
|
235
261
|
}
|
|
@@ -244,7 +270,7 @@ export async function runTests(
|
|
|
244
270
|
function finish(
|
|
245
271
|
code: number,
|
|
246
272
|
forceExit: boolean,
|
|
247
|
-
armDrainGuard: (code: number) => void,
|
|
273
|
+
armDrainGuard: ((code: number) => void) | undefined,
|
|
248
274
|
): number {
|
|
249
275
|
if (forceExit) {
|
|
250
276
|
process.exitCode = code;
|
|
@@ -256,7 +282,7 @@ function finish(
|
|
|
256
282
|
// further output, and under a CI timeout that is a non-zero exit for a run in
|
|
257
283
|
// which every test passed. helix's own CLI already said so; this entry point
|
|
258
284
|
// did not, and it is the one `ream test` goes through.
|
|
259
|
-
armDrainGuard(code);
|
|
285
|
+
armDrainGuard?.(code);
|
|
260
286
|
return code;
|
|
261
287
|
}
|
|
262
288
|
|