reviewdog-golangci-lint を使う
概要
Github Actions への移行の一環として、これまで使っていた Sider というサービスを reviewdog + golangci-lint に移行してみました。結構ハマったのでメモ。
ちなみに Sider というのはいろいろな lint から好きなのを選んで、Pull Request の時に警告があれば差し込んでくれるサービスです。Sider は設定が簡単で、いろいろな言語、linter を UI でぽちぽち選択できとても便利なので、積極的に置き換える必要もないのですが(むしろ置き換えない方がいいのかも知れない)、GitHub Actions に置き換える気運が起きてしまったので仕方なかった・・・。
golangci-lint の設定
golangci-lint の設定を reviewdog に直接設定することも可能ですが、開発時にも利用することを見越して .golangci-lint.yml
に設定を書くことにします。設定の書き方はドキュメントに丁寧に書いてあるのでここの値を試行錯誤します。試行錯誤した → .golangci-lint.yml
reviewdog-golang-ci の設定
lint の警告をどのレベルで指摘するか
lint は過剰に検出をすることがままあります。また、警告されるけどあとで直すつもりとかいう場合に、毎回チェックが failed
してしまうのはちょっとやりすぎな感があります。逆に、どんな警告が出ていても無視せずに failed
にしたい場合もあるでしょう。reviewdog はその点考慮されていて、警告を
- Error
- Warning
- Info
のどのレベルで扱うかを指定できます。すばらしい。
コメントで指摘できる範囲
さて Pull Request で lint の指摘をしてくれるようになるわけですが、すべての lint エラーを PR のコメントにしてくれるわけではありません。コメントを入れてくれるのは(というか、入れられるのは)差分の対象になっている場合だけです。
差分の対象になっていない範囲に lint エラーがあってもコメントは入りません。ただ、filter_mode
を nofilter
にしておけば Github Actions の Annotations のところには出してくれるようです。
golangci-lint の設定を指定
reviewdog に lint の設定を指定します。設定ファイルを作ってるので、それを指定すればいいです。"--config=.golangci.yml"
のようにファイルを指定します。パスはレポジトリからの相対パスになってます。たとえば、.gitnub
に入れておくなら "-config=.github/.golangci.yml"
のように指定します。
GitHub Token
reviewdog は Pull Request にコメントしたりするので GitHub Token を必要とします。GitHub は最初からこれを用意してくれているので、それを指定するだけで特に何か手順がいるわけではないです。GitHub がデフォルトで用意してくれている Token は secrets.GITHUB_TOKEN
と指定するか、github.token
と指定すれば参照できるようです。
結論
name: Reviewdog
on:
pull_request:
types: [opened, synchronize]
jobs:
golangci-lint:
name: golangci-lint
runs-on: ubuntu-latest
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v2
- name: golangci-lint
uses: reviewdog/action-golangci-lint@v1
with:
github_token: ${{ github.token }}
level: warning
golangci_lint_flags: "--config=.golangci.yml"
filter_mode: nofilter
reporter: github-pr-review
ここ間違ってるよ!とか、もっと便利に出来るよ! とかあったら教えてください。
Happy hacking!
Discussion