schema_dev 4.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/prs.yml +49 -0
  3. data/.simplecov +20 -0
  4. data/Gemfile +2 -0
  5. data/README.md +7 -7
  6. data/Rakefile +3 -5
  7. data/bin/schema_dev +25 -21
  8. data/lib/schema_dev/config.rb +62 -44
  9. data/lib/schema_dev/executor.rb +9 -8
  10. data/lib/schema_dev/gem.rb +45 -37
  11. data/lib/schema_dev/gemfile_selector.rb +7 -7
  12. data/lib/schema_dev/gemfiles.rb +6 -5
  13. data/lib/schema_dev/github_actions.rb +266 -0
  14. data/lib/schema_dev/matrix_executor.rb +4 -2
  15. data/lib/schema_dev/readme.rb +17 -10
  16. data/lib/schema_dev/rspec/db.rb +44 -33
  17. data/lib/schema_dev/rspec.rb +4 -9
  18. data/lib/schema_dev/ruby_selector.rb +29 -14
  19. data/lib/schema_dev/runner.rb +14 -10
  20. data/lib/schema_dev/tasks/dbms.rb +34 -26
  21. data/lib/schema_dev/tasks.rb +2 -3
  22. data/lib/schema_dev/templates.rb +5 -5
  23. data/lib/schema_dev/version.rb +3 -1
  24. data/lib/schema_dev.rb +3 -1
  25. data/schema_dev.gemspec +23 -26
  26. data/spec/schema_dev/config_spec.rb +60 -0
  27. data/spec/schema_dev/gem_spec.rb +74 -0
  28. data/spec/schema_dev/gemfile_selector_spec.rb +11 -0
  29. data/spec/schema_dev/gemfiles_spec.rb +41 -0
  30. data/spec/schema_dev/github_actions_spec.rb +818 -0
  31. data/spec/schema_dev/runner_spec.rb +103 -0
  32. data/spec/spec_helper.rb +5 -6
  33. data/templates/README/uses.schema_dev.md.erb +1 -2
  34. data/templates/gem/GEM_NAME.gemspec.erb +15 -14
  35. data/templates/gem/Gemfile.erb +2 -0
  36. data/templates/gem/Gemfile.local.erb +2 -0
  37. data/templates/gem/README.md.erb +1 -2
  38. data/templates/gem/Rakefile.erb +2 -0
  39. data/templates/gem/schema_dev.yml.erb +4 -1
  40. data/templates/gem/simplecov.erb +20 -0
  41. metadata +38 -87
  42. data/.travis.yml +0 -4
  43. data/lib/schema_dev/tasks/coveralls.rb +0 -3
  44. data/lib/schema_dev/travis.rb +0 -147
  45. data/spec/config_spec.rb +0 -61
  46. data/spec/gem_spec.rb +0 -77
  47. data/spec/gemfile_sepector_spec.rb +0 -10
  48. data/spec/gemfiles_spec.rb +0 -41
  49. data/spec/runner_spec.rb +0 -106
  50. data/spec/travis_spec.rb +0 -392
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'schema_dev/runner'
4
+ require 'which_works'
5
+ require 'pathname'
6
+
7
+ describe SchemaDev::Runner do
8
+ it 'creates gemfiles' do
9
+ config = get_config(ruby: '2.5', activerecord: '6.0', db: 'sqlite3')
10
+ runner = described_class.new(config)
11
+ in_tmpdir do
12
+ expect { runner.gemfiles }.to output("* Updated gemfiles\n").to_stdout
13
+ expect(Pathname.new('gemfiles')).to be_directory
14
+ end
15
+ end
16
+
17
+ it 'creates github actions' do
18
+ config = get_config(ruby: '2.5', activerecord: '6.0', db: 'sqlite3')
19
+ runner = described_class.new(config)
20
+ in_tmpdir do
21
+ expect { runner.github_actions }.to output('* Updated ' + SchemaDev::GithubActions::WORKFLOW_FILE + "\n").to_stdout
22
+ expect(Pathname.new(SchemaDev::GithubActions::WORKFLOW_FILE)).to be_file
23
+ end
24
+ end
25
+
26
+ {
27
+ 'chruby-exec' => "SHELL=/usr/local/bin/bash chruby-exec ruby-#{RUBY_VERSION} --",
28
+ 'rvm' => "rvm #{RUBY_VERSION} do",
29
+ 'rbenv' => "RBENV_VERSION=#{RUBY_VERSION}"
30
+ }.each do |selector, selection_command|
31
+ describe "matrix (#{selector})" do
32
+ before(:each) do
33
+ # mocking Which.which to find selector
34
+ SchemaDev::RubySelector._reset
35
+ allow(Which).to receive(:which) { |cmd| ['bash', selector].include?(cmd) ? "/usr/local/bin/#{cmd}" : nil }
36
+ case selector
37
+ when 'chruby-exec'
38
+ expect_any_instance_of(Pathname).to receive(:entries).and_return [Pathname.new("ruby-#{RUBY_VERSION}")]
39
+ when 'rbenv'
40
+ expect_any_instance_of(SchemaDev::RubySelector::Rbenv).to receive(:`).with('rbenv versions --bare').and_return RUBY_VERSION
41
+ end
42
+
43
+ # mocking execution
44
+ original_popen2e = Open3.method(:popen2e)
45
+ allow(Open3).to receive(:popen2e) { |cmd, &block|
46
+ cmd = case cmd
47
+ when /false$/ then 'false'
48
+ when /true$/ then 'true'
49
+ else cmd.sub(/.*echo/, 'echo')
50
+ end
51
+ original_popen2e.call(cmd, &block)
52
+ }
53
+ end
54
+
55
+ let(:config) { get_config(ruby: RUBY_VERSION, activerecord: '6.0', db: %w[sqlite3 postgresql]) }
56
+ let(:runner) { described_class.new(config) }
57
+
58
+ let(:expected_output) { <<~ENDOUTPUT.strip }
59
+ * Updated #{SchemaDev::GithubActions::WORKFLOW_FILE}
60
+ * Updated gemfiles
61
+
62
+
63
+ *** ruby #{RUBY_VERSION} - activerecord 6.0 - db sqlite3 [1 of 2]
64
+
65
+ * /usr/bin/env BUNDLE_GEMFILE=gemfiles/activerecord-6.0/Gemfile.sqlite3 #{selection_command} %{cmd}
66
+ %{output}
67
+
68
+ *** ruby #{RUBY_VERSION} - activerecord 6.0 - db postgresql [2 of 2]
69
+
70
+ * /usr/bin/env BUNDLE_GEMFILE=gemfiles/activerecord-6.0/Gemfile.postgresql #{selection_command} %{cmd}
71
+ %{output}
72
+ ENDOUTPUT
73
+
74
+ it 'runs successfully' do
75
+ in_tmpdir do
76
+ expect { runner.run('true') }.to output(expected_output % { cmd: 'true', output: nil }).to_stdout
77
+ end
78
+ end
79
+
80
+ it 'reports error exits' do
81
+ in_tmpdir do
82
+ expect { runner.run('false') }.to output(expected_output % { cmd: 'false', output: nil } + <<~ENDERR).to_stdout
83
+
84
+ *** 2 failures:
85
+ \truby #{RUBY_VERSION} - activerecord 6.0 - db sqlite3
86
+ \truby #{RUBY_VERSION} - activerecord 6.0 - db postgresql
87
+ ENDERR
88
+ end
89
+ end
90
+
91
+ it 'reports error messages' do
92
+ in_tmpdir do
93
+ expect { runner.run('echo', 'LoadError') }.to output(expected_output % { cmd: 'echo LoadError', output: "LoadError\n" } + <<~ENDERR).to_stdout
94
+
95
+ *** 2 failures:
96
+ \truby #{RUBY_VERSION} - activerecord 6.0 - db sqlite3
97
+ \truby #{RUBY_VERSION} - activerecord 6.0 - db postgresql
98
+ ENDERR
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'simplecov'
2
4
  SimpleCov.start
3
5
 
@@ -8,11 +10,9 @@ require 'webmock/rspec'
8
10
 
9
11
  require 'schema_dev/config'
10
12
 
11
- def in_tmpdir
13
+ def in_tmpdir(&block)
12
14
  Dir.mktmpdir do |dir|
13
- Dir.chdir(dir) do
14
- yield
15
- end
15
+ Dir.chdir(dir, &block)
16
16
  end
17
17
  end
18
18
 
@@ -31,11 +31,10 @@ def suppress_stdout_stderr
31
31
  end
32
32
  end
33
33
 
34
-
35
34
  def get_config(data)
36
35
  SchemaDev::Config._reset
37
36
  in_tmpdir do
38
- Pathname.new(SchemaDev::CONFIG_FILE).open("w") {|f| f.write data.to_yaml }
37
+ Pathname.new(SchemaDev::CONFIG_FILE).open('w') { |f| f.write data.to_yaml }
39
38
  SchemaDev::Config.load
40
39
  end
41
40
  end
@@ -1,7 +1,7 @@
1
1
  * **schema_dev**: <%= gem_module %> uses [schema_dev](https://github.com/SchemaPlus/schema_dev) to
2
2
  facilitate running rspec tests on the matrix of ruby, activerecord, and database
3
3
  versions that the gem supports, both locally and on
4
- [travis-ci](http://travis-ci.org/SchemaPlus/<%= gem_name %>)
4
+ [github actions](https://github.com/SchemaPlus/<%= gem_name %>/actions)
5
5
 
6
6
  To to run rspec locally on the full matrix, do:
7
7
 
@@ -12,4 +12,3 @@
12
12
 
13
13
  The matrix of configurations is specified in `schema_dev.yml` in
14
14
  the project root.
15
-
@@ -1,30 +1,31 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require '<%= gem_lib_path %>/version'
5
6
 
6
7
  Gem::Specification.new do |gem|
7
- gem.name = "<%= gem_name %>"
8
+ gem.name = '<%= gem_name %>'
8
9
  gem.version = <%= gem_module %>::VERSION
9
10
  gem.authors = ["<%= fullname %>"]
10
11
  gem.email = ["<%= email %>"]
11
12
  gem.summary = %q{TODO: Write a short summary. Required.}
12
13
  gem.description = %q{TODO: Write a longer description. Optional.}
13
- gem.homepage = "https://github.com/SchemaPlus/<%= gem_name %>"
14
- gem.license = "MIT"
14
+ gem.homepage = 'https://github.com/SchemaPlus/<%= gem_name %>'
15
+ gem.license = 'MIT'
15
16
 
16
17
  gem.files = `git ls-files -z`.split("\x0")
17
18
  gem.executables = gem.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
19
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
- gem.require_paths = ["lib"]
20
+ gem.require_paths = ['lib']
21
+
22
+ gem.required_ruby_version = '>= 2.5.0'
20
23
 
21
- gem.add_dependency "activerecord", "~> 4.2"
22
- gem.add_dependency "schema_plus_core", <%= schema_plus_core_dependency %>
24
+ gem.add_dependency 'activerecord', '>= 5.2', '< 7.0'
25
+ gem.add_dependency 'schema_plus_core', <%= schema_plus_core_dependency %>
23
26
 
24
- gem.add_development_dependency "bundler"
25
- gem.add_development_dependency "rake", "~> 10.0"
26
- gem.add_development_dependency "rspec", "~> 3.0"
27
- gem.add_development_dependency "schema_dev", <%= schema_dev_dependency %>
28
- gem.add_development_dependency "simplecov"
29
- gem.add_development_dependency "simplecov-gem-profile"
27
+ gem.add_development_dependency 'bundler'
28
+ gem.add_development_dependency 'rake', '~> 13.0'
29
+ gem.add_development_dependency 'rspec', '~> 3.0'
30
+ gem.add_development_dependency 'schema_dev', <%= schema_dev_dependency %>
30
31
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "http://rubygems.org"
2
4
 
3
5
  gemspec
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Gemfile.local
2
4
  #
3
5
  # Gems for local development, .gitignore'd to not include in released gem
@@ -1,7 +1,6 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/<%= gem_name %>.svg)](http://badge.fury.io/rb/<%= gem_name %>)
2
- [![Build Status](https://secure.travis-ci.org/SchemaPlus/<%= gem_name %>.svg)](http://travis-ci.org/SchemaPlus/<%= gem_name %>)
2
+ [![Build Status](https://github.com/SchemaPlus/<%= gem_name %>/actions/workflows/prs.yml/badge.svg)](https://github.com/SchemaPlus/<%= gem_name %>/actions)
3
3
  [![Coverage Status](https://img.shields.io/coveralls/SchemaPlus/<%= gem_name %>.svg)](https://coveralls.io/r/SchemaPlus/<%= gem_name %>)
4
- [![Dependency Status](https://gemnasium.com/SchemaPlus/<%= gem_name %>.svg)](https://gemnasium.com/SchemaPlus/<%= gem_name %>)
5
4
 
6
5
  # <%= gem_module %>
7
6
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler'
2
4
  Bundler::GemHelper.install_tasks
3
5
 
@@ -1,7 +1,10 @@
1
1
  ruby:
2
- - 2.7.4
2
+ - 2.7
3
+ - 3.0
3
4
  activerecord:
4
5
  - 5.2
6
+ - 6.0
7
+ - 6.1
5
8
  db:
6
9
  - mysql2
7
10
  - sqlite3
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ SimpleCov.configure do
4
+ enable_coverage :branch
5
+ add_filter '/spec/'
6
+
7
+ add_group 'Binaries', '/bin/'
8
+ add_group 'Libraries', '/lib/'
9
+
10
+ if ENV['CI']
11
+ require 'simplecov-lcov'
12
+
13
+ SimpleCov::Formatter::LcovFormatter.config do |c|
14
+ c.report_with_single_file = true
15
+ c.single_report_path = 'coverage/lcov.info'
16
+ end
17
+
18
+ formatter SimpleCov::Formatter::LcovFormatter
19
+ end
20
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema_dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ronen barzel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-07 00:00:00.000000000 Z
11
+ date: 2022-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,36 +30,8 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '6.2'
33
- - !ruby/object:Gem::Dependency
34
- name: coveralls_reborn
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '0.23'
40
- type: :runtime
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '0.23'
47
33
  - !ruby/object:Gem::Dependency
48
34
  name: faraday
49
- requirement: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '0.9'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '0.9'
61
- - !ruby/object:Gem::Dependency
62
- name: fastandand
63
35
  requirement: !ruby/object:Gem::Requirement
64
36
  requirements:
65
37
  - - "~>"
@@ -73,61 +45,53 @@ dependencies:
73
45
  - !ruby/object:Gem::Version
74
46
  version: '1.0'
75
47
  - !ruby/object:Gem::Dependency
76
- name: hash_keyword_args
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '0.1'
82
- type: :runtime
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '0.1'
89
- - !ruby/object:Gem::Dependency
90
- name: its-it
48
+ name: simplecov
91
49
  requirement: !ruby/object:Gem::Requirement
92
50
  requirements:
93
- - - "~>"
51
+ - - ">="
94
52
  - !ruby/object:Gem::Version
95
- version: '1.3'
53
+ version: '0'
96
54
  type: :runtime
97
55
  prerelease: false
98
56
  version_requirements: !ruby/object:Gem::Requirement
99
57
  requirements:
100
- - - "~>"
58
+ - - ">="
101
59
  - !ruby/object:Gem::Version
102
- version: '1.3'
60
+ version: '0'
103
61
  - !ruby/object:Gem::Dependency
104
- name: key_struct
62
+ name: simplecov-lcov
105
63
  requirement: !ruby/object:Gem::Requirement
106
64
  requirements:
107
65
  - - "~>"
108
66
  - !ruby/object:Gem::Version
109
- version: '0.4'
67
+ version: 0.8.0
110
68
  type: :runtime
111
69
  prerelease: false
112
70
  version_requirements: !ruby/object:Gem::Requirement
113
71
  requirements:
114
72
  - - "~>"
115
73
  - !ruby/object:Gem::Version
116
- version: '0.4'
74
+ version: 0.8.0
117
75
  - !ruby/object:Gem::Dependency
118
76
  name: thor
119
77
  requirement: !ruby/object:Gem::Requirement
120
78
  requirements:
121
- - - "~>"
79
+ - - ">="
122
80
  - !ruby/object:Gem::Version
123
81
  version: '0.19'
82
+ - - "<"
83
+ - !ruby/object:Gem::Version
84
+ version: '2.0'
124
85
  type: :runtime
125
86
  prerelease: false
126
87
  version_requirements: !ruby/object:Gem::Requirement
127
88
  requirements:
128
- - - "~>"
89
+ - - ">="
129
90
  - !ruby/object:Gem::Version
130
91
  version: '0.19'
92
+ - - "<"
93
+ - !ruby/object:Gem::Version
94
+ version: '2.0'
131
95
  - !ruby/object:Gem::Dependency
132
96
  name: which_works
133
97
  requirement: !ruby/object:Gem::Requirement
@@ -162,14 +126,14 @@ dependencies:
162
126
  requirements:
163
127
  - - "~>"
164
128
  - !ruby/object:Gem::Version
165
- version: '10.0'
129
+ version: '13.0'
166
130
  type: :development
167
131
  prerelease: false
168
132
  version_requirements: !ruby/object:Gem::Requirement
169
133
  requirements:
170
134
  - - "~>"
171
135
  - !ruby/object:Gem::Version
172
- version: '10.0'
136
+ version: '13.0'
173
137
  - !ruby/object:Gem::Dependency
174
138
  name: rspec
175
139
  requirement: !ruby/object:Gem::Requirement
@@ -198,34 +162,20 @@ dependencies:
198
162
  - - "~>"
199
163
  - !ruby/object:Gem::Version
200
164
  version: '3.8'
201
- - !ruby/object:Gem::Dependency
202
- name: simplecov
203
- requirement: !ruby/object:Gem::Requirement
204
- requirements:
205
- - - ">="
206
- - !ruby/object:Gem::Version
207
- version: '0'
208
- type: :development
209
- prerelease: false
210
- version_requirements: !ruby/object:Gem::Requirement
211
- requirements:
212
- - - ">="
213
- - !ruby/object:Gem::Version
214
- version: '0'
215
165
  - !ruby/object:Gem::Dependency
216
166
  name: webmock
217
167
  requirement: !ruby/object:Gem::Requirement
218
168
  requirements:
219
169
  - - "~>"
220
170
  - !ruby/object:Gem::Version
221
- version: '2.1'
171
+ version: '3.0'
222
172
  type: :development
223
173
  prerelease: false
224
174
  version_requirements: !ruby/object:Gem::Requirement
225
175
  requirements:
226
176
  - - "~>"
227
177
  - !ruby/object:Gem::Version
228
- version: '2.1'
178
+ version: '3.0'
229
179
  description: SchemaPlus development tools
230
180
  email:
231
181
  - ronen@barzel.org
@@ -234,9 +184,10 @@ executables:
234
184
  extensions: []
235
185
  extra_rdoc_files: []
236
186
  files:
187
+ - ".github/workflows/prs.yml"
237
188
  - ".gitignore"
238
189
  - ".rspec"
239
- - ".travis.yml"
190
+ - ".simplecov"
240
191
  - Gemfile
241
192
  - LICENSE.txt
242
193
  - README.md
@@ -248,6 +199,7 @@ files:
248
199
  - lib/schema_dev/gem.rb
249
200
  - lib/schema_dev/gemfile_selector.rb
250
201
  - lib/schema_dev/gemfiles.rb
202
+ - lib/schema_dev/github_actions.rb
251
203
  - lib/schema_dev/matrix_executor.rb
252
204
  - lib/schema_dev/readme.rb
253
205
  - lib/schema_dev/rspec.rb
@@ -255,19 +207,17 @@ files:
255
207
  - lib/schema_dev/ruby_selector.rb
256
208
  - lib/schema_dev/runner.rb
257
209
  - lib/schema_dev/tasks.rb
258
- - lib/schema_dev/tasks/coveralls.rb
259
210
  - lib/schema_dev/tasks/dbms.rb
260
211
  - lib/schema_dev/templates.rb
261
- - lib/schema_dev/travis.rb
262
212
  - lib/schema_dev/version.rb
263
213
  - schema_dev.gemspec
264
- - spec/config_spec.rb
265
- - spec/gem_spec.rb
266
- - spec/gemfile_sepector_spec.rb
267
- - spec/gemfiles_spec.rb
268
- - spec/runner_spec.rb
214
+ - spec/schema_dev/config_spec.rb
215
+ - spec/schema_dev/gem_spec.rb
216
+ - spec/schema_dev/gemfile_selector_spec.rb
217
+ - spec/schema_dev/gemfiles_spec.rb
218
+ - spec/schema_dev/github_actions_spec.rb
219
+ - spec/schema_dev/runner_spec.rb
269
220
  - spec/spec_helper.rb
270
- - spec/travis_spec.rb
271
221
  - templates/README/installation.md.erb
272
222
  - templates/README/uses.schema_dev.md.erb
273
223
  - templates/README/uses.schema_monkey.md.erb
@@ -282,6 +232,7 @@ files:
282
232
  - templates/gem/lib/GEM_BASE_NAME.rb.erb
283
233
  - templates/gem/lib/GEM_BASE_NAME/version.rb.erb
284
234
  - templates/gem/schema_dev.yml.erb
235
+ - templates/gem/simplecov.erb
285
236
  - templates/gem/spec/sanity_spec.rb.erb
286
237
  - templates/gem/spec/spec_helper.rb.erb
287
238
  - templates/gemfiles/Gemfile.base.erb
@@ -321,10 +272,10 @@ signing_key:
321
272
  specification_version: 4
322
273
  summary: SchemaPlus development tools
323
274
  test_files:
324
- - spec/config_spec.rb
325
- - spec/gem_spec.rb
326
- - spec/gemfile_sepector_spec.rb
327
- - spec/gemfiles_spec.rb
328
- - spec/runner_spec.rb
275
+ - spec/schema_dev/config_spec.rb
276
+ - spec/schema_dev/gem_spec.rb
277
+ - spec/schema_dev/gemfile_selector_spec.rb
278
+ - spec/schema_dev/gemfiles_spec.rb
279
+ - spec/schema_dev/github_actions_spec.rb
280
+ - spec/schema_dev/runner_spec.rb
329
281
  - spec/spec_helper.rb
330
- - spec/travis_spec.rb
data/.travis.yml DELETED
@@ -1,4 +0,0 @@
1
- rvm:
2
- - 2.5.9
3
- - 2.7.4
4
- script: bundle exec rake travis
@@ -1,3 +0,0 @@
1
- require 'coveralls/rake/task'
2
- Coveralls::RakeTask.new
3
- task :spec_with_coveralls => [:spec, 'coveralls:push']
@@ -1,147 +0,0 @@
1
- require 'pathname'
2
- require 'yaml'
3
-
4
- require_relative 'gemfile_selector'
5
-
6
- module SchemaDev
7
- module Travis
8
- extend self
9
-
10
- TRAVIS_FILE = ".travis.yml"
11
-
12
- CONFIG_TEMPLATES = {
13
- postgresql: {
14
- default: {
15
- env: 'POSTGRESQL_DB_USER=postgres'
16
- },
17
- '10' => {
18
- addons: { apt: { packages: %w[postgresql-10 postgresql-client-10] } },
19
- env: 'POSTGRESQL_DB_USER=postgres'
20
- },
21
- '11' => {
22
- addons: { apt: { packages: %w[postgresql-11 postgresql-client-11] } },
23
- env: 'POSTGRESQL_DB_USER=travis PGPORT=5433'
24
- },
25
- '12' => {
26
- addons: { apt: { packages: %w[postgresql-12 postgresql-client-12] } },
27
- env: 'POSTGRESQL_DB_USER=travis PGPORT=5433'
28
- },
29
- '13' => {
30
- addons: { apt: { packages: %w[postgresql-13 postgresql-client-13] } },
31
- env: 'POSTGRESQL_DB_USER=travis PGPORT=5433'
32
- },
33
- '14' => {
34
- addons: { apt: { packages: %w[postgresql-14 postgresql-client-14] } },
35
- env: 'POSTGRESQL_DB_USER=travis PGPORT=5433'
36
- },
37
- }
38
- }.freeze
39
-
40
- def template_for_db(db, version)
41
- {
42
- addons: {
43
- db => version
44
- }
45
- }.deep_merge(CONFIG_TEMPLATES[db][version] || CONFIG_TEMPLATES[db][:default])
46
- .deep_stringify_keys
47
- end
48
-
49
- def build(config)
50
- env = []
51
- include = []
52
- addons = {}
53
- services = []
54
- skip_gemfiles = []
55
- if config.dbms.include?(:postgresql)
56
- versions = config.dbms_versions_for(:postgresql, ['9.6'])
57
- if config.db.count == 1
58
- if versions.count == 1
59
- # only PG and only 1 DB do it globally
60
- template = template_for_db(:postgresql, versions.first)
61
- env << template['env']
62
- addons.merge!(template['addons'])
63
- else
64
- # we only have one DB so we can greatly simplify our include matrix
65
- include.concat versions.map {|version|
66
- {}.merge(template_for_db(:postgresql, version))
67
- }
68
- end
69
- else
70
- # we need to include against the various gemfiles so we only use PG for PG tests (and not other DBs)
71
- config.matrix(db: 'postgresql').map { |entry|
72
- gemfile = GemfileSelector.gemfile(entry.slice(:activerecord, :db)).to_s
73
- skip_gemfiles << gemfile
74
- include.concat versions.map {|version|
75
- {
76
- "gemfile" => gemfile,
77
- "rvm" => entry[:ruby],
78
- }.merge(template_for_db(:postgresql, version))
79
- }
80
- }
81
- end
82
- end
83
- if config.dbms.include?(:mysql)
84
- if config.db.count == 1
85
- env << 'MYSQL_DB_USER=travis'
86
- services << 'mysql'
87
- else
88
- config.matrix(db: 'mysql2').map do |entry|
89
- gemfile = GemfileSelector.gemfile(entry.slice(:activerecord, :db)).to_s
90
- skip_gemfiles << gemfile
91
- include << {
92
- "gemfile" => gemfile,
93
- "rvm" => entry[:ruby],
94
- "services" => ['mysql'],
95
- "env" => 'MYSQL_DB_USER=travis',
96
- }
97
- end
98
- end
99
- end
100
- env = env.join(' ')
101
-
102
- gemfiles = config.matrix.map{|entry| GemfileSelector.gemfile(entry.slice(:activerecord, :db)).to_s}.uniq
103
- gemfiles.reject! { |gemfile| skip_gemfiles.include?(gemfile) }
104
-
105
- exclude = config.matrix(excluded: :only).map { |entry| {}.tap {|ex|
106
- ex["rvm"] = entry[:ruby]
107
- ex["gemfile"] = GemfileSelector.gemfile(entry.slice(:activerecord, :db)).to_s
108
- }}.reject{|ex| not gemfiles.include? ex["gemfile"]}
109
-
110
- {}.tap { |travis|
111
- travis["rvm"] = config.ruby.sort
112
- travis["gemfile"] = gemfiles.sort unless gemfiles.empty?
113
- travis["env"] = env unless env.empty?
114
- travis["addons"] = addons unless addons.empty?
115
- travis["services"] = services unless services.empty?
116
- if config.dbms.any?
117
- travis["before_script"] = 'bundle exec rake create_databases'
118
- travis["after_script"] = 'bundle exec rake drop_databases'
119
- end
120
- travis["script"] = "bundle exec rake travis"
121
- travis["notifications"] = { "email" => config.notify } if config.notify.any?
122
- travis["jobs"] = {}
123
- travis["jobs"]["exclude"] = exclude.sort_by{|ex| [ex["rvm"], ex["gemfile"]]} if exclude.any?
124
- if include.any?
125
- travis["jobs"]["include"] = include.sort_by{|ex| [ex.fetch('rvm', ''), ex.fetch('gemfile', '')]}
126
- end
127
- travis.delete("jobs") if travis["jobs"].empty?
128
- }
129
- end
130
-
131
- def update(config)
132
- filepath = Pathname.new(TRAVIS_FILE)
133
- newtravis = build(config)
134
- oldtravis = YAML.load(filepath.read) rescue nil
135
- if oldtravis != newtravis
136
- header = <<-ENDYAML
137
- # This file was auto-generated by the schema_dev tool, based on the data in
138
- # ./schema_dev.yml
139
- # Please do not edit this file; any changes will be overwritten next time
140
- # schema_dev gets run.
141
- ENDYAML
142
- filepath.write header + newtravis.to_yaml
143
- return true
144
- end
145
- end
146
- end
147
- end