このプロジェクトについて
# Build-Eye CI 監視システム
**ビルド鷹の目** - vLLM-Ascend CI ビルド自動監視・根本原因分析システム
## システム概要
Build-Eye は vLLM-Ascend プロジェクト専用に設計された CI ビルド監視システムで、以下が可能です:
- vllm-project/vllm-ascend リポジトリの CI ビルドを**自動監視**
- ビルド失敗の根本原因(コード問題/インフラ問題/干渉問題)を**インテリジェントに分類**
- 低コストで実行可能な修正案を**生成**
- 標準化レポートを build-eye リポジトリに**自動アーカイブ**
## 監視対象
- 主力監視リポジトリ: https://github.com/vllm-project/vllm-ascend
- アーカイブホスティングリポジトリ: https://github.com/winson-00178005/build-eye.git
## 失敗根本原因の分類
### 1. PR コード問題
- テストアサーション失敗
- コンパイルエラー(CMake、clang)
- Python インポートエラー
- vLLM API 非互換
- Ascend kernel コンパイル問題
### 2. インフラ問題
- K8s cache-service 失敗(cache-service.nginx-pypi-cache)
- Runner 利用不可
- NPU ハードウェア問題(910B/910C/310P)
- CANN toolkit 問題
- HCCL マルチカード通信失敗
- Docker イメージプル失敗
- Csrc キャッシュ失敗
- ビルドタイムアウト
### 3. 複数 PR の並行干渉
- 短時間に複数の PR がマージ
- vLLM バージョンマトリックスの差異
- Runner リソース競合
- CANN イメージ更新の影響
## クイックスタート
### 1. GitHub Token の設定
`docs/token-setup.md` を参照して必要なシークレットを設定してください。
### 2. 依存関係のインストール
```bash
pip install -r requirements.txt
```
### 3. 手動での監視トリガー
```bash
python scripts/monitor/fetch_runs.py --output data/workflow_runs.json
python scripts/monitor/collect_metadata.py --input data/workflow_runs.json --output data/build_metadata.json
python scripts/classify/classifier.py --input data/build_metadata.json --output data/classifications.json
python scripts/recommend/recommender.py --input data/classifications.json --output data/recommendations.json
python scripts/report/generator.py --input data/recommendations.json --output reports/
```
### 4. レポートのアーカイブ
```bash
python scripts/archive/archiver.py --input reports/ --repo https://github.com/winson-00178005/build-eye.git
```
## GitHub Actions ワークフロー
システムは 2 つのトリガーモードをサポートしています:
### 定期ポーリング
6 時間ごとに最近のビルド失敗を自動チェックします。
ワークフローファイル: `.github/workflows/monitor.yml`
### 手動トリガー
GitHub Actions の `workflow_dispatch` による手動トリガー。
オプションパラメータ:
- `lookback_hours`: 過去何時間をチェックするか(デフォルト 24)
- `dry_run`: 試運転モード(アーカイブしない)
- `target_repo`: 対象リポジトリ
## プロジェクト構造
```
build-eye/
├── .github/workflows/
│ └── monitor.yml # GitHub Actions ワークフロー
├── scripts/
│ ├── monitor/ # CI 監視モジュール
│ │ ├── github_client.py # GitHub API クライアント
│ │ ├── fetch_runs.py # workflow runs の取得
│ │ ├── collect_metadata.py # メタデータの収集
│ │ └── config_loader.py # 設定読み込み
│ ├── classify/ # 失敗分類モジュール
│ │ ├── classifier.py # 分類エンジン
│ │ ├── code_detector.py # コード問題検出
│ │ ├── infra_detector.py # インフラ検出
│ │ └── interference_detector.py # 干渉検出
│ ├── recommend/ # 修正提案モジュール
│ │ ├── recommender.py # 提案生成器
│ │ └── templates.py # 提案テンプレート
│ ├── report/ # レポート生成モジュール
│ │ ├── generator.py # レポート生成器
│ │ ├── formatter.py # フォーマットツール
│ │ └── summary.py # サマリー生成
│ └── archive/ # レポートアーカイブモジュール
│ ├── archiver.py # アーカイバ
│ └── git_client.py # Git クライアント
├── config/
│ └── config.yaml # システム設定
├── templates/
│ └ example_reports.py # レポート例
├── tests/ # テストディレクトリ
├── docs/
│ └ token-setup.md # Token 設定ガイド
├── reports/ # レポート出力ディレクトリ
└ requirements.txt # Python 依存関係
└ requirements-dev.txt # 開発依存関係
└ README.md # 本文書
```
## 設定オプション
### config/config.yaml
```yaml
target_repository:
owner: vllm-project
repo: vllm-ascend
url: https://github.com/vllm-project/vllm-ascend
branch: main
monitored_workflows:
- pr_test_full.yaml
- pr_test_light.yaml
archive_repository:
owner: winson-00178005
repo: build-eye
url: https://github.com/winson-00178005/build-eye.git
monitoring:
polling_interval_hours: 6
lookback_hours: 24
```
### 環境変数
- `GITHUB_TOKEN`: GitHub API アクセス token
- `ARCHIVE_TOKEN`: アーカイブリポジトリ書き込み token
- `TARGET_REPO_OWNER`: 対象リポジトリ owner
- `TARGET_REPO_NAME`: 対象リポジトリ名
## レポート形式
各レポートに含まれるもの:
- YAML frontmatter(メタデータ)
- 概要(1〜2 文)
- 根本原因分析(分類、信頼度、推論)
- 証拠(マッチパターン、リンク、ログ断片)
- 修正提案(優先提案、詳細手順)
- 関連 PR(干渉分類のみ)
レポートアーカイブパス: `reports/YYYY/MM/DD/<分類>-pr-<番号>.md`
## テストの実行
```bash
pip install -r requirements-dev.txt
pytest tests/
```
## nightly パイプラインへの拡張
システムは nightly パイプライン監視をサポートするよう設計されており、設定に以下を追加するだけです:
```yaml
target_repository:
monitored_workflows:
- schedule_nightly_test_a2.yaml
- schedule_nightly_test_a3.yaml
```
## メンテナンスと拡張
### 新しい分類ルールの追加
`scripts/classify/` に新しい検出器を追加します:
```python
def detect_new_pattern(log_excerpt: str) -> dict:
patterns = [...]
# 検出ロジックを実装
```
その後 `classifier.py` で呼び出します。
### 新しい提案テンプレートの追加
`scripts/recommend/templates.py` に新しいテンプレートを追加します。
## ライセンス
Apache License 2.0 - 詳細は LICENSE ファイルを参照
## 連絡先
問題報告: https://github.com/winson-00178005/build-eye/issues
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.