Ubuntu 26.04 で WebdriverIO のすべてのワーカーが「Error: write EINVAL」
ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。xvfb のパッケージは 2:21.1.12 から 2:21.1.22 に上がります(11月4日の Ubuntu のパッケージの一覧)。WebdriverIO v9 は、IPC のチャネルをファイルディスクリプタ 3 に置いて、各ワーカーを xvfb-run ... node として起動します。26.04 の xvfb-run は、実行するコマンドにそのディスクリプタを開いたまま渡しません。ワーカーがランチャーに送る最初のメッセージが失敗し、スペックは1つも始まりません(webdriverio #15685)。
どう見えるか
[0-0] Error: write EINVAL [0-0] at target._send (node:internal/child_process:878:20) [0-0] at target.send (node:internal/child_process:751:19) [0-0] at file:///home/runner/work/app/app/node_modules/@wdio/local-runner/build/run.js:18:11 Spec Files: 0 passed, 3 failed, 3 total (100% completed) in 00:00:05
どのワーカーも数秒のうちに同じように落ちるので、テストの結果が1つも無いまま、すべてのスペックのファイルが失敗と報告されます。WebdriverIO 自身の Jasmine のボイラープレートも、26.04 での最初の実行から落ちました(jasmine-boilerplate #1566)。
当てはまるもの
v9 のローカルのランナーは、Linux で DISPLAY が無いとき、また --headless のようなヘッドレスのブラウザのフラグを見つけたときに、ワーカーを xvfb-run で包みます(@wdio/xvfb)。GitHub がホストするランナーには DISPLAY が無いので、ヘッドレスの Chrome や Firefox でも、ローカルの画面をまったく使わない Appium やクラウドの capabilities でも、包まれます。
直し方:@wdio のパッケージをすべて 9.33.1 にする
9.33.1(11月3日)は、IPC のチャネルを xvfb-run が閉じるディスクリプタから外しました(webdriverio #16180)。@wdio/local-runner は @wdio/xvfb を自分と同じ版に固定しているので、ランナーを上げれば直しも入ります。@wdio/* のパッケージはすべて同じ版にそろえます。
npm install --save-dev @wdio/cli@9.33.1 @wdio/local-runner@9.33.1
使っているフレームワーク・レポーター・サービスのパッケージも同じコマンドに足します。落とし穴が2つあります:
- npm の
latestのタグは、まだバグのある 9.32.0 を指しています。9.33.x はv9のタグで公開されているので、npm install @wdio/local-runner@latestやnpm outdatedの「Latest」の列では 9.32.0 になります。版を書くか、@v9を使います。 - 9.33.1 は、対応する Node.js を2026年10月の CA ストアの修正が入った版に絞りました:18.20.8・20.20.2・22.23.4 以降の 22.x・24.22.1 以降の 24.x・26.12.1 以降(webdriverio #16218)。
actions/setup-nodeでnode-version: 24なら新しい 24.x が入ります。古いパッチの版に固定していると条件を満たさず、enginesを守らせるパッケージマネージャーではインストールが止まります。
上げずに避ける方法
- ヘッドレスのスイート:
wdio.confにautoXvfb: falseを書きます。ヘッドレスのブラウザは X サーバーが要らず、ランナーはワーカーを普通のforkで起動します。 - 画面が要るスイート:ランナーより前に画面を用意して
DISPLAYを設定すると、ワーカーは包まれません。たとえばコマンド全体をxvfb-run --auto-servernum npx wdio run wdio.conf.jsで実行するか、Xvfb :99 -screen 0 1280x1024x24 &を始めてDISPLAY=:99を設定します。 - テストのジョブを
runs-on: ubuntu-24.04にする。GitHub がそのイメージを終えるまでは使えます。
11月4日の時点で alpha の v10 は、@wdio/xvfb を @wdio/display-server に置き換えていて、webdriverio #15685 のコメントによれば、これで直ります。
見分け方
- スタックトレースが
@wdio/local-runner/build/run.jsで終わり、数秒でSpec Files: 0 passedが出るなら、これです。ブラウザが起動したあとで落ちるスペックは別の問題です。 - 自分のスクリプトでも同じことが起きます。
stdioに'ipc'を入れてxvfb-run node child.jsを起動する Node.js のプログラムは、26.04 では子の最初のprocess.sendでwrite EINVALになります。issue に2ファイルの再現があり、xvfb-runを通さないforkはどちらのイメージでも動きます。 - 「Set up job」の Runner Image のグループにイメージが出ます。11月19日までは、再実行が 24.04 に当たって通ることがあるので、再実行が緑でも何も確かめたことになりません。
ほかの 26.04 の失敗
- Ubuntu 26.04 の pg_dump 18:イメージと apt の PostgreSQL が 18 なので、ダンプが
SET transaction_timeout = 0で始まり、PostgreSQL 16 のサービスが「unrecognized configuration parameter」で断ります。 - Ubuntu 26.04 の Docker で Postgres が起動しない:7.0.0-42 などの新しいカーネルはコンテナのプロセスを
docker-default//&unconfinedとして動かすので、プロセスどうしでシグナルを送れず、gosuが CPU 100% で止まります。いまのところ報告はセルフホストのランナーです。 - Ubuntu 26.04 でビルドしたあとの「version `GLIBC_2.43' not found」:glibc が 2.43 なので、そこでビルドしたバイナリは
GLIBC_2.42やGLIBC_2.43を求めて Ubuntu 24.04・Debian 13 やそれより古い環境で起動しないことがあります。リリースは古いイメージでビルドし、CI で下限を確かめます。 - Ubuntu 26.04 の Playwright:Playwright 1.50〜1.60 は「does not support chromium on ubuntu26.04-x64」と出します。
- Ubuntu 26.04 の apt:名前が変わった・無くなったパッケージ。
- 「coreutils: unknown program」:基本のコマンドのほとんどが uutils です。
失敗したジョブを IntelliJ IDEA から見るなら
Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。
GitHub と GitHub Actions は GitHub, Inc. の商標、Ubuntu は Canonical Ltd. の商標、Node.js は OpenJS Foundation の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Canonical・OpenJS Foundation・WebdriverIO のプロジェクト・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · Ubuntu 26.04 の Playwright · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English