default_config: &default_config
  environment:
    SENTRY_ORG: shift-reset-llc
    SENTRY_PROJECT: actual
    YARN_CACHE_FOLDER: ~/.cache/yarn
    CSC_LINK: ~/windows-shift-reset-llc.p12

cached_files: &cached_files
  paths:
    - ~/.cache/yarn
    - node_modules
    - ./packages/desktop-electron/node_modules
    - ./packages/loot-core/node_modules
    - ./mobile/node_modules
    - ./import-ynab4/node_modules
    - ./api/node_modules
    - ./node-libofx/node_modules
    - ./loot-design/node_modules
    - ./desktop-client/node_modules
  key: v3-dependencies-{{ checksum "yarn.lock" }}

version_tag_only: &version_tag_only
  filters:
    branches:
      ignore: /.*/
    tags:
      only: /^\d+\.\d+\.\d+$/

version: 2.1

orbs:
  win: circleci/windows@2.2.0

jobs:
  test:
    <<: *default_config

    docker:
      - image: circleci/node:16.15.0

    working_directory: ~/repo

    steps:
      - checkout

      - restore_cache:
          keys:
            - v3-dependencies-{{ checksum "yarn.lock" }}

      - run: yarn install --pure-lockfile

      - save_cache:
          <<: *cached_files

      - run: yarn test

  build_windows:
    <<: *default_config

    executor:
      name: win/default

    working_directory: ~/repo

    steps:
      - checkout

      - run:
          command: npm install -g @sentry/cli --unsafe-perm
          shell: bash

      - run:
          command: echo $WINDOWS_CERT | base64 --decode >> ${HOME}/windows-shift-reset-llc.p12
          shell: bash

      - run:
          command: yarn install --pure-lockfile
          shell: bash

      - run:
          command: ./bin/package --release --version ${CIRCLE_TAG}
          shell: bash

  build_linux:
    <<: *default_config

    docker:
      - image: circleci/node:16.15.0

    working_directory: ~/repo

    steps:
      - checkout

      - restore_cache:
          keys:
            - v3-dependencies-{{ checksum "yarn.lock" }}

      - run: yarn install --pure-lockfile

      - run: sudo npm install -g @sentry/cli --unsafe-perm

      - run: ./bin/package --release --version ${CIRCLE_TAG}

workflows:
  version: 2
  test:
    jobs:
      - test
  build_version:
    jobs:
      - test:
          <<: *version_tag_only
      - build_windows:
          <<: *version_tag_only
          requires:
            - test
      - build_linux:
          <<: *version_tag_only
          requires:
            - test
