こんにちは、タイミーでバックエンドのテックリードをしている新谷 (@euglena1215) です。
タイミーでは、 dependabot による依存ライブラリのアップデート PR に対して、Devin による自動レビューを導入しています。しかし、CI が失敗しているにもかかわらず、「本プロジェクトへの影響は低いと判断します」というコメントがついてしまうケースがありました。

これはレビュー時点では CI が完了しておらず、Devin がコードの差分だけを見てレビューしていたことが原因です。この問題を解決するために、CI 完了後にレビューを実施するよう、ワークフローを修正しました。
方法
従来の実装
従来は pull_request イベントの opened をトリガーにしていました。
on: pull_request: types: - opened
この場合、PR が作成された直後にレビューが開始されるため、CI の結果を考慮することができません。
改善後の実装
workflow_run イベントを使用して、CI ワークフローの完了をトリガーにするように変更しました。
on: workflow_run: workflows: ["ci branch"] types: - completed branches: - 'dependabot/**'
workflow_run イベントは別のワークフローの完了を待ってから実行されるため、CI の結果を含めたレビューが可能になります。

PR情報の取得
workflow_run イベントでは github.event.pull_request が使えないため、gh コマンドで PR 情報を取得する必要があります。
- name: Get PR info id: pr-info env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | PR_INFO=$(gh pr list \\ --repo my-org/my-repo \\ --head "${{ github.event.workflow_run.head_branch }}" \\ --state open \\ --json number,title,url \\ --jq '.[0]') if [ -z "$PR_INFO" ]; then echo "No open PR found for branch ${{ github.event.workflow_run.head_branch }}" echo "skip=true" >> "$GITHUB_OUTPUT" exit 0 fi { echo "skip=false" echo "number=$(echo "$PR_INFO" | jq -r '.number')" echo "title=$(echo "$PR_INFO" | jq -r '.title')" echo "url=$(echo "$PR_INFO" | jq -r '.url')" } >> "$GITHUB_OUTPUT"
ポイントは github.event.workflow_run.head_branch でブランチ名を取得し、そこから gh pr list で該当する PR を検索している点です。
CI結果の取得
CI の結果は github.event.workflow_run.conclusion で取得できます。さらに、失敗したジョブの一覧も取得してレビューの参考情報として渡しています。
- name: Get CI check results id: ci-checks run: | CI_CONCLUSION="${{ github.event.workflow_run.conclusion }}" echo "conclusion=${CI_CONCLUSION}" >> "$GITHUB_OUTPUT" # 失敗したジョブ一覧を取得 FAILED_JOBS=$(gh pr checks "$PR_NUMBER" \\ --repo my-org/my-repo \\ --json name,state \\ --jq '[.[] | select(.state == "FAILURE")] | map(.name) | join(", ")' \\ 2>/dev/null || echo "取得失敗")
これにより、Devin へのプロンプトに CI 結果と失敗したジョブ名を含めることができます。
- CI結果: ${CI_CONCLUSION}
- 失敗したジョブ: ${FAILED_JOBS:-なし}
レビュー指示にも CI 結果を考慮するよう追記しました。
- CI結果を確認し、失敗している場合はCIのログを読み込んで原因を分析する - CIが失敗している場合、ライブラリの更新が原因かどうかを判断する - CIが失敗している場合は、失敗の原因とマージ前に対応が必要かどうかを明記する
まとめ
workflow_run イベントを使うことで、CI 完了後に別のワークフローを実行できるようになります。dependabot PR の自動レビューのように、CI の結果を考慮したい処理に便利です。
ただし、pull_request イベントとは異なり PR 情報を直接取得できないため、gh コマンドで別途取得する必要がある点には注意が必要です。
参考: