visualitypl/jsonapi_parameters

View on GitHub
.circleci/config.yml

Summary

Maintainability
Test Coverage
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