LoginSignup
1
1

More than 1 year has passed since last update.

Reviewする犬にDartAnalyzeを食わせる

Last updated at Posted at 2022-02-25

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してあげる必要があります。

1
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
1
1