Hack Your Design!

reviewdogを使ってGitHub Actions上でRuboCop自動レビューを動かす

(image)reviewdogを使ってGitHub Actions上でRuboCop自動レビューを動かす

過去にreviewdogを使ってCircleCI上でrubocop自動レビューを動かす記事を書きました。

本記事はそれのGitHub Actionsバージョンになります。

なぜGitHub Actionなのか?

以前に書いた記事のようにCircleCIでも問題はないものの、GitHub ActionsはデフォルトでPull Requestにコメント可能な GITHUB_TOKEN を吐くことが可能で、そのへんのtoken周りの煩雑な設定が不要という点でCircleCIよりアドバンテージがあると言えます。

Authenticating with the GITHUB_TOKEN - GitHub Help

GitHubが公式機能として出していることもあり、GitHubとのIntegrationはGitHub Actionsのほうが優れている印象があります。

基本のrubocop設定

GitHub Actionsで動かす基本となるrubocop設定は下記の通りです。

※ 実際はbundlerのキャッシュの設定などが必要ですが今回は設定していません

# .github/workflows/rubocop.yml
name: RuboCop
on: [pull_request]
jobs:
  rubocop:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-ruby@v1
      with:
        ruby-version: 2.6
    - run: |
        gem install bundler
        bundle install
    - name: Run rubocop
      run: bundle exec rubocop

上述の設定をベースにreviewdogを使った自動レビューの設定を追加していきます。

reviewdogによる自動レビューを追加

追加するのは下記の2ステップです。

  1. Setup reviewdog: reviewdog のバイナリをインストール
  2. Run rubocop with reviewdog: rubocop の指摘を reviewdog に渡してPRコメントを付けさせる

yamlファイルとしては下記になります。

# .github/workflows/rubocop.yml
name: RuboCop
on: [pull_request]
jobs:
  rubocop:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-ruby@v1
      with:
        ruby-version: 2.6
    - run: |
        gem install bundler
        bundle install
    - name: Setup reviewdog
      run: |
        mkdir -p $HOME/bin && curl -sfL https://raw.githubusercontent.com/reviewdog/reviewdog/master/install.sh | sh -s -- -b $HOME/bin
        echo ::add-path::$HOME/bin
    - name: Run rubocop with reviewdog
      env:
        REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: bundle exec rubocop | reviewdog -reporter=github-pr-review -f=rubocop

レビューコメント

設定がうまくいっていれば、下記のように github-actions からの自動レビューコメントが付きます。

comment by github-actions

実際に動かしてみたPull Request

実際にこの構成で設定してみたPRは下記になります。

rubocop x reviewdog x GitHub Actions by toshimaru · Pull Request #16 · toshimaru/Test

余談

本記事ではミニマルな設定を紹介しましたが、実行高速化のために実際は下記の設定もあわせてしたほうが良いでしょう。

  • bundler cache の設定
  • rubocop cache の設定(~/.cache/rubocop_cache
  • --parallel オプションの追加
  • このエントリーをはてなブックマークに追加