version: 2

defaults: &defaults
  working_directory: ~/project/vue
  docker:
    - image: circleci/node:6-browsers

jobs:
  install:
    <<: *defaults
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-vue-{{ .Branch }}-{{ checksum "package-lock.json" }}
            - v1-vue-{{ .Branch }}-
            - v1-vue-
      - run: npm install
      - save_cache:
          key: v1-vue-{{ .Branch }}-{{ checksum "package-lock.json" }}
          paths:
            - node_modules/
      - persist_to_workspace:
          root: ~/project
          paths:
            - vue

  lint-flow-types:
    <<: *defaults
    steps:
      - attach_workspace:
          at: ~/project
      - run: npm run lint
      - run: npm run flow
      - run: npm run test:types

  test-cover:
    <<: *defaults
    steps:
      - attach_workspace:
          at: ~/project
      - run: npm run test:cover
      - run:
         name: report coverage stats for non-PRs
         command: |
           if [[ -z $CI_PULL_REQUEST ]]; then
             cat ./coverage/lcov.info | ./node_modules/.bin/codecov
           fi

  test-e2e:
    <<: *defaults
    steps:
      - attach_workspace:
          at: ~/project
      - run: npm run test:e2e -- --env phantomjs

  test-ssr-weex:
    <<: *defaults
    steps:
      - attach_workspace:
          at: ~/project
      - run: npm run test:ssr
      - run: npm run test:weex

workflows:
  version: 2
  install-and-parallel-test:
    jobs:
      - install
      - test-cover:
          requires:
            - install
      - lint-flow-types:
          requires:
            - install
      - test-e2e:
          requires:
            - install
      - test-ssr-weex:
          requires:
            - install
