version: 2 aliases: - &defaults docker: - image: circleci/ruby:2.7-buster-node environment: &ruby_environment BUNDLE_JOBS: 3 BUNDLE_RETRY: 3 BUNDLE_APP_CONFIG: ./.bundle/ BUNDLE_PATH: ./vendor/bundle/ DB_HOST: localhost DB_USER: root RAILS_ENV: test ALLOW_NOPAM: true CONTINUOUS_INTEGRATION: true DISABLE_SIMPLECOV: true PAM_ENABLED: true PAM_DEFAULT_SERVICE: pam_test PAM_CONTROLLED_SERVICE: pam_test_controlled working_directory: ~/projects/mastodon/ - &attach_workspace attach_workspace: at: ~/projects/ - &persist_to_workspace persist_to_workspace: root: ~/projects/ paths: - ./mastodon/ - &restore_ruby_dependencies restore_cache: keys: - v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }} - v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}- - v2-ruby-dependencies- - &install_steps steps: - checkout - *attach_workspace - restore_cache: keys: - v1-node-dependencies-{{ checksum "yarn.lock" }} - v1-node-dependencies- - run: name: Install yarn dependencies command: yarn install --frozen-lockfile - save_cache: key: v1-node-dependencies-{{ checksum "yarn.lock" }} paths: - ./node_modules/ - *persist_to_workspace - &install_system_dependencies run: name: Install system dependencies command: | sudo apt-get update sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler ## TODO: FIX THESE BUSTER DEPENDANCES sudo wget http://ftp.au.debian.org/debian/pool/main/i/icu/libicu57_57.1-6+deb9u3_amd64.deb sudo dpkg -i libicu57_57.1-6+deb9u3_amd64.deb sudo wget http://ftp.au.debian.org/debian/pool/main/p/protobuf/libprotobuf10_3.0.0-9_amd64.deb sudo dpkg -i libprotobuf10_3.0.0-9_amd64.deb - &install_ruby_dependencies steps: - *attach_workspace - *install_system_dependencies - run: name: Set Ruby version command: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version - *restore_ruby_dependencies - run: name: Set bundler settings command: | bundle config clean 'true' bundle config deployment 'true' bundle config with 'pam_authentication' bundle config without 'development production' bundle config frozen 'true' - run: name: Install bundler dependencies command: bundle check || (bundle install && bundle clean) - save_cache: key: v2-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }} paths: - ./.bundle/ - ./vendor/bundle/ - persist_to_workspace: root: ~/projects/ paths: - ./mastodon/.bundle/ - ./mastodon/vendor/bundle/ - &test_steps parallelism: 4 steps: - *attach_workspace - *install_system_dependencies - run: name: Install FFMPEG command: sudo apt-get install -y ffmpeg - run: name: Load database schema command: ./bin/rails db:create db:schema:load db:seed - run: name: Run rspec in parallel command: | bundle exec rspec --profile 10 \ --format RspecJunitFormatter \ --out test_results/rspec.xml \ --format progress \ $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings) - store_test_results: path: test_results jobs: install: <<: *defaults <<: *install_steps install-ruby2.7: <<: *defaults <<: *install_ruby_dependencies install-ruby2.6: <<: *defaults docker: - image: circleci/ruby:2.6-buster-node environment: *ruby_environment <<: *install_ruby_dependencies build: <<: *defaults steps: - *attach_workspace - *install_system_dependencies - run: name: Precompile assets command: ./bin/rails assets:precompile - persist_to_workspace: root: ~/projects/ paths: - ./mastodon/public/assets - ./mastodon/public/packs-test/ test-migrations: <<: *defaults docker: - image: circleci/ruby:2.7-buster-node environment: *ruby_environment - image: circleci/postgres:12.2 environment: POSTGRES_USER: root POSTGRES_HOST_AUTH_METHOD: trust - image: circleci/redis:5-alpine steps: - *attach_workspace - *install_system_dependencies - run: name: Create database command: ./bin/rails db:create - run: name: Run migrations command: ./bin/rails db:migrate test-ruby2.7: <<: *defaults docker: - image: circleci/ruby:2.7-buster-node environment: *ruby_environment - image: circleci/postgres:12.2 environment: POSTGRES_USER: root POSTGRES_HOST_AUTH_METHOD: trust - image: circleci/redis:5-alpine <<: *test_steps test-ruby2.6: <<: *defaults docker: - image: circleci/ruby:2.6-buster-node environment: *ruby_environment - image: circleci/postgres:12.2 environment: POSTGRES_USER: root POSTGRES_HOST_AUTH_METHOD: trust - image: circleci/redis:5-alpine <<: *test_steps test-webui: <<: *defaults docker: - image: circleci/node:12-buster steps: - *attach_workspace - run: name: Run jest command: yarn test:jest check-i18n: <<: *defaults steps: - *attach_workspace - *install_system_dependencies - run: name: Check locale file normalization command: bundle exec i18n-tasks check-normalized - run: name: Check for unused strings command: bundle exec i18n-tasks unused -l en - run: name: Check for wrong string interpolations command: bundle exec i18n-tasks check-consistent-interpolations - run: name: Check that all required locale files exist command: bundle exec rake repo:check_locales_files workflows: version: 2 build-and-test: jobs: - install - install-ruby2.7: requires: - install - install-ruby2.6: requires: - install - install-ruby2.7 - build: requires: - install-ruby2.7 - test-migrations: requires: - install-ruby2.7 - test-ruby2.7: requires: - install-ruby2.7 - build - test-ruby2.6: requires: - install-ruby2.6 - build - test-webui: requires: - install - check-i18n: requires: - install-ruby2.7