gemika 0.3.4 → 0.6.1
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/test.yml +114 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +91 -0
- data/{gemfiles/Gemfile.3.2.mysql2 → Gemfile.3.2.mysql2} +4 -3
- data/{gemfiles/Gemfile.3.2.mysql2.lock → Gemfile.3.2.mysql2.lock} +19 -5
- data/{gemfiles/Gemfile.4.2.mysql2 → Gemfile.4.2.mysql2} +3 -2
- data/{gemfiles/Gemfile.4.2.mysql2.lock → Gemfile.4.2.mysql2.lock} +11 -5
- data/{gemfiles/Gemfile.4.2.pg → Gemfile.4.2.pg} +2 -1
- data/{gemfiles/Gemfile.4.2.pg.lock → Gemfile.4.2.pg.lock} +9 -3
- data/{gemfiles/Gemfile.5.0.mysql2 → Gemfile.5.2.mysql2} +4 -3
- data/{gemfiles/Gemfile.5.0.mysql2.lock → Gemfile.5.2.mysql2.lock} +28 -21
- data/{gemfiles/Gemfile.5.0.pg → Gemfile.5.2.pg} +3 -2
- data/{gemfiles/Gemfile.5.0.pg.lock → Gemfile.5.2.pg.lock} +26 -19
- data/{gemfiles/Gemfile.5.0.sqlite3 → Gemfile.5.2.sqlite3} +3 -2
- data/{gemfiles/Gemfile.5.0.sqlite3.lock → Gemfile.5.2.sqlite3.lock} +20 -14
- data/Gemfile.6.1.pg +17 -0
- data/Gemfile.6.1.pg.lock +66 -0
- data/README.md +117 -49
- data/gemika.gemspec +2 -2
- data/lib/gemika/database.rb +9 -3
- data/lib/gemika/env.rb +15 -1
- data/lib/gemika/errors.rb +2 -0
- data/lib/gemika/github_actions_generator.rb +150 -0
- data/lib/gemika/matrix.rb +38 -33
- data/lib/gemika/matrix/github_actions_config.rb +61 -0
- data/lib/gemika/matrix/travis_config.rb +42 -0
- data/lib/gemika/tasks.rb +1 -0
- data/lib/gemika/tasks/gemika.rb +14 -0
- data/lib/gemika/tasks/matrix.rb +4 -4
- data/lib/gemika/version.rb +1 -1
- data/spec/fixtures/github_actions_yml/Gemfile_without_gemika +1 -0
- data/spec/fixtures/github_actions_yml/excludes.yml +13 -0
- data/spec/fixtures/github_actions_yml/gemfile_without_gemika.yml +8 -0
- data/spec/fixtures/github_actions_yml/includes.yml +20 -0
- data/spec/fixtures/github_actions_yml/invalid.yml +8 -0
- data/spec/fixtures/github_actions_yml/missing_gemfile.yml +8 -0
- data/spec/fixtures/github_actions_yml/multiple_jobs.yml +16 -0
- data/spec/fixtures/github_actions_yml/two_by_two.yml +10 -0
- data/spec/fixtures/migrate/expected_github_actions.yml +129 -0
- data/spec/fixtures/migrate/travis.yml +66 -0
- data/spec/fixtures/travis_yml/includes.yml +12 -0
- data/spec/gemika/matrix_spec.rb +116 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/database.github.yml +13 -0
- metadata +35 -21
- data/.travis.yml +0 -62
- data/Gemfile.lock +0 -63
- data/gemfiles/Gemfile.2.3.mysql2 +0 -17
- data/gemfiles/Gemfile.2.3.mysql2.lock +0 -34
- data/spec/support/database.travis.yml +0 -9
@@ -4,13 +4,14 @@ source 'https://rubygems.org'
|
|
4
4
|
ruby '>= 2.2'
|
5
5
|
|
6
6
|
# Runtime dependencies
|
7
|
-
gem 'activerecord', '~>5.
|
7
|
+
gem 'activerecord', '~>5.2.0'
|
8
8
|
gem 'rspec', '~>3.5'
|
9
9
|
gem 'pg', '~>0.18.4'
|
10
10
|
|
11
11
|
# Development dependencies
|
12
12
|
gem 'rake'
|
13
13
|
gem 'database_cleaner'
|
14
|
+
gem 'pry'
|
14
15
|
|
15
16
|
# Gem under test
|
16
|
-
gem 'gemika', :path => '
|
17
|
+
gem 'gemika', :path => '.'
|
@@ -1,29 +1,35 @@
|
|
1
1
|
PATH
|
2
|
-
remote:
|
2
|
+
remote: .
|
3
3
|
specs:
|
4
|
-
gemika (0.
|
4
|
+
gemika (0.6.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
activemodel (5.
|
10
|
-
activesupport (= 5.
|
11
|
-
activerecord (5.
|
12
|
-
activemodel (= 5.
|
13
|
-
activesupport (= 5.
|
14
|
-
arel (
|
15
|
-
activesupport (5.
|
9
|
+
activemodel (5.2.3)
|
10
|
+
activesupport (= 5.2.3)
|
11
|
+
activerecord (5.2.3)
|
12
|
+
activemodel (= 5.2.3)
|
13
|
+
activesupport (= 5.2.3)
|
14
|
+
arel (>= 9.0)
|
15
|
+
activesupport (5.2.3)
|
16
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
|
-
i18n (
|
17
|
+
i18n (>= 0.7, < 2)
|
18
18
|
minitest (~> 5.1)
|
19
19
|
tzinfo (~> 1.1)
|
20
|
-
arel (
|
21
|
-
|
22
|
-
|
20
|
+
arel (9.0.0)
|
21
|
+
coderay (1.1.2)
|
22
|
+
concurrent-ruby (1.1.5)
|
23
|
+
database_cleaner (1.7.0)
|
23
24
|
diff-lcs (1.2.5)
|
24
|
-
i18n (
|
25
|
-
|
25
|
+
i18n (1.5.1)
|
26
|
+
concurrent-ruby (~> 1.0)
|
27
|
+
method_source (0.9.2)
|
28
|
+
minitest (5.11.3)
|
26
29
|
pg (0.18.4)
|
30
|
+
pry (0.12.2)
|
31
|
+
coderay (~> 1.1.0)
|
32
|
+
method_source (~> 0.9.0)
|
27
33
|
rake (11.3.0)
|
28
34
|
rspec (3.5.0)
|
29
35
|
rspec-core (~> 3.5.0)
|
@@ -38,18 +44,19 @@ GEM
|
|
38
44
|
diff-lcs (>= 1.2.0, < 2.0)
|
39
45
|
rspec-support (~> 3.5.0)
|
40
46
|
rspec-support (3.5.0)
|
41
|
-
thread_safe (0.3.
|
42
|
-
tzinfo (1.2.
|
47
|
+
thread_safe (0.3.6)
|
48
|
+
tzinfo (1.2.5)
|
43
49
|
thread_safe (~> 0.1)
|
44
50
|
|
45
51
|
PLATFORMS
|
46
52
|
ruby
|
47
53
|
|
48
54
|
DEPENDENCIES
|
49
|
-
activerecord (~> 5.
|
55
|
+
activerecord (~> 5.2.0)
|
50
56
|
database_cleaner
|
51
57
|
gemika!
|
52
58
|
pg (~> 0.18.4)
|
59
|
+
pry
|
53
60
|
rake
|
54
61
|
rspec (~> 3.5)
|
55
62
|
|
@@ -57,4 +64,4 @@ RUBY VERSION
|
|
57
64
|
ruby 2.2.4p230
|
58
65
|
|
59
66
|
BUNDLED WITH
|
60
|
-
|
67
|
+
2.2.15
|
@@ -4,13 +4,14 @@ source 'https://rubygems.org'
|
|
4
4
|
ruby '>= 2.2'
|
5
5
|
|
6
6
|
# Runtime dependencies
|
7
|
-
gem 'activerecord', '~>5.
|
7
|
+
gem 'activerecord', '~>5.2.0'
|
8
8
|
gem 'rspec', '~>3.5'
|
9
9
|
gem 'sqlite3'
|
10
10
|
|
11
11
|
# Development dependencies
|
12
12
|
gem 'rake'
|
13
13
|
gem 'database_cleaner'
|
14
|
+
gem 'pry'
|
14
15
|
|
15
16
|
# Gem under test
|
16
|
-
gem 'gemika', :path => '
|
17
|
+
gem 'gemika', :path => '.'
|
@@ -1,29 +1,34 @@
|
|
1
1
|
PATH
|
2
|
-
remote:
|
2
|
+
remote: .
|
3
3
|
specs:
|
4
|
-
gemika (0.
|
4
|
+
gemika (0.6.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
-
activemodel (5.
|
10
|
-
activesupport (= 5.
|
11
|
-
activerecord (5.
|
12
|
-
activemodel (= 5.
|
13
|
-
activesupport (= 5.
|
14
|
-
arel (
|
15
|
-
activesupport (5.
|
9
|
+
activemodel (5.2.3)
|
10
|
+
activesupport (= 5.2.3)
|
11
|
+
activerecord (5.2.3)
|
12
|
+
activemodel (= 5.2.3)
|
13
|
+
activesupport (= 5.2.3)
|
14
|
+
arel (>= 9.0)
|
15
|
+
activesupport (5.2.3)
|
16
16
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
17
17
|
i18n (>= 0.7, < 2)
|
18
18
|
minitest (~> 5.1)
|
19
19
|
tzinfo (~> 1.1)
|
20
|
-
arel (
|
21
|
-
|
20
|
+
arel (9.0.0)
|
21
|
+
coderay (1.1.2)
|
22
|
+
concurrent-ruby (1.1.5)
|
22
23
|
database_cleaner (1.7.0)
|
23
24
|
diff-lcs (1.3)
|
24
|
-
i18n (1.
|
25
|
+
i18n (1.5.1)
|
25
26
|
concurrent-ruby (~> 1.0)
|
27
|
+
method_source (0.9.2)
|
26
28
|
minitest (5.11.3)
|
29
|
+
pry (0.12.2)
|
30
|
+
coderay (~> 1.1.0)
|
31
|
+
method_source (~> 0.9.0)
|
27
32
|
rake (12.3.1)
|
28
33
|
rspec (3.7.0)
|
29
34
|
rspec-core (~> 3.7.0)
|
@@ -47,9 +52,10 @@ PLATFORMS
|
|
47
52
|
ruby
|
48
53
|
|
49
54
|
DEPENDENCIES
|
50
|
-
activerecord (~> 5.
|
55
|
+
activerecord (~> 5.2.0)
|
51
56
|
database_cleaner
|
52
57
|
gemika!
|
58
|
+
pry
|
53
59
|
rake
|
54
60
|
rspec (~> 3.5)
|
55
61
|
sqlite3
|
@@ -58,4 +64,4 @@ RUBY VERSION
|
|
58
64
|
ruby 2.2.4p230
|
59
65
|
|
60
66
|
BUNDLED WITH
|
61
|
-
|
67
|
+
2.2.15
|
data/Gemfile.6.1.pg
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Ruby
|
4
|
+
ruby '>= 2.2'
|
5
|
+
|
6
|
+
# Runtime dependencies
|
7
|
+
gem 'activerecord', '~>6.1.0'
|
8
|
+
gem 'rspec', '~>3.5'
|
9
|
+
gem 'pg'
|
10
|
+
|
11
|
+
# Development dependencies
|
12
|
+
gem 'rake'
|
13
|
+
gem 'database_cleaner'
|
14
|
+
gem 'pry'
|
15
|
+
|
16
|
+
# Gem under test
|
17
|
+
gem 'gemika', :path => '.'
|
data/Gemfile.6.1.pg.lock
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
gemika (0.6.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
activemodel (6.1.3.1)
|
10
|
+
activesupport (= 6.1.3.1)
|
11
|
+
activerecord (6.1.3.1)
|
12
|
+
activemodel (= 6.1.3.1)
|
13
|
+
activesupport (= 6.1.3.1)
|
14
|
+
activesupport (6.1.3.1)
|
15
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
16
|
+
i18n (>= 1.6, < 2)
|
17
|
+
minitest (>= 5.1)
|
18
|
+
tzinfo (~> 2.0)
|
19
|
+
zeitwerk (~> 2.3)
|
20
|
+
coderay (1.1.2)
|
21
|
+
concurrent-ruby (1.1.8)
|
22
|
+
database_cleaner (1.7.0)
|
23
|
+
diff-lcs (1.3)
|
24
|
+
i18n (1.8.10)
|
25
|
+
concurrent-ruby (~> 1.0)
|
26
|
+
method_source (0.9.2)
|
27
|
+
minitest (5.14.4)
|
28
|
+
pg (1.2.3)
|
29
|
+
pry (0.12.2)
|
30
|
+
coderay (~> 1.1.0)
|
31
|
+
method_source (~> 0.9.0)
|
32
|
+
rake (12.3.3)
|
33
|
+
rspec (3.8.0)
|
34
|
+
rspec-core (~> 3.8.0)
|
35
|
+
rspec-expectations (~> 3.8.0)
|
36
|
+
rspec-mocks (~> 3.8.0)
|
37
|
+
rspec-core (3.8.2)
|
38
|
+
rspec-support (~> 3.8.0)
|
39
|
+
rspec-expectations (3.8.4)
|
40
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
41
|
+
rspec-support (~> 3.8.0)
|
42
|
+
rspec-mocks (3.8.1)
|
43
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
44
|
+
rspec-support (~> 3.8.0)
|
45
|
+
rspec-support (3.8.2)
|
46
|
+
tzinfo (2.0.4)
|
47
|
+
concurrent-ruby (~> 1.0)
|
48
|
+
zeitwerk (2.4.2)
|
49
|
+
|
50
|
+
PLATFORMS
|
51
|
+
ruby
|
52
|
+
|
53
|
+
DEPENDENCIES
|
54
|
+
activerecord (~> 6.1.0)
|
55
|
+
database_cleaner
|
56
|
+
gemika!
|
57
|
+
pg
|
58
|
+
pry
|
59
|
+
rake
|
60
|
+
rspec (~> 3.5)
|
61
|
+
|
62
|
+
RUBY VERSION
|
63
|
+
ruby 2.2.4p230
|
64
|
+
|
65
|
+
BUNDLED WITH
|
66
|
+
2.2.15
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Gemika
|
1
|
+
# Gemika [](https://github.com/makandra/gemika/actions)
|
2
2
|
|
3
3
|
## Test a Ruby gem against multiple versions of everything
|
4
4
|
|
@@ -16,8 +16,9 @@ Here's what Gemika can give your test's development setup (all features are opt-
|
|
16
16
|
- Compute a matrix of all possible dependency permutations (Ruby, runtime gems, database type). Manually exclude incompatible dependency permutations (e.g. Rails 5.0 does not work with Ruby 2.1).
|
17
17
|
- Let developers enter their local credentials for MySQL and PostgreSQL in a `database.yml` file.
|
18
18
|
- Define default Ruby version, gem dependencies and database for developers who don't care about every possible permutation for everyday work.
|
19
|
-
- Help configure a [Travis CI](https://travis-ci.org/) build that tests every dependency permutation after each `git push`.
|
20
|
-
- Share your Ruby / gem dependeny / database permutation between local development and Travis CI.
|
19
|
+
- Help configure a [Travis CI](https://travis-ci.org/) or Github Actions build that tests every dependency permutation after each `git push`.
|
20
|
+
- Share your Ruby / gem dependeny / database permutation between local development and Travis CI / Github Actions.
|
21
|
+
- Migrate your Travis CI config to a Github Actions config.
|
21
22
|
- Define an [ActiveRecord database migration](http://api.rubyonrails.org/classes/ActiveRecord/Migration.html) that sets up your test database.
|
22
23
|
- Automatically drop and re-create your test database before each run of your test suite.
|
23
24
|
- Work around breaking changes in RSpec, Ruby and other gems
|
@@ -27,9 +28,9 @@ Here's what Gemika can give your test's development setup (all features are opt-
|
|
27
28
|
|
28
29
|
Gemika currently supports the following dependency versions:
|
29
30
|
|
30
|
-
- Ruby:
|
31
|
+
- Ruby: 2.3, 2.6, 3.0
|
31
32
|
- RSpec: Versions 1, 2, 3
|
32
|
-
- ActiveRecord: Versions
|
33
|
+
- ActiveRecord: Versions 3.2, 4.2, 5.2, 6.1
|
33
34
|
- Databases: PostgreSQL (with `pg` gem), MySQL or MariaDB (with `mysql2` gem), or sqlite3 (with `sqlite3` gem)
|
34
35
|
|
35
36
|
Gemika also makes some assumption about your Gem:
|
@@ -43,14 +44,14 @@ Gemika also makes some assumption about your Gem:
|
|
43
44
|
Below you can see the directory of a gem with a completed Gemika testing setup. The next section describes how to get there:
|
44
45
|
|
45
46
|
```shell
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
Gemfile ->
|
53
|
-
Gemfile.lock ->
|
47
|
+
Gemfile.set1 # First dependency set. Should include development dependencies and gemika.
|
48
|
+
Gemfile.set1.lock # Generated by `rake matrix:install`
|
49
|
+
Gemfile.set2 # Second dependency set. Should include development dependencies and gemika.
|
50
|
+
Gemfile.set2.lock # Generated by `rake matrix:install`
|
51
|
+
Gemfile.set3 # Third dependency set. Should include development dependencies and gemika.
|
52
|
+
Gemfile.set3.lock # Generated by `rake matrix:install`
|
53
|
+
Gemfile -> Gemfile.set2 # Symlink to default Gemfile for development
|
54
|
+
Gemfile.lock -> Gemfile.set2.lock # Symlink to default Gemfile.lock for development
|
54
55
|
.ruby-version # Default Ruby version for development
|
55
56
|
.gitignore # Should ignore spec/support/database.yml
|
56
57
|
.travis.yml # Configures all tested Ruby / gemfile combinations, for both local development and Travis CI
|
@@ -65,6 +66,7 @@ spec/support/database.rb # Database schema for test database
|
|
65
66
|
spec/support/database.yml # Database credentials for local development (not checked in)
|
66
67
|
spec/support/database.sample.yml # Sample database credentials for new developers
|
67
68
|
spec/support/database.travis.yml # Database credentials for Travis CI
|
69
|
+
spec/support/database.github.yml # Alternatively: Database credentials for Github Actions
|
68
70
|
spec/my_gem/my_class_spec.rb # Tests for your gem
|
69
71
|
```
|
70
72
|
|
@@ -136,28 +138,23 @@ task :default => 'matrix:spec'
|
|
136
138
|
### Define multiple dependency sets
|
137
139
|
|
138
140
|
We are now creating one `Gemfile` for each set of gems and database type you'd like to test again.
|
141
|
+
Your gemfiles should be placed directly in your project's root directory.
|
139
142
|
|
140
|
-
|
141
|
-
|
142
|
-
```shell
|
143
|
-
mkdir gemfiles
|
144
|
-
```
|
145
|
-
|
146
|
-
For each dependency set, create a `Gemfile` in the `gemfiles` directory that contains:
|
143
|
+
For each dependency set, create a `Gemfile` in the project root directory that contains:
|
147
144
|
|
148
145
|
1. The runtime dependencies you'd like to test against (e.g. Rails 5)
|
149
|
-
2. The development dependencies for that set (e.g. `rspec`) in a version that is compatible with these runtime
|
146
|
+
2. The development dependencies for that set (e.g. `rspec`) in a version that is compatible with these runtime dependencies.
|
150
147
|
3. The `gemika` gem
|
151
|
-
4. Your own gem from path
|
152
|
-
|
153
|
-
For instance, if one dependency set is Rails 3.2 with a MySQL database, we would create
|
148
|
+
4. Your own gem from path `.`
|
149
|
+
|
150
|
+
For instance, if one dependency set is Rails 3.2 with a MySQL database, we would create `./Gemfile.4.2.mysql2` with these contents:
|
154
151
|
|
155
152
|
```ruby
|
156
153
|
source 'https://rubygems.org'
|
157
154
|
|
158
155
|
# Runtime dependencies
|
159
156
|
gem 'rails', '~>3.2.22'
|
160
|
-
gem 'mysql2', '= 0.
|
157
|
+
gem 'mysql2', '= 0.4.10'
|
161
158
|
|
162
159
|
# Development dependencies
|
163
160
|
gem 'rspec', '~> 3.4'
|
@@ -166,10 +163,10 @@ gem 'byebug'
|
|
166
163
|
gem 'gemika'
|
167
164
|
|
168
165
|
# Gem under test
|
169
|
-
gem 'my_gem', :path => '
|
166
|
+
gem 'my_gem', :path => '.'
|
170
167
|
```
|
171
168
|
|
172
|
-
If a second dependency is Rails 5.0 with a PostgreSQL database, we would create
|
169
|
+
If a second dependency is Rails 5.0 with a PostgreSQL database, we would create `./Gemfile.5.0.pg` with these contents:
|
173
170
|
|
174
171
|
```ruby
|
175
172
|
source 'https://rubygems.org'
|
@@ -185,14 +182,14 @@ gem 'byebug'
|
|
185
182
|
gem 'gemika'
|
186
183
|
|
187
184
|
# Gem under test
|
188
|
-
gem 'my_gem', :path => '
|
185
|
+
gem 'my_gem', :path => '.'
|
189
186
|
```
|
190
187
|
|
191
|
-
In this example, your
|
188
|
+
In this example, your project directory should now also contain:
|
192
189
|
|
193
190
|
```
|
194
|
-
|
195
|
-
|
191
|
+
Gemfile.4.2.mysql2
|
192
|
+
Gemfile.5.0.pg
|
196
193
|
```
|
197
194
|
|
198
195
|
|
@@ -200,7 +197,7 @@ gemfiles/Gemfile.5.0.pg
|
|
200
197
|
|
201
198
|
We will now define a test matrix that contains all permutations of gemfiles and tested Ruby versions.
|
202
199
|
|
203
|
-
We store the matrix in a `.travis.yml` file, **even if the project is not using Travis CI**. This allows us to configure the matrix once and us it for both local
|
200
|
+
We store the matrix in a `.travis.yml` file, **even if the project is not using Travis CI**. This allows us to configure the matrix once and us it for both local development and Travis CI builds.
|
204
201
|
|
205
202
|
Create a `.travis.yml` that lists all gemfiles and Ruby versions you'd like to test against:
|
206
203
|
|
@@ -211,16 +208,19 @@ rvm:
|
|
211
208
|
- 2.3.1
|
212
209
|
|
213
210
|
gemfile:
|
214
|
-
-
|
215
|
-
-
|
216
|
-
-
|
217
|
-
-
|
218
|
-
-
|
211
|
+
- Gemfile.3.2.mysql2
|
212
|
+
- Gemfile.4.2.mysql2
|
213
|
+
- Gemfile.4.2.pg
|
214
|
+
- Gemfile.5.0.mysql2
|
215
|
+
- Gemfile.5.0.pg
|
219
216
|
```
|
220
217
|
|
221
218
|
Don't mind the `rvm` key if you're using a different version manager locally (like rbenv). Things will still work.
|
222
219
|
|
223
220
|
|
221
|
+
Alternatively, create a Github Actions file like [this](/.github/workflows/test.yml).
|
222
|
+
|
223
|
+
|
224
224
|
#### Excluding incompatible matrix rows
|
225
225
|
|
226
226
|
There might be incompatible combinations of gemfiles and Rubies, e.g. Rails 5.0 does not work with Ruby 2.1 or lower. In this case, add an `matrix`/`exclude` key to your `.travis.yml`:
|
@@ -228,12 +228,38 @@ There might be incompatible combinations of gemfiles and Rubies, e.g. Rails 5.0
|
|
228
228
|
```yaml
|
229
229
|
matrix:
|
230
230
|
exclude:
|
231
|
-
- gemfile:
|
231
|
+
- gemfile: Gemfile.5.0.mysql2
|
232
232
|
rvm: 2.1.8
|
233
|
-
- gemfile:
|
233
|
+
- gemfile: Gemfile.5.0.pg
|
234
234
|
rvm: 2.1.8
|
235
235
|
```
|
236
236
|
|
237
|
+
For `.github/workflows/test.yml`, it looks similar:
|
238
|
+
|
239
|
+
```yaml
|
240
|
+
jobs:
|
241
|
+
my_job:
|
242
|
+
strategy:
|
243
|
+
matrix:
|
244
|
+
exclude:
|
245
|
+
- gemfile: Gemfile.5.0.mysql2
|
246
|
+
ruby: 2.1.8
|
247
|
+
- gemfile: Gemfile.5.0.pg
|
248
|
+
ruby: 2.1.8
|
249
|
+
```
|
250
|
+
|
251
|
+
|
252
|
+
Alternatively, you can instead explicitly list all Ruby / Gemfile combinations with
|
253
|
+
|
254
|
+
```
|
255
|
+
matrix:
|
256
|
+
include:
|
257
|
+
- gemfile: Gemfile.5.0.mysql2
|
258
|
+
rvm: 2.3.8
|
259
|
+
- gemfile: Gemfile.5.2.mysql2
|
260
|
+
rvm: 2.3.8
|
261
|
+
```
|
262
|
+
|
237
263
|
### Generate lockfiles
|
238
264
|
|
239
265
|
Generate lockfiles for each bundle by running:
|
@@ -242,13 +268,13 @@ Generate lockfiles for each bundle by running:
|
|
242
268
|
rake matrix:install
|
243
269
|
```
|
244
270
|
|
245
|
-
In this example, your
|
271
|
+
In this example, your project directory should now contain a lockfile for each gemfile:
|
246
272
|
|
247
273
|
```
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
274
|
+
Gemfile.4.2.mysql2
|
275
|
+
Gemfile.4.2.mysql2.lock
|
276
|
+
Gemfile.5.0.pg
|
277
|
+
Gemfile.5.0.pg.lock
|
252
278
|
```
|
253
279
|
|
254
280
|
Gemfiles and lockfiles should be committed to your repo.
|
@@ -269,8 +295,8 @@ Create a `.ruby-version` file with the default Ruby version:
|
|
269
295
|
Choose a default dependency set and symlink both gemfile and lockfile to your project root:
|
270
296
|
|
271
297
|
```
|
272
|
-
ln -s
|
273
|
-
ln -s
|
298
|
+
ln -s Gemfile.4.2.mysql2 Gemfile
|
299
|
+
ln -s Gemfile.4.2.mysql2.lock Gemfile.lock
|
274
300
|
```
|
275
301
|
|
276
302
|
Commit both `.ruby-version` and symlinks to your repo.
|
@@ -295,6 +321,9 @@ postgresql:
|
|
295
321
|
database: minidusen_test
|
296
322
|
user:
|
297
323
|
password:
|
324
|
+
|
325
|
+
sqlite:
|
326
|
+
database: ":memory:"
|
298
327
|
```
|
299
328
|
|
300
329
|
We don't want to commit our local credentials, so add a line to your `.gitignore`:
|
@@ -334,6 +363,25 @@ Dir["#{File.dirname(__FILE__)}/support/*.rb"].sort.each {|f| require f}
|
|
334
363
|
Now you have a great place for code snippets that need to run before specs (factories, VCR configuration, etc.).
|
335
364
|
|
336
365
|
|
366
|
+
To have your database work with Github Actions, add a database file `spec/support/database.github.yml`.
|
367
|
+
|
368
|
+
```
|
369
|
+
mysql:
|
370
|
+
database: test
|
371
|
+
username: root
|
372
|
+
password: password
|
373
|
+
host: 127.0.0.1
|
374
|
+
port: 3306
|
375
|
+
|
376
|
+
postgresql:
|
377
|
+
database: test
|
378
|
+
host: localhost
|
379
|
+
username: postgres
|
380
|
+
password: postgres
|
381
|
+
port: 5432
|
382
|
+
```
|
383
|
+
|
384
|
+
|
337
385
|
#### Test database schema
|
338
386
|
|
339
387
|
If your gem is talking to the database, you probably need to create some example tables.
|
@@ -390,6 +438,25 @@ Gemika::RSpec.configure_clean_database_before_example
|
|
390
438
|
Note that you also need `require 'gemika'` in your `spec_helper.rb`.
|
391
439
|
|
392
440
|
|
441
|
+
#### Migrate from Travis CI to Github Actions
|
442
|
+
|
443
|
+
To help in your migrations, you can ask Gemika to generate a Github Actions config from an existing `.travis-ci.yml`.
|
444
|
+
|
445
|
+
To do this, call
|
446
|
+
|
447
|
+
```
|
448
|
+
bundle exec rake gemika:generate_github_actions_workflow
|
449
|
+
```
|
450
|
+
|
451
|
+
Copy the resulting file to `.github/workflows/test.yml`.
|
452
|
+
|
453
|
+
Make sure you have a `spec/support/database.github.yml` if you use databases. See above how this is supposed to look like.
|
454
|
+
|
455
|
+
You may have to fix a few things manually though. For example, Github Actions will only allow certain Ruby versions (but show you a list of supported versions when it fails).
|
456
|
+
|
457
|
+
Also, when you run on a Ubuntu 20.04 container, you might have issues with the mysql2 gem. See [this guide](https://makandracards.com/makandra/486428-installing-old-versions-of-mysql2-on-ubuntu-20-04+) for a potential solution.
|
458
|
+
|
459
|
+
|
393
460
|
### Try it out
|
394
461
|
|
395
462
|
Check if you can install development dependencies for each row in the test matrix:
|
@@ -431,8 +498,8 @@ rake matrix:spec
|
|
431
498
|
Note that if your current Ruby version is *very* far away from your [default Ruby](#default-ruby-and-default-gemfile) in `.ruby-version`, you might need to run `rake` with a gemfile that has compatible dependencies:
|
432
499
|
|
433
500
|
```shell
|
434
|
-
BUNDLE_GEMFILE=
|
435
|
-
BUNDLE_GEMFILE=
|
501
|
+
BUNDLE_GEMFILE=Gemfile.2.3 bundle exec rake matrix:install
|
502
|
+
BUNDLE_GEMFILE=Gemfile.2.3 bundle exec rake matrix:spec
|
436
503
|
```
|
437
504
|
|
438
505
|
We recommend to setup Travis CI to check the entire test matrix after each push, including all Rubies. This way developers can stay on the [default Ruby and gemfile](#default-ruby-and-default-gemfile) most of the time while Travis CI checks make sure that nothing broken gets merged.
|
@@ -628,9 +695,10 @@ Here are some hints when you try to make changes to Gemika itself:
|
|
628
695
|
|
629
696
|
There are tests in `spec`. We only accept PRs with tests. To run tests:
|
630
697
|
|
631
|
-
- Install Ruby 2.
|
698
|
+
- Install Ruby 2.6.4
|
632
699
|
- Create a local test database `gemika_test` in both MySQL and PostgreSQL
|
633
700
|
- Copy `spec/support/database.sample.yml` to `spec/support/database.yml` and enter your local credentials for the test databases
|
701
|
+
- Create the databases specified in `database.yml`
|
634
702
|
- Install development dependencies using `bundle install`
|
635
703
|
- Run tests using `bundle exec rspec`
|
636
704
|
|