213 lines
6.0 KiB
YAML
213 lines
6.0 KiB
YAML
version: 2.1
|
|
|
|
orbs:
|
|
browser-tools: circleci/browser-tools@1.1.3
|
|
workflows:
|
|
version: 2
|
|
build_and_test:
|
|
jobs:
|
|
- build_and_unit_test
|
|
- integration_test_readonly:
|
|
requires:
|
|
- build_and_unit_test
|
|
- integration_test_readwrite:
|
|
requires:
|
|
- build_and_unit_test
|
|
executors:
|
|
node:
|
|
working_directory: ~/pinafore
|
|
docker:
|
|
- image: cimg/ruby:2.7.2-browsers
|
|
node_and_ruby:
|
|
working_directory: ~/pinafore
|
|
docker:
|
|
- image: cimg/ruby:2.7.2-browsers
|
|
- image: circleci/postgres:12.2
|
|
environment:
|
|
POSTGRES_USER: pinafore
|
|
POSTGRES_PASSWORD: pinafore
|
|
POSTGRES_DB: pinafore_development
|
|
BROWSER: chrome:headless
|
|
- image: circleci/redis:5-alpine
|
|
commands:
|
|
install_mastodon_system_dependencies:
|
|
description: Install system dependencies that Mastodon requires
|
|
steps:
|
|
- run:
|
|
name: Install system dependencies
|
|
command: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
ffmpeg \
|
|
fonts-noto-color-emoji \
|
|
imagemagick \
|
|
libicu-dev \
|
|
libidn11-dev \
|
|
libprotobuf-dev \
|
|
postgresql-contrib \
|
|
protobuf-compiler
|
|
install_browsers:
|
|
description: Install browsers and tools
|
|
steps:
|
|
- browser-tools/install-chrome:
|
|
chrome-version: 91.0.4472.114
|
|
- browser-tools/install-chromedriver
|
|
- run:
|
|
name: "Check browser version"
|
|
command: |
|
|
google-chrome --version
|
|
install_node:
|
|
description: Install Node.js
|
|
steps:
|
|
- run:
|
|
name: "Install Node.js"
|
|
# via https://circleci.com/docs/2.0/circleci-images/#notes-on-pinning-images
|
|
command: |
|
|
curl -sSL "https://nodejs.org/dist/v12.22.3/node-v12.22.3-linux-x64.tar.xz" \
|
|
| sudo tar --strip-components=2 -xJ -C /usr/local/bin/ node-v12.22.3-linux-x64/bin/node
|
|
- run:
|
|
name: Check current version of node
|
|
command: node -v
|
|
|
|
save_workspace:
|
|
description: Persist workspace
|
|
steps:
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- .
|
|
load_workspace:
|
|
description: Load workspace
|
|
steps:
|
|
- attach_workspace:
|
|
at: ~/pinafore
|
|
restore_yarn_cache:
|
|
description: Restore yarn cache
|
|
steps:
|
|
- restore_cache:
|
|
name: Restore yarn cache
|
|
key: yarn-v4-{{ checksum "yarn.lock" }}
|
|
save_yarn_cache:
|
|
description: Save yarn cache
|
|
steps:
|
|
- save_cache:
|
|
name: Save yarn cache
|
|
key: yarn-v4-{{ checksum "yarn.lock" }}
|
|
paths:
|
|
- ~/.cache/yarn
|
|
restore_yarn_cache_mastodon:
|
|
description: Restore yarn cache for Mastodon
|
|
steps:
|
|
- restore_cache:
|
|
name: Restore yarn cache for Mastodon
|
|
key: yarn-v4-{{ checksum "mastodon/yarn.lock" }}
|
|
save_yarn_cache_mastodon:
|
|
description: Save yarn cache for Mastodon
|
|
steps:
|
|
- save_cache:
|
|
name: Save yarn cache for Mastodon
|
|
key: yarn-v4-{{ checksum "mastodon/yarn.lock" }}
|
|
paths:
|
|
- ~/.cache/yarn
|
|
restore_bundler_cache:
|
|
description: Restore bundler cache
|
|
steps:
|
|
- restore_cache:
|
|
name: Restore bundler cache
|
|
key: bundler-v4-{{ checksum "mastodon/Gemfile.lock" }}
|
|
save_bundler_cache:
|
|
description: Save bundler cache
|
|
steps:
|
|
- save_cache:
|
|
name: Save bundler cache
|
|
key: bundler-v4-{{ checksum "mastodon/Gemfile.lock" }}
|
|
paths:
|
|
- mastodon/vendor/bundle
|
|
install_mastodon:
|
|
description: Install Mastodon and set up Postgres/Redis
|
|
steps:
|
|
- run:
|
|
name: Clone mastodon
|
|
command: yarn clone-mastodon
|
|
- restore_yarn_cache_mastodon
|
|
- restore_bundler_cache
|
|
- run:
|
|
name: Install mastodon
|
|
command: yarn install-mastodon
|
|
- save_yarn_cache_mastodon
|
|
- save_bundler_cache
|
|
- 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
|
|
jobs:
|
|
build_and_unit_test:
|
|
executor: node
|
|
steps:
|
|
- checkout
|
|
- install_node
|
|
- restore_yarn_cache
|
|
- run:
|
|
name: Yarn install
|
|
command: yarn install --immutable
|
|
- save_yarn_cache
|
|
- run:
|
|
name: Lint
|
|
command: yarn lint
|
|
- 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: Unit tests
|
|
command: yarn test-unit
|
|
- save_workspace
|
|
integration_test_readonly:
|
|
executor: node_and_ruby
|
|
steps:
|
|
- install_mastodon_system_dependencies
|
|
- install_browsers
|
|
- install_node
|
|
- load_workspace
|
|
- install_mastodon
|
|
- run:
|
|
name: Read-only integration tests
|
|
command: yarn test-in-ci-suite0
|
|
integration_test_readwrite:
|
|
executor: node_and_ruby
|
|
steps:
|
|
- install_mastodon_system_dependencies
|
|
- install_browsers
|
|
- install_node
|
|
- load_workspace
|
|
- install_mastodon
|
|
- run:
|
|
name: Read-write integration tests
|
|
command: yarn test-in-ci-suite1
|