version: 2.1
orbs:
  node: circleci/node@2.1.0
  slack: circleci/slack@3.4.2
defaults: &defaults
  working_directory: ~/project
  executor:
    name: node/default
    tag: 'lts'
jobs:
  build-and-test:
    <<: *defaults
    steps:
      - checkout
      - node/install-packages #node orb cmd caches
      - run: npm run test
      - persist_to_workspace:
          root: ~/project
          paths: .
  deploy-npm:
    <<: *defaults
    steps:
      - attach_workspace:
          at: ~/project
      - add_ssh_keys:
          fingerprints:
            - "58:62:ab:1f:24:b9:39:5a:ee:8a:e7:28:b2:f2:61:a2"
      - run: ssh-keyscan -H github.com >> ~/.ssh/known_hosts
      - run:
          name: "configure release version"
          command: |
            VPKG=$($(npm bin)/json -f package.json version)
            echo "export VERSION=${VPKG/%?/}$(date +%Y%m%d%H%M%S)" >> $BASH_ENV
      - run:
          name: "publish"
          command: |
            npm --no-git-tag-version version $VERSION
            npm set //registry.npmjs.org/:_authToken=$NPM_TOKEN
            npm publish
      - run:
          name: "tag release"
          command: |
            git tag $VERSION
            git push $CIRCLE_REPOSITORY_URL $VERSION
  pull-translations:
    <<: *defaults
    steps:
      - checkout
      - node/install-packages
      - run:
          name: "pull editor and www translations"
          command: |
            npm run pull:editor
            npm run pull:www
            npm run test
      - persist_to_workspace:
          root: ~/project
          paths: .
      - slack/status:
          fail_only: true
          failure_message: ":explosion: Pull editor and www translations failed, for help see: https://github.com/LLK/scratch-l10n/wiki/Developer-Guide#weekly-editor-and-website-update"
          only_for_branches: "master"
  commit-translations:
    <<: *defaults
    steps:
      - attach_workspace:
          at: ~/project
      - add_ssh_keys:
          fingerprints:
            - "58:62:ab:1f:24:b9:39:5a:ee:8a:e7:28:b2:f2:61:a2"
      - run: ssh-keyscan -H github.com >> ~/.ssh/known_hosts
      - run:
          name: "commit translation updates"
          command: |
            git config --global user.email $(git log --pretty=format:"%ae" -n1)
            git config --global user.name $(git log --pretty=format:"%an" -n1)
            git add .
            git commit -m "pull new editor translations from Transifex"
            git push $CIRCLE_REPOSITORY_URL HEAD:master
  sync-help:
    <<: *defaults
    steps:
      - checkout
      - node/install-packages
      - run: npm run sync:help
      - slack/status:
          fail_only: true
          failure_message: ":boom: Scratch Help update failed, for help see: https://github.com/LLK/scratch-l10n/wiki/Developer-Guide#daily-help-update"
          only_for_branches: "master"
workflows:
  version: 2
  build-test-and-deploy:
    jobs:
      - build-and-test
      - deploy-npm:
          requires:
            - build-and-test
          filters:
            branches:
              only: master
  manual-pull:
    when:
      equal: [ tx-pull-manual, << pipeline.git.branch >> ]
    jobs:
      - pull-translations
      - commit-translations:
          requires:
            - pull-translations
          filters:
            branches:
              only: tx-pull-manual
  daily-tx-pull:
      triggers:
        - schedule: # daily at 3am UTC (10pm EST)
            cron: "0 3 * * *"
            filters:
              branches:
                only: master
      jobs:
        - pull-translations
        - commit-translations:
            requires:
              - pull-translations # don't commit if there were errors
  daily-help-update:
    triggers:
      - schedule: # daily at 5am UTC
          cron: "0 5 * * *"
          filters:
            branches:
              only: master
    jobs:
      - sync-help
