# -------------------------
#         ALIASES
# -------------------------
aliases:
  # CACHE
  - &restore-yarn-cache
    keys:
      - yarn-cache-{{ arch }}-{{ checksum "package.json" }}-{{ checksum "yarn.lock" }}
      - yarn-cache-{{ arch }}

  - &save-yarn-cache
    paths:
      - ~/.cache/yarn
      - ~/Library/Detox/ios
    key: yarn-cache-{{ arch }}-{{ checksum "package.json" }}-{{ checksum "yarn.lock" }}

  # -------------------------
  #       INSTALLATION
  # -------------------------
  - &yarn
    name: Yarn Install
    command: |
      yarn install --network-concurrency 1 --non-interactive --cache-folder ~/.cache/yarn & wait

  # -------------------------
  #         ANALYSE
  # -------------------------

  - &flow
    name: Flow Checks
    command: yarn test:flow

  - &javascript
    name: Javascript Tests
    command: yarn test:js

  - &eslint
    name: Eslint Checks
    command: yarn test:lint

  - &prettier
    name: Prettier Checks
    command: yarn test:prettier

# -------------------------
#        DEFAULTS
# -------------------------
defaults: &defaults
  working_directory: ~/react-native-masked-view
  environment:
    - GIT_COMMIT_DESC: git log --format=oneline -n 1 $CIRCLE_SHA1

# JAVASCRIPT
js_defaults: &js_defaults
  <<: *defaults
  docker:
    - image: circleci/node:8
  environment:
    - PATH: '/opt/yarn/yarn-v1.5.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

# -------------------------
#          JOBS
# -------------------------
version: 2
jobs:
  # Set up a Node environment for downstream jobs
  checkout-code:
    <<: *js_defaults
    steps:
      - checkout
      - restore-cache: *restore-yarn-cache
      - run: rm -rf node_modules
      - run: yarn cache clean
      - run: *yarn
      - save-cache: *save-yarn-cache
      - persist_to_workspace:
          root: .
          paths: .

  flow:
    <<: *js_defaults
    steps:
      - attach_workspace:
          at: ~/react-native-masked-view
      - run: *flow

  javascript:
    <<: *js_defaults
    steps:
      - attach_workspace:
          at: ~/react-native-masked-view
      - run: *javascript

  eslint:
    <<: *js_defaults
    steps:
      - attach_workspace:
          at: ~/react-native-masked-view
      - run: *eslint

  prettier:
    <<: *js_defaults
    steps:
      - attach_workspace:
          at: ~/react-native-masked-view
      - run: *prettier

# -------------------------
#        WORK FLOWS
# -------------------------
workflows:
  version: 2
  Test:
    jobs:
      - checkout-code
      - flow:
          requires:
            - checkout-code
      - eslint:
          requires:
            - checkout-code
      - prettier:
          requires:
            - checkout-code
      - javascript:
          requires:
            - checkout-code
