.circleci/config.yml
version: 2.1
references:
attach_workspace_to_tmp: &attach_workspace_to_tmp
attach_workspace:
at: ~/project/tmp
bundle: &bundle
run:
name: Bundle
command: |
if [ $BUNDLE_GEMFILE = ./gemfiles/rails42.gemfile ]; then
gem install -v '1.17.3' bundler;
bundle _1.17.3_ install;
else
gem install bundler;
bundle install;
fi
gemfile_lock_audit: &gemfile_lock_audit
run:
name: audit
command: |
if [ $BUNDLE_GEMFILE != ./gemfiles/rails42.gemfile ]; then
bin/audit;
fi
specs: &specs
run:
name: bin/ci
command: bin/ci
generate_coverage: &generate_coverage
run:
name: Generate coverage
command: ./tmp/cc-test-reporter format-coverage -t simplecov -o ./tmp/codeclimate.$CIRCLE_JOB.json coverage/.resultset.json
persist_to_workspace_coverage: &persist_to_workspace_coverage
persist_to_workspace:
root: ~/project/tmp
paths:
- ./*.json
jobs:
download-and-persist-cc-test-reporter:
docker:
- image: circleci/ruby:2.6
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
upload-test-coverage:
docker:
- image: circleci/ruby:2.6
steps:
- attach_workspace:
at: ~/project/tmp
- run:
name: Upload coverage results to Code Climate
command: |
./tmp/cc-test-reporter sum-coverage tmp/codeclimate.*.json -p $(ls -la |grep -i ruby |wc -l |awk '{print $1}') -o tmp/codeclimate.total.json
./tmp/cc-test-reporter upload-coverage -i tmp/codeclimate.total.json
test:
parameters:
ruby_version:
type: string
gemfile:
type: string
docker:
- image: "circleci/ruby:<<parameters.ruby_version>>"
environment:
BUNDLE_GEMFILE: "./gemfiles/<<parameters.gemfile>>"
steps:
- checkout
- <<: *attach_workspace_to_tmp
- <<: *bundle
- <<: *gemfile_lock_audit
- <<: *specs
- <<: *generate_coverage
- <<: *persist_to_workspace_coverage
workflows:
version: 2
commit:
jobs:
- download-and-persist-cc-test-reporter
- upload-test-coverage:
filters:
branches:
only:
- master
requires:
- test
- test:
matrix:
parameters:
ruby_version: ["2.5", "2.6", "2.7", "3.0"]
gemfile: ["rails61.gemfile", "rails60.gemfile", "rails5.gemfile", "rails42.gemfile"]
exclude:
- ruby_version: "3.0"
gemfile: rails5.gemfile
- ruby_version: "3.0"
gemfile: rails42.gemfile
- ruby_version: "2.7"
gemfile: rails42.gemfile
- ruby_version: "2.6"
gemfile: rails42.gemfile
requires:
- download-and-persist-cc-test-reporter