CircleCIのビルドにrubocopを導入する
静的コード解析ツールであるrubocopを 導入するだけなら簡単にできたので記録に残しておきたいと思います。
.rubocop.ymlの準備
# Gemfile gem 'rubocop'
でbundle install
プロジェクトのルートに.rubocop.ymlを配置
# .rubocop.yml AllCops: Exclude: - "tmp/**/*" - "config/initializers/*" - "vendor/**/*" - "db/schema.rb" - "node_modules/**/*" - "db/migrate/*.rb" - "bin/*" DisplayCopNames: true TargetRubyVersion: 2.6.3 Rails: Enabled: true Style/AndOr: EnforcedStyle: conditionals Style/AsciiComments: Enabled: false Style/Documentation: Enabled: false Style/NumericLiterals: Enabled: false Style/ClassAndModuleChildren: Enabled: false Bundler/OrderedGems: Enabled: false Lint/ShadowedException: Enabled: false LineLength: Enabled: false Metrics/BlockLength: Exclude: - 'spec/**/*' Max: 40 Metrics/AbcSize: Enabled: true Max: 20 Metrics/MethodLength: Enabled: true Max: 15
ほぼほぼ、以下のサイトのかたの設定で作ってしまいました。(ありがとうございます。)
【Rails】GithubとCircleCIを連携してcommit時にrspecとrubocopを動かす
specファイルはブロックが長くなりがちなので、 Metrics/BlockLengthでひっかりまくってしまいます。 そのため、
Exclude: - 'spec/**/*'
でspecファイル諸々を対象から除外してしまっています。
CircleCI
あとは普通に実行するには
bundle exec rubocop
とすれば、
先ほど作成した.rubocop.ymlの設定に基づいて、
ファイルを自動でチェックしてくれます。
(bundle exec rubocop -a
でできる範囲で自動整形してくれるのが嬉しい…)
CircleCIも普通に実行するだけです。 私は、テストとrubocopのチェックを同じタイミングでするようにしてしまいました。
version: 2 jobs: build: machine: image: circleci/classic:edge steps: - checkout - run: name: Decode dotenv file command: echo ${ENV} | base64 --decode > /home/circleci/project/.env - restore_cache: keys: - gem-cache-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }} - gem-cache-{{ arch }}-{{ .Branch }} - gem-cache - run: name: docker-compose build command: docker-compose build - run: name: bundle install command: docker-compose run web bundle install --jobs=4 --retry=3 - save_cache: key: gem-cache-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }} paths: - ~/.bundle - run: name: docker-compose up command: docker-compose up -d - run: name: install dockerize command: wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && sudo tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz environment: DOCKERIZE_VERSION: v0.3.0 - run: name: Wait for DB command: dockerize -wait tcp://localhost:5432 -timeout 1m - run: name: before_test: setup db command: docker-compose run web bin/rails db:create db:migrate - run: name: rubocop command: docker-compose run web bundle exec rubocop - run: name: rspec command: docker-compose run web bin/rspec - run: name: docker-compose down command: docker-compose down
今日は以上です。 (にしてもいつもこれ、キャッシュ効いてる気がしない)