Improve CircleCI config (#16861)
* Improve CircleCI config * Enable PAM only when needed * Remove Ruby 2.6master
parent
a6152c7480
commit
9cdf8ac148
@ -1,255 +1,152 @@ |
|||||||
version: 2 |
version: 2.1 |
||||||
|
|
||||||
|
orbs: |
||||||
|
ruby: circleci/ruby@1.2.0 |
||||||
|
node: circleci/node@4.7.0 |
||||||
|
|
||||||
aliases: |
executors: |
||||||
- &defaults |
default: |
||||||
|
parameters: |
||||||
|
ruby-version: |
||||||
|
type: string |
||||||
docker: |
docker: |
||||||
- image: circleci/ruby:2.7-buster-node |
- image: cimg/ruby:<< parameters.ruby-version >> |
||||||
environment: &ruby_environment |
environment: |
||||||
BUNDLE_JOBS: 3 |
BUNDLE_JOBS: 3 |
||||||
BUNDLE_RETRY: 3 |
BUNDLE_RETRY: 3 |
||||||
BUNDLE_APP_CONFIG: ./.bundle/ |
CONTINUOUS_INTEGRATION: true |
||||||
BUNDLE_PATH: ./vendor/bundle/ |
|
||||||
DB_HOST: localhost |
DB_HOST: localhost |
||||||
DB_USER: root |
DB_USER: root |
||||||
RAILS_ENV: test |
|
||||||
ALLOW_NOPAM: true |
|
||||||
CONTINUOUS_INTEGRATION: true |
|
||||||
DISABLE_SIMPLECOV: true |
DISABLE_SIMPLECOV: true |
||||||
PAM_ENABLED: true |
RAILS_ENV: test |
||||||
PAM_DEFAULT_SERVICE: pam_test |
- image: cimg/postgres:12.7 |
||||||
PAM_CONTROLLED_SERVICE: pam_test_controlled |
environment: |
||||||
working_directory: ~/projects/mastodon/ |
POSTGRES_USER: root |
||||||
|
POSTGRES_HOST_AUTH_METHOD: trust |
||||||
- &attach_workspace |
- image: circleci/redis:5-alpine |
||||||
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- |
|
||||||
|
|
||||||
- &install_steps |
commands: |
||||||
|
install-system-dependencies: |
||||||
steps: |
steps: |
||||||
- checkout |
|
||||||
- *attach_workspace |
|
||||||
- restore_cache: |
|
||||||
keys: |
|
||||||
- v2-node-dependencies-{{ checksum "yarn.lock" }} |
|
||||||
- v2-node-dependencies- |
|
||||||
- run: |
- 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 |
name: Install system dependencies |
||||||
command: | |
command: | |
||||||
sudo apt-get update |
sudo apt-get update |
||||||
sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler |
sudo apt-get install -y libicu-dev libidn11-dev libprotobuf-dev protobuf-compiler |
||||||
|
install-ruby-dependencies: |
||||||
- &install_ruby_dependencies |
parameters: |
||||||
|
ruby-version: |
||||||
|
type: string |
||||||
steps: |
steps: |
||||||
- *attach_workspace |
|
||||||
- *install_system_dependencies |
|
||||||
- run: |
- run: |
||||||
name: Set Ruby version |
|
||||||
command: ruby -e 'puts RUBY_VERSION' | tee /tmp/.ruby-version |
|
||||||
- *restore_ruby_dependencies |
|
||||||
- run: |
|
||||||
name: Set bundler settings |
|
||||||
command: | |
command: | |
||||||
bundle config --local clean 'true' |
bundle config clean 'true' |
||||||
bundle config --local deployment 'true' |
bundle config frozen 'true' |
||||||
bundle config --local with 'pam_authentication' |
bundle config without 'development production' |
||||||
bundle config --local without 'development production' |
name: Set bundler settings |
||||||
bundle config --local frozen 'true' |
- ruby/install-deps: |
||||||
bundle config --local path $BUNDLE_PATH |
bundler-version: '2.2.29' |
||||||
- run: |
key: ruby<< parameters.ruby-version >>-gems-v1 |
||||||
name: Install bundler dependencies |
wait-db: |
||||||
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/ |
|
||||||
|
|
||||||
- &test_steps |
|
||||||
parallelism: 4 |
|
||||||
steps: |
steps: |
||||||
- *attach_workspace |
|
||||||
- *install_system_dependencies |
|
||||||
- run: |
|
||||||
name: Install FFMPEG |
|
||||||
command: sudo apt-get install -y ffmpeg |
|
||||||
- run: |
- run: |
||||||
name: Load database schema |
command: dockerize -wait tcp://localhost:5432 -wait tcp://localhost:6379 -timeout 1m |
||||||
command: ./bin/rails db:create db:schema:load db:seed |
name: Wait for PostgreSQL and Redis |
||||||
- 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 |
|
||||||
|
|
||||||
|
jobs: |
||||||
build: |
build: |
||||||
<<: *defaults |
docker: |
||||||
|
- image: cimg/ruby:2.7-node |
||||||
|
environment: |
||||||
|
RAILS_ENV: test |
||||||
steps: |
steps: |
||||||
- *attach_workspace |
- checkout |
||||||
- *install_system_dependencies |
- install-system-dependencies |
||||||
|
- install-ruby-dependencies: |
||||||
|
ruby-version: '2.7' |
||||||
|
- node/install-packages: |
||||||
|
cache-version: v1 |
||||||
|
pkg-manager: yarn |
||||||
- run: |
- run: |
||||||
name: Precompile assets |
|
||||||
command: ./bin/rails assets:precompile |
command: ./bin/rails assets:precompile |
||||||
|
name: Precompile assets |
||||||
- persist_to_workspace: |
- persist_to_workspace: |
||||||
root: ~/projects/ |
|
||||||
paths: |
paths: |
||||||
- ./mastodon/public/assets |
- public/assets |
||||||
- ./mastodon/public/packs-test/ |
- public/packs-test |
||||||
|
root: . |
||||||
test-migrations: |
|
||||||
<<: *defaults |
test: |
||||||
docker: |
parameters: |
||||||
- image: circleci/ruby:2.7-buster-node |
ruby-version: |
||||||
environment: *ruby_environment |
type: string |
||||||
- image: circleci/postgres:12.2 |
executor: |
||||||
|
name: default |
||||||
|
ruby-version: << parameters.ruby-version >> |
||||||
environment: |
environment: |
||||||
POSTGRES_USER: root |
ALLOW_NOPAM: true |
||||||
POSTGRES_HOST_AUTH_METHOD: trust |
PAM_ENABLED: true |
||||||
- image: circleci/redis:5-alpine |
PAM_DEFAULT_SERVICE: pam_test |
||||||
|
PAM_CONTROLLED_SERVICE: pam_test_controlled |
||||||
|
parallelism: 4 |
||||||
steps: |
steps: |
||||||
- *attach_workspace |
- checkout |
||||||
- *install_system_dependencies |
- install-system-dependencies |
||||||
- run: |
- run: |
||||||
name: Create database |
command: sudo apt-get install -y ffmpeg imagemagick libpam-dev |
||||||
command: ./bin/rails db:create |
name: Install additional system dependencies |
||||||
- run: |
- run: |
||||||
name: Run migrations |
command: bundle config with 'pam_authentication' |
||||||
command: ./bin/rails db:migrate |
name: Enable PAM authentication |
||||||
|
- install-ruby-dependencies: |
||||||
test-ruby2.7: |
ruby-version: << parameters.ruby-version >> |
||||||
<<: *defaults |
- attach_workspace: |
||||||
docker: |
at: . |
||||||
- image: circleci/ruby:2.7-buster-node |
- wait-db |
||||||
environment: *ruby_environment |
- run: |
||||||
- image: circleci/postgres:12.2 |
command: ./bin/rails db:create db:schema:load db:seed |
||||||
environment: |
name: Load database schema |
||||||
POSTGRES_USER: root |
- ruby/rspec-test |
||||||
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: |
test-migrations: |
||||||
<<: *defaults |
executor: |
||||||
docker: |
name: default |
||||||
- image: circleci/node:14-buster |
ruby-version: '2.7' |
||||||
steps: |
steps: |
||||||
- *attach_workspace |
- checkout |
||||||
|
- install-system-dependencies |
||||||
|
- install-ruby-dependencies: |
||||||
|
ruby-version: '2.7' |
||||||
|
- wait-db |
||||||
|
- run: |
||||||
|
command: ./bin/rails db:create |
||||||
|
name: Create database |
||||||
- run: |
- run: |
||||||
name: Run jest |
command: ./bin/rails db:migrate |
||||||
command: yarn test:jest |
name: Run migrations |
||||||
|
|
||||||
workflows: |
workflows: |
||||||
version: 2 |
version: 2 |
||||||
build-and-test: |
build-and-test: |
||||||
jobs: |
jobs: |
||||||
- install |
|
||||||
- install-ruby2.7: |
|
||||||
requires: |
|
||||||
- install |
|
||||||
- install-ruby2.6: |
|
||||||
requires: |
|
||||||
- install |
|
||||||
- install-ruby2.7 |
|
||||||
- install-ruby3.0: |
|
||||||
requires: |
|
||||||
- install |
|
||||||
- install-ruby2.7 |
|
||||||
- build: |
|
||||||
requires: |
|
||||||
- install-ruby2.7 |
|
||||||
- test-migrations: |
|
||||||
requires: |
|
||||||
- install-ruby2.7 |
|
||||||
- test-ruby2.7: |
|
||||||
requires: |
|
||||||
- install-ruby2.7 |
|
||||||
- build |
- build |
||||||
- test-ruby2.6: |
- test: |
||||||
|
matrix: |
||||||
|
parameters: |
||||||
|
ruby-version: |
||||||
|
- '2.7' |
||||||
|
- '3.0' |
||||||
|
name: test-ruby<< matrix.ruby-version >> |
||||||
requires: |
requires: |
||||||
- install-ruby2.6 |
|
||||||
- build |
- build |
||||||
- test-ruby3.0: |
- test-migrations: |
||||||
requires: |
requires: |
||||||
- install-ruby3.0 |
|
||||||
- build |
- build |
||||||
- test-webui: |
- node/run: |
||||||
|
cache-version: v1 |
||||||
|
name: test-webui |
||||||
|
pkg-manager: yarn |
||||||
requires: |
requires: |
||||||
- install |
- build |
||||||
|
version: lts |
||||||
|
yarn-run: test:jest |
||||||
|
Loading…
Reference in new issue