From 5274190e4cff682171c3b239597323356fdc977c Mon Sep 17 00:00:00 2001 From: Ryan Fitzgerald Date: Sat, 6 May 2017 15:48:21 -0700 Subject: [PATCH] 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. --- .gitignore | 2 +- Appraisals | 40 ------------------------- Readme.md | 26 +++++++++++----- gemfiles/rails40.gemfile | 9 ------ gemfiles/rails50.gemfile | 9 ------ scenarios.yml | 27 +++++++++++++++++ scenarios/rails30.docker-compose.yml | 15 ++++++++++ scenarios/rails30.dockerfile | 5 ++++ {gemfiles => scenarios}/rails30.gemfile | 5 ++-- scenarios/rails31.docker-compose.yml | 15 ++++++++++ scenarios/rails31.dockerfile | 5 ++++ {gemfiles => scenarios}/rails31.gemfile | 5 ++-- scenarios/rails32.docker-compose.yml | 15 ++++++++++ scenarios/rails32.dockerfile | 5 ++++ {gemfiles => scenarios}/rails32.gemfile | 5 ++-- scenarios/rails40.docker-compose.yml | 15 ++++++++++ scenarios/rails40.dockerfile | 5 ++++ scenarios/rails40.gemfile | 6 ++++ scenarios/rails41.docker-compose.yml | 15 ++++++++++ scenarios/rails41.dockerfile | 5 ++++ {gemfiles => scenarios}/rails41.gemfile | 4 +-- scenarios/rails42.docker-compose.yml | 15 ++++++++++ scenarios/rails42.dockerfile | 5 ++++ {gemfiles => scenarios}/rails42.gemfile | 4 +-- scenarios/rails50.docker-compose.yml | 15 ++++++++++ scenarios/rails50.dockerfile | 5 ++++ scenarios/rails50.gemfile | 7 +++++ scenarios/rails51.docker-compose.yml | 15 ++++++++++ scenarios/rails51.dockerfile | 5 ++++ scenarios/rails51.gemfile | 7 +++++ 30 files changed, 235 insertions(+), 81 deletions(-) delete mode 100644 Appraisals delete mode 100644 gemfiles/rails40.gemfile delete mode 100644 gemfiles/rails50.gemfile create mode 100644 scenarios.yml create mode 100644 scenarios/rails30.docker-compose.yml create mode 100644 scenarios/rails30.dockerfile rename {gemfiles => scenarios}/rails30.gemfile (52%) create mode 100644 scenarios/rails31.docker-compose.yml create mode 100644 scenarios/rails31.dockerfile rename {gemfiles => scenarios}/rails31.gemfile (56%) create mode 100644 scenarios/rails32.docker-compose.yml create mode 100644 scenarios/rails32.dockerfile rename {gemfiles => scenarios}/rails32.gemfile (56%) create mode 100644 scenarios/rails40.docker-compose.yml create mode 100644 scenarios/rails40.dockerfile create mode 100644 scenarios/rails40.gemfile create mode 100644 scenarios/rails41.docker-compose.yml create mode 100644 scenarios/rails41.dockerfile rename {gemfiles => scenarios}/rails41.gemfile (57%) create mode 100644 scenarios/rails42.docker-compose.yml create mode 100644 scenarios/rails42.dockerfile rename {gemfiles => scenarios}/rails42.gemfile (57%) create mode 100644 scenarios/rails50.docker-compose.yml create mode 100644 scenarios/rails50.dockerfile create mode 100644 scenarios/rails50.gemfile create mode 100644 scenarios/rails51.docker-compose.yml create mode 100644 scenarios/rails51.dockerfile create mode 100644 scenarios/rails51.gemfile diff --git a/.gitignore b/.gitignore index e5791c8..4f15859 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,4 @@ Gemfile.lock pkg/* spec/log spec/tmp -gemfiles/*.lock +scenarios/*.lock diff --git a/Appraisals b/Appraisals deleted file mode 100644 index a2e1454..0000000 --- a/Appraisals +++ /dev/null @@ -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 diff --git a/Readme.md b/Readme.md index efa78d6..76334ba 100644 --- a/Readme.md +++ b/Readme.md @@ -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 diff --git a/gemfiles/rails40.gemfile b/gemfiles/rails40.gemfile deleted file mode 100644 index 981498d..0000000 --- a/gemfiles/rails40.gemfile +++ /dev/null @@ -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 => "../" diff --git a/gemfiles/rails50.gemfile b/gemfiles/rails50.gemfile deleted file mode 100644 index 4151a64..0000000 --- a/gemfiles/rails50.gemfile +++ /dev/null @@ -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 => "../" diff --git a/scenarios.yml b/scenarios.yml new file mode 100644 index 0000000..26eed81 --- /dev/null +++ b/scenarios.yml @@ -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: {} diff --git a/scenarios/rails30.docker-compose.yml b/scenarios/rails30.docker-compose.yml new file mode 100644 index 0000000..78d8fef --- /dev/null +++ b/scenarios/rails30.docker-compose.yml @@ -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: {} diff --git a/scenarios/rails30.dockerfile b/scenarios/rails30.dockerfile new file mode 100644 index 0000000..cd39487 --- /dev/null +++ b/scenarios/rails30.dockerfile @@ -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 diff --git a/gemfiles/rails30.gemfile b/scenarios/rails30.gemfile similarity index 52% rename from gemfiles/rails30.gemfile rename to scenarios/rails30.gemfile index 2c8f4b3..7444abb 100644 --- a/gemfiles/rails30.gemfile +++ b/scenarios/rails30.gemfile @@ -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 => "../" diff --git a/scenarios/rails31.docker-compose.yml b/scenarios/rails31.docker-compose.yml new file mode 100644 index 0000000..8382cab --- /dev/null +++ b/scenarios/rails31.docker-compose.yml @@ -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: {} diff --git a/scenarios/rails31.dockerfile b/scenarios/rails31.dockerfile new file mode 100644 index 0000000..cd39487 --- /dev/null +++ b/scenarios/rails31.dockerfile @@ -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 diff --git a/gemfiles/rails31.gemfile b/scenarios/rails31.gemfile similarity index 56% rename from gemfiles/rails31.gemfile rename to scenarios/rails31.gemfile index 970782f..43c7820 100644 --- a/gemfiles/rails31.gemfile +++ b/scenarios/rails31.gemfile @@ -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 => "../" diff --git a/scenarios/rails32.docker-compose.yml b/scenarios/rails32.docker-compose.yml new file mode 100644 index 0000000..2fc141b --- /dev/null +++ b/scenarios/rails32.docker-compose.yml @@ -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: {} diff --git a/scenarios/rails32.dockerfile b/scenarios/rails32.dockerfile new file mode 100644 index 0000000..cd39487 --- /dev/null +++ b/scenarios/rails32.dockerfile @@ -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 diff --git a/gemfiles/rails32.gemfile b/scenarios/rails32.gemfile similarity index 56% rename from gemfiles/rails32.gemfile rename to scenarios/rails32.gemfile index 4f009db..5488d16 100644 --- a/gemfiles/rails32.gemfile +++ b/scenarios/rails32.gemfile @@ -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 => "../" diff --git a/scenarios/rails40.docker-compose.yml b/scenarios/rails40.docker-compose.yml new file mode 100644 index 0000000..9ffd3e3 --- /dev/null +++ b/scenarios/rails40.docker-compose.yml @@ -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: {} diff --git a/scenarios/rails40.dockerfile b/scenarios/rails40.dockerfile new file mode 100644 index 0000000..7e898d0 --- /dev/null +++ b/scenarios/rails40.dockerfile @@ -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 diff --git a/scenarios/rails40.gemfile b/scenarios/rails40.gemfile new file mode 100644 index 0000000..2f4b477 --- /dev/null +++ b/scenarios/rails40.gemfile @@ -0,0 +1,6 @@ +source "http://rubygems.org" + +gem "rails", "~> 4.0.0" +gem "sqlite3" + +gemspec :path => "../" diff --git a/scenarios/rails41.docker-compose.yml b/scenarios/rails41.docker-compose.yml new file mode 100644 index 0000000..a7d3232 --- /dev/null +++ b/scenarios/rails41.docker-compose.yml @@ -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: {} diff --git a/scenarios/rails41.dockerfile b/scenarios/rails41.dockerfile new file mode 100644 index 0000000..7e898d0 --- /dev/null +++ b/scenarios/rails41.dockerfile @@ -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 diff --git a/gemfiles/rails41.gemfile b/scenarios/rails41.gemfile similarity index 57% rename from gemfiles/rails41.gemfile rename to scenarios/rails41.gemfile index d6ea7ff..001966c 100644 --- a/gemfiles/rails41.gemfile +++ b/scenarios/rails41.gemfile @@ -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" diff --git a/scenarios/rails42.docker-compose.yml b/scenarios/rails42.docker-compose.yml new file mode 100644 index 0000000..e7bb7ba --- /dev/null +++ b/scenarios/rails42.docker-compose.yml @@ -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: {} diff --git a/scenarios/rails42.dockerfile b/scenarios/rails42.dockerfile new file mode 100644 index 0000000..8f8ed2c --- /dev/null +++ b/scenarios/rails42.dockerfile @@ -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 diff --git a/gemfiles/rails42.gemfile b/scenarios/rails42.gemfile similarity index 57% rename from gemfiles/rails42.gemfile rename to scenarios/rails42.gemfile index d0d8a96..a66961e 100644 --- a/gemfiles/rails42.gemfile +++ b/scenarios/rails42.gemfile @@ -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" diff --git a/scenarios/rails50.docker-compose.yml b/scenarios/rails50.docker-compose.yml new file mode 100644 index 0000000..b9d3609 --- /dev/null +++ b/scenarios/rails50.docker-compose.yml @@ -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: {} diff --git a/scenarios/rails50.dockerfile b/scenarios/rails50.dockerfile new file mode 100644 index 0000000..8f8ed2c --- /dev/null +++ b/scenarios/rails50.dockerfile @@ -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 diff --git a/scenarios/rails50.gemfile b/scenarios/rails50.gemfile new file mode 100644 index 0000000..79a5069 --- /dev/null +++ b/scenarios/rails50.gemfile @@ -0,0 +1,7 @@ +source "http://rubygems.org" + +gem "rails", "~> 5.0.0" +gem "mongoid" +gem "sqlite3" + +gemspec :path => "../" diff --git a/scenarios/rails51.docker-compose.yml b/scenarios/rails51.docker-compose.yml new file mode 100644 index 0000000..73e2e43 --- /dev/null +++ b/scenarios/rails51.docker-compose.yml @@ -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: {} diff --git a/scenarios/rails51.dockerfile b/scenarios/rails51.dockerfile new file mode 100644 index 0000000..8f8ed2c --- /dev/null +++ b/scenarios/rails51.dockerfile @@ -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 diff --git a/scenarios/rails51.gemfile b/scenarios/rails51.gemfile new file mode 100644 index 0000000..e67d1dc --- /dev/null +++ b/scenarios/rails51.gemfile @@ -0,0 +1,7 @@ +source "http://rubygems.org" + +gem "rails", "~> 5.1.0" +gem "mongoid" +gem "sqlite3" + +gemspec :path => "../"