version: 2

references:
  container_config: &container_config
    docker:
      - image: circleci/node:lts
    working_directory: ~/ant-design

  attach_workspace: &attach_workspace
    attach_workspace:
      at: ~/ant-design

  react_16: &react_16
    environment:
      REACT: 16

  workflow: &workflow
    jobs:
      - setup:
          filters:
            branches:
              ignore: gh-pages
      - dist:
          requires:
          - setup
      - compile:
          requires:
          - setup
      - lint:
          requires:
            - setup
      - test_dist:
          requires:
            - dist
      - test_lib:
          requires:
            - compile
      - test_es:
          requires:
            - compile
      - test_dom:
          requires:
            - setup
      - test_node:
          requires:
            - setup
      - check_metadata:
          requires:
            - setup

jobs:
  setup:
    <<: *container_config
    steps:
      - checkout
      - run: node -v
      - run: npm -v
      - run: npm install
      - run:
          command: |
            set +eo
            npm ls
            true
      - persist_to_workspace:
          root: ~/ant-design
          paths:
            - node_modules
      - store_artifacts:
          path: package-lock.json

  dist:
    <<: *container_config
    steps:
      - checkout
      - *attach_workspace
      - run: npm run dist
      - run: node ./tests/dekko/dist.test.js
      - run: npm run bundlesize
      - persist_to_workspace:
          root: ~/ant-design
          paths:
            - dist

  compile:
    <<: *container_config
    steps:
      - checkout
      - *attach_workspace
      - run: npm run compile
      - run: node ./tests/dekko/lib.test.js
      - persist_to_workspace:
          root: ~/ant-design
          paths:
            - lib
            - es

  lint:
    <<: *container_config
    steps:
      - checkout
      - *attach_workspace
      - run: npm run lint

  test_dist:
    <<: *container_config
    <<: *react_16
    steps:
      - checkout
      - *attach_workspace
      - run:
          command: npm test -- -w 1
          environment:
            LIB_DIR: dist

  test_lib:
    <<: *container_config
    <<: *react_16
    steps:
      - checkout
      - *attach_workspace
      - run:
          command: npm test -- -w 1
          environment:
            LIB_DIR: lib

  test_es:
    <<: *container_config
    <<: *react_16
    steps:
      - checkout
      - *attach_workspace
      - run:
          command: npm test -- -w 1
          environment:
            LIB_DIR: es

  test_dom:
    <<: *container_config
    <<: *react_16
    steps:
      - checkout
      - *attach_workspace
      - run: npm test -- -w 1 --coverage
      - run: bash <(curl -s https://codecov.io/bash)

  test_node:
    <<: *container_config
    <<: *react_16
    steps:
      - checkout
      - *attach_workspace
      - run: npm run test-node -- -w 1

  check_metadata:
    <<: *container_config
    steps:
      - checkout
      - *attach_workspace
      - run: node ./scripts/check-demo.js

workflows:
  version: 2
  build_test:
    <<: *workflow
  nightly:
    <<: *workflow
    triggers:
      - schedule:
          cron: "0 0 * * *"
          filters:
            branches:
              only:
                - master
