@wdio/local-runner 9.23.0 → 9.23.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,cAAc,MAAM,aAAa,CAAA;AAKxC,YAAY,EAAE,cAAc,EAAE,CAAA;AAE9B,MAAM,WAAW,OAAQ,SAAQ,OAAO,CAAC,gBAAgB;IACrD,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAA;IAC/B,GAAG,EAAE,MAAM,CAAA;CACd;AAED,MAAM,CAAC,OAAO,OAAO,WAAW;IASxB,OAAO,CAAC,QAAQ;IAChB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM;IATxC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAK;IAC/C,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,WAAW,CAAa;IAEhC,MAAM,uBAA2C;IACjD,MAAM,uBAA2C;gBAGrC,QAAQ,EAAE,KAAK,EACb,MAAM,EAAE,WAAW,CAAC,MAAM;IAaxC;;OAEG;IACG,UAAU;IAIhB,cAAc;IAIR,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,EAAE,OAAO;IA4BtD;;OAEG;YACW,cAAc;IAsB5B;;;;;OAKG;IACG,QAAQ;CA0DjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAErD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,cAAc,MAAM,aAAa,CAAA;AAKxC,YAAY,EAAE,cAAc,EAAE,CAAA;AAE9B,MAAM,WAAW,OAAQ,SAAQ,OAAO,CAAC,gBAAgB;IACrD,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAA;IAC/B,GAAG,EAAE,MAAM,CAAA;CACd;AAED,MAAM,CAAC,OAAO,OAAO,WAAW;IASxB,OAAO,CAAC,QAAQ;IAChB,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM;IATxC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAK;IAC/C,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,WAAW,CAAa;IAEhC,MAAM,uBAA2C;IACjD,MAAM,uBAA2C;gBAGrC,QAAQ,EAAE,KAAK,EACb,MAAM,EAAE,WAAW,CAAC,MAAM;IAaxC;;OAEG;IACG,UAAU;IAIhB,cAAc;IAIR,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,EAAE,OAAO;IA4BtD;;OAEG;YACW,cAAc;IAsB5B;;;;;OAKG;IACG,QAAQ;CAgFjB"}
package/build/index.js CHANGED
@@ -299,6 +299,9 @@ var WorkerInstance = class extends EventEmitter {
299
299
  }
