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

jobs:
  build:
    docker:
      - image: circleci/node:8
    working_directory: ~/project
    steps:
      - checkout
      - attach_workspace:
          at: ~/project
      # Download and cache dependencies
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "package-lock.json" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-
      - run:
          name: Install npm dependencies
          command: npm install

      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package-lock.json" }}

  lint:
    docker:
      - image: circleci/node:8
    working_directory: ~/project
    steps:
      - checkout
      - attach_workspace:
          at: ~/project
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "package-lock.json" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-
      - run:
          name: Linter
          command: npm run lint
  test:
    docker:
      - image: circleci/node:8
    working_directory: ~/project
    steps:
      - checkout
      - attach_workspace:
          at: ~/project
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "package-lock.json" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-
      - run:
          name: Unit tests
          command: npm run test
  coverage:
    docker:
      - image: circleci/node:8
    working_directory: ~/project
    steps:
      - checkout
      - attach_workspace:
          at: ~/project
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "package-lock.json" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-
      - run:
          name: Unit tests with coverage report
          command: npm run test
          environment:
            SOLIDITY_COVERAGE: true

      # TODO(xinbenlv, #1839): run SOLC_NIGHTLY to be run but allow it to fail.
      # TODO(xinbenlv, #1839): requires SLACK WEBHOOK to be setup by repo owner.

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