Merci de contribuer au Velocity Search Engine ! Ce guide vous aidera à comprendre comment participer au développement.
- 🐛 Bug Reports : Signaler des problèmes
- ✨ Feature Requests : Proposer de nouvelles fonctionnalités
- 📖 Documentation : Améliorer la documentation
- 🔧 Code : Corrections et nouvelles fonctionnalités
- 🧪 Tests : Ajouter ou améliorer les tests
- ⚡ Performance : Optimisations et benchmarks
# Fork et clone le repo
git clone https://github.com/votre-username/velocity-search.git
cd velocity-search
# Setup environnement virtuel
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windows
# Installation développement
make install-dev# Tests complets
make test
# Benchmarks
make benchmark
# Qualité code
make lint
make format- Recherchez les issues existantes avant d'en créer une nouvelle
- Utilisez les templates pour bug reports et feature requests
- Assignez-vous l'issue si vous comptez la traiter
- Discutez des grandes fonctionnalités avant implémentation
# Créer une branche feature
git checkout -b feature/nom-de-la-feature
# Créer une branche bugfix
git checkout -b bugfix/description-du-bug
# Commits conventionnels
git commit -m "feat(indexer): add BM25 algorithm support"
git commit -m "fix(preprocessor): handle empty documents"
git commit -m "docs(api): update core module documentation"- Testez votre code avec
make test - Benchmarkez si pertinent avec
make benchmark - Documentez les changements dans la PR
- Référencez les issues concernées
- Demandez une review
- Couverture minimum : 80%
- Tests unitaires : Chaque fonction publique
- Tests d'intégration : Workflows complets
- Benchmarks : Fonctionnalités critiques
# Exécuter les tests
pytest tests/ -v
# Avec couverture
pytest tests/ --cov=src --cov-report=html
# Benchmarks uniquement
pytest tests/benchmarks/ -v- Formatter : Black avec ligne 88 caractères
- Linter : Flake8 + pylint
- Type hints : Obligatoires pour fonctions publiques
- Docstrings : Format Google pour toutes les classes/fonctions
# Auto-formatting
make format
# Vérification style
make lint
# Type checking
make type-check- Docstrings : Google format
- Type hints : Complets et précis
- Examples : Code examples dans la doc
- API docs : Mise à jour automatique
def search(self, query: str, limit: int = 10) -> List[SearchResult]:
"""Recherche des documents pertinents.
Args:
query: Requête de recherche utilisateur
limit: Nombre maximum de résultats à retourner
Returns:
Liste des résultats classés par pertinence
Raises:
ValueError: Si la requête est vide
Example:
>>> engine = VelocitySearch()
>>> results = engine.search("Python programming")
>>> print(f"Found {len(results)} results")
"""- Modularité : Séparation claire des responsabilités
- Performance : Optimisé pour la vitesse et la mémoire
- Extensibilité : Faciliter l'ajout de nouvelles fonctionnalités
- Testabilité : Code facile à tester et déboguer
# Structure standard d'un module
src/nouveau_module/
├── __init__.py # Exports publics
├── core.py # Logique principale
├── models.py # Classes de données
├── utils.py # Utilitaires spécifiques
└── exceptions.py # Exceptions personnalisées- Profiling obligatoire pour optimisations
- Benchmarks avant/après pour changements critiques
- Complexité documentée pour algorithmes
- Memory leaks vérifiés avec outils appropriés
**Description**
Description claire du bug
**Reproduction**
Étapes pour reproduire le comportement:
1. Allez à '...'
2. Cliquez sur '....'
3. Défilez vers '....'
4. Voir erreur
**Comportement Attendu**
Description claire de ce qui devrait se passer
**Screenshots/Logs**
Si applicable, ajoutez des captures d'écran ou logs
**Environment:**
- OS: [e.g. Ubuntu 20.04]
- Python: [e.g. 3.9.7]
- Version: [e.g. 1.2.3]**Problème à Résoudre**
Description claire du problème que cette feature résoudrait
**Solution Proposée**
Description claire de la solution souhaitée
**Alternatives Considérées**
Description des alternatives que vous avez considérées
**Impact**
- Performance: Impact estimé sur les performances
- Breaking changes: Changements incompatibles
- Dependencies: Nouvelles dépendances requises# tests/benchmarks/benchmark_nouveau_module.py
import pytest
from src.nouveau_module import NouvelleFonction
class TestNouveauModuleBenchmarks:
def setup_method(self):
self.function = NouvelleFonction()
@pytest.mark.benchmark(group="nouveau_module")
def test_performance_fonction(self, benchmark):
"""Benchmark de la nouvelle fonction."""
result = benchmark(self.function.execute, "test_data")
assert result is not None- Indexation : < 1s pour 1000 documents
- Recherche : < 100ms pour requête simple
- Memory : < 500MB pour 100k documents
- Throughput : > 1000 requêtes/seconde
- Semantic Versioning (MAJOR.MINOR.PATCH)
- Breaking changes : MAJOR increment
- New features : MINOR increment
- Bug fixes : PATCH increment
- Tests passent (29/29)
- Benchmarks stables (12/12)
- Documentation mise à jour
- CHANGELOG.md mis à jour
- Version bumped
- Tag créé
- Release notes rédigées
Les contributeurs sont reconnus dans :
- README.md : Section contributeurs
- CHANGELOG.md : Crédits par version
- Release notes : Mentions spéciales
- Hall of fame : Top contributeurs
- Issues GitHub : Pour bugs et features
- Discussions : Pour questions générales
- Email mainteneurs : Pour questions privées
- Documentation : Guide complet dans
/docs
Merci de rendre Velocity Search Engine encore meilleur ! 🚀