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.
- checksums.yaml +4 -4
- data/.github/workflows/prs.yml +49 -0
- data/.simplecov +20 -0
- data/Gemfile +2 -0
- data/README.md +7 -7
- data/Rakefile +3 -5
- data/bin/schema_dev +25 -21
- data/lib/schema_dev/config.rb +62 -44
- data/lib/schema_dev/executor.rb +9 -8
- data/lib/schema_dev/gem.rb +45 -37
- data/lib/schema_dev/gemfile_selector.rb +7 -7
- data/lib/schema_dev/gemfiles.rb +6 -5
- data/lib/schema_dev/github_actions.rb +266 -0
- data/lib/schema_dev/matrix_executor.rb +4 -2
- data/lib/schema_dev/readme.rb +17 -10
- data/lib/schema_dev/rspec/db.rb +44 -33
- data/lib/schema_dev/rspec.rb +4 -9
- data/lib/schema_dev/ruby_selector.rb +29 -14
- data/lib/schema_dev/runner.rb +14 -10
- data/lib/schema_dev/tasks/dbms.rb +34 -26
- data/lib/schema_dev/tasks.rb +2 -3
- data/lib/schema_dev/templates.rb +5 -5
- data/lib/schema_dev/version.rb +3 -1
- data/lib/schema_dev.rb +3 -1
- data/schema_dev.gemspec +23 -26
- data/spec/schema_dev/config_spec.rb +60 -0
- data/spec/schema_dev/gem_spec.rb +74 -0
- data/spec/schema_dev/gemfile_selector_spec.rb +11 -0
- data/spec/schema_dev/gemfiles_spec.rb +41 -0
- data/spec/schema_dev/github_actions_spec.rb +818 -0
- data/spec/schema_dev/runner_spec.rb +103 -0
- data/spec/spec_helper.rb +5 -6
- data/templates/README/uses.schema_dev.md.erb +1 -2
- data/templates/gem/GEM_NAME.gemspec.erb +15 -14
- data/templates/gem/Gemfile.erb +2 -0
- data/templates/gem/Gemfile.local.erb +2 -0
- data/templates/gem/README.md.erb +1 -2
- data/templates/gem/Rakefile.erb +2 -0
- data/templates/gem/schema_dev.yml.erb +4 -1
- data/templates/gem/simplecov.erb +20 -0
- metadata +38 -87
- data/.travis.yml +0 -4
- data/lib/schema_dev/tasks/coveralls.rb +0 -3
- data/lib/schema_dev/travis.rb +0 -147
- data/spec/config_spec.rb +0 -61
- data/spec/gem_spec.rb +0 -77
- data/spec/gemfile_sepector_spec.rb +0 -10
- data/spec/gemfiles_spec.rb +0 -41
- data/spec/runner_spec.rb +0 -106
- 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)
|
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(
|
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
|
-
[
|
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
|
-
#
|
2
|
-
|
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 =
|
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 =
|
14
|
-
gem.license =
|
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 = [
|
20
|
+
gem.require_paths = ['lib']
|
21
|
+
|
22
|
+
gem.required_ruby_version = '>= 2.5.0'
|
20
23
|
|
21
|
-
gem.add_dependency
|
22
|
-
gem.add_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
|
25
|
-
gem.add_development_dependency
|
26
|
-
gem.add_development_dependency
|
27
|
-
gem.add_development_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
|
data/templates/gem/Gemfile.erb
CHANGED
data/templates/gem/README.md.erb
CHANGED
@@ -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://
|
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
|
|
data/templates/gem/Rakefile.erb
CHANGED
@@ -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.
|
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:
|
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:
|
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: '
|
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: '
|
60
|
+
version: '0'
|
103
61
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
62
|
+
name: simplecov-lcov
|
105
63
|
requirement: !ruby/object:Gem::Requirement
|
106
64
|
requirements:
|
107
65
|
- - "~>"
|
108
66
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
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:
|
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: '
|
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: '
|
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: '
|
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: '
|
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
|
-
- ".
|
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/
|
267
|
-
- spec/gemfiles_spec.rb
|
268
|
-
- spec/
|
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/
|
327
|
-
- spec/gemfiles_spec.rb
|
328
|
-
- spec/
|
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
data/lib/schema_dev/travis.rb
DELETED
@@ -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
|