修正を行った範囲だけESLintでチェックするシェルスクリプトの共有です。
以下のようなケースで有用かと思われます。
- プロジェクトの途中でESLintを導入してエラーや警告を全て潰しきれていない
- 修正範囲外のエラー、警告がノイズになってしまう状況
- プロジェクトのファイル数が膨大で毎回全てチェックをすると時間がかかる
- git pushの直前にESLintを実行したい
ブランチ差分実行シェルスクリプト
gitが動かせる環境なら大体bashも動かせるはずなのでbashで記述しています。
このままCircle CIでも動かせます。
#!/bin/bash
echo 'CIRCLE_BRANCH: ' ${CIRCLE_BRANCH}
TARGET_BRANCH=${CIRCLE_BRANCH}
# masterブランチへのmerge時はチェックしない
if [ "$TARGET_BRANCH" = 'master' ]; then
echo 'SKIP on merge into master'
exit 0
fi
# ローカルでの実行用にカレントブランチをセットする
if [ "$TARGET_BRANCH" = '' ]; then
TARGET_BRANCH=$(git rev-parse --abbrev-ref HEAD)
fi
echo 'TARGET_BRANCH: ' $TARGET_BRANCH
echo 'CIRCLE_BASE_BRANCH: ' ${CIRCLE_BASE_BRANCH}
BASE_BRANCH=${CIRCLE_BASE_BRANCH}
# ローカルでの実行時に環境変数をセットしていない時はmasterブランチと比較する
if [ "$BASE_BRANCH" = '' ]; then
BASE_BRANCH=origin/master
fi
echo 'BASE_BRANCH: ' $BASE_BRANCH
files=$(git diff --name-only $TARGET_BRANCH $BASE_BRANCH | grep -E '.js$')
error=false
for file in ${files}; do
./node_modules/.bin/eslint ${file}
result=$?
if [ $result -ne 0 ]; then
error=true
fi
done
if $error; then
exit 1
fi
exit 0
lint.sh
などの名前で保存して利用してください。
実行コマンドは以下のようになります。
CIRCLE_BASE_BRANCH
にはマージ先のブランチを指定してください。
CIRCLE_BASE_BRANCH
を省略した場合は origin/master
と比較します。
実行コマンド例
CIRCLE_BASE_BRANCH=release201806 ./lint.sh
./lint.sh