version: 2 references: default_docker_ruby_executor: &default_docker_ruby_executor image: circleci/ruby:2.6.5-buster-node-browsers environment: RACK_ENV: test RAILS_ENV: test mysql: &mysql image: cricleci/mysql:latest environment: MYSQL_DATABASE: ensl MYSQL_USER: ensl MYSQL_USERNAME: ensl MYSQL_PASSWORD: ensl MYSQL_ROOT_PASSWORD: ensl MYSQL_ROOT_HOST: % jobs: build: docker: - *default_docker_ruby_executor steps: - checkout # Which version of bundler? - run: name: Which bundler? command: bundle -v # bundle cache - restore_cache: keys: - rails-demo-bundle-v2-{{ checksum "Gemfile.lock" }} - rails-demo-bundle-v2- - run: name: Bundle Install command: bundle check || bundle install # Store bundle cache - save_cache: key: rails-demo-bundle-v2-{{ checksum "Gemfile.lock" }} paths: - vendor/bundle # Only necessary if app uses webpacker or yarn in some other way - restore_cache: keys: - rails-demo-yarn-{{ checksum "yarn.lock" }} - rails-demo-yarn- - run: name: Yarn Install command: yarn install --cache-folder ~/.cache/yarn # Store yarn / webpacker cache - save_cache: key: rails-demo-yarn-{{ checksum "yarn.lock" }} paths: - ~/.cache/yarn test: parallelism: 3 docker: - *default_docker_ruby_executor - *mysql steps: - checkout - restore_cache: keys: - rails-demo-bundle-v2-{{ checksum "Gemfile.lock" }} - rails-demo-bundle-v2- - run: name: Bundle Install command: bundle check || bundle install - restore_cache: keys: - rails-demo-yarn-{{ checksum "yarn.lock" }} - rails-demo-yarn- - run: name: Wait for DB command: dockerize -wait tcp://localhost:3306 -timeout 1m - run: name: Database setup command: bundle exec rails db:schema:load --trace # Run rspec in parallel - run: command: | mkdir /tmp/test-results TESTFILES=$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings) bundle exec rspec $TESTFILES --profile 10 --format RspecJunitFormatter --out /tmp/test-results/rspec.xml --format progress - store_test_results: path: /tmp/test-results - store_artifacts: path: /tmp/test-results destination: test-results workflows: version: 2 build_and_test: jobs: - build - test: requires: - build