version: 2
vm_settings: &vm_settings
  docker:
    - image: circleci/node:6.12.3-browsers

jobs:
  install_template_deps:
    <<: *vm_settings
    working_directory: ~/project/webpack-template
    steps:
      - checkout
      - restore_cache:
          key: template-cache-{{ checksum "package.json" }}
      - run:
          name: Install npm dependencies
          command: npm install
      - save_cache:
          key: template-cache-{{ checksum "package.json" }}
          paths:
            - node_modules
      - run:
          name: Rollout minimal scenario
          command: VUE_TEMPL_TEST=minimal node_modules/.bin/vue init . test-minimal
      - run:
          name: Rollout full scenario
          command: VUE_TEMPL_TEST=full node_modules/.bin/vue init . test-full
      - run:
          name: Rollout full-karma-airbnb scenario
          command: VUE_TEMPL_TEST=full-karma-airbnb node_modules/.bin/vue init . test-full-karma-airbnb
      - persist_to_workspace:
          root: ~/project/webpack-template
          paths:
            - node_modules
            - test-*

  scenario_minimal:
    <<: *vm_settings
    environment:
      - VUE_TEMPL_TEST: minimal
    working_directory: ~/project/webpack-template/test-minimal
    steps:
      - attach_workspace:
          at: '~/project/webpack-template'
      - restore_cache:
          key: template-cache-minimal-{{ checksum "package.json" }}
      - run:
          name: Install npm dependencies
          command: npm install
      - save_cache:
          key: template-cache-minimal-{{ checksum "package.json" }}
          paths:
            - node_modules
      - run:
          name: Test build
          command: npm run build

  scenario_full:
    <<: *vm_settings
    working_directory: ~/project/webpack-template/test-full
    environment:
      - VUE_TEMPL_TEST: full
    steps:
      - attach_workspace:
          at: '~/project/webpack-template'
      - restore_cache:
          key: template-cache-full-{{ checksum "package.json" }}
      - run:
          name: Install npm dependencies
          command: npm install
      - save_cache:
          key: template-cache-full-{{ checksum "package.json" }}
          paths:
            - node_modules
      - run:
          name: Run Lint
          command: npm run lint -- --fix
      - run:
          name: Run Unit tests
          command: npm run unit
          when: always
      - run:
          name: Run e2e tests
          command: npm run e2e
          when: always
      - run:
          name: Test build
          command: npm run build
          when: always

  scenario_full-karma-airbnb:
    <<: *vm_settings
    working_directory: ~/project/webpack-template/test-full-karma-airbnb
    environment:
      - VUE_TEMPL_TEST: full-karma-airbnb
    steps:
      - attach_workspace:
          at: '~/project/webpack-template'
      - restore_cache:
          key: template-cache-full-karma-airbnb-{{ checksum "package.json" }}
      - run:
          name: Install npm dependencies
          command: npm install
      - save_cache:
          key: template-cache-full-karma-airbnb-{{ checksum "package.json" }}
          paths:
            - node_modules
      - run:
          name: Run Lint
          command: npm run lint -- --fix
      - run:
          name: Run Unit tests
          command: npm run unit
          when: always
      - run:
          name: Run e2e tests
          command: npm run e2e
          when: always
      - run:
          name: Test build
          command: npm run build
          when: always


workflows:
  version: 2
  build_and_test:
    jobs:
      - install_template_deps
      - scenario_minimal:
          requires:
            - install_template_deps
      - scenario_full:
          requires:
            - install_template_deps
      - scenario_full-karma-airbnb:
          requires:
            - install_template_deps