Contribuer
Nous accueillons les contributions à IceGate ! Ce guide explique comment commencer.
Façons de Contribuer
- Signaler des bugs via GitHub Issues
- Demander des fonctionnalités via GitHub Issues
- Soumettre des pull requests pour des corrections de bugs ou des fonctionnalités
- Améliorer la documentation
- Partager vos retours et cas d'utilisation
Configuration du Développement
Prérequis
- Rust >= 1.92.0
- Docker et Docker Compose
- Git
Cloner et Compiler
# Cloner le dépôt
git clone https://github.com/icegatetech/icegate.git
cd icegate
# Compiler le projet
cargo build
# Exécuter les tests
cargo test
Démarrer l'Environnement de Développement
# Recommandé : Skaffold avec Kubernetes local
skaffold dev
# Alternative : Docker Compose avec rechargement à chaud
make dev
Voir Environnement de Développement pour les détails complets sur les profils Skaffold et les options Docker Compose.
Style de Code
Formatage
Utilisez rustfmt avec la configuration du projet :
# Vérifier le formatage
make fmt
# Corriger automatiquement le formatage
make fmt-fix
La configuration se trouve dans rustfmt.toml.
Linting
Utilisez clippy avec des paramètres stricts :
# Exécuter clippy
make clippy
# Corriger automatiquement les problèmes
make clippy-fix
La configuration se trouve dans clippy.toml.
Vérifications CI
Avant de soumettre, exécutez toutes les vérifications CI :
make ci
Cela exécute :
cargo check- vérification de la compilationcargo fmt -- --check- vérification du formatagecargo clippy -- -D warnings- lintingcargo test- testscargo audit- audit de sécurité
Structure du Projet
crates/
├── icegate-common/ # Infrastructure partagée (catalogue, stockage, métriques, traçage)
├── icegate-catalog-s3/ # Catalogue Iceberg sur S3 (par défaut) et son serveur REST
├── icegate-queue/ # Write-ahead log (Parquet sur stockage objet)
├── icegate-query/ # Service Query (Loki/Tempo/Flight SQL ; routes Prometheus 501)
├── icegate-ingest/ # Service Ingest (OTLP HTTP/gRPC, WAL, shift)
└── icegate-maintain/ # Migration, compaction, GC des orphelins, crawler de tarifs
Le framework de jobs/tâches n'est pas un crate du workspace : il réside dans icegatetech/jobmanager et est consommé comme dépendance git épinglée.
Voir l'Architecture pour les détails.
Directives pour les Pull Requests
Avant de Soumettre
- Créez une issue d'abord pour les changements significatifs
- Discutez de l'approche avant l'implémentation
- Exécutez les vérifications CI localement :
make ci - Écrivez des tests pour les nouvelles fonctionnalités
- Mettez à jour la documentation si nécessaire
Description de la PR
Incluez :
- Résumé des changements
- Numéro de l'issue associée
- Tests effectués
- Changements incompatibles (le cas échéant)
Processus de Review
- Soumettez la PR contre la branche
main - Attendez que les vérifications CI passent
- Adressez les retours de review
- Squashez les commits si demandé
- Le mainteneur merge une fois approuvé
Tests
Exécution des Tests
# Tous les tests
cargo test
# Test spécifique
cargo test test_name
# Avec affichage de la sortie
cargo test -- --nocapture
# Tests d'intégration
cargo test --test '*'
Écriture des Tests
- Tests unitaires dans le même fichier que l'implémentation
- Tests d'intégration dans le répertoire
tests/ - Utilisez des noms de tests descriptifs
- Testez les cas de succès et d'erreur
Documentation
Documentation du Code
Tous les éléments publics doivent avoir une documentation :
/// Parses a LogQL query string into an AST.
///
/// # Arguments
///
/// * `query` - The LogQL query string
///
/// # Returns
///
/// The parsed LogQL expression or an error
pub fn parse(query: &str) -> Result<LogQLExpr> {
// ...
}
Documentation Utilisateur
La documentation utilisateur se trouve dans docs/ en utilisant Diplodoc (YFM Markdown).
# Compiler la documentation
cd docs && npm run build
# Servir la documentation localement
cd docs && npm run serve
Processus de Release
Les releases sont créées par les mainteneurs :
- Mettre à jour la version dans
Cargo.toml - Mettre à jour
CHANGELOG.md - Créer un tag git
- GitHub Actions compile et publie
Obtenir de l'Aide
- GitHub Issues : Signaler des bugs et demander des fonctionnalités
- Discussions : Poser des questions et partager des idées
Code de Conduite
Soyez respectueux et inclusif. Nous suivons le Code de Conduite Rust.
Étapes Suivantes
- Revoir la Compilation
- Comprendre les Patterns de Développement
- Explorer l'Architecture