Skip to content

Instantly share code, notes, and snippets.

@hmcfletch hmcfletch/config.yml
Created Sep 21, 2018

Embed
What would you like to do?
An example Circle CI workflow for a Ruby on Rails app
version: 2
jobs:
checkout_and_deps:
docker:
- image: circleci/ruby:2.5.1-node-browsers
steps:
- checkout
- run:
name: Get the Gemfile.lock from the master branch
command: |
git show master:Gemfile.lock > MasterGemfile.lock
- restore_cache:
keys:
- v1-dependencies-gem-{{ checksum "Gemfile.lock" }}
- v1-dependencies-gem-{{ checksum "MasterGemfile.lock" }}
- v1-dependencies-gem-
- run:
name: bundle install
command: |
bundle check --path vendor/bundle || bundle install --jobs=4 --retry=3 --path vendor/bundle
- run:
name: Dependencies security audit
command: |
bundle exec bundle-audit check --update
- run:
name: Clean up gems before we save
command: |
bundle clean
- save_cache:
key: v1-dependencies-gem-{{ checksum "Gemfile.lock" }}
paths:
- vendor/bundle
- restore_cache:
keys:
- v1-rubocop-cache-{{ checksum ".rubocop.yml" }}-{{ .Branch }}
- v1-rubocop-cache-{{ checksum ".rubocop.yml" }}-master
- v1-rubocop-cache-{{ checksum ".rubocop.yml" }}
- run:
name: Rubocop
command: bundle exec rubocop --parallel
- save_cache:
key: v1-rubocop-cache-{{ checksum ".rubocop.yml" }}-{{ .Branch }}-{{ epoch }}
paths:
- ../.cache/rubocop_cache
run_tests:
docker:
- image: circleci/ruby:2.5.1-node-browsers
environment:
RAILS_ENV: test
PGHOST: 127.0.0.1
PGUSER: root
PARALLEL_TEST_PROCESSORS: 4
- image: redis:3.0
- image: circleci/postgres:10.3-ram
environment:
POSTGRES_USER: root
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-gem-{{ checksum "Gemfile.lock" }}
- run:
name: Setup bundler path
command: |
bundle check --path vendor/bundle
- restore_cache:
keys:
- v1-bootsnap-cache-{{ checksum "Gemfile.lock" }}-{{ .Branch }}
- v1-bootsnap-cache-{{ checksum "Gemfile.lock" }}-master
# must be in run_tests step because requires a connection to Redis
- run:
name: Eager load classes to check for issues
command: |
bundle exec rails runner 'Rails.application.eager_load!'
- run:
name: Validate clockwork.rb
command: |
bundle exec ruby ./clockwork.rb
- run:
name: Wait for postgres
command: dockerize -wait tcp://localhost:5432 -timeout 1m
- run:
name: Wait for redis
command: dockerize -wait tcp://localhost:6379 -timeout 1m
- run:
name: Install Postgres Client
command: |
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install postgresql-client-10
- run:
name: Database Checksum
command: |
find db -type f -exec md5sum {} \; | sort -k 2 > db_dir_checksums.txt
echo $PARALLEL_TEST_PROCESSORS >> db_dir_checksums.txt
psql postgres -A -t -c 'SELECT version()' >> db_dir_checksums.txt
- run:
name: Cat db_dir_checksums.txt
command: |
cat db_dir_checksums.txt
- restore_cache:
keys:
- v1-database-schema-{{ checksum "db_dir_checksums.txt" }}
- run:
name: Database Setup
command: |
if [ -e postgres_dump.sql ]
then
echo "Restoring databases dump"
psql -U postgres -f postgres_dump.sql
else
echo "Setting up databases"
bundle exec rake parallel:setup
echo "Dumping databases"
pg_dumpall > postgres_dump.sql
fi
- save_cache:
key: v1-database-schema-{{ checksum "db_dir_checksums.txt" }}
paths:
- postgres_dump.sql
- run:
name: Create test results directory
command: |
mkdir tmp/test-results
- restore_cache:
keys:
- v1-test-times-{{ .Branch }}
- v1-test-times-master
# run tests!
- run:
name: Run specs
command: |
bundle exec parallel_test \
-t rspec \
--runtime-log tmp/test-results/parallel_runtime_rspec.log \
-- --format progress \
--format RspecJunitFormatter \
--out tmp/test-results/rspec.xml \
--format ParallelTests::RSpec::RuntimeLogger \
--out tmp/test-results/parallel_runtime_rspec.log \
-- $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)
- save_cache:
key: v1-test-times-{{ .Branch }}-{{ epoch }}
paths:
- tmp/test-results/parallel_runtime_rspec.log
- save_cache:
key: v1-bootsnap-cache-{{ checksum "Gemfile.lock" }}-{{ .Branch }}-{{ epoch }}
paths:
- tmp/bootsnap_cache
# collect reports
- store_test_results:
path: tmp/test-results
- store_artifacts:
path: tmp/test-results
destination: test-results
- store_artifacts:
path: coverage
workflows:
version: 2
test_and_deploy:
jobs:
- checkout_and_deps
- run_tests:
requires:
- checkout_and_deps
@rihardssceredins

This comment has been minimized.

Copy link

rihardssceredins commented Nov 15, 2018

I'm wondering how is your clockwork.rb configured? I've in mine:

config[:logger] = Logger.new("#{Rails.root}/log/clock.log")

And CircleCI complains about not being able to open the file since it's not checked in Git:

No such file or directory @ rb_sysopen - /home/circleci/cpp/log/clock.log

Any tips?

@kis-xt

This comment has been minimized.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.