version: 2.1
orbs:
    browser-tools: circleci/browser-tools@1.2.4
    node: circleci/node@5.0.2
    commitlint: conventional-changelog/commitlint@1.0.0
aliases:
  - &defaults
      docker:
        - image: cimg/node:16.18.1-browsers
          auth:
            username: $DOCKERHUB_USERNAME
            password: $DOCKERHUB_PASSWORD
      working_directory: ~/repo
      environment:
        NODE_ENV: production
  - &setup
    node/install-packages:
      override-ci-command: npm --production=false ci
  - &lint
    run:
      name: "run lint tests"
      command: npm run lint -- --format junit -o ./test/results/lint-results.xml
  - &unit
    run:
      name: "run unit tests"
      command: JEST_JUNIT_OUTPUT_NAME=unit-jest-results.xml npm run unit -- --reporters=jest-junit
  - &build
    run:
      name: "run npm build"
      command: |
        NODE_ENV=production npm run build
  - &deploy-gh-pages
    run:
      name: "deploy to gh pages"
      command: |
        git config --global user.email $(git log --pretty=format:"%ae" -n1)
        git config --global user.name $(git log --pretty=format:"%an" -n1)
        npm run deploy -- -e $CIRCLE_BRANCH

jobs:
  build-test:
    <<: *defaults
    steps:
      - checkout
      - *setup
      - *lint
      - *unit
      - *build
      - store_test_results:
          path: test/results
      - run: npx --no -- semantic-release --dry-run
  build-test-deploy:
    <<: *defaults
    steps:
      - checkout
      - *setup
      - *lint
      - *unit
      - *build
      - store_test_results:
          path: test/results
      - *deploy-gh-pages
      - run: npx --no -- semantic-release
  push-translations:
    <<: *defaults
    steps:
      - checkout
      - *setup
      - run:
          name: "run i18n script"
          command: |
            npm run i18n:src
            npm run i18n:push

workflows:
  commitlint:
    jobs:
      - commitlint/lint:
          target-branch: develop
          filters:
            branches:
                ignore:
                  - master
                  - develop
                  - /^hotfix\/.*/
  build-test-no-deploy:
    jobs:
      - build-test:
          context:
            - dockerhub-credentials
          filters:
            branches:
                ignore:
                  - master
                  - develop
                  - /^hotfix\/.*/
                  - gh-pages
  build-test-deploy:
    jobs:
      - build-test-deploy:
          context:
            - dockerhub-credentials
            - scratch-npm-creds
          filters:
            branches:
                only:
                  - master
                  - develop
                  - /^hotfix\/.*/
  push-translations:
    triggers:
      - schedule:
          cron: 0 0 * * * # daily at 12 UTC, 8 ET
          filters:
            branches:
              only:
                - develop
    jobs:
      - push-translations:
          context:
            - dockerhub-credentials