About this project
# Build-Eye CI Monitoring System
**Build-Eye** - vLLM-Ascend CI Build Automation Monitoring and Root Cause Analysis System
## System Overview
Build-Eye is a CI build monitoring system designed specifically for the vLLM-Ascend project, capable of:
- **Automatically monitoring** CI builds in the `vllm-project/vllm-ascend` repository.
- **Intelligently classifying** build failure root causes (Code Issues / Infrastructure Issues / Interference Issues).
- **Generating suggestions** for low-cost, actionable fix plans.
- **Archiving reports** by automatically storing standardized reports in the `build-eye` repository.
## Monitoring Targets
- Primary monitored repository: https://github.com/vllm-project/vllm-ascend
- Archive hosting repository: https://github.com/winson-00178005/build-eye.git
## Failure Root Cause Classification
### 1. PR Code Issues
- Test assertion failures
- Compilation errors (CMake, clang)
- Python import errors
- vLLM API incompatibilities
- Ascend kernel compilation issues
### 2. Infrastructure Issues
- K8s cache-service failures (`cache-service.nginx-pypi-cache`)
- Runner unavailability
- NPU hardware issues (910B/910C/310P)
- CANN toolkit issues
- HCCL multi-card communication failures
- Docker image pull failures
- Csrc cache failures
- Build timeouts
### 3. Multi-PR Concurrent Interference
- Multiple PRs merged within a short period
- Differences in vLLM version matrices
- Runner resource contention
- Impact from CANN image updates
## Quick Start
### 1. Configure GitHub Token
Refer to `docs/token-setup.md` to configure the required keys.
### 2. Install Dependencies
```bash
pip install -r requirements.txt
```
### 3. Manually Trigger Monitoring
```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. Archive Reports
```bash
python scripts/archive/archiver.py --input reports/ --repo https://github.com/winson-00178005/build-eye.git
```
## GitHub Actions Workflow
The system supports two trigger modes:
### Scheduled Polling
Automatically checks for recent build failures every 6 hours.
Workflow file: `.github/workflows/monitor.yml`
### Manual Trigger
Trigger manually via GitHub Actions' `workflow_dispatch`.
Optional parameters:
- `lookback_hours`: Number of past hours to check (default 24)
- `dry_run`: Dry run mode (does not archive)
- `target_repo`: Target repository
## Project Structure
```
build-eye/
├── .github/workflows/
│ └── monitor.yml # GitHub Actions workflow
├── scripts/
│ ├── monitor/ # CI monitoring module
│ │ ├── github_client.py # GitHub API client
│ │ ├── fetch_runs.py # Fetch workflow runs
│ │ ├── collect_metadata.py # Collect metadata
│ │ └── config_loader.py # Configuration loader
│ ├── classify/ # Failure classification module
│ │ ├── classifier.py # Classification engine
│ │ ├── code_detector.py # Code issue detection
│ │ ├── infra_detector.py # Infrastructure detection
│ │ └── interference_detector.py # Interference detection
│ ├── recommend/ # Fix recommendation module
│ │ ├── recommender.py # Recommendation generator
│ │ └── templates.py # Recommendation templates
│ ├── report/ # Report generation module
│ │ ├── generator.py # Report generator
│ │ ├── formatter.py # Formatting tools
│ │ └── summary.py # Summary generation
│ └── archive/ # Report archiving module
│ ├── archiver.py # Archiver
│ └── git_client.py # Git client
├── config/
│ └── config.yaml # System configuration
├── templates/
│ └ example_reports.py # Report examples
├── tests/ # Test directory
├── docs/
│ └ token-setup.md # Token configuration guide
├── reports/ # Report output directory
├ requirements.txt # Python dependencies
├ requirements-dev.txt # Development dependencies
└ README.md # This document
```
## Configuration Options
### 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
```
### Environment Variables
- `GITHUB_TOKEN`: GitHub API access token
- `ARCHIVE_TOKEN`: Write token for the archive repository
- `TARGET_REPO_OWNER`: Target repository owner
- `TARGET_REPO_NAME`: Target repository name
## Report Format
Each report includes:
- YAML frontmatter (metadata)
- Summary (1-2 sentences)
- Root cause analysis (classification, confidence, reasoning)
- Evidence (matched patterns, links, log snippets)
- Fix recommendations (priority suggestions, detailed steps)
- Related PRs (only for interference classification)
Report archive path: `reports/YYYY/MM/DD/<category>-pr-<number>.md`
## Running Tests
```bash
pip install -r requirements-dev.txt
pytest tests/
```
## Extending Nightly Pipelines
The system is designed to support nightly pipeline monitoring. Simply add the following to the configuration:
```yaml
target_repository:
monitored_workflows:
- schedule_nightly_test_a2.yaml
- schedule_nightly_test_a3.yaml
```
## Maintenance and Extension
### Adding New Classification Rules
Add new detectors in `scripts/classify/`:
```python
def detect_new_pattern(log_excerpt: str) -> dict:
patterns = [...]
# Implement detection logic
```
Then call it in `classifier.py`.
### Adding New Recommendation Templates
Add new templates in `scripts/recommend/templates.py`.
## License
Apache License 2.0 - See the LICENSE file for details.
## Contact
Issue feedback: https://github.com/winson-00178005/build-eye/issues
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.