summaryrefslogtreecommitdiffstats
path: root/.circleci
diff options
context:
space:
mode:
authorYamagishi Kazutoshi <ykzts@desire.sh>2021-10-18 19:05:25 +0900
committerGitHub <noreply@github.com>2021-10-18 12:05:25 +0200
commit9cdf8ac14843c222a2776567b926efcd9f4ccab1 (patch)
treefc276ae0bd412485289512db0f613fef3237dd52 /.circleci
parenta6152c7480c5d8a5b2132771719d802db17e86eb (diff)
Improve CircleCI config (#16861)
* Improve CircleCI config * Enable PAM only when needed * Remove Ruby 2.6
Diffstat (limited to '.circleci')
-rw-r--r--.circleci/config.yml335
1 files changed, 116 insertions, 219 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index bfded07debe..b05273f8b43 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -1,255 +1,152 @@
-version: 2
+version: 2.1
-aliases:
- - &defaults
+orbs:
+ ruby: circleci/ruby@1.2.0
+ node: circleci/node@4.7.0
+
+executors:
+ default:
+ parameters:
+ ruby-version:
+ type: string
docker:
- - image: circleci/ruby:2.7-buster-node
- environment: &ruby_environment
+ - image: cimg/ruby:<< parameters.ruby-version >>
+ environment:
BUNDLE_JOBS: 3
BUNDLE_RETRY: 3
- BUNDLE_APP_CONFIG: ./.bundle/
- BUNDLE_PATH: ./vendor/bundle/
+ CONTINUOUS_INTEGRATION: true
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:
- - v3-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }}
- - v3-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-
- - v3-ruby-dependencies-
+ RAILS_ENV: test
+ - image: cimg/postgres:12.7
+ environment:
+ POSTGRES_USER: root
+ POSTGRES_HOST_AUTH_METHOD: trust
+ - image: circleci/redis:5-alpine
- - &install_steps
+commands:
+ install-system-dependencies:
steps:
- - checkout
- - *attach_workspace
- - restore_cache:
- keys:
- - v2-node-dependencies-{{ checksum "yarn.lock" }}
- - v2-node-dependencies-
- run:
- name: Install yarn dependencies
- command: yarn install --frozen-lockfile
- - save_cache:
- key: v2-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
-
- - &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 --local clean 'true'
- bundle config --local deployment 'true'
- bundle config --local with 'pam_authentication'
- bundle config --local without 'development production'
- bundle config --local frozen 'true'
- bundle config --local path $BUNDLE_PATH
- - run:
- name: Install bundler dependencies
- command: bundle check || (bundle install && bundle clean)
- - save_cache:
- key: v3-ruby-dependencies-{{ checksum "/tmp/.ruby-version" }}-{{ checksum "Gemfile.lock" }}
- paths:
- - ./.bundle/
- - ./vendor/bundle/
- - persist_to_workspace:
- root: ~/projects/
- paths:
- - ./mastodon/.bundle/
- - ./mastodon/vendor/bundle/
+ name: Install system dependencies
+ command: |
+ sudo apt-get update
+ sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler
+ install-ruby-dependencies:
+ parameters:
+ ruby-version:
+ type: string
+ steps:
+ - run:
+ command: |
+ bundle config clean 'true'
+ bundle config frozen 'true'
+ bundle config without 'development production'
+ name: Set bundler settings
+ - ruby/install-deps:
+ bundler-version: '2.2.29'
+ key: ruby<< parameters.ruby-version >>-gems-v1
+ wait-db:
+ steps:
+ - run:
+ command: dockerize -wait tcp://localhost:5432 -wait tcp://localhost:6379 -timeout 1m
+ name: Wait for PostgreSQL and Redis
- - &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
-
- install-ruby3.0:
- <<: *defaults
- docker:
- - image: circleci/ruby:3.0-buster-node
- environment: *ruby_environment
- <<: *install_ruby_dependencies
-
build:
- <<: *defaults
+ docker:
+ - image: cimg/ruby:2.7-node
+ environment:
+ RAILS_ENV: test
steps:
- - *attach_workspace
- - *install_system_dependencies
+ - checkout
+ - install-system-dependencies
+ - install-ruby-dependencies:
+ ruby-version: '2.7'
+ - node/install-packages:
+ cache-version: v1
+ pkg-manager: yarn
- run:
- name: Precompile assets
command: ./bin/rails assets:precompile
+ name: Precompile assets
- persist_to_workspace:
- root: ~/projects/
paths:
- - ./mastodon/public/assets
- - ./mastodon/public/packs-test/
+ - public/assets
+ - public/packs-test
+ root: .
+
+ test:
+ parameters:
+ ruby-version:
+ type: string
+ executor:
+ name: default
+ ruby-version: << parameters.ruby-version >>
+ environment:
+ ALLOW_NOPAM: true
+ PAM_ENABLED: true
+ PAM_DEFAULT_SERVICE: pam_test
+ PAM_CONTROLLED_SERVICE: pam_test_controlled
+ parallelism: 4
+ steps:
+ - checkout
+ - install-system-dependencies
+ - run:
+ command: sudo apt-get install -y ffmpeg imagemagick libpam-dev
+ name: Install additional system dependencies
+ - run:
+ command: bundle config with 'pam_authentication'
+ name: Enable PAM authentication
+ - install-ruby-dependencies:
+ ruby-version: << parameters.ruby-version >>
+ - attach_workspace:
+ at: .
+ - wait-db
+ - run:
+ command: ./bin/rails db:create db:schema:load db:seed
+ name: Load database schema
+ - ruby/rspec-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
+ executor:
+ name: default
+ ruby-version: '2.7'
steps:
- - *attach_workspace
- - *install_system_dependencies
+ - checkout
+ - install-system-dependencies
+ - install-ruby-dependencies:
+ ruby-version: '2.7'
+ - wait-db
- run:
- name: Create database
command: ./bin/rails db:create
+ name: Create database
- 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-ruby3.0:
- <<: *defaults
- docker:
- - image: circleci/ruby:3.0-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:14-buster
- steps:
- - *attach_workspace
- - run:
- name: Run jest
- command: yarn test:jest
+ name: Run migrations
workflows:
version: 2
build-and-test:
jobs:
- - install
- - install-ruby2.7:
- requires:
- - install
- - install-ruby2.6:
- requires:
- - install
- - install-ruby2.7
- - install-ruby3.0:
+ - build
+ - test:
+ matrix:
+ parameters:
+ ruby-version:
+ - '2.7'
+ - '3.0'
+ name: test-ruby<< matrix.ruby-version >>
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:
+ - test-migrations:
requires:
- - install-ruby2.6
- build
- - test-ruby3.0:
+ - node/run:
+ cache-version: v1
+ name: test-webui
+ pkg-manager: yarn
requires:
- - install-ruby3.0
- build
- - test-webui:
- requires:
- - install
+ version: lts
+ yarn-run: test:jest