version: 2.1

workflows:
  version: 2
  build:
    jobs:
      - build_and_test
jobs:
  build_and_test:
    working_directory: ~/pinafore
    docker:
        # see https://discuss.circleci.com/t/build-failed-the-engine-node-is-incompatible-with-this-module-expected-version-12-x-got-14-15-0/37921/7
        # we want Node v12, not v14
      - image: circleci/ruby@sha256:b018ec2a8f0bbf06880735d2801402bad316c465edb60663be83ac8f1086b805
      - image: circleci/postgres:12.2
        environment:
          POSTGRES_USER: pinafore
          POSTGRES_PASSWORD: pinafore
          POSTGRES_DB: pinafore_development
          BROWSER: chrome:headless
      - image: circleci/redis:5-alpine
    steps:
      - checkout
      - run:
          name: Install system dependencies
          command: |
            sudo apt-get update
            sudo apt-get install -y ffmpeg fonts-noto-color-emoji libicu-dev libidn11-dev libprotobuf-dev postgresql-contrib protobuf-compiler
      - run:
          name: Check node version
          command: node -v
      - restore_cache:
          name: Restore yarn cache
          key: yarn-v1-{{ checksum "yarn.lock" }}
      - run:
          name: Yarn install
          command: yarn install --immutable
      - run:
          name: Clone mastodon
          command: yarn clone-mastodon
      - restore_cache:
          name: Restore bundler cache
          key: bundler-v2-{{ checksum "mastodon/Gemfile.lock" }}
      - run:
          name: Lint
          command: yarn lint
      - run:
          name: Unit tests
          command: yarn test-unit
      - run:
          name: Install mastodon
          command: yarn install-mastodon
      - run:
          name: Wait for postgres to be ready
          command: |
            for i in `seq 1 10`;
            do
              nc -z localhost 5432 && echo Success && exit 0
              echo -n .
              sleep 1
            done
            echo Failed waiting for postgres && exit 1
      - run:
          name: Wait for redis to be ready
          command: |
            for i in `seq 1 10`;
            do
              nc -z localhost 6379 && echo Success && exit 0
              echo -n .
              sleep 1
            done
            echo Failed waiting for redis && exit 1
      - run:
          name: Copy vercel.json
          command: cp vercel.json vercel-old.json
      - run:
          name: Build
          command: yarn build
      - run:
          name: Check vercel.json unchanged
          command: |
            if ! diff -q vercel-old.json vercel.json &>/dev/null; then
              diff vercel-old.json vercel.json
              echo "vercel.json changed, run yarn build and make sure everything looks okay"
              exit 1
            fi
      - run:
          name: Integration tests
          command: yarn test-in-ci
      - save_cache:
          name: Save yarn cache
          key: yarn-v1-{{ checksum "yarn.lock" }}
          paths:
            - ~/.cache/yarn
      - save_cache:
          name: Save bundler cache
          key: bundler-v2-{{ checksum "mastodon/Gemfile.lock" }}
          paths:
            - mastodon/vendor/bundle
