Switch from Appraisal to Roadshow, bump versions, add 5.1

The Appraisal build was becoming really annoying to maintain, since
there's no one version of Ruby that can run the specs across all
supported versions of Rails. Roadshow is a tool that's similar to
Appraisal but uses Docker to test each version in an isolated
environment with the appropriate version of Ruby, at the cost of having
to maintain the Gemfiles manually.
This commit is contained in:
Ryan Fitzgerald 2017-05-06 15:48:21 -07:00
parent be97a215a4
commit 5274190e4c
30 changed files with 235 additions and 81 deletions

2
.gitignore vendored
View File

@ -4,4 +4,4 @@ Gemfile.lock
pkg/*
spec/log
spec/tmp
gemfiles/*.lock
scenarios/*.lock

View File

@ -1,40 +0,0 @@
appraise "rails30" do
gem "rails", "3.0.20"
gem "sqlite3"
end
appraise "rails31" do
gem "rails", "3.1.12"
gem "mongoid"
gem "sqlite3"
end
appraise "rails32" do
gem "rails", "3.2.21"
gem "mongoid"
gem "sqlite3"
end
appraise "rails40" do
gem "rails", "4.0.13"
gem "mongoid"
gem "sqlite3"
end
appraise "rails41" do
gem "rails", "4.1.9"
gem "mongoid"
gem "sqlite3"
end
appraise "rails42" do
gem "rails", "4.2.0"
gem "mongoid"
gem "sqlite3"
end
appraise "rails50" do
gem "rails", github: "rails/rails"
gem 'arel', github: "rails/arel"
gem "sqlite3"
end

View File

@ -88,15 +88,27 @@ end
# Developing and Testing
To generate Gemfiles for Rails 3.0, 3.1, 3.2, 4.0, 4.1, and 4.2, run `rake
appraisal:gemfiles appraisal:install`.
This repo uses [Roadshow] to generate a [Docker Compose] file for each
supported version of Rails (with a compatible version of Ruby for each one).
You can then run the tests across all four versions with `rake appraisal`. You
can also manually run the Rails console and server with `rake appraisal
console` and `rake appraisal server`.
To run specs across all versions, you can either [get the Roadshow tool] and
run `roadshow run`, or use Docker Compose directly:
For a specific version of Rails, use `rake appraisal:rails30`, `rake
appraisal:rails31`, `rake appraisal:rails32`, etc.
```
$ for fn in scenarios/*.docker-compose-yml; do docker-compose -f $fn run --rm scenario; done
```
You can also manually run the Rails console and server on each version with
`roadshow run rake console` and `roadshow run rake server`, or run them on a
specific version with, e.g., `roadshow run -s rails40 rake console`.
To update the set of scenarios, edit `scenarios.yml` and run `roadshow
generate`, although the Gemfiles in the `scenarios` directory need to be
maintained manually.
[Roadshow]: https://github.com/rf-/roadshow
[Docker Compose]: https://docs.docker.com/compose/
[get the Roadshow tool]: https://github.com/rf-/roadshow/releases
# Alternative

View File

@ -1,9 +0,0 @@
# This file was generated by Appraisal
source "http://rubygems.org"
gem "rails", "4.0.13"
gem "mongoid"
gem "sqlite3"
gemspec :path => "../"

View File

@ -1,9 +0,0 @@
# This file was generated by Appraisal
source "http://rubygems.org"
gem "rails", :github => "rails/rails"
gem "arel", :github => "rails/arel"
gem "sqlite3"
gemspec :path => "../"

27
scenarios.yml Normal file
View File

@ -0,0 +1,27 @@
project: pryrails
shared:
from: ruby:2.4
cmd: "(bundle check || bundle install) && bundle exec rake"
service:
volumes:
- bundle_{{scenario_name}}:/usr/local/bundle
environment:
BUNDLE_GEMFILE: scenarios/{{scenario_name}}.gemfile
volumes:
bundle_{{scenario_name}}:
scenarios:
rails30:
from: ruby:2.0
rails31:
from: ruby:2.0
rails32:
from: ruby:2.0
rails40:
from: ruby:2.3
rails41:
from: ruby:2.3
rails42: {}
rails50: {}
rails51: {}

View File

@ -0,0 +1,15 @@
---
version: "2"
services:
scenario:
build:
context: ..
dockerfile: scenarios/rails30.dockerfile
image: pryrails_scenario_rails30
volumes:
- "..:/scenario"
- "bundle_rails30:/usr/local/bundle"
environment:
BUNDLE_GEMFILE: scenarios/rails30.gemfile
volumes:
bundle_rails30: {}

View File

@ -0,0 +1,5 @@
FROM ruby:2.0
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake

View File

@ -1,8 +1,7 @@
# This file was generated by Appraisal
source "http://rubygems.org"
gem "rails", "3.0.20"
gem "rails", "~> 3.0.0"
gem "sqlite3"
gem "test-unit"
gemspec :path => "../"

View File

@ -0,0 +1,15 @@
---
version: "2"
services:
scenario:
build:
context: ..
dockerfile: scenarios/rails31.dockerfile
image: pryrails_scenario_rails31
volumes:
- "..:/scenario"
- "bundle_rails31:/usr/local/bundle"
environment:
BUNDLE_GEMFILE: scenarios/rails31.gemfile
volumes:
bundle_rails31: {}

View File

@ -0,0 +1,5 @@
FROM ruby:2.0
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake

View File

@ -1,9 +1,8 @@
# This file was generated by Appraisal
source "http://rubygems.org"
gem "rails", "3.1.12"
gem "rails", "~> 3.1.0"
gem "mongoid"
gem "sqlite3"
gem "test-unit"
gemspec :path => "../"

View File

@ -0,0 +1,15 @@
---
version: "2"
services:
scenario:
build:
context: ..
dockerfile: scenarios/rails32.dockerfile
image: pryrails_scenario_rails32
volumes:
- "..:/scenario"
- "bundle_rails32:/usr/local/bundle"
environment:
BUNDLE_GEMFILE: scenarios/rails32.gemfile
volumes:
bundle_rails32: {}

View File

@ -0,0 +1,5 @@
FROM ruby:2.0
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake

View File

@ -1,9 +1,8 @@
# This file was generated by Appraisal
source "http://rubygems.org"
gem "rails", "3.2.21"
gem "rails", "~> 3.2.0"
gem "mongoid"
gem "sqlite3"
gem "test-unit"
gemspec :path => "../"

View File

@ -0,0 +1,15 @@
---
version: "2"
services:
scenario:
build:
context: ..
dockerfile: scenarios/rails40.dockerfile
image: pryrails_scenario_rails40
volumes:
- "..:/scenario"
- "bundle_rails40:/usr/local/bundle"
environment:
BUNDLE_GEMFILE: scenarios/rails40.gemfile
volumes:
bundle_rails40: {}

View File

@ -0,0 +1,5 @@
FROM ruby:2.3
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake

View File

@ -0,0 +1,6 @@
source "http://rubygems.org"
gem "rails", "~> 4.0.0"
gem "sqlite3"
gemspec :path => "../"

View File

@ -0,0 +1,15 @@
---
version: "2"
services:
scenario:
build:
context: ..
dockerfile: scenarios/rails41.dockerfile
image: pryrails_scenario_rails41
volumes:
- "..:/scenario"
- "bundle_rails41:/usr/local/bundle"
environment:
BUNDLE_GEMFILE: scenarios/rails41.gemfile
volumes:
bundle_rails41: {}

View File

@ -0,0 +1,5 @@
FROM ruby:2.3
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake

View File

@ -1,8 +1,6 @@
# This file was generated by Appraisal
source "http://rubygems.org"
gem "rails", "4.1.9"
gem "rails", "~> 4.1.0"
gem "mongoid"
gem "sqlite3"

View File

@ -0,0 +1,15 @@
---
version: "2"
services:
scenario:
build:
context: ..
dockerfile: scenarios/rails42.dockerfile
image: pryrails_scenario_rails42
volumes:
- "..:/scenario"
- "bundle_rails42:/usr/local/bundle"
environment:
BUNDLE_GEMFILE: scenarios/rails42.gemfile
volumes:
bundle_rails42: {}

View File

@ -0,0 +1,5 @@
FROM ruby:2.4
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake

View File

@ -1,8 +1,6 @@
# This file was generated by Appraisal
source "http://rubygems.org"
gem "rails", "4.2.0"
gem "rails", "~> 4.2.0"
gem "mongoid"
gem "sqlite3"

View File

@ -0,0 +1,15 @@
---
version: "2"
services:
scenario:
build:
context: ..
dockerfile: scenarios/rails50.dockerfile
image: pryrails_scenario_rails50
volumes:
- "..:/scenario"
- "bundle_rails50:/usr/local/bundle"
environment:
BUNDLE_GEMFILE: scenarios/rails50.gemfile
volumes:
bundle_rails50: {}

View File

@ -0,0 +1,5 @@
FROM ruby:2.4
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake

View File

@ -0,0 +1,7 @@
source "http://rubygems.org"
gem "rails", "~> 5.0.0"
gem "mongoid"
gem "sqlite3"
gemspec :path => "../"

View File

@ -0,0 +1,15 @@
---
version: "2"
services:
scenario:
build:
context: ..
dockerfile: scenarios/rails51.dockerfile
image: pryrails_scenario_rails51
volumes:
- "..:/scenario"
- "bundle_rails51:/usr/local/bundle"
environment:
BUNDLE_GEMFILE: scenarios/rails51.gemfile
volumes:
bundle_rails51: {}

View File

@ -0,0 +1,5 @@
FROM ruby:2.4
RUN mkdir -p /scenario
WORKDIR /scenario
ENV LANG=C.UTF-8
CMD (bundle check || bundle install) && bundle exec rake

View File

@ -0,0 +1,7 @@
source "http://rubygems.org"
gem "rails", "~> 5.1.0"
gem "mongoid"
gem "sqlite3"
gemspec :path => "../"