Repository navigation
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
master 向けの PR が作られたり更新されたりしたときに、Claude Code が PR をレビューし、tatuharu のアカウントでレビューと返信を投稿するワークフローを追加します。これまで手元の環境で行っていた PR の監視・レビュー・実機検証・投稿を、GitHub Actions で行えるようにするためのものです。
変更後の挙動
pull_request_targetの opened・reopened・synchronize・ready_for_review と、PR 番号を指定するworkflow_dispatch。Draft、フォークからの PR、tatuharu が作った PR は対象外です。Asset/data/の中にあるときは、DevSpace の検証ランナー(Minecraft 1.20.4)で動作を確かめてから書きます。それ以外の変更を含む PR はコードを読むだけにします。CLAUDE_REVIEW_POSTをtrueにするまでは投稿せず、投稿する内容を実行結果の概要に出すだけです。設計
Claude が読む PR の本文・コメント・コードには、Claude への指示が仕込まれていることがあります。そのため、PR を読むジョブには GitHub への書き込み権限を渡さず、投稿は別のジョブが形式を検査してから行います。
CLAUDE_CODE_OAUTH_TOKENreview.jsonを書くCLAUDE_REVIEW_POST_TOKENreview.jsonを検査してから投稿する。Claude は動かさないpull_request_targetなので、動くのは master のワークフローです。PR の head はdevspace/Assetにデータとして取り出し、ランナーでは実行しません。サーバーがデータパックとして読むだけです。--restricted)で、書き込みはwork/の下だけ、コマンドはscripts/verify.shと yomiyasu の呼び出し口だけです。CLAUDE_CODE_SUBPROCESS_ENV_SCRUBで、Bash の子プロセスから認証情報の環境変数を消します。.github/claude-review/yomiyasu.pyで、渡すファイルをwork/の下に限ります。@メンション、トークンらしい文字列、返信先が AI のスレッドか、レビューした head が今の head と同じかを検査します。<!-- claude-review head=… diff=… -->を埋め込みます。変更ファイルとその内容が前回の投稿から変わっていなければ、レビューし直しません。この記録がないこれまでの AI レビューは、レビューの commit_id を前回の head とみなします。マージ後に必要な設定
claude-reviewを作り、配備ブランチを master に限ります。CLAUDE_CODE_OAUTH_TOKEN(claude setup-tokenで作るトークン)とCLAUDE_REVIEW_POST_TOKEN(tatuharu の fine-grained PAT。Asset の Pull requests の読み書きだけ)を置きます。CLAUDE_REVIEW_POSTをtrueにします。CLAUDE_CODE_OAUTH_TOKENは発行した人のサブスクリプションの利用枠を使います。利用枠の上限に達すると review ジョブが失敗するので、そのときはworkflow_dispatchで再実行します。GitHub Actions の実行時間は、公開リポジトリなので課金されません。検証
node --test .github/tests/claude-review.test.cjs(12件)で、collect の対象外の判定、データパックだけの変更かの判定、前回からの差分がないときの省略、強制 push 後の扱い、post の形式の検査、投稿しないときの表示、投稿時の記録の付与とアカウントの確認、yomiyasu の呼び出し口がwork/の外のファイルと標準入力を拒むことを確かめました。API と yomiyasu を置き換えた試験です。work/の外への書き込み、env・printenv、作業フォルダの外の読み取り、curl・python3 -c、git diff --outputなどの書き込みを伴う git は拒否され、許可した検証コマンドだけが通りました。CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1で、子プロセスから認証情報の環境変数が消えることも確かめました。GitHub Actions の上ではまだ動かしていません。ランナーでの検証サーバーの起動、CI でのトークンの利用、environment を master に限ったときに
pull_request_targetから secret を読めるかは、マージ後の投稿しない状態での実行で確かめます。