Reviewする犬 is 何
Linterの実行結果をPullRequestのコメントとして出力してくれるワンちゃんです。
サポートしているCIはGithubActionsだったり、みんな大好き、CircleCIやTravisCI
他にもJenkinsなどもサポートされています。(名前はないですが、Bitriseなどでも可能です。)
今回はCircleCiとBitriseで動かしてみました。
DartAnalyzeが吐き出すログの形式は独自なものしか出さないっぽいので、
efmを使って出力できるようにします。
準備
(Github token)
まず、Botを運用するために、専用のアカウントを用意します。
Review Dogを動かすために、コメントができる権限を付与した、Github Token
が必要なので下記手順で作ります。
GithubのマイページへからDeveloper settingsを選択します。
OAuth Appsに切り変わり、Personal access tokensというのが出てくるので選択します。
そうすると、トークン一覧が表示され、タイトルから見て右側に「Generate new token」というボタンがあるのでクリックします。
次に権限を設定します。
公開リポジトリであれば、「public_repo」、プライベートリポジトリなら「repo」
を設定してください。(※公開リポジトリの場合は権限が最小限のほうが問題が起きにくいです。)
ErrorForamt
dart analyzeを実行すると以下のように出力されます。
info • Unused import: ‘’ at lib/mitsukoshi_urls.dart:3:8 • (unused_import)
Error Format についていは公式のREADMEやVimのQuickfixなどに書いてありますが今回使うものは以下のようになっています。
%f | ファイル名 |
%l | 行番号 |
%c | 列番号 |
%m | エラーメッセージ |
※完全に一致しなくても、ほしい形で取れるっぽい
※errorformatについて(https://vim-jp.org/vimdoc-en/quickfix.html#error-file-format)
※playgroundなるものが存在し、記述が合っているかどうか確認できる。
CircleCi編
雑にサンプル
review-dog:
executor:
name: hogehoge
steps:
- checkout
- flutter-install
- run:
name: Intasll ReviewDog
command: |
curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh| sh -s -- -b ./bin
chmod +x $HOME/project/bin/reviewdog
- run:
name: Run reviewdog
command: flutter analyze | $HOME/project/bin/reviewdog -efm="%m • %f:%l:%c •%r" -reporter=github-pr-review
Bitrise編
ScriptのStepを追加して下記のように記述。
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
export CI_REPO_OWNER=$BITRISEIO_GIT_REPOSITORY_OWNER
export CI_COMMIT=$BITRISE_GIT_COMMIT
export CI_PULL_REQUEST=$BITRISE_PULL_REQUEST
curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh| sh -s -- -b ./bin
chmod +x $HOME/git/bin/reviewdog
export REVIEWDOG_LOG="$(flutter analyze | $HOME/git/bin/reviewdog -efm="%m • %f:%l:%c •%r" -reporter=github-pr-review)"
if [ -n "$REVIEWDOG_LOG" ]; then
exit 1
fi
※Bitriseの場合そのままだとFaildになってくれないので、明示的にexitしてあげる必要があります。