version: 2

defaults: &defaults
  working_directory: ~/repo
  docker:
    - image: circleci/node:10

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

jobs:
  dependencies:
    <<: *defaults
    steps:
      - checkout
      - *restore_cache
      - run: yarn install --frozen-lockfile
      - run: yarn audit --level moderate || [ $? -le 2 ]
      - save_cache:
          key: yarn-packages-{{ checksum "yarn.lock" }}
          paths:
            - ~/.cache/yarn
            - node_modules
  unit_tests:
    <<: *defaults
    steps:
      - checkout
      - *restore_cache
      - run: yarn test
  lint:
    <<: *defaults
    steps:
      - checkout
      - *restore_cache
      - run: yarn lint

workflows:
  version: 2
  build_and_test:
    jobs:
      - dependencies
      - unit_tests:
          requires:
            - dependencies
      - lint:
          requires:
            - dependencies
