JavaScript
Bash
ESLint

ESLintでgitのブランチ差分をチェックする(Circle CI対応あり)

修正を行った範囲だけ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