🔒

pre-commit で git-secrets を実行する

2024/01/01に公開

はじめに

pre-commit 導入済みの環境に git-secrets を入れようとしたところ少しハマったのでメモを残します。

問題

pre-commit が導入された環境に新たに git-secrets を導入しようと思いました。

公式のドキュメントに従ってインストールを進めると、すでに pre-commit が存在するため git secrets --install に失敗します。

$ git secrets --install
Installed commit-msg hook to .git/hooks/commit-msg
.git/hooks/pre-commit already exists. Use -f to force

メッセージには -f を使えと書いてありますが -f でインストールするとプロジェクトの pre-commit 設定が壊れるので避けたいです。

解決策

.pre-commit-config.yaml に記載を追記します

repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.3.0
    hooks:
      - id: check-added-large-files
      - id: check-json
      - id: check-merge-conflict
      - id: check-toml
      - id: check-xml
      - id: check-yaml
      - id: debug-statements
      - id: detect-private-key
      - id: end-of-file-fixer
      - id: fix-byte-order-marker
      - id: trailing-whitespace
      
- repo: local
  hooks:
    - id: git-secrets
      name: git secrets
      entry: git secrets --scan
      language: system
      types: [text]

これでいつも通りコミットすれば git-secrets が hook で実行されるようになります。

終わりに

良いインテグレーション方法があるかもしれませんがぱっと試した限りでは分からなかったので、ローカルのコマンドを実行する方法を採用しました。

この構文自体は任意のコマンドを pre-commit の hook に追加したいときにも使えるので汎用性がありそうです。

参考

https://github.com/awslabs/git-secrets
https://pre-commit.com/

Discussion