version: 2

defaults: &defaults
  working_directory: ~/project/vue
  docker:
    - image: vuejs/ci

jobs:
  install:
    <<: *defaults
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-vue-{{ .Branch }}-{{ checksum "yarn.lock" }}
            - v1-vue-{{ .Branch }}-
            - v1-vue-
      - run: npm install
      - save_cache:
          key: v1-vue-{{ .Branch }}-{{ checksum "yarn.lock" }}
          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
             ./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

  trigger-regression-test:
    <<: *defaults
    steps:
      - run:
          command: |
            curl --user ${CIRCLE_TOKEN}: \
            --data build_parameters[CIRCLE_JOB]=update \
            --data build_parameters[VUE_REVISION]=${CIRCLE_SHA1} \
            https://circleci.com/api/v1.1/project/github/vuejs/regression-testing/tree/master

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
      - trigger-regression-test:
          filters:
            branches:
              only:
                - "2.6"
                - regression-test
          requires:
            - test-cover
            - lint-flow-types
            - test-e2e
            - test-ssr-weex
  weekly_regression_test:
    triggers:
      - schedule:
          # At 13:00 UTC (9:00 EDT) on every Monday
          cron: "0 13 * * 1"
          filters:
            branches:
              only:
                dev
    jobs:
      - install
      - test-cover:
          requires:
            - install
      - lint-flow-types:
          requires:
            - install
      - test-e2e:
          requires:
            - install
      - test-ssr-weex:
          requires:
            - install
      - trigger-regression-test:
          requires:
            - test-cover
            - lint-flow-types
            - test-e2e
            - test-ssr-weex
