GitHub Actions が RuboCop できないのはどう考えてもお前らが悪い!
TL;DR
-
reviewdog/action-rubocop
は差分に対しての Rubocop 結果を Pull Request 内でコメントしてくれるのでお薦め -
on: push
でトリガーされた Actions は PR 内であっても認識しないので,これを動かす時は,on: pull_request
推奨 (それはそう) - 要は,以下の様に公式準拠にすれば問題無いです
name: reviewdog
on: [pull_request]
jobs:
rubocop:
name: runner / rubocop
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v1
- uses: ruby/setup-ruby@v1
with:
ruby-version: 3.0.0
- name: rubocop
uses: reviewdog/action-rubocop@v1
with:
rubocop_version: gemfile
rubocop_extensions: rubocop-rails:gemfile rubocop-rspec:gemfile
github_token: ${{ secrets.github_token }}
reporter: github-pr-review # Default is github-pr-check
目的
他の記事でも触れられている通り,冒頭の様に reviewdog/action-rubocop
の公式ドキュメントに準拠する事に尽きます
しかし実際に利用するに当たり様々なエラーに直面しましたので,
簡単に GitHub Actions で使える RuboCop を紹介した後に, reviewdog/action-rubocop
で生じるエラーに関して簡単に述べます
GitHub Actions で動かす RuboCop
少し調べると bundle exec rubocop
を走らせてる記事が多く散見されますが, GitHub との連携も優れている方法を探してみます.
そこで取り敢えず以下の 2 つを見つけましたが,
結論としては reviewdog/action-rubocop
が GitHub との親和性も高く便利に思われます
ライブラリ | 差分に対しての Rubocop 適用 | PR 内でコメント |
---|---|---|
1. reviewdog/action-rubocop |
✅ | ✅ |
2. andrewmcodes-archive/rubocop-linter-action |
❌ | ❌(アノテーションのみ) |
順に見てみます
reviewdog/action-rubocop
1. reviewdog/action-rubocop
(以下, action-rubocop
) は reviewdog/reviewdog の系列のものらしいです
他にも GitHub の PR にコメントしてくるツールを色々提供してくれているようで,使い勝手も良い雰囲気でしたすが,設定項目は本家の reviewdog/reviewdog を見た方が良さそうでした
やはり犬は可愛いですね (U^ω^)
action-rubocop
を使った PR の表示例. github-actions という Bot が,Rubocop 違反箇所を勝手にコメントで指摘してくれます.
andrewmcodes-archive/rubocop-linter-action
2. 一方の andrewmcodes-archive/rubocop-linter-action
(以下, rubocop-linter-action
)は,
公式リポジトリがアーカイブされていて少し微妙でした
まずこれはコメントでは指摘してくれません
rubocop-linter-action
を使った PR の表示例. Rubocop で違反箇所があると GitHub Actions が落ちます.
そして PR の Files changed
では変更したファイルに限定してアノテーションを表示してくれますが,
変更したファイルの変更箇所とは異なる部分であっても RuboCop の意に沿わない部分があると全て晒し上げられます
因みに,一応試しに pull_request
をトリガーにしてみましたが,
やはりコメントでの指摘はしてくれないようで,それどころか今度はアノテーションが消失しました……
GitHub Actions が落ちますし,コメントやアノテーションで見るならやはり rubocop-linter-action は微妙そうです [3]
(あまり使わない線で考えていたので深追いはしません)
まとめ
という訳で action-rubocop
に焦点を絞って紹介していきます
action-rubocop
のエラー例
エラーメッセージのみからは類推が難しい場合が多かったので,一応纏めておきます
以下に挙げるテスト用のリポジトリで色々試してみましたので,もしよろしければこちらから確認をお願いいたします
this is not PullRequest build
Running rubocop with reviewdog 🐶 ...
reviewdog: this is not PullRequest build.
Broken pipe @ io_write - <STDOUT>
/opt/hostedtoolcache/Ruby/2.7.0/x64/lib/ruby/gems/2.7.0/gems/rubocop-1.14.0/lib/rubocop/formatter/clang_style_formatter.rb:18:in `write'
...
因みにこの場合はエラーは吐きません
これは on: [push, pull_request]
もしくは on: pull_request
で直りました
on: push
でトリガーされた Actions は PR 内であっても認識しないので (それはそう)
rubocop-linter-action
(使わない方) では push
だったので混同しますね……
name: reviewdog
- on: [push]
+ on: [pull_request]
jobs:
...
reviewdog: failed to run 'git rev-parse --show-prefix': exit status 128.
Running rubocop with reviewdog 🐶 ...
reviewdog: PullRequest needs 'git' command: failed to run 'git rev-parse --show-prefix': exit status 128
Error: Process completed with exit code 1.
別の lint の Issue でも同じ内容が質問されていましたが[5], actions/checkout@v2
を忘れると起きます
...
jobs:
rubocop:
name: runner / rubocop
runs-on: ubuntu-latest
steps:
+ - name: Check out code # nameはお好みで無くても良い
+ uses: actions/checkout@v1
...
You don't have write permissions for the /var/lib/gems/2.7.0 directory.
Installing rubocop with extensions ... https://github.com/rubocop/rubocop
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /var/lib/gems/2.7.0 directory.
Error: Process completed with exit code 1.
詳細は割愛しますが,
setup が無いと正常に GitHub Actions が ruby の gem を参照できないようです[6]
これも, rubocop-linter-action
(使わない方) では不要だったので少しややこしいですね
...
jobs:
rubocop:
name: runner / rubocop
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v1
+ - uses: ruby/setup-ruby@v1
+ with:
+ ruby-version: 2.7.0 # バージョンは自分のプロジェクトに合わせて
...
補足
私がモテないのはどう考えてもお前らが悪い!(以下,わたモテ)に関して,
私は数年前にアニメで見た程度のにわかですが,
「気持ち悪さ」の描写が的確で共感性羞恥心を抉られる話で良かったです
最近は百合展開になったり,ロシアで人気になったり[7]で話題に事欠かず再燃の機運が高まっていますね
この記事を見てしまった方は,この機会に もこっち の勇姿を見届けてはいかがでしょうか?
-
「Codecov」への第三者からの不正アクセスによる当社への影響および一部顧客情報等の流出について | 株式会社メルカリ ↩︎
-
reviewdog: failed to run 'git rev-parse --show-prefix': exit status 128 · Issue #21 · reviewdog/action-tflint ↩︎
-
reviewdog/action-rubocop 実行時に起きた Gem::FilePermissionError の対処 ↩︎
-
Watamotist さんは Twitter を使っています 「#わたモテ https://t.co/Fvm4jOIM3f
チャンネル登録 785 万人のロシア系 YouTuber 系ラッパー #Morgenshtern の絶対にスマッシュヒットする新曲の MV にもこっち https://t.co/bpLNTxtr5I」 / Twitter ↩︎
Discussion