LoginSignup
5
1

More than 5 years have passed since last update.

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

Posted at

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1