Contribuer
Les issues et pull requests sont les bienvenus sur GitHub. Cette page couvre la structure du workspace, la compilation et les tests en local, les conventions du code, et les étapes précises pour ajouter une nouvelle règle de validation.
Structure du workspace
Section intitulée « Structure du workspace »gapline est un workspace Cargo à deux crates :
| Crate | Chemin | Rôle |
|---|---|---|
gapline-core | core/ | Parsing de flux, moteur de validation, primitives CRUD, index d’intégrité, règles. |
gapline | cli/ | Le binaire CLI — parsing d’arguments, rendu de sortie, chargeur de config, runner .gl. |
gapline/├── Cargo.toml # Manifest workspace.├── LICENSE├── README.md├── core/│ ├── src/│ ├── benches/│ └── tests/└── cli/ ├── src/ ├── CHANGELOG.md └── tests/Prérequis
Section intitulée « Prérequis »- Rust 1.70 ou ultérieur. Installez avec rustup.
- Une toolchain C (pour les dépendances natives du crate
zip).
Optionnels mais recommandés :
cargo-nextestpour des runs de tests plus rapides.prekpour les hooks pre-commit (unprek.tomlest committé).
Compiler
Section intitulée « Compiler »Depuis la racine du workspace :
cargo build --workspacecargo build --workspace --releaseLe binaire CLI arrive dans target/release/gapline.
Lancer la suite complète :
cargo test --workspaceOu avec nextest :
cargo nextest run --workspaceLes tests unitaires vivent dans des modules #[cfg(test)] à côté du code qu’ils exercent. Les tests d’intégration sont sous <crate>/tests/. Le crate core a des benchmarks sous core/benches/ :
cargo bench -p gapline-coreclippy est configuré pour échouer sur les warnings. Avant de soumettre une PR, passez les deux checks équivalents à la CI :
cargo fmt --all -- --checkcargo clippy --workspace -- -D warningsConventions de commit
Section intitulée « Conventions de commit »Les sujets de commit suivent les Conventional Commits (visibles dans le changelog CLI) :
feat: add speed_validation rulefix(cli): correct --feed help text grammarperf(core): drop double alloc in required_id/optional_id
Les catégories utilisées dans le changelog sont feat, fix, perf, feat! (breaking).
Ajouter une règle de validation
Section intitulée « Ajouter une règle de validation »-
Choisir un stage. Les règles vivent sous
core/src/validation/<stage>/. Les stages existants :file_structure,csv_formatting,field_definition,field_type,foreign_key,primary_key,schedule_time_validation,best_practices,third_party. -
Implémenter la règle. Chaque règle implémente un trait de validation dans son module de stage. Retournez des
ValidationErroravecrule_id,severity,message, et autant de contexte (file_name,line_number,field_name,value) que possible. -
Enregistrer la règle. Ajoutez-la au registre dans
core/src/validation/rules.rspour quegapline rules listla prenne. -
Tester. Un test unitaire positif et négatif dans le même module. Un test d’intégration sous
core/tests/si la règle couvre plusieurs fichiers. -
Documenter la règle. L’ID sera automatiquement inclus dans le catalogue après génération du JSON.
Ajouter un flag CLI
Section intitulée « Ajouter un flag CLI »- Ajoutez le champ à la variante correspondante de
Commandsdanscli/src/cli/parser.rs. - Raccordez-le au runner de la commande sous
cli/src/cli/commands/. - Mettez à jour la page de référence sous
doc-site/src/content/docs/reference/cli/. - Si le flag a un équivalent dans
gapline.toml, ajoutez la clé àcore/src/config.rset mettez à jourdoc-site/src/content/docs/reference/configuration-file.md.
Ajouter une directive .gl
Section intitulée « Ajouter une directive .gl »Le runner .gl est dans cli/src/cli/runner/. Les directives sont parsées dans parser.rs et dispatchées dans executor.rs. Pour une nouvelle directive :
- Étendre
DirectiveKinddansparser.rs. - Ajouter la fonction de parse.
- Ajouter la branche de l’executor.
- Documenter la directive sur syntaxe
.gl.
Code of conduct
Section intitulée « Code of conduct »Traitez chaque contributeur avec respect. Le repo suit le Contributor Covenant : soyez gentil, clair, et restez sur le sujet.
Voir aussi
Section intitulée « Voir aussi »- Projet sur GitHub — issues, PRs, releases.
- Changelog — ce qui a atterri dans chaque release.
- Licence — termes de licence pour les contributions.