😄
git commit前にdockerコンテナ内でlintを強制する方法
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を実行することができるようになる。
実装
- ルートプロジェクトに.githooksフォルダを作り、pre-commitというスクリプトファイルを作る。
├ .git
├ src // コンテナ
├ .git-hooks
├ pre-commit
├ Dockerfile
├ docker-compose.yml
- gitの設定を変更し、hooksPathを変更する。
git config core.hooksPath .git-hooks
- フォルダに権限を与える
chmod -R +x .git-hooks
- スクリプトファイルを編集する。
#!/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を強制する
最後に
間違っていること、もっといい方法があればコメントに書いていただけると幸いです。
よろしくお願いいたします。
Discussion