From 0fa13112b70323d1c527bad600e623e6751998d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 6 Aug 2018 14:03:56 +0200 Subject: [PATCH 1/4] Test against Rails 5.2 as latest stable version --- .travis.yml | 1 + Gemfile | 4 ++-- Gemfile.rails5.1 | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 Gemfile.rails5.1 diff --git a/.travis.yml b/.travis.yml index 9b6c05c71..94ca29898 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,6 +22,7 @@ gemfile: - Gemfile.rails4.1 - Gemfile.rails4.2 - Gemfile.rails5.0 + - Gemfile.rails5.1 - Gemfile.rails-edge matrix: exclude: diff --git a/Gemfile b/Gemfile index 1a0d0ca48..13a9bda15 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -rails_version = '~> 5.1.1' +rails_version = '~> 5.2.0' gem 'activerecord', rails_version gem 'actionpack', rails_version @@ -16,7 +16,7 @@ gem 'dm-migrations' gem 'dm-sqlite-adapter' gem 'mongoid' -gem 'mysql2', '~> 0.4.6', :group => :mysql +gem 'mysql2', '~> 0.5.2', :group => :mysql gem 'pg', '~> 0.18.4', :group => :pg group :development do diff --git a/Gemfile.rails5.1 b/Gemfile.rails5.1 new file mode 100644 index 000000000..431f2bee0 --- /dev/null +++ b/Gemfile.rails5.1 @@ -0,0 +1,19 @@ +source 'https://rubygems.org' + +rails_version = '~> 5.1.1' + +gem 'activerecord', rails_version +gem 'actionpack', rails_version + +gem 'rspec', '~> 2.6.0' +gem 'mocha', '~> 0.9.8' + +gem 'sqlite3', '~> 1.3.6' + +gem 'mysql2', '~> 0.5.2', :group => :mysql +gem 'pg', '~> 0.18.4', :group => :pg + +group :development do + gem 'ruby-debug', :platforms => :mri_18 + gem 'debugger', :platforms => :mri_19 +end From a7d348c78ba4d4d706a8dae7221b2ade9d4f9096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 6 Aug 2018 15:32:39 +0200 Subject: [PATCH 2/4] Test against Ruby 2.5 --- .travis.yml | 41 ++++++++++++++++++++++++++++++---------- script/ci-matrix | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 10 deletions(-) create mode 100755 script/ci-matrix diff --git a/.travis.yml b/.travis.yml index 94ca29898..ada2a5a23 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,9 +10,10 @@ rvm: - 1.8.7 - 1.9.3 - 2.1.8 - - 2.2.4 + - 2.2.7 - 2.3.4 - 2.4.1 + - 2.5.1 gemfile: - Gemfile - Gemfile.rails3.0 @@ -27,25 +28,35 @@ gemfile: matrix: exclude: - rvm: 1.8.7 - gemfile: Gemfile.rails-edge + gemfile: Gemfile - rvm: 1.9.3 - gemfile: Gemfile.rails-edge + gemfile: Gemfile - rvm: 2.1.8 - gemfile: Gemfile.rails-edge + gemfile: Gemfile - rvm: 2.4.1 gemfile: Gemfile.rails3.0 + - rvm: 2.5.1 + gemfile: Gemfile.rails3.0 - rvm: 2.4.1 gemfile: Gemfile.rails3.1 + - rvm: 2.5.1 + gemfile: Gemfile.rails3.1 - rvm: 2.4.1 gemfile: Gemfile.rails3.2 - - rvm: 2.4.1 + - rvm: 2.5.1 + gemfile: Gemfile.rails3.2 + - rvm: 1.8.7 gemfile: Gemfile.rails4.0 - rvm: 2.4.1 - gemfile: Gemfile.rails4.1 - - rvm: 1.8.7 + gemfile: Gemfile.rails4.0 + - rvm: 2.5.1 gemfile: Gemfile.rails4.0 - rvm: 1.8.7 gemfile: Gemfile.rails4.1 + - rvm: 2.4.1 + gemfile: Gemfile.rails4.1 + - rvm: 2.5.1 + gemfile: Gemfile.rails4.1 - rvm: 1.8.7 gemfile: Gemfile.rails4.2 - rvm: 1.8.7 @@ -55,8 +66,18 @@ matrix: - rvm: 2.1.8 gemfile: Gemfile.rails5.0 - rvm: 1.8.7 - gemfile: Gemfile + gemfile: Gemfile.rails5.1 - rvm: 1.9.3 - gemfile: Gemfile + gemfile: Gemfile.rails5.1 - rvm: 2.1.8 - gemfile: Gemfile + gemfile: Gemfile.rails5.1 + - rvm: 1.8.7 + gemfile: Gemfile.rails-edge + - rvm: 1.9.3 + gemfile: Gemfile.rails-edge + - rvm: 2.1.8 + gemfile: Gemfile.rails-edge + - rvm: 2.2.7 + gemfile: Gemfile.rails-edge + - rvm: 2.3.4 + gemfile: Gemfile.rails-edge diff --git a/script/ci-matrix b/script/ci-matrix new file mode 100755 index 000000000..5d6518c74 --- /dev/null +++ b/script/ci-matrix @@ -0,0 +1,49 @@ +#!/usr/bin/env ruby +require "yaml" + +ci_config = File.expand_path('../../.travis.yml', __FILE__) +data = YAML.load(File.read(ci_config)) +ruby_versions = data.fetch('rvm') +gemfiles = data.fetch('gemfile') + +requirements = { + 'Gemfile.rails3.0' => Gem::Requirement.new('< 2.4'), + 'Gemfile.rails3.1' => Gem::Requirement.new('< 2.4'), + 'Gemfile.rails3.2' => Gem::Requirement.new('< 2.4'), + 'Gemfile.rails4.0' => Gem::Requirement.new(['< 2.4', '>= 1.9']), + 'Gemfile.rails4.1' => Gem::Requirement.new(['< 2.4', '>= 1.9']), + 'Gemfile.rails4.2' => Gem::Requirement.new('>= 1.9'), + 'Gemfile.rails5.0' => Gem::Requirement.new('>= 2.2'), + 'Gemfile.rails5.1' => Gem::Requirement.new('>= 2.2'), + 'Gemfile' => Gem::Requirement.new('>= 2.2'), + 'Gemfile.rails-edge' => Gem::Requirement.new('>= 2.4.1'), +} + +commands = {} + +commands['excludes'] = -> { + excludes = [] + gemfiles.each do |gemfile| + req = requirements.fetch(gemfile) + ruby_versions.each do |version| + unless req.satisfied_by?(Gem::Version.new(version)) + excludes << { 'rvm' => version, 'gemfile' => gemfile } + end + end + end + + data.fetch('matrix')['exclude'] = excludes + File.open(ci_config, 'w') do |file| + yaml_str = YAML.dump(data) + .sub(/^---\n/, '') + .gsub(/^(\s*-)/, ' \1') + .gsub(/^(\s+gemfile:)/, ' \1') + file.write(yaml_str) + end +} + +cmd = commands.fetch(ARGV[0]) do + $stderr.puts "available commands: #{commands.keys.join(', ')}" + exit 1 +end +cmd.(*ARGV[1..-1]) From 91db6a21523c3d65bf2856ba69a72d33c6470696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 6 Aug 2018 15:59:49 +0200 Subject: [PATCH 3/4] Prevent mysql2 from upgrading to Ruby 1.9-incompatible version --- Gemfile.rails3.0 | 1 + Gemfile.rails3.1 | 2 +- Gemfile.rails3.2 | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Gemfile.rails3.0 b/Gemfile.rails3.0 index f3eaa5abe..eb885ae79 100644 --- a/Gemfile.rails3.0 +++ b/Gemfile.rails3.0 @@ -13,6 +13,7 @@ gem 'sqlite3', '~> 1.3.3' group :mysql do gem 'mysql', '~> 2.9.1' + gem 'mysql2', '~> 0.4.6' gem 'activerecord-mysql2-adapter' end gem 'pg', '< 0.18', :group => :pg diff --git a/Gemfile.rails3.1 b/Gemfile.rails3.1 index 2bbfda3ab..f86cfce86 100644 --- a/Gemfile.rails3.1 +++ b/Gemfile.rails3.1 @@ -14,7 +14,7 @@ gem 'sqlite3', '~> 1.3.3' group :mysql do gem 'mysql', '~> 2.9.1' - gem 'mysql2', '>= 0.3.6' + gem 'mysql2', '~> 0.4.6' end gem 'pg', '< 0.18', :group => :pg diff --git a/Gemfile.rails3.2 b/Gemfile.rails3.2 index 3f4013418..f4c3c3284 100644 --- a/Gemfile.rails3.2 +++ b/Gemfile.rails3.2 @@ -14,7 +14,7 @@ gem 'sqlite3', '~> 1.3.3' group :mysql do gem 'mysql', '~> 2.9.1' - gem 'mysql2', '>= 0.3.6' + gem 'mysql2', '~> 0.4.6' end gem 'pg', '< 0.18', :group => :pg From 797e74df8fb3f9b8eb1951bed38ea93405675a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 6 Aug 2018 16:09:35 +0200 Subject: [PATCH 4/4] Fix primary key for MySQL 5.7 --- spec/finders/activerecord_test_connector.rb | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/spec/finders/activerecord_test_connector.rb b/spec/finders/activerecord_test_connector.rb index 4c1f8fdcd..6017f55b3 100644 --- a/spec/finders/activerecord_test_connector.rb +++ b/spec/finders/activerecord_test_connector.rb @@ -79,6 +79,13 @@ def setup_connection ActiveRecord::Base.configurations = { db => configuration } ActiveRecord::Base.establish_connection(db.to_sym) ActiveRecord::Base.default_timezone = :utc + + case configuration['adapter'] + when 'mysql' + fix_primary_key(ActiveRecord::ConnectionAdapters::MysqlAdapter) + when 'mysql2' + fix_primary_key(ActiveRecord::ConnectionAdapters::Mysql2Adapter) + end end def load_schema @@ -90,7 +97,13 @@ def load_schema $stdout = STDOUT end end - + + def fix_primary_key(adapter_class) + if ActiveRecord::VERSION::STRING < "4.1" + adapter_class::NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY" + end + end + module FixtureSetup def fixtures(*tables) table_names = tables.map { |t| t.to_s }