version: 2
# 2.1 does not yet support local run
# unless with workaround. For simplicity just use it.
# https://github.com/CircleCI-Public/circleci-cli/issues/79

aliases:
  - &defaults
    docker:
      - image: circleci/node:10

  - &cache_key_node_modules
    key: v1-node_modules-{{ checksum "package-lock.json" }}

jobs:
  dependencies:
    <<: *defaults
    steps:
      - checkout
      - restore_cache:
          <<: *cache_key_node_modules
      - run:
          name: Install npm dependencies and prepare
          command: |
            if [ ! -d node_modules ]; then
              npm ci
            else
              npm run prepare
            fi
      - persist_to_workspace:
          root: .
          paths:
            - node_modules
            - build
      - save_cache:
          paths:
            - node_modules
          <<: *cache_key_node_modules

  lint:
    <<: *defaults
    steps:
      - checkout
      - attach_workspace:
          at: .
      - run:
          name: Linter
          command: npm run lint
  test:
    <<: *defaults
    steps:
      - checkout
      - attach_workspace:
          at: .
      - run:
          name: Unit tests
          command: npm run test

  coverage:
    <<: *defaults
    steps:
      - checkout
      - attach_workspace:
          at: .
      - run:
          name: Unit tests with coverage report
          command: npm run coverage

      # TODO(xinbenlv, #1839): run SOLC_NIGHTLY to be run but allow it to fail.

workflows:
  version: 2
  everything:
    jobs:
      - dependencies
      - lint:
          requires:
            - dependencies
      - test:
          requires:
            - dependencies
      - coverage:
          requires:
            - dependencies

