schema_dev 4.0.0 → 4.1.0

Sign up to get free protection for your applications and to get access to all the features.
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