Conventional commit checker
Un collègue a ajouté commitlint à un projet Rust. Soudainement, le dépôt avait besoin de Node.js, npm, Husky et d’un répertoire node_modules juste pour valider un message de commit. La spécification est une grammaire — l’analyser prend quelques millisecondes et n’a aucune raison d’embarquer un runtime JavaScript. Un seul binaire suffit.
Fonctionnalités
- Validation — vérifie le commit complet selon Conventional Commits v1.0.0 : format de l’en-tête, structure du corps, pieds de page et détection des changements incompatibles
- Analyseur sémantique — analyse le corps et les pieds de page, pas seulement une regex sur l’en-tête ;
BREAKING CHANGEn’est reconnu que dans la section footer comme l’exige la spec, ce qui le rend plus conforme que la plupart des configurations commitlint - Correction automatique —
--fixréécrit les erreurs courantes dans l’en-tête (mauvaise casse, point final, espacement) et affiche le message corrigé - Nettoyage du corps — supprime les trailers des assistants IA et bots CI (
Co-authored-by:,Signed-off-by:, expressions régulières personnalisées) avant validation ; chaque ligne supprimée est signalée pour qu’il n’y ait aucune suppression silencieuse - Gestion des hooks intégrée —
commit-check install-hookécrit directement.git/hooks/commit-msg; pas besoin de Husky ni de framework pre-commit - Règles configurables — types autorisés, portées requises/autorisées, longueur min/max de la description, vérification de la casse, pattern de footer pour les trackers d’issues ; configurables via les options CLI ou
.commit-check.toml - Sortie JSON —
--format jsonpour des résultats lisibles par les machines dans les pipelines CI - Crate bibliothèque — utilisez
validate_commit,fix_commit_messageetclean_commit_bodydirectement depuis du code Rust - Léger — binaire statique unique ; Rust pur, aucune dépendance au runtime
Intégrations
Hook git local — une seule commande, aucun outil supplémentaire :
commit-check install-hookGitHub Actions :
- name: Validate commit message
run: git log -1 --pretty=%B | docker run -i slundi/commit-check:latest validateGitLab CI :
commit-msg-check:
image: slundi/commit-check:latest
script: echo "$CI_COMMIT_MESSAGE" | commit-check validate
only: [merge_requests]Woodpecker / Drone CI :
- name: validate-commit
image: slundi/commit-check:latest
commands:
- echo "$${CI_COMMIT_MESSAGE}" | commit-check validate --verboseFramework pre-commit (.pre-commit-config.yaml) :
repos:
- repo: https://codeberg.org/slundi/conventional-commits
rev: v1.0.0
hooks:
- id: commit-check
stages: [commit-msg]Nix — sans installation :
nix run github:slundi/conventional-commits -- validate --message "feat: nix support"Comparaison
| commit-check | commitlint | commitizen | |
|---|---|---|---|
| Runtime requis | aucun | ❌ Node.js | ❌ Node.js / Python |
| Binaire statique unique | ✅ | ❌ | ❌ |
| Gestion des hooks intégrée | ✅ install-hook | ❌ nécessite Husky | ❌ nécessite Husky |
| Analyse sémantique des footers | ✅ | Partiel (regex) | ❌ |
| Correction automatique | ✅ --fix | ❌ | ❌ |
| Nettoyage du corps / trailers | ✅ | ❌ | ❌ |
| Sortie JSON | ✅ | ✅ | ❌ |
| Utilisable comme bibliothèque | ✅ crate Rust | ❌ | ❌ |
| Image Docker | ✅ | ✅ | ❌ |
| Assistant interactif de commit | ❌ | ❌ | ✅ |
L’assistant interactif de commitizen pour guider la rédaction des commits est hors du périmètre de cet outil — il se concentre sur la validation, pas sur la création.
Installation
cargo install conventional-commitsDocker :
echo "feat: add login" | docker run -i slundi/commit-check:latest validateNix flake — sans installation :
nix run github:slundi/conventional-commits -- validate --message "feat: nix support"