.circleci/config.yml
version: 2.1
defaults: &defaults
working_directory: ~/repo
docker:
- image: circleci/ruby:2.6
environment:
BUNDLE_PATH: vendor/bundle
commands:
prepare:
description: "Common preparation steps"
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-{{ checksum "Gemfile.lock" }}
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run:
name: install bundler
command: |
gem install bundler -v 2.2.16
- run:
name: install dependencies
command: |
bundle config set path 'vendor/bundle'
bundle install --jobs=4 --retry=3
- save_cache:
paths:
- ./vendor/bundle
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
jobs:
download_test_reporter:
<<: *defaults
steps:
- run:
name: Download cc-test-reporter
command: |
mkdir -p tmp/
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./tmp/cc-test-reporter
chmod +x ./tmp/cc-test-reporter
- persist_to_workspace:
root: tmp
paths:
- cc-test-reporter
rspec:
working_directory: ~/repo
docker:
- image: << parameters.image >>
environment:
BUNDLE_PATH: vendor/bundle
parameters:
image:
type: string
environment:
COVERAGE: "1"
CI: "1"
steps:
- prepare
- attach_workspace:
at: ~/repo/tmp
- run:
name: Rspec
command: |
bundle exec rspec
./tmp/cc-test-reporter format-coverage -t simplecov -o tmp/codeclimate.$CIRCLE_BUILD_NUM.json coverage/coverage.json
- persist_to_workspace:
root: tmp
paths:
- codeclimate.*.json
rubocop:
<<: *defaults
steps:
- prepare
- run:
name: Rubocop
command: bundle exec rubocop
upload-coverage:
<<: *defaults
environment:
CC_TEST_REPORTER_ID: eba8148e38d4303f73466f347b7a2d1a592f8314a13c10787382eac08453201d
steps:
- attach_workspace:
at: ~/repo/tmp
- run:
name: Upload coverage results to Code Climate
# --parts flag must match the build matrix size
command: |
./tmp/cc-test-reporter sum-coverage -o tmp/codeclimate.json --parts 3 tmp/codeclimate.*.json
./tmp/cc-test-reporter upload-coverage -i tmp/codeclimate.json
workflows:
version: 2
pipeline:
jobs:
- download_test_reporter
- rspec:
requires:
- download_test_reporter
matrix:
parameters:
image:
- "circleci/ruby:2.6"
- "circleci/ruby:2.7"
- "circleci/ruby:3.0"
- rubocop
- upload-coverage:
requires:
- rspec