À propos du projet
# Système de surveillance CI Build-Eye
**Œil de build** - Système automatisé de surveillance et d'analyse des causes racines des builds CI de vLLM-Ascend
## Présentation du système
Build-Eye est un système de surveillance des builds CI conçu spécifiquement pour le projet vLLM-Ascend, capable de :
- **Surveiller automatiquement** les builds CI du dépôt vllm-project/vllm-ascend
- **Classer intelligemment** les causes racines des échecs de build (problème de code / problème d'infrastructure / problème d'interférence)
- **Générer des suggestions** de correction à faible coût et applicables
- **Archiver les rapports** : les rapports standardisés sont automatiquement archivés dans le dépôt build-eye
## Cibles de surveillance
- Dépôt principal surveillé : https://github.com/vllm-project/vllm-ascend
- Dépôt d'archivage : https://github.com/winson-00178005/build-eye.git
## Classification des causes racines d'échec
### 1. Problème de code de la PR
- Échec d'assertion de test
- Erreur de compilation (CMake, clang)
- Erreur d'import Python
- Incompatibilité d'API vLLM
- Problème de compilation du kernel Ascend
### 2. Problème d'infrastructure
- Échec du cache-service K8s (cache-service.nginx-pypi-cache)
- Runner indisponible
- Problème matériel NPU (910B/910C/310P)
- Problème de toolkit CANN
- Échec de communication multi-cartes HCCL
- Échec de téléchargement de l'image Docker
- Échec du cache Csrc
- Délai d'attente de build dépassé
### 3. Interférence de concurrence entre plusieurs PR
- Plusieurs PR fusionnées en peu de temps
- Différences de matrice de versions vLLM
- Concurrence des ressources des runners
- Impact des mises à jour d'images CANN
## Démarrage rapide
### 1. Configurer le token GitHub
Voir `docs/token-setup.md` pour configurer les clés requises.
### 2. Installer les dépendances
```bash
pip install -r requirements.txt
```
### 3. Déclencher manuellement la surveillance
```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. Archiver les rapports
```bash
python scripts/archive/archiver.py --input reports/ --repo https://github.com/winson-00178005/build-eye.git
```
## Workflow GitHub Actions
Le système prend en charge deux modes de déclenchement :
### Interrogation planifiée
Vérifie automatiquement les échecs de build récents toutes les 6 heures.
Fichier de workflow : `.github/workflows/monitor.yml`
### Déclenchement manuel
Déclenchement manuel via `workflow_dispatch` de GitHub Actions.
Paramètres optionnels :
- `lookback_hours` : nombre d'heures à examiner (par défaut 24)
- `dry_run` : mode essai (sans archivage)
- `target_repo` : dépôt cible
## Structure du projet
```
build-eye/
├── .github/workflows/
│ └── monitor.yml # Workflow GitHub Actions
├── scripts/
│ ├── monitor/ # Module de surveillance CI
│ │ ├── github_client.py # Client API GitHub
│ │ ├── fetch_runs.py # Récupérer les workflow runs
│ │ ├── collect_metadata.py # Collecter les métadonnées
│ │ └── config_loader.py # Chargement de configuration
│ ├── classify/ # Module de classification des échecs
│ │ ├── classifier.py # Moteur de classification
│ │ ├── code_detector.py # Détection des problèmes de code
│ │ ├── infra_detector.py # Détection d'infrastructure
│ │ └── interference_detector.py # Détection d'interférence
│ ├── recommend/ # Module de suggestions de correction
│ │ ├── recommender.py # Générateur de suggestions
│ │ └── templates.py # Modèles de suggestions
│ ├── report/ # Module de génération de rapports
│ │ ├── generator.py # Générateur de rapports
│ │ ├── formatter.py # Outils de formatage
│ │ └── summary.py # Génération de résumé
│ └── archive/ # Module d'archivage des rapports
│ ├── archiver.py # Archiveur
│ └── git_client.py # Client Git
├── config/
│ └── config.yaml # Configuration du système
├── templates/
│ └ example_reports.py # Exemples de rapports
├── tests/ # Répertoire de tests
├── docs/
│ └ token-setup.md # Guide de configuration du token
├── reports/ # Répertoire de sortie des rapports
└ requirements.txt # Dépendances Python
└ requirements-dev.txt # Dépendances de développement
└ README.md # Ce document
```
## Options de configuration
### 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
```
### Variables d'environnement
- `GITHUB_TOKEN` : token d'accès à l'API GitHub
- `ARCHIVE_TOKEN` : token d'écriture du dépôt d'archivage
- `TARGET_REPO_OWNER` : propriétaire du dépôt cible
- `TARGET_REPO_NAME` : nom du dépôt cible
## Format des rapports
Chaque rapport contient :
- YAML frontmatter (métadonnées)
- Résumé (1-2 phrases)
- Analyse des causes racines (classification, confiance, raisonnement)
- Preuves (modèles correspondants, liens, extraits de journaux)
- Suggestions de correction (suggestion prioritaire, étapes détaillées)
- PR associées (uniquement pour la classification d'interférence)
Chemin d'archivage des rapports : `reports/YYYY/MM/DD/<classification>-pr-<numéro>.md`
## Exécuter les tests
```bash
pip install -r requirements-dev.txt
pytest tests/
```
## Extension au pipeline nightly
Le système est déjà conçu pour prendre en charge la surveillance du pipeline nightly ; il suffit d'ajouter dans la configuration :
```yaml
target_repository:
monitored_workflows:
- schedule_nightly_test_a2.yaml
- schedule_nightly_test_a3.yaml
```
## Maintenance et extension
### Ajouter de nouvelles règles de classification
Ajouter un nouveau détecteur dans `scripts/classify/` :
```python
def detect_new_pattern(log_excerpt: str) -> dict:
patterns = [...]
# Implémenter la logique de détection
```
Puis l'appeler dans `classifier.py`.
### Ajouter de nouveaux modèles de suggestions
Ajouter de nouveaux modèles dans `scripts/recommend/templates.py`.
## Licence
Apache License 2.0 - voir le fichier LICENSE pour plus de détails
## Contact
Retour de problèmes : https://github.com/winson-00178005/build-eye/issues
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.