#CircleCIでRuboCopが動かん
CircleCIでRuboCopを動かそうとすると下記エラーが出力されて動いてくれませんでした。
ローカルでRubocop走らせたら正常にチェックしてくれました。
#!/bin/bash -eo pipefail
bundle exec rubocop
Error: Unsupported Ruby version 2.1 found in `TargetRubyVersion` parameter (in vendor/bundle/ruby/2.5.0/gems/rainbow-3.0.0/.rubocop.yml). 2.1-compatible analysis was dropped after version 0.58.
Supported versions: 2.2, 2.3, 2.4, 2.5, 2.6
Exited with code 2
0.58以降のRuboCopはRubyのバージョン2.2, 2.3, 2.4, 2.5, 2.6しか対応してませんよ、ということらしいです。
#バージョンちゃんと指定してんじゃん
とはいえ、CircleCIのコンフィグでちゃんとバージョンを2.5.1に設定しとるんですよ。
version: 2
jobs:
build:
docker:
# specify the version you desire here
- image: circleci/ruby:2.5.1-node-browsers # <-ほら
#こうやったらええよ
結果としてRuboCopのコンフィグを編集することで解決できました。
AllCops:
TargetRubyVersion: 2.5.1
Exclude:
- 'vendor/**/*'
#なんでそうなるの
CircleCIの仕様上、gemたちはvendor/bundle配下にインストールされるそうです。
で、その中にRuboCopがつかっているrainbowとかいうGEMがあります。
rainbowは使うRubyのバージョンを独自で定義しているみたいで、そのバージョンがRubocopの対象外
ということみたいです。確かにエラーメッセージにもin vendor/bundle/ruby/2.5.0/gems/rainbow-3.0.0/.rubocop.yml
て書いてありますしね。
だから、と記載して、RubocopのTargetRubyVersion:
でRubyのバージョンを指定し、- 'vendor/**/*'
でvendorディレクトリ配下のチェックをスキップするようにしたら解決したのですね。めんどくさいですね。
しかしそれならrainbowがローカルでも悪さをしてRubocop失敗しないのかな。。という不思議。