300
300
  if (payload.name === "sessionStarted") {
301
301
  this.isSetupResolver(true);
302
+ if (this.retries === -1 && payload.specFileRetries) {
303
+ this.retries = payload.specFileRetries - 1;
304
+ }
302
305
  if (payload.content.isMultiremote) {
303
306
  Object.assign(this, payload.content);
304
307
  } else {
@@ -336,6 +339,28 @@ var WorkerInstance = class extends EventEmitter {
336
339
  childProcess.kill("SIGTERM");
337
340
  }
338
341
  }
342
+ /**
343
+ * Forcefully kill the worker process.
344
+ * This is used when a worker doesn't respond to graceful shutdown
345
+ * (e.g., when a test times out with pending async operations).
346
+ *
347
+ * @param signal - The signal to send (default: 'SIGTERM', use 'SIGKILL' for force kill)
348
+ */
349
+ kill(signal = "SIGTERM") {
350
+ if (!this.childProcess) {
351
+ log.debug(`Worker ${this.cid} has no child process to kill`);
352
+ return;
353
+ }
354
+ log.info(`Killing worker ${this.cid} with ${signal}`);
355
+ try {
356
+ this.childProcess.kill(signal);
357
+ } catch (err) {
358
+ log.warn(`Failed to kill worker ${this.cid}:`, err);
359
+ }
360
+ delete this.childProcess;
361
+ this.isBusy = false;
362
+ this.isKilled = true;
363
+ }
339
364
  /**
340
365
  * sends message to sub process to execute functions in wdio-runner
341
366
  * @param command method to run in wdio-runner
@@ -439,6 +464,7 @@ var LocalRunner = class {
439
464
  */
440
465
  async shutdown() {
441
466
  log2.info("Shutting down spawned worker");
467
+ const workersToShutdown = [];
442
468
  for (const [cid, worker] of Object.entries(this.workerPool)) {
443
469
  const {
444
470
  capabilities,
@@ -461,10 +487,21 @@ var LocalRunner = class {
461
487
  delete this.workerPool[cid];
462
488
  continue;
463
489
  }
490
+ if (worker.isBusy) {
491
+ workersToShutdown.push([cid, worker]);
492
+ }
464
493
  await worker.postMessage("endSession", payload);
465
494
  }
466
495
  const shutdownResult = await new Promise((resolve) => {
467
- const timeout = setTimeout(resolve, SHUTDOWN_TIMEOUT);
496
+ const timeout = setTimeout(() => {
497
+ for (const [cid, worker] of workersToShutdown) {
498
+ if (worker.isBusy && !worker.isKilled) {
499
+ log2.warn(`Worker ${cid} did not shut down gracefully, force killing with SIGKILL`);
500
+ worker.kill("SIGKILL");
501
+ }
502
+ }
503
+ resolve(false);
504
+ }, SHUTDOWN_TIMEOUT);
468
505
  const interval = setInterval(() => {
469
506
  const busyWorker = Object.entries(this.workerPool).filter(
470
507
  ([, worker]) => worker.isBusy
package/build/run.js CHANGED
@@ -43,7 +43,7 @@ process.on("message", (m) => {
43
43
  }),
44
44
  (e) => {
45
45
  log.error(`Failed launching test session: ${e.stack}`);
46
- setTimeout(() => process.exit(1), 10);
46
+ setTimeout(() => gracefulExit(1), 10);
47
47
  }
48
48
  );
49
49
  });
package/build/worker.d.ts CHANGED
@@ -53,6 +53,14 @@ export default class WorkerInstance extends EventEmitter implements Workers.Work
53
53
  private _handleMessage;
54
54
  private _handleError;
55
55
  private _handleExit;
56
+ /**
57
+ * Forcefully kill the worker process.
58
+ * This is used when a worker doesn't respond to graceful shutdown
59
+ * (e.g., when a test times out with pending async operations).
60
+ *
61
+ * @param signal - The signal to send (default: 'SIGTERM', use 'SIGKILL' for force kill)
62
+ */
63
+ kill(signal?: NodeJS.Signals): void;
56
64
  /**
57
65
  * sends message to sub process to execute functions in wdio-runner
58
66
  * @param command method to run in wdio-runner
@@ -1 +1 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAmB1C;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAa,YAAW,OAAO,CAAC,MAAM;;IAC9E,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,WAAW,CAAC,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAElB,IAAI,EAAE,WAAW,CAAC,YAAY,CAAA;IAE9B,YAAY,EAAE,WAAW,CAAC,YAAY,CAAA;IACtC,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,MAAM,EAAE,oBAAoB,CAAA;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,cAAc,EAAE,MAAM,EAAE,CAAK;IAG7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB,MAAM,UAAQ;IACd,QAAQ,UAAQ;IAChB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACzB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACzB,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAW;IAC3E,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAW;IAE3E;;;;;;;;;;OAUG;gBAEC,MAAM,EAAE,WAAW,CAAC,MAAM,EAC1B,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,gBAAgB,EAC7E,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,WAAW;IAmB5B;;OAEG;IACG,YAAY;IA2DlB,OAAO,CAAC,cAAc;IAsDtB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,WAAW;IAkBnB;;;;OAIG;IACG,WAAW,CAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,aAAa,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CA0B7G"}
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAmB1C;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAa,YAAW,OAAO,CAAC,MAAM;;IAC9E,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,WAAW,CAAC,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;IAElB,IAAI,EAAE,WAAW,CAAC,YAAY,CAAA;IAE9B,YAAY,EAAE,WAAW,CAAC,YAAY,CAAA;IACtC,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,oBAAoB,CAAA;IAC5B,MAAM,EAAE,oBAAoB,CAAA;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,cAAc,EAAE,MAAM,EAAE,CAAK;IAG7B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACjD,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB,MAAM,UAAQ;IACd,QAAQ,UAAQ;IAChB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACzB,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACzB,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAW;IAC3E,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAW;IAE3E;;;;;;;;;;OAUG;gBAEC,MAAM,EAAE,WAAW,CAAC,MAAM,EAC1B,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,gBAAgB,EAC7E,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,WAAW;IAmB5B;;OAEG;IACG,YAAY;IA2DlB,OAAO,CAAC,cAAc;IAyDtB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,WAAW;IAkBnB;;;;;;OAMG;IACH,IAAI,CAAC,MAAM,GAAE,MAAM,CAAC,OAAmB,GAAG,IAAI;IAiB9C;;;;OAIG;IACG,WAAW,CAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,iBAAiB,EAAE,aAAa,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CA0B7G"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wdio/local-runner",
3
- "version": "9.23.0",
3
+ "version": "9.23.2",
4
4
  "description": "A WebdriverIO runner to run tests locally",
5
5
  "author": "Christian Bromann <mail@bromann.dev>",
6
6
  "homepage": "https://github.com/webdriverio/webdriverio/tree/main/packages/wdio-local-runner",
@@ -39,9 +39,9 @@
39
39
  "@types/node": "^20.1.0",
40
40
  "@wdio/logger": "9.18.0",
41
41
  "@wdio/repl": "9.16.2",
42
- "@wdio/runner": "9.23.0",
43
- "@wdio/types": "9.20.0",
44
- "@wdio/xvfb": "9.20.0",
42
+ "@wdio/runner": "9.23.2",
43
+ "@wdio/types": "9.23.2",
44
+ "@wdio/xvfb": "9.23.2",
45
45
  "exit-hook": "^4.0.0",
46
46
  "expect-webdriverio": "^5.3.4",
47
47
  "split2": "^4.1.0",
@@ -53,5 +53,5 @@
53
53
  "publishConfig": {
54
54
  "access": "public"
55
55
  },
56
- "gitHead": "5b35e4e2b94e3ac5247ec2bf27f2f5e41ef00372"
56
+ "gitHead": "3447f2744e52b367ad1164ff6a920924d830e4ee"
57
57
  }