Skip to content

Commit e54dfda

Browse files
authored
Merge pull request #4535 from DataDog/add-meta-version-into-build-matrix
[NO-TICKET] Adjust build coverage matrix method to allow min/<version>/last
2 parents 39172da + 151553e commit e54dfda

7 files changed

+50
-10
lines changed

appraisal/generate.rb

+42-6
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
# Usage: `bundle exec ruby appraisal/generate.rb`
1414

1515
require 'bundler'
16-
require "appraisal/appraisal"
16+
require 'appraisal/appraisal'
1717

18-
require_relative "../tasks/appraisal_conversion"
18+
require_relative '../tasks/appraisal_conversion'
1919

2020
gemfile = Appraisal::Gemfile.new.tap do |g|
2121
# Support `eval_gemfile` for `Bundler::DSL`
22-
g.define_singleton_method(:eval_gemfile) {|file| load(file) }
22+
g.define_singleton_method(:eval_gemfile) { |file| load(file) }
2323
g.load(Bundler.default_gemfile)
2424
end
2525

@@ -53,20 +53,56 @@
5353
# `gem` : optional, gem name to test (gem name can be different from the integration name)
5454
# `min` : optional, minimum version to test
5555
# `meta` : optional, additional metadata (development dependencies, etc.) for the group
56+
#
57+
# Examples:
58+
#
59+
# 1. Generating coverage starting minimal version
60+
#
61+
# build_coverage_matrix('devise', min: '3.1.4')
62+
# ├─ appraise 'devise-min'
63+
# │ └─ gem 'devise', '= 3.1.4'
64+
# └─ appraise 'devise-latest'
65+
# └─ gem 'devise'
66+
#
67+
# 2. Generating coverage starting minimal version with some additional gems with
68+
# specific version tied to only minimal version
69+
#
70+
# build_coverage_matrix('devise', min: '3.1.4', meta: { min: { 'bigdecimal' => '1.3.4' } })
71+
# ├─ appraise 'devise-min'
72+
# │ ├─ gem 'devise', '= 3.1.4'
73+
# │ └─ gem 'bigdecimal', '1.3.4'
74+
# └─ appraise 'devise-latest'
75+
# └─ gem 'devise'
76+
#
77+
# 3. Generating coverage starting minimal version with some additional gems with
78+
# specific version for all possible combinations
79+
#
80+
# build_coverage_matrix('devise', min: '3.1.4', meta: { 'bigdecimal' => '3.0.0' })
81+
# ├─ appraise 'devise-min'
82+
# │ ├─ gem 'devise', '= 3.1.4'
83+
# │ └─ gem 'bigdecimal', '3.0.0'
84+
# └─ appraise 'devise-latest'
85+
# ├─ gem 'devise'
86+
# └─ gem 'bigdecimal', '3.0.0'
5687
def build_coverage_matrix(integration, range = [], gem: nil, min: nil, meta: {})
5788
gem ||= integration
5889

90+
meta_versions = meta.each_with_object({}) do |(key, value), memo|
91+
memo[key] = meta.delete(key) if value.is_a?(Hash)
92+
end
93+
5994
if min
6095
appraise "#{integration}-min" do
6196
gem gem, "= #{min}"
62-
meta.each { |k, v| v ? gem(k, v) : gem(k) }
97+
98+
meta_versions[:min].to_h.merge(meta).each { |k, v| v ? gem(k, v) : gem(k) }
6399
end
64100
end
65101

66102
range.each do |n|
67103
appraise "#{integration}-#{n}" do
68104
gem gem, "~> #{n}"
69-
meta.each { |k, v| v ? gem(k, v) : gem(k) }
105+
meta_versions[n].to_h.merge(meta).each { |k, v| v ? gem(k, v) : gem(k) }
70106
end
71107
end
72108

@@ -75,7 +111,7 @@ def build_coverage_matrix(integration, range = [], gem: nil, min: nil, meta: {})
75111
# still requires being updated to pick up the next major version and
76112
# committing the changes to lockfiles.
77113
gem gem
78-
meta.each { |k, v| v ? gem(k, v) : gem(k) }
114+
meta_versions[:latest].to_h.merge(meta).each { |k, v| v ? gem(k, v) : gem(k) }
79115
end
80116
end
81117

appraisal/ruby-2.5.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@
223223
build_coverage_matrix('rest-client')
224224
build_coverage_matrix('mongo', min: '2.1.0')
225225
build_coverage_matrix('dalli')
226-
build_coverage_matrix('devise', min: '3.2.1')
226+
build_coverage_matrix('devise', min: '3.2.1', meta: { min: { 'bigdecimal' => '1.3.4' } })
227227

228228
appraise 'relational_db' do
229229
gem 'activerecord', '~> 5'

appraisal/ruby-2.6.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@
176176
build_coverage_matrix('rest-client')
177177
build_coverage_matrix('mongo', min: '2.1.0')
178178
build_coverage_matrix('dalli', [2])
179-
build_coverage_matrix('devise', min: '3.2.1')
179+
build_coverage_matrix('devise', min: '3.2.1', meta: { min: { 'bigdecimal' => '1.4.1' } })
180180

181181
appraise 'relational_db' do
182182
gem 'activerecord', '~> 6.0.0'

gemfiles/ruby_2.5_devise_min.gemfile

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gemfiles/ruby_2.5_devise_min.gemfile.lock

+2-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gemfiles/ruby_2.6_devise_min.gemfile

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gemfiles/ruby_2.6_devise_min.gemfile.lock

+2-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)