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.
- 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
|
[](http://badge.fury.io/rb/<%= gem_name %>)
|
|
2
|
-
[](https://github.com/SchemaPlus/<%= gem_name %>/actions)
|
|
3
3
|
[](https://coveralls.io/r/SchemaPlus/<%= gem_name %>)
|
|
4
|
-
[](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
|