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