Les scripts Git hook sont utiles pour identifier des problèmes simples avant la soumission à la revue de code.
Nous exécutons nos hooks sur chaque commit afin de signaler automatiquement les problèmes dans le code tels que les points-virgules manquants, les espaces vides et les instructions de débogage.
En signalant ces problèmes avant la révision du code, cela permet à un réviseur de code de se concentrer sur l'architecture d'un changement sans perdre de temps avec des détails de style insignifiants.
Pre-commit est un outil en ligne de commande qui fait partie de cette gamme d'outils permettant de décaler certains aspects de la sécurité en ajoutant des points de contrôle automatiques après chaque commit.
Cela permet de détecter et de contrôler le plus tôt possible dans le pipeline d'intégration les éventuelles anomalies et donc de les corriger avant la mise en production.
Pour ce faire, trois étapes sont nécessaires :
$ pip install pre-commit
Créer un fichier de configuration de pre-commit dans votre dossier git (repository)
Dans l'exemple qui suit, nous allons utiliser pre-commit avec ansible-lint
$ nano .pre-commit-config.yaml
Dans notre fichier, nous allons ajouter la config suivante
--- repos: - repo: https://github.com/ansible/ansible-lint.git rev: v6.4.0 hooks: - id: ansible-lint files: \.(yaml|yml)$
Activer pre-commit pour le dépôt git
$ pre-commit install pre-commit installed at .git/hooks/pre-commit
Installer avec
$ echo "pre-commit run -a" > .git/hooks/pre-commit $ chmod 700 .git/hooks/pre-commit
$ pre-commit run --all-files
Ansible-lint.............................................................Passed
Ou simplement avec la commande “git commit”
$ git commit
Issus du repo pre-commit-hooks, ce sont des vérifications de texte basiques.
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.3.0 hooks: - id: check-added-large-files - id: check-merge-conflict - //id: check-yaml// - //id: detect-aws-credentials// - //id: detect-private-key// - //id: mixed-line-ending// - id: trailing-whitespace - id: end-of-file-fixer
- repo: https://github.com/ansible/ansible-lint.git rev: v6.4.0 hooks: - id: ansible-lint files: \.(yaml|yml)$
Installer le package cfn-lint
pip3 install cfn-lint
Config pre-commit
repos: - repo: https://github.com/awslabs/cfn-python-lint rev: v0.15.0 # The version of cfn-lint to use hooks: - id: cfn-python-lint files: templates/.*\.(json|yml|yaml)$
Si vous utilisez Docker (par exemple pour les constructions reproductibles ou le CI), ce hooks fournit de nombreuses recommandations intéressantes pour les Dockerfiles
- repo: https://github.com/pryorda/dockerfilelint-precommit-hooks rev: v0.1.0 hooks: - id: dockerfilelint
- repo: https://github.com/Agilicus/pre-commit-hook-k8svalidate.git rev: v0.1.0 hooks: - id: k8svalidate files: .yaml$
prettier est un outil Javascript qui peut formater de nombreux types de langage différents. Je trouve qu'il fait un bon travail sur les fichiers Markdown, Javascript, JSON et YAML en particulier.
- repo: https://github.com/pre-commit/mirrors-prettier rev: v2.7.1 hooks: - id: prettier files: \.(js|ts|jsx|tsx|css|less|html|json|markdown|md|yaml|yml)$
Quelques contrôles utiles et de qualité de vie pour les scripts shell
- repo: https://github.com/shellcheck-py/shellcheck-py rev: v0.8.0.3 hooks: - id: shellcheck
- repo: https://github.com/antonbabenko/pre-commit-terraform rev: v1.74.1 hooks: - id: terraform_fmt - id: terraform_validate - id: terraform_tflint - id: terraform_tfsec - id: terraform_checkov