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 mariadb: &mariadb image: cricleci/mariadb:10.3-bionic-ram 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 - run: name: Bundle Update command: gem update --system && gem install bundler # 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 - *mariadb steps: - add_ssh_keys: fingerprints: - "b7:35:a6:4e:9b:0d:6d:d4:78:1e:9a:97:2a:66:6b:be" - checkout - run: name: Bundle Update command: gem update --system && gem install bundler - 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