Laravel Sailでcommitの前にGit hooksでartisan testを実行する

やりたいこと

Laravel Sailを使用したプロジェクトでコミットをする前にartisan testを実行したいと思いました。

テストを必死に書いてもコミット前にテストを実行するのを忘れたらいけないと思い、自動化しました。

個人開発で行っているのでコミット前でも問題ありませんが、共同開発ではpush後にCIで作成した方がいいかもしれません。

少し話が逸れましたが、本題です。

実装

 

1 docker-composeを編集

git hooks上では、dockerのコンテナを指定してartisanコマンドを打つ必要があるのでコンテナに名前をつけます。

docker-compose.yml

laravel.test:
.
.
.
 container_name: コンテナ名 . . .①
.
.
.

①container_nameを指定することでコンテナに名前をつけることができます。

 

2 pre-commitを作成

pre-commitにコミットされる前の指示を記載します。

pre-commitは、.git\hooks配下にpre-commit.sampleというファイルがあるので、.sampleを外します。

.git\hooks\pre-commit

#!/bin/sh

if ! docker exec コンテナ名 php artisan test; then . . . ①
echo "テストに失敗しました。"
echo "コミット出来ませんでした。"
exec 1 . . . ②
fi

①if文でテストコマンドを実行します。

コンテナ名には1で指定したコンテナ名を記載します。

②テストが失敗した場合は、コミットされないようにします。

 

以上!!!!!!!