😄

git commit前にdockerコンテナ内でlintを強制する方法

2024/12/01に公開

git commit前にdockerコンテナ内でlintを強制する方法

構造上husky, lint-stagedが実行できないプロジェクトでgit commit前にdockerコンテナ内でlintを強制する方法についてのメモ。

例えば以下のようなコンテナとdocker-compose.yml, Dockerfileが分離しているプロジェクト構造の場合。

.git
├ src // コンテナDockerfile
├ docker-compose.yml

git hooksという機能を使用してスクリプトを実行するとcommit前にlintを実行することができるようになる。

実装

  1. ルートプロジェクトに.githooksフォルダを作り、pre-commitというスクリプトファイルを作る。
.git
├ src // コンテナ.git-hooks
  ├ pre-commit
├ Dockerfile
├ docker-compose.yml
  1. gitの設定を変更し、hooksPathを変更する。
git config core.hooksPath .git-hooks
  1. フォルダに権限を与える
chmod -R +x .git-hooks
  1. スクリプトファイルを編集する。
#!/bin/zsh

docker-compose exec -T app npm run lint

if [ $? -ne 0 ]; then
  echo "Lint エラーがあります。修正してからコミットしてください。"
  exit 1
fi

exit 0

echo "All jobs run successed.";

実行結果

エラーが発生する場合

git commit -m 'add: add page'

> app@0.1.0 lint
> next lint


./app/layout.tsx
24:13  Error: Unexpected any. Specify a different type.  @typescript-eslint/no-explicit-any

info  - Need to disable some ESLint rules? Learn more here: https://nextjs.org/docs/app/building-your-application/configuring/eslint#disabling-rules
Lint エラーがあります。修正してからコミットしてください。

lintが通る場合

git commit -m 'add: add page'

> app@0.1.0 lint
> next lint

✔ No ESLint warnings or errors
[main 202f533] add: add page Search
 2 files changed, 13 insertions(+), 1 deletion(-)
 create mode 100755 .git-hooks/pre-commit

権限をスクリプトに与えなければいけないのが難点ではあるが、これで構造上husky, lint-stagedが実行できないプロジェクトでgit commit前にdockerコンテナ内でlintを強制する

最後に

間違っていること、もっといい方法があればコメントに書いていただけると幸いです。
よろしくお願いいたします。

GitHubで編集を提案

Discussion