CircleCI上でastyleのスタイルチェックを行う
astyleはArtistic Styleの略で、C, C++, C#, Javaのソースコードのインデントや整形を行うことができるツールである。
こういった整形ツールは非常に便利だが、実行し忘れるとなんの意味もない。
gitのpre-commit hookに設定する方法もあるが、できればCI上で確認をしてからマージをしたい。
今回はCircleCI上でastyleのスタイルチェックを行った。
astyle設定ファイルの作成
まず、コーディング規約を決定する。
// .astyle # c#のファイルとして認識する mode=cs # allmanスタイルにする style=allman # インデントにスペースを使う indent=spaces=2 # namespace文の中をインデントする indent-namespaces # switch文の中をインデントする indent-switches # case文の中をインデントする indent-cases # 1行ブロックを許可する keep-one-line-blocks # 1行文を許可する keep-one-line-statements # プリプロセッサをソースコード内のインデントと合わせる indent-preproc-cond # if, while, switchの後にpaddingを入れる pad-header # 演算子の前後にpaddingを入れる pad-oper # originalファイルを生成しない suffix=none # if, for, while文の前後に空行を入れる break-blocks # コメントもインデントする indent-col1-comments
このファイルを .astyle
の名前で保存すると
astyle --options=./.astyle <filename>
と実行することでコードを整形することができる。
CircleCIの設定
シェルスクリプト .code-format.sh
を作成する
すべてのファイルに対してastyleを実行し、実行前と実行後のファイルに差があればコーディング規約を守ってないとしエラーを返す。
// .code-format.sh OPTIONS="--options=./.astyle" astyle --version RETURN=0 ASTYLE=$(which astyle) for FILE in `\find . -name '*.cs'`; do TEMP=$(mktemp) $ASTYLE $OPTIONS < $FILE > $TEMP if ! cmp -s "$FILE" $TEMP; then echo "error: $FILE does not respect with coding style" RETURN=1 fi rm $TEMP done exit $RETURN
CircleCi上でこれを実行できるよう circle.yml
を作成する。
dependenciesのpreでastyleのダウンロードとインストールを行う。
// circle.yml dependencies: pre: - wget https://jaist.dl.sourceforge.net/project/astyle/astyle/astyle%203.0/astyle_3.0_linux.tar.gz - tar -zxvf astyle_3.0_linux.tar.gz - cd astyle/build/gcc && sudo make && sudo make install test: override: - bash .code-format.sh
あとはGitHubにpushして、CircleCI上で設定したら完了。