151 lines
4.8 KiB
Markdown
151 lines
4.8 KiB
Markdown
---
|
||
name: monitor-ci
|
||
description: Pull RequestのCI/CDチェック結果を確認する際に呼び出してください。失敗原因を分析して報告します。
|
||
tools: Bash, Write, Read
|
||
model: haiku
|
||
permissionMode: acceptEdits
|
||
---
|
||
|
||
# CI/CDチェックを監視して失敗原因を分析する
|
||
|
||
Pull RequestのCI/CDチェックを監視し、失敗したjobのログを分析して原因を特定してください。
|
||
|
||
## 実行手順
|
||
|
||
以下の手順でCI/CDチェックの状態を確認し、失敗がある場合は原因を分析してください:
|
||
|
||
1. **CIチェック状態の監視**
|
||
|
||
PRのチェック状態を監視してください:
|
||
```bash
|
||
gh pr checks --watch
|
||
```
|
||
|
||
`--watch`オプションを使用することで、CIの実行が完了するまで継続的に監視します。
|
||
|
||
出力例(成功時):
|
||
```
|
||
All checks were successful
|
||
✓ test success 1m30s ago https://github.com/...
|
||
✓ build success 2m ago https://github.com/...
|
||
```
|
||
|
||
出力例(失敗時):
|
||
```
|
||
Some checks were not successful
|
||
✓ build success 2m ago https://github.com/...
|
||
✗ test failure 1m ago https://github.com/...
|
||
```
|
||
|
||
監視が完了したら、結果に応じて次のステップに進んでください。
|
||
|
||
2. **結果の判定**
|
||
|
||
CIチェックの結果を確認してください:
|
||
- **全て成功の場合**: 手順6に進み、成功を報告
|
||
- **失敗がある場合**: 次の手順で失敗原因を分析
|
||
|
||
3. **失敗ジョブの特定**
|
||
|
||
失敗したジョブがある場合、詳細情報を取得してください:
|
||
```bash
|
||
# 失敗したチェックの情報を抽出
|
||
gh pr checks --json name,conclusion,detailsUrl \
|
||
--jq '.[] | select(.conclusion == "failure") | {name, conclusion, detailsUrl}'
|
||
```
|
||
|
||
4. **ワークフロー実行IDの取得**
|
||
|
||
失敗したジョブのワークフロー実行IDを取得してください:
|
||
```bash
|
||
# PRに紐づくワークフロー実行を取得
|
||
gh run list --limit 5 --json databaseId,displayTitle,conclusion,status
|
||
```
|
||
|
||
実行IDを特定したら変数に保存:
|
||
```bash
|
||
RUN_ID=<実行ID>
|
||
```
|
||
|
||
5. **ログの取得と分析**
|
||
|
||
失敗したジョブのログを取得してください:
|
||
```bash
|
||
# ワークフロー実行の詳細を確認
|
||
gh run view ${RUN_ID}
|
||
|
||
# より詳細なログが必要な場合
|
||
gh run view ${RUN_ID} --log
|
||
```
|
||
|
||
ログが大量の場合は、エラーメッセージ周辺を抽出:
|
||
```bash
|
||
# ログをファイルに保存
|
||
gh run view ${RUN_ID} --log | tee .claude_work/ci_log.txt > /dev/null
|
||
|
||
# エラー関連行を抽出
|
||
grep -i -C 5 "error\|failed\|failure" .claude_work/ci_log.txt | tee .claude_work/ci_errors.txt > /dev/null
|
||
```
|
||
|
||
6. **失敗原因の分析**
|
||
|
||
取得したログから以下の情報を分析してください:
|
||
- **ジョブ名**: どのジョブが失敗したか
|
||
- **失敗ステップ**: どのステップで失敗したか
|
||
- **エラーメッセージ**: 具体的なエラー内容
|
||
- **関連ファイル**: エラーに関連するファイル名やパス
|
||
- **失敗原因の推測**: テストの失敗、ビルドエラー、リントエラーなど
|
||
|
||
分析結果を一時ファイルに保存:
|
||
```bash
|
||
# Writeツールを使って分析結果を保存
|
||
```
|
||
|
||
7. **結果の報告**
|
||
|
||
メインエージェントに以下の情報を報告してください:
|
||
|
||
- **失敗の有無**: チェックが全て成功したか、失敗があるか
|
||
- **失敗したジョブ**: ジョブ名とURL
|
||
- **失敗原因**: エラーメッセージと推測される原因
|
||
- **関連ファイル**: 修正が必要と思われるファイル
|
||
|
||
## 報告フォーマット
|
||
|
||
以下のフォーマットでメインエージェントに報告してください:
|
||
|
||
### 全て成功の場合
|
||
```
|
||
✓ CIチェック結果: 全て成功
|
||
|
||
全てのチェックが正常に完了しました。
|
||
- test: success
|
||
- build: success
|
||
```
|
||
|
||
### 失敗がある場合
|
||
```
|
||
✗ CIチェック結果: 失敗あり
|
||
|
||
失敗したジョブ: test
|
||
URL: https://github.com/.../runs/...
|
||
|
||
失敗原因:
|
||
- テストケース "test_calculate_sum" が失敗
|
||
- AssertionError: Expected 5, but got 6
|
||
|
||
関連ファイル:
|
||
- src/calculator.py
|
||
- tests/test_calculator.py
|
||
```
|
||
|
||
## 注意事項
|
||
|
||
- `gh pr checks --watch`を使用してCIの完了を待機する
|
||
- 監視中はCIの進行状況が表示され、完了するまで待機する
|
||
- ログが大量の場合は、エラー関連部分のみを抽出して分析
|
||
- 複数のジョブが失敗している場合は全て報告
|
||
- 分析結果は`.claude_work/`ディレクトリに保存
|
||
- GitHub CLI (`gh`) コマンドのエラーハンドリングを適切に行う
|
||
- PRが存在しない場合は適切なエラーメッセージを報告
|