# JavaScript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
# See https://circleci.com/docs/2.0/config-intro/#section=configuration for spec
#
version: 2.1

executors:
  node12:
    docker:
      - image: circleci/node:12
    working_directory: ~/repo

commands:
  set_up_node_modules:
    description: "load node_modules, updating and storing back into cache if necessary"
    parameters:
      node_version:
        description: Which node version we're caching packages for
        type: integer
        default: 12
    steps:
      - restore_cache:
          keys:
            - v1-node<< parameters.node_version >>-dependencies-{{ checksum "yarn.lock" }}
            # fall back to using the latest cache if no exact match is found
            # added a versioning suffix to allow for manual cache clearing:
            # https://support.circleci.com/hc/en-us/articles/115015426888-Clear-project-dependency-cache
            - v1-node<< parameters.node_version >>-dependencies-v0
      - run: yarn install
      - save_cache:
          paths:
            - node_modules
            - packages/sourcecred/node_modules
          key: v1-node<< parameters.node_version >>-dependencies-{{ checksum "yarn.lock" }}

jobs:
  test:
    executor: node12
    steps:
      - checkout
      - set_up_node_modules
      - run: yarn test --ci
  test_full:
    executor: node12
    steps:
      - checkout
      - set_up_node_modules
      - run: yarn test --full --ci

workflows:
  version: 2.0
  commit:
    jobs:
      - test
      # We also run full-tests on each commit, but they're not configured as
      # blocking checks. Thus, in the case that they complete before you want
      # to merge your pull request, they provide information, and otherwise
      # they don't get in your way.
      - test_full

  # Separate workflow just for version tag releases.
  tagged-release:
    jobs:
      - test:
          filters: &version-tag-only
            branches:
              ignore: /.*/
            tags:
              only: /^v.*/

      - test_full:
          filters: *version-tag-only

  nightly:
    triggers:
      - schedule:
          cron: "0 22 * * *" # 22:00 UTC
          filters:
            branches:
              only:
                - master
    jobs:
      - test_full
