Table des matières

Introduction

Git hook

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.

Projet pre-commit

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 :

Installer pre-commit

$ pip install pre-commit

Activation 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

Test pre-commit

$ pre-commit run --all-files
Ansible-lint.............................................................Passed

Ou simplement avec la commande “git commit

$ git commit 

Hooks Basic

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

Hooks additionnel

Ansible Linter

- repo: https://github.com/ansible/ansible-lint.git
  rev: v6.4.0
  hooks:
    - id: ansible-lint
      files: \.(yaml|yml)$

AWS CloudFormation

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)$

Dockerfile linter

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

Kubernetes validation

- repo: https://github.com/Agilicus/pre-commit-hook-k8svalidate.git
  rev: v0.1.0
  hooks:
    - id: k8svalidate
      files: .yaml$

Prettier

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)$

Shellcheck

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

Terraform

- 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

Annexe

https://pre-commit.com

https://pre-commit.com/hooks.html