Skip to content

ci: run the frontend build, sidecar tests, and cargo test on a tauri-free crate - #15

Merged
smileygames merged 2 commits into
mainfrom
issue-12-ci-tests
Aug 21, 2026
Merged

ci: run the frontend build, sidecar tests, and cargo test on a tauri-free crate#15
smileygames merged 2 commits into
mainfrom
issue-12-ci-tests

Conversation

@smileygames

@smileygames smileygames commented Aug 21, 2026

Copy link
Copy Markdown
Member

Closes #12

変更内容

CI

check job へ追加。

  • npm run buildtsc + vite build
  • npm run sidecar:check
  • npm run sidecar:test
  • cargo testcrates/mcp-config

cargo check は残した。cargo test の対象が別 crate になったため、アプリ本体のコンパイル検査はこちらが担う。

切り出し

.mcp.json への登録と起動フラグの検査を crates/mcp-config/(tauri 非依存)へ移動した。

なぜ切り出したか

当初は cargo test --libsrc-tauri で走らせたが、CI 環境でもテストバイナリが STATUS_ENTRYPOINT_NOT_FOUND0xc0000139)で起動しないことが確定した(run 32431917979)。ローカル環境固有ではない。test バイナリが tauri の依存ツリー全体をリンクすることによる GNU ターゲット上の不一致と見られる。特定の依存クレートまでは切り分けていない。

MSVC ターゲットでのテスト実行と cargo test の CI 対象外化も検討したが、前者は依存ツリーの二重ビルドで CI 時間がほぼ倍になるうえアプリが出荷しないターゲットで検証することになり、後者は .mcp.json 書き換えという最も保険が要る箇所を無検証で残す。

切り出しはテストを通すための細工ではない。.mcp.json をマージするロジックが tauri を必要とする理由はそもそも無く、依存の誤りを正す変更である。src-tauri/src/session.rs に残したのは tauri の State / AppHandle に触れる部分だけで、この境界は docs/0-requirements.md に明記した。

テストの増分

切り出しに伴い 3 本 → 8 本。

  • 再登録がエントリを蓄積しないこと
  • --flag=value 形式の非互換フラグを取りこぼさないこと
  • 起動フラグ server:<name>.mcp.json の登録名と一致していること

最後の 1 本は、同じ事実が二箇所にある状態のドリフトを固定するもの。ドリフトすると「何も届かない部屋」として現れ、原因が最も見えにくい。

CI 実行結果(run 32432567154

Test the sidecar round trip   # pass 1 / # fail 0
Test the mcp-config crate     running 8 tests
                              test result: ok. 8 passed; 0 failed

#7 で追加した Rust テストのアサーションが、これで初めて実行された。

影響範囲

CI とコードの配置のみ。アプリの挙動に変更なし。

release type

patch — 構造変更を含むが user/system observable な挙動変更はない。

CI が npm ci と cargo check しか実行しておらず、#7 で追加した自動テストと
型検査が一度も CI で走っていなかった。フロントエンドの型エラーも素通りする
状態だったため、以下を check job へ追加した。

- npm run build(tsc + vite build)
- npm run sidecar:check(サイドカーの型検査)
- npm run sidecar:test(サイドカーの往復ハーネス)
- cargo test --lib(.mcp.json マージ保全のテスト 3 本)

cargo check は残している。cargo test に包含されるが、コンパイル失敗を先に
落とすほうが失敗箇所が読みやすく、README と docs が案内している parity
コマンドでもあるため。

cargo test はローカル環境ではテストバイナリが STATUS_ENTRYPOINT_NOT_FOUND で
起動しない。CI 環境で起動するかはこの実行で確認する。

#12
@smileygames smileygames linked an issue Aug 21, 2026 that may be closed by this pull request
cargo test --lib は CI 環境でもテストバイナリが STATUS_ENTRYPOINT_NOT_FOUND
(0xc0000139) で起動しないことが確定した (run 32431917979)。ローカル環境固有
ではない。test バイナリが tauri の依存ツリー全体をリンクすることによる GNU
ターゲット上の不一致と見られる。

そのため .mcp.json への登録と起動フラグの検査を crates/mcp-config/ へ切り出し、
CI の cargo test はこの crate を対象にした。これらのロジックが tauri を必要と
する理由はそもそも無く、切り出しはテストを通すための細工ではなく依存の誤りを
正す変更である。

src-tauri/src/session.rs に残したのは tauri の State / AppHandle に触れる部分
だけ。純粋ロジックをそちらへ書き足すと書いた時点で検証不能になるため、その
境界を docs へ明記した。

切り出しに伴いテストは 3 本から 8 本へ増えた。再登録がエントリを蓄積しない
こと、--flag=value 形式の非互換フラグを取りこぼさないこと、起動フラグが
.mcp.json の登録名と一致していることを追加している。最後の 1 本は、同じ事実が
二箇所にある状態のドリフトを固定するもの。ドリフトすると「何も届かない部屋」
として現れ、原因が最も見えにくい。

crates/*/target/ を .gitignore へ追加。

#12
@smileygames smileygames changed the title ci: run the frontend build, sidecar tests, and cargo test ci: run the frontend build, sidecar tests, and cargo test on a tauri-free crate Aug 21, 2026

@smileygames smileygames left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AI self-review (execution_mode = auto)

受け入れ条件の照合(issue #12 完了条件)

条件 結果 根拠
npm run build / sidecar:check / sidecar:test / cargo test が CI で pass する pass run 32432567154 で全ステップ green
.mcp.json マージ保全のアサーションが実際に実行されている pass CI ログに running 8 tests / test result: ok. 8 passed; 0 failed
実行不能だった理由と採った対処が記録されている pass PR 本文、docs/0-requirements.md テストの配置節、commit body

制約の照合

  • 切り出しは純粋ロジックに限る: pass。State / AppHandle に触れる start_sessionsrc-tauri/src/session.rs に残した。
  • 新 crate は src-tauri/ の外: pass。crates/mcp-config/portable-pty-patch/ と同じ並び。
  • 既存の挙動を変えない: pass。移動と呼び出し形の変更のみ。register_sidecar の引数を RoomRegistration へまとめたが、書き込む JSON の内容は同一。
  • crates/*/target/.gitignore へ追加済み。ビルド成果物の混入なし。

検証

  • ローカル: cargo test(8 pass)、cargo check --target x86_64-pc-windows-gnunpm run buildnpm run sidecar:checknpm run sidecar:test
  • CI: 上記すべて pass。
  • 失敗側の観測も残っている(run 32431917979)。src-tauri 側の cargo test --lib が CI でも起動しないことは推測ではなく実測。

scope deviation

あり、ただし合意済み。#12 の当初の対象ファイルは .github/workflows/ci.yml のみだった。CI 実行の結果 cargo test が起動しないことが判明し、切り出しには src-tauri/ の変更が伴うため、実装を止めて Master に確認した。合意の上で issue 本文を書き換え、対象ファイルと採る対処を反映済み。

次の期待

execution_mode = auto のため人間レビューゲートなし。CI green(CI pass / check pass 4m24s)。self-review pass により squash merge へ進む。

@smileygames
smileygames merged commit 889ddf2 into main Aug 21, 2026
2 checks passed
@smileygames
smileygames deleted the issue-12-ci-tests branch August 21, 2026 00:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci: run cargo test and the sidecar test in CI

1 participant