Plusieurs fois j’ai eu recours aux git hooks mais je ne trouve pas ça forcément pratique ou simple à écrire.
Premier exemple d’utilisation, ayant intégré rubocop dans le CI/CD, j’aimerais ne pas rater de livraison parce que j’ai oublié de lancer rubocop (ou rspec par exemple), avant de pousser le code.
Deuxième exemple, il m’arrive de bidouiller le code en local pour des tests par exemple (changer une adresse mail de destination, mettre des console log, des alert, etc).
Et évidemment, ce genre de chose ne doit pas se retrouver en prod. Ayant une mémoire de bébé poisson rouge, une fois sur deux, je push du code qui ne devrait pas aller en prod…
MAIS CALMONS NOUS, IL Y A UNE SOLUTION !
que s’appelerio … Quézac OVERCOMMIT
Le principe est simple, il suffit de laisser un « flag » paramétrable dans son code (personnellement, j’utilise : « #BLOCKCOMMIT »), qui est détecté par overcommit et nous interdit de pusher le code ! Formidable non ? 🙂
Mise en place
1 2 3 4 |
gem install overcommit (installation system) cd mon_projet_avec_du_code_a_pas_pusher_sinon_ca_va_etre_le_drame (git init si ce n'est déjà fait) overcommit --install |
Configuration
La doc est très bien faite : https://github.com/brigade/overcommit so… RTFM 🙂
Un fichier ‘.overcommit.yml’ est créé par défaut, la structure de base et quelques exemples y sont présents. C’est ici que se passe la configuration local d’overcommit.
1. Ajouter rubocop
1 2 3 4 |
Precommit: Rubocop: enabled: true on_warn: fail |
2. Interdire un commit si un flag prédéfini est présent
1 2 3 4 5 6 7 |
Precommit: FixMe: enabled: true required_executable: 'grep' flags: ['IEHnw'] keywords: ['liste', 'des', 'keywords', 'bloquants'] on_warn: fail #par défaut, FixMe ne bloque pas, mais warn seulement |
Après chaque modification, pensez à taper overcommit –sign
Mais si je veux pusher quand même ?
Pas de panique, ils ont tout prévu chez brigade !
1 |
SKIP=RuboCop git commit |
Pas besoin de documenter, si ? ;-). Il existe évidemment la version inclusive avec « ONLY ».
Allez, salut 🙂