version: 2.1
orbs:
  ship: auth0/ship@0
executors:
  docker-executor:
    docker:
      - image: cimg/node:lts-browsers
jobs:
  build-and-test:
    executor: docker-executor
    environment:
      LANG: en_US.UTF-8
    steps:
      - checkout
      - run:
          name: Update Yarn
          command: 'npm update -g yarn'
      - restore_cache:
          name: Restore Yarn Package Cache
          key: yarn-packages-{{ checksum "yarn.lock" }}
      - run:
          name: Install Dependencies
          command: yarn install
      - save_cache:
          name: Save Yarn Package Cache
          key: yarn-packages-{{ checksum "yarn.lock" }}
          paths:
            - ~/.cache/yarn
      - run:
          name: Build
          command: yarn build
      - run:
          name: ES5 compatibility check
          command: yarn test:es-check
      - run:
          name: Validate language files
          command: yarn i18n:validate
      - run:
          name: Unit Tests
          command: yarn test
      - store_artifacts:
          path: build

  browserstack:
    executor: docker-executor
    environment:
      LANG: en_US.UTF-8
    steps:
      - checkout
      - run:
          name: Update Yarn
          command: 'npm update -g yarn'
      - restore_cache:
          name: Restore Yarn Package Cache
          key: yarn-packages-{{ checksum "yarn.lock" }}
      - run:
          name: Install Dependencies
          command: yarn install
      - save_cache:
          name: Save Yarn Package Cache
          key: yarn-packages-{{ checksum "yarn.lock" }}
          paths:
            - ~/.cache/yarn
      - run:
          name: Build
          command: yarn build
      - run:
          name: Browser Tests
          command: yarn test:e2e:browserstack

workflows:
  build-test-report:
    jobs:
      - build-and-test
      - browserstack:
          requires:
            - build-and-test
          context:
            - browserstack-env
      - ship/node-publish:
          requires:
            - build-and-test
          pkg-manager: yarn
          node-version: 18.12.1
          context:
            - publish-npm
            - publish-gh
          filters:
            branches:
              only:
                - master
                - beta
