Yelp: git hookのためのマルチ言語対応パッケージマネジャ

http://engineeringblog.yelp.com/2014/08/announcing-pre-commit-yelps-multi-language-package-manager-for-pre-commit-hooks.html

1 comment | 1 point | by WazanovaNews 約3年前 edited


Jshiike 約3年前 edited | ▲upvoteする | link

Yelpでは、コードレビュー前にgit hookを利用してコードのチェックをしていますが、

  • プロジェクトごとにhookのbashスクリプトをコピペ/修正するのが面倒。
  • lintツールなどを利用するには、プロジェクトで使っている開発言語以外の言語用のパッケージマネジャーでインストールしなくてはいけないケースがある。
    • nodeのプロジェクトで scss-lint(Rubyで書かれている。)を利用する際、プロジェクトにGemfileを追加せずに、もしくはインストール方法を気にせずに利用できるようにしたい。
    • nodeをインストールしてなくてJavaScriptファイルを修正している際に、root権限なしでnodeをインストールして、JSHintを実行できるようにしたい。

という課題を解決してくれる、git hookのためのマルチ言語対応パッケージマネジャ「pre-commit」をオープンソースで公開しました。

サポート言語は、

  • node
  • python
  • ruby
  • pcre (Perl Compatible Regular Expression)
  • script(レポジトリ内にあるスクリプト)
  • system(システムレベルで利用可能なexecutable)

便利な機能としては、

  • マイグレーションモードでの実行: デフォルトでは、マイグレーションモードでpre-commit installが、既存のhookとpre-commitのhookを両方実行してくれる。もちろんいずれかの無効化もできる。
  • hookの一時的無効化: 設定したhookを部分的にskipできる。
  • コミット際のpre-commit: コミットしてない手元のファイルに対してhookを実行すると、誤って正しいと判断、もしくは修正してしまう可能性がある。pre-commitは、コミット時にファイルをセーブし、git add前のものにはチェックをかけないことで、コミット時のみの実行が担保されている。
  • マージの際のpre-commit: 大規模プロジェクトでマージのコンフリクトの解決をする場合、数百ファイルあるので、つい--no-verifyをしてしまい、バグを潰し損ねるケースがでる。pre-commitのhookは、コンフリクトが起きたファイル、もしくはコンフリクトを解決する際に主導で修正したファイルのみに対して実行される。
  • hookに引数を渡す: hookをうまく実行するために引数を設定する必要がでるケースがある。例えば、ID: flake8でargs: --max-line-length=131というように、引数を渡すことができる。
  • システムがインストールしたデフォルとではなく、指定するバージョンの言語でhookを実行できる。

があります。

#yelp #オープンソース


ワザノバTop200アクセスランキング


Back