mashafrancis/butternut-user

View on GitHub
.circleci/config.yml

Summary

Maintainability
Test Coverage
defaults: &defaults
  docker:
    - image: circleci/node:10.13.0
  working_directory: ~/butternut-user

cmd_install_dependencies: &cmd_install_dependencies
  run:
    name: Install project dependencies
    command: yarn install

cmd_restore_cache: &cmd_restore_cache
  restore_cache:
    keys:
      - yarn-packages-{{ checksum "yarn.lock" }}

cmd_save_cache: &cmd_save_cache
  save_cache:
    key: yarn-packages-{{ checksum "yarn.lock" }}
    paths:
      - ~/.cache/yarn
      - node_modules

cmd_download_cc_test_reporter: &cmd_download_cc_test_reporter
  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

cmd_attach_workspace: &cmd_attach_workspace
  attach_workspace:
    at: tmp/

persist_to_workspace: &persist_to_workspace
  persist_to_workspace:
    root: .
    paths: .

# The CircleCi Jobs Tree
version: 2
jobs:
  build:
    <<: *defaults
    steps:
      - checkout
      - *cmd_restore_cache
      - *cmd_install_dependencies
      - *cmd_save_cache
      - *persist_to_workspace

  # Job to run unit tests
  unit_tests:
    <<: *defaults
    steps:
      - checkout
      - *cmd_restore_cache
      - *cmd_install_dependencies
      - *cmd_download_cc_test_reporter
      - run:
          name: Run unit tests
          command: |
            yarn test:unit
            /tmp/cc-test-reporter format-coverage -t lcov -o tmp/codeclimate.unittest.json coverage/unittest/lcov.info
      - persist_to_workspace:
          root: tmp
          paths:
            - codeclimate.unittest.json

  # Job to upload test report/coverage to code climate
  upload-coverage:
    <<: *defaults
    steps:
      - checkout
      - *cmd_download_cc_test_reporter
      - *cmd_attach_workspace
      - run:
          name: Upload coverage results to Code Climate
          command: |
            /tmp/cc-test-reporter sum-coverage -p 1 -o /tmp/codeclimate.total.json tmp/codeclimate.*.json
            /tmp/cc-test-reporter upload-coverage -i /tmp/codeclimate.total.json
            sed -n -e 24p /tmp/codeclimate.total.json

# The Workflow tree
workflows:
  version: 2
  build_and_test:
    jobs:
      - build
      - unit_tests:
          requires:
            - build
      - upload-coverage:
          requires:
            - unit_tests