Skip to content

ci: run cargo test and the sidecar test in CI #12

Description

@smileygames

目的

CI が npm cicargo check しか実行していないため、追加された自動テストと型検査が一度も CI で走っていない。これらを CI に載せる。

前提

  • .github/workflows/ci.ymlcheck job は npm cicargo check --target x86_64-pc-windows-gnu のみ。
  • feat: route one human-to-agent message round trip through the room #7 で以下が追加された。
    • npm run sidecar:test — サイドカーの往復ハーネス
    • npm run sidecar:check — サイドカーの型検査
    • src-tauri/src/session.rs#[cfg(test)] テスト 3 本(.mcp.json のマージ保全)
  • npm run buildtsc && vite build)も CI では実行されていない。フロントエンドの型エラーが CI を素通りする。

実測で確定(2026-08-21)

  • node 側 3 ステップ(npm run build / sidecar:check / sidecar:test)は CI で pass する。
  • cargo test --lib --target x86_64-pc-windows-gnu は CI 環境でもテストバイナリが STATUS_ENTRYPOINT_NOT_FOUND0xc0000139)で起動しない。 コンパイルは成功する。ローカル環境固有ではないことが確定した(CI run 32431917979)。
  • 原因は、この crate の test バイナリが tauri 依存ツリー全体をリンクすることによる GNU ターゲット上の DLL エクスポート不一致と見られる。特定の依存クレートまでは切り分けていない。

採る対処(Master 合意済み、2026-08-21)

.mcp.json のマージ登録ロジックを tauri に依存しない別 crate へ切り出し、そこを cargo test の対象とする。

選択肢として MSVC ターゲットでのテスト実行と cargo test の CI 対象外化も検討したが、前者は依存ツリーの二重ビルドで CI 時間がほぼ倍になるうえアプリが出荷しないターゲットで検証することになり、後者は .mcp.json 書き換えという最も保険が要る箇所を無検証のまま残す。切り出しはテストを通すための細工ではなく、.mcp.json をマージするロジックが tauri を必要としていた依存の誤りを正す変更である。

制約

  • 切り出す対象は純粋ロジックに限る。tauri の State / AppHandle に触れる部分は src-tauri/src/ に残す。
  • 新 crate は src-tauri/ の外に置く。src-tauri/ 配下に置くとパッケージが入れ子になるため。既存の portable-pty-patch/ と同じ並びとする。
  • 既存の挙動を変えない。切り出しは配置の変更であり、仕様変更ではない。

対象ファイル

  • .github/workflows/ci.yml
  • crates/mcp-config/(新規)
  • src-tauri/src/session.rs — 切り出し後の呼び出しへ変更
  • src-tauri/src/room.rsSERVER_NAME の移動に伴う参照変更
  • src-tauri/Cargo.toml — 新 crate への path 依存
  • README.md — 主な構成の更新

完了条件

  • npm run buildnpm run sidecar:checknpm run sidecar:testcargo test が CI で実行され、pass する。
  • .mcp.json マージ保全のテストのアサーションが実際に実行されている。
  • cargo test が元の crate で実行不能だった理由と、採った対処が記録されている。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancement新機能・改善要望ready本文が実装開始できる形まで収束している状態。ただし更新は継続可能

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions