kettle-dev 1.0.22 → 1.0.24
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
- checksums.yaml.gz.sig +0 -0
- data/.github/workflows/style.yml +3 -3
- data/.github/workflows/truffle.yml +3 -3
- data/CHANGELOG.md +85 -45
- data/FUNDING.md +77 -0
- data/README.md +9 -12
- data/README.md.example +10 -6
- data/Rakefile.example +1 -1
- data/exe/kettle-changelog +23 -351
- data/exe/kettle-commit-msg +26 -5
- data/exe/kettle-readme-backers +25 -4
- data/exe/kettle-release +14 -5
- data/kettle-dev.gemspec.example +4 -3
- data/lib/kettle/dev/changelog_cli.rb +352 -0
- data/lib/kettle/dev/ci_monitor.rb +0 -5
- data/lib/kettle/dev/gem_spec_reader.rb +129 -0
- data/lib/kettle/dev/git_commit_footer.rb +0 -2
- data/lib/kettle/dev/readme_backers.rb +0 -1
- data/lib/kettle/dev/release_cli.rb +10 -11
- data/lib/kettle/dev/tasks/ci_task.rb +14 -27
- data/lib/kettle/dev/tasks/install_task.rb +80 -92
- data/lib/kettle/dev/tasks/template_task.rb +102 -8
- data/lib/kettle/dev/template_helpers.rb +10 -79
- data/lib/kettle/dev/version.rb +1 -1
- data/lib/kettle/dev.rb +9 -3
- data/lib/kettle/emoji_regex.rb +1 -1
- data/sig/kettle/dev/gem_spec_reader.rbs +30 -0
- data/sig/kettle/dev/template_helpers.rbs +10 -0
- data.tar.gz.sig +0 -0
- metadata +9 -4
- metadata.gz.sig +0 -0
@@ -1,8 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "kettle/dev/exit_adapter"
|
4
|
-
require "kettle/dev/input_adapter"
|
5
|
-
|
6
3
|
module Kettle
|
7
4
|
module Dev
|
8
5
|
module Tasks
|
@@ -44,107 +41,98 @@ module Kettle
|
|
44
41
|
readme_path = File.join(project_root, "README.md")
|
45
42
|
if File.file?(readme_path)
|
46
43
|
md = helpers.gemspec_metadata(project_root)
|
47
|
-
min_ruby = md[:min_ruby]
|
48
|
-
if
|
49
|
-
|
50
|
-
require "rubygems"
|
51
|
-
min_ver = begin
|
52
|
-
Gem::Version.new(min_ruby.sub(/\A(~>\s*|>=\s*)/, ""))
|
53
|
-
rescue
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
if min_ver
|
57
|
-
content = File.read(readme_path)
|
44
|
+
min_ruby = md[:min_ruby] # an instance of Gem::Version
|
45
|
+
if min_ruby
|
46
|
+
content = File.read(readme_path)
|
58
47
|
|
59
|
-
|
60
|
-
|
48
|
+
# Detect all MRI ruby badge labels present
|
49
|
+
removed_labels = []
|
61
50
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
end
|
75
|
-
rescue StandardError
|
76
|
-
# ignore
|
51
|
+
content.scan(/\[(?<label>💎ruby-(?<ver>\d+\.\d+)i)\]/) do |arr|
|
52
|
+
label, ver_s = arr
|
53
|
+
begin
|
54
|
+
ver = Gem::Version.new(ver_s)
|
55
|
+
if ver < min_ruby
|
56
|
+
# Remove occurrences of badges using this label
|
57
|
+
label_re = Regexp.escape(label)
|
58
|
+
# Linked form: [![...][label]][...]
|
59
|
+
content = content.gsub(/\[!\[[^\]]*?\]\s*\[#{label_re}\]\s*\]\s*\[[^\]]+\]/, "")
|
60
|
+
# Unlinked form: ![...][label]
|
61
|
+
content = content.gsub(/!\[[^\]]*?\]\s*\[#{label_re}\]/, "")
|
62
|
+
removed_labels << label
|
77
63
|
end
|
64
|
+
rescue StandardError
|
65
|
+
# ignore
|
78
66
|
end
|
67
|
+
end
|
79
68
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
else
|
97
|
-
ln
|
98
|
-
end
|
99
|
-
else
|
100
|
-
ln
|
101
|
-
end
|
102
|
-
}.reject { |ln|
|
103
|
-
if ln.start_with?("| Works with MRI Ruby")
|
104
|
-
cells = ln.split("|", -1)
|
105
|
-
badge_cell = cells[2] || ""
|
106
|
-
badge_cell.strip.empty?
|
69
|
+
# Fix leading <br/> in MRI rows and remove rows that end up empty
|
70
|
+
content = content.lines.map { |ln|
|
71
|
+
if ln.start_with?("| Works with MRI Ruby")
|
72
|
+
cells = ln.split("|", -1)
|
73
|
+
# cells[0] is empty (leading |), cells[1] = label cell, cells[2] = badges cell
|
74
|
+
badge_cell = cells[2] || ""
|
75
|
+
# If badge cell is only a <br/> (possibly with whitespace), treat as empty (row will be removed later)
|
76
|
+
if badge_cell.strip == "<br/>"
|
77
|
+
cells[2] = " "
|
78
|
+
cells.join("|")
|
79
|
+
elsif badge_cell =~ /\A\s*<br\/>/i
|
80
|
+
# If badge cell starts with <br/> and there are no badges before it, strip the leading <br/>
|
81
|
+
# We consider "no badges before" as any leading whitespace followed immediately by <br/>
|
82
|
+
cleaned = badge_cell.sub(/\A\s*<br\/>\s*/i, "")
|
83
|
+
cells[2] = " #{cleaned}" # prefix with a single space
|
84
|
+
cells.join("|")
|
107
85
|
else
|
108
|
-
false
|
109
|
-
end
|
110
|
-
}.join
|
111
|
-
|
112
|
-
# Clean up extra repeated whitespace only when it appears between word characters, and only for non-table lines.
|
113
|
-
# This preserves Markdown table alignment and spacing around punctuation/symbols.
|
114
|
-
content = content.lines.map do |ln|
|
115
|
-
if ln.start_with?("|")
|
116
86
|
ln
|
117
|
-
else
|
118
|
-
# Squish only runs of spaces/tabs between word characters
|
119
|
-
ln.gsub(/(\w)[ \t]{2,}(\w)/u, "\\1 \\2")
|
120
|
-
end
|
121
|
-
end.join
|
122
|
-
|
123
|
-
# Remove reference definitions for removed labels that are no longer used
|
124
|
-
unless removed_labels.empty?
|
125
|
-
# Unique
|
126
|
-
removed_labels.uniq!
|
127
|
-
# Determine which labels are still referenced after edits
|
128
|
-
still_referenced = {}
|
129
|
-
removed_labels.each do |lbl|
|
130
|
-
lbl_re = Regexp.escape(lbl)
|
131
|
-
# Consider a label referenced only when it appears not as a definition (i.e., not followed by colon)
|
132
|
-
still_referenced[lbl] = !!(content =~ /\[#{lbl_re}\](?!:)/)
|
133
87
|
end
|
88
|
+
else
|
89
|
+
ln
|
90
|
+
end
|
91
|
+
}.reject { |ln|
|
92
|
+
if ln.start_with?("| Works with MRI Ruby")
|
93
|
+
cells = ln.split("|", -1)
|
94
|
+
badge_cell = cells[2] || ""
|
95
|
+
badge_cell.strip.empty?
|
96
|
+
else
|
97
|
+
false
|
98
|
+
end
|
99
|
+
}.join
|
134
100
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
101
|
+
# Clean up extra repeated whitespace only when it appears between word characters, and only for non-table lines.
|
102
|
+
# This preserves Markdown table alignment and spacing around punctuation/symbols.
|
103
|
+
content = content.lines.map do |ln|
|
104
|
+
if ln.start_with?("|")
|
105
|
+
ln
|
106
|
+
else
|
107
|
+
# Squish only runs of spaces/tabs between word characters
|
108
|
+
ln.gsub(/(\w)[ \t]{2,}(\w)/u, "\\1 \\2")
|
109
|
+
end
|
110
|
+
end.join
|
111
|
+
|
112
|
+
# Remove reference definitions for removed labels that are no longer used
|
113
|
+
unless removed_labels.empty?
|
114
|
+
# Unique
|
115
|
+
removed_labels.uniq!
|
116
|
+
# Determine which labels are still referenced after edits
|
117
|
+
still_referenced = {}
|
118
|
+
removed_labels.each do |lbl|
|
119
|
+
lbl_re = Regexp.escape(lbl)
|
120
|
+
# Consider a label referenced only when it appears not as a definition (i.e., not followed by colon)
|
121
|
+
still_referenced[lbl] = !!(content =~ /\[#{lbl_re}\](?!:)/)
|
144
122
|
end
|
145
123
|
|
146
|
-
|
124
|
+
new_lines = content.lines.map do |line|
|
125
|
+
if line =~ /^\[(?<lab>[^\]]+)\]:/ && removed_labels.include?(Regexp.last_match(:lab))
|
126
|
+
# Only drop if not referenced anymore
|
127
|
+
still_referenced[Regexp.last_match(:lab)] ? line : nil
|
128
|
+
else
|
129
|
+
line
|
130
|
+
end
|
131
|
+
end.compact
|
132
|
+
content = new_lines.join
|
147
133
|
end
|
134
|
+
|
135
|
+
File.open(readme_path, "w") { |f| f.write(content) }
|
148
136
|
end
|
149
137
|
end
|
150
138
|
rescue StandardError => e
|
@@ -1,8 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "kettle/dev/exit_adapter"
|
4
|
-
require "kettle/dev/input_adapter"
|
5
|
-
|
6
3
|
module Kettle
|
7
4
|
module Dev
|
8
5
|
module Tasks
|
@@ -123,10 +120,9 @@ module Kettle
|
|
123
120
|
rubocop_ruby_gem_version = nil
|
124
121
|
ruby1_8 = version_map.first
|
125
122
|
begin
|
126
|
-
if min_ruby
|
127
|
-
v = Gem::Version.new(min_ruby.split(".")[0, 2].join("."))
|
123
|
+
if min_ruby
|
128
124
|
version_map.reverse_each do |min, req|
|
129
|
-
if
|
125
|
+
if min_ruby >= min
|
130
126
|
new_constraint = req
|
131
127
|
rubocop_ruby_gem_version = min.segments.join("_")
|
132
128
|
break
|
@@ -205,8 +201,20 @@ module Kettle
|
|
205
201
|
File.join(project_root, fallback_name)
|
206
202
|
end
|
207
203
|
end
|
204
|
+
|
205
|
+
# If a destination gemspec already exists, get metadata from GemSpecReader via helpers
|
206
|
+
orig_meta = nil
|
207
|
+
if File.exist?(dest_gemspec)
|
208
|
+
begin
|
209
|
+
orig_meta = helpers.gemspec_metadata(File.dirname(dest_gemspec))
|
210
|
+
rescue StandardError
|
211
|
+
orig_meta = nil
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
208
215
|
helpers.copy_file_with_prompt(gemspec_template_src, dest_gemspec, allow_create: true, allow_replace: true) do |content|
|
209
|
-
|
216
|
+
# First apply standard replacements from the template example
|
217
|
+
c = helpers.apply_common_replacements(
|
210
218
|
content,
|
211
219
|
org: forge_org,
|
212
220
|
gem_name: gem_name,
|
@@ -214,6 +222,93 @@ module Kettle
|
|
214
222
|
namespace_shield: namespace_shield,
|
215
223
|
gem_shield: gem_shield,
|
216
224
|
)
|
225
|
+
|
226
|
+
if orig_meta
|
227
|
+
# Replace a scalar string assignment like: spec.field = "..."
|
228
|
+
replace_string_field = lambda do |txt, field, value|
|
229
|
+
v = value.to_s
|
230
|
+
txt.gsub(/(\bspec\.#{Regexp.escape(field)}\s*=\s*)(["']).*?(\2)/) do
|
231
|
+
pre = Regexp.last_match(1)
|
232
|
+
q = '"'
|
233
|
+
pre + q + v.gsub('"', '\\"') + q
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
# Replace an array assignment like: spec.field = ["a", "b"]
|
238
|
+
replace_array_field = lambda do |txt, field, ary|
|
239
|
+
ary = Array(ary).compact.map(&:to_s).reject(&:empty?).uniq
|
240
|
+
# literal = "[" + arr.map { |e| '"' + e.gsub('"', '\\"') + '"' }.join(", ") + "]"
|
241
|
+
literal = ary.inspect
|
242
|
+
if txt =~ /(\bspec\.#{Regexp.escape(field)}\s*=\s*)\[[^\]]*\]/
|
243
|
+
txt.gsub(/(\bspec\.#{Regexp.escape(field)}\s*=\s*)\[[^\]]*\]/, "\\1#{literal}")
|
244
|
+
else
|
245
|
+
# If no existing assignment, insert a new line after spec.version if possible
|
246
|
+
insert_after = (txt =~ /^\s*spec\.version\s*=.*$/) ? :version : nil
|
247
|
+
if insert_after == :version
|
248
|
+
txt.sub(/^(\s*spec\.version\s*=.*$)/) { |line| line + "\n spec.#{field} = #{literal}" }
|
249
|
+
else
|
250
|
+
txt + "\n spec.#{field} = #{literal}\n"
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
begin
|
256
|
+
# 1. spec.name — retain original
|
257
|
+
if (name = orig_meta[:gem_name]) && !name.to_s.empty?
|
258
|
+
c = replace_string_field.call(c, "name", name)
|
259
|
+
end
|
260
|
+
|
261
|
+
# 2. spec.authors — retain original, normalize to array
|
262
|
+
orig_auth = orig_meta[:authors]
|
263
|
+
c = replace_array_field.call(c, "authors", orig_auth)
|
264
|
+
|
265
|
+
# 3. spec.email — retain original, normalize to array
|
266
|
+
orig_email = orig_meta[:email]
|
267
|
+
c = replace_array_field.call(c, "email", orig_email)
|
268
|
+
|
269
|
+
# 4. spec.summary — retain original; grapheme emoji prefix handled by "install" task
|
270
|
+
if (sum = orig_meta[:summary]) && !sum.to_s.empty?
|
271
|
+
c = replace_string_field.call(c, "summary", sum)
|
272
|
+
end
|
273
|
+
|
274
|
+
# 5. spec.description — retain original; grapheme emoji prefix handled by "install" task
|
275
|
+
if (desc = orig_meta[:description]) && !desc.to_s.empty?
|
276
|
+
c = replace_string_field.call(c, "description", desc)
|
277
|
+
end
|
278
|
+
|
279
|
+
# 6. spec.licenses — retain original, normalize to array
|
280
|
+
lic = orig_meta[:licenses]
|
281
|
+
if lic && !lic.empty?
|
282
|
+
c = replace_array_field.call(c, "licenses", lic)
|
283
|
+
end
|
284
|
+
|
285
|
+
# 7. spec.required_ruby_version — retain original
|
286
|
+
if (rrv = orig_meta[:required_ruby_version].to_s) && !rrv.empty?
|
287
|
+
c = replace_string_field.call(c, "required_ruby_version", rrv)
|
288
|
+
end
|
289
|
+
|
290
|
+
# 8. spec.require_paths — retain original, normalize to array
|
291
|
+
req_paths = orig_meta[:require_paths]
|
292
|
+
unless req_paths.empty?
|
293
|
+
c = replace_array_field.call(c, "require_paths", req_paths)
|
294
|
+
end
|
295
|
+
|
296
|
+
# 9. spec.bindir — retain original
|
297
|
+
if (bd = orig_meta[:bindir]) && !bd.to_s.empty?
|
298
|
+
c = replace_string_field.call(c, "bindir", bd)
|
299
|
+
end
|
300
|
+
|
301
|
+
# 10. spec.executables — retain original, normalize to array
|
302
|
+
exes = orig_meta[:executables]
|
303
|
+
unless exes.empty?
|
304
|
+
c = replace_array_field.call(c, "executables", exes)
|
305
|
+
end
|
306
|
+
rescue StandardError
|
307
|
+
# Best-effort carry-over; ignore any individual failure
|
308
|
+
end
|
309
|
+
end
|
310
|
+
|
311
|
+
c
|
217
312
|
end
|
218
313
|
end
|
219
314
|
rescue StandardError
|
@@ -266,7 +361,6 @@ module Kettle
|
|
266
361
|
if prev_readme
|
267
362
|
first_h1_prev = prev_readme.lines.find { |ln| ln =~ /^#\s+/ }
|
268
363
|
if first_h1_prev
|
269
|
-
require "kettle/emoji_regex"
|
270
364
|
emoji_re = Kettle::EmojiRegex::REGEX
|
271
365
|
tail = first_h1_prev.sub(/^#\s+/, "")
|
272
366
|
# Extract consecutive leading emoji graphemes
|
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
# External stdlibs
|
4
4
|
require "find"
|
5
|
-
# Internal
|
6
|
-
require "kettle/dev/input_adapter"
|
7
5
|
|
8
6
|
module Kettle
|
9
7
|
module Dev
|
@@ -346,6 +344,15 @@ module Kettle
|
|
346
344
|
c = content.dup
|
347
345
|
c = c.gsub("kettle-rb", org.to_s) if org && !org.empty?
|
348
346
|
if gem_name && !gem_name.empty?
|
347
|
+
# Special-case: yard-head link uses the gem name as a subdomain and must be dashes-only.
|
348
|
+
# Apply this BEFORE other generic replacements so it isn't altered incorrectly.
|
349
|
+
begin
|
350
|
+
dashed = gem_name.tr("_", "-")
|
351
|
+
c = c.gsub("[🚎yard-head]: https://kettle-dev.galtzo.com", "[🚎yard-head]: https://#{dashed}.galtzo.com")
|
352
|
+
rescue StandardError
|
353
|
+
# ignore
|
354
|
+
end
|
355
|
+
|
349
356
|
# Replace occurrences of the template gem name in text, including inside
|
350
357
|
# markdown reference labels like [🖼️kettle-dev] and identifiers like kettle-dev-i
|
351
358
|
c = c.gsub("kettle-dev", gem_name)
|
@@ -362,83 +369,7 @@ module Kettle
|
|
362
369
|
# @param root [String] project root
|
363
370
|
# @return [Hash]
|
364
371
|
def gemspec_metadata(root = project_root)
|
365
|
-
|
366
|
-
gemspec_path = gemspecs.first
|
367
|
-
gemspec_text = (gemspec_path && File.file?(gemspec_path)) ? File.read(gemspec_path) : ""
|
368
|
-
gem_name = (gemspec_text[/\bspec\.name\s*=\s*["']([^"']+)["']/, 1] || "").strip
|
369
|
-
min_ruby = (
|
370
|
-
gemspec_text[/\bspec\.minimum_ruby_version\s*=\s*["'](?:>=\s*)?([0-9]+\.[0-9]+(?:\.[0-9]+)?)["']/i, 1] ||
|
371
|
-
gemspec_text[/\bspec\.required_ruby_version\s*=\s*["']>=\s*([0-9]+\.[0-9]+(?:\.[0-9]+)?)["']/i, 1] ||
|
372
|
-
gemspec_text[/\brequired_ruby_version\s*[:=]\s*["'](?:>=\s*)?([0-9]+\.[0-9]+(?:\.[0-9]+)?)["']/i, 1] ||
|
373
|
-
""
|
374
|
-
).strip
|
375
|
-
homepage_line = gemspec_text.lines.find { |l| l =~ /\bspec\.homepage\s*=\s*/ }
|
376
|
-
homepage_val = homepage_line ? homepage_line.split("=", 2).last.to_s.strip : ""
|
377
|
-
if (homepage_val.start_with?("\"") && homepage_val.end_with?("\"")) || (homepage_val.start_with?("'") && homepage_val.end_with?("'"))
|
378
|
-
homepage_val = begin
|
379
|
-
homepage_val[1..-2]
|
380
|
-
rescue
|
381
|
-
homepage_val
|
382
|
-
end
|
383
|
-
end
|
384
|
-
gh_match = homepage_val&.match(%r{github\.com/([^/]+)/([^/]+)}i)
|
385
|
-
forge_org = gh_match && gh_match[1]
|
386
|
-
gh_repo = gh_match && gh_match[2]&.sub(/\.git\z/, "")
|
387
|
-
if forge_org.nil?
|
388
|
-
begin
|
389
|
-
origin_out = IO.popen(["git", "-C", root.to_s, "remote", "get-url", "origin"], &:read)
|
390
|
-
origin_out = origin_out.read if origin_out.respond_to?(:read)
|
391
|
-
origin_url = origin_out.to_s.strip
|
392
|
-
if (m = origin_url.match(%r{github\.com[/:]([^/]+)/([^/]+)}i))
|
393
|
-
forge_org = m[1]
|
394
|
-
gh_repo = m[2]&.sub(/\.git\z/, "")
|
395
|
-
end
|
396
|
-
rescue StandardError
|
397
|
-
# ignore
|
398
|
-
end
|
399
|
-
end
|
400
|
-
|
401
|
-
camel = lambda do |s|
|
402
|
-
s.split(/[_-]/).map { |p| p.gsub(/\b([a-z])/) { Regexp.last_match(1).upcase } }.join
|
403
|
-
end
|
404
|
-
namespace = gem_name.to_s.split("-").map { |seg| camel.call(seg) }.join("::")
|
405
|
-
namespace_shield = namespace.gsub("::", "%3A%3A")
|
406
|
-
entrypoint_require = gem_name.to_s.tr("-", "/")
|
407
|
-
gem_shield = gem_name.to_s.gsub("-", "--").gsub("_", "__")
|
408
|
-
|
409
|
-
# Determine funding_org independently of forge_org (GitHub org)
|
410
|
-
funding_org = ENV["FUNDING_ORG"].to_s.strip
|
411
|
-
funding_org = ENV["OPENCOLLECTIVE_ORG"].to_s.strip if funding_org.empty?
|
412
|
-
funding_org = ENV["OPENCOLLECTIVE_HANDLE"].to_s.strip if funding_org.empty?
|
413
|
-
if funding_org.empty?
|
414
|
-
begin
|
415
|
-
oc_path = File.join(root.to_s, ".opencollective.yml")
|
416
|
-
if File.file?(oc_path)
|
417
|
-
txt = File.read(oc_path)
|
418
|
-
if (m = txt.match(/\borg:\s*([\w\-]+)/i))
|
419
|
-
funding_org = m[1].to_s
|
420
|
-
end
|
421
|
-
end
|
422
|
-
rescue StandardError
|
423
|
-
# ignore
|
424
|
-
end
|
425
|
-
end
|
426
|
-
funding_org = forge_org.to_s if funding_org.to_s.empty?
|
427
|
-
|
428
|
-
{
|
429
|
-
gemspec_path: gemspec_path,
|
430
|
-
gem_name: gem_name,
|
431
|
-
min_ruby: min_ruby,
|
432
|
-
homepage: homepage_val,
|
433
|
-
gh_org: forge_org, # Backward compat: keep old key synonymous with forge_org
|
434
|
-
forge_org: forge_org,
|
435
|
-
funding_org: funding_org,
|
436
|
-
gh_repo: gh_repo,
|
437
|
-
namespace: namespace,
|
438
|
-
namespace_shield: namespace_shield,
|
439
|
-
entrypoint_require: entrypoint_require,
|
440
|
-
gem_shield: gem_shield,
|
441
|
-
}
|
372
|
+
Kettle::Dev::GemSpecReader.load(root)
|
442
373
|
end
|
443
374
|
end
|
444
375
|
end
|
data/lib/kettle/dev/version.rb
CHANGED
data/lib/kettle/dev.rb
CHANGED
@@ -112,20 +112,26 @@ end
|
|
112
112
|
module Kettle
|
113
113
|
autoload :EmojiRegex, "kettle/emoji_regex"
|
114
114
|
module Dev
|
115
|
+
autoload :ChangelogCLI, "kettle/dev/changelog_cli"
|
115
116
|
autoload :CIHelpers, "kettle/dev/ci_helpers"
|
117
|
+
autoload :CIMonitor, "kettle/dev/ci_monitor"
|
116
118
|
autoload :CommitMsg, "kettle/dev/commit_msg"
|
119
|
+
autoload :ExitAdapter, "kettle/dev/exit_adapter"
|
120
|
+
autoload :GemSpecReader, "kettle/dev/gem_spec_reader"
|
121
|
+
autoload :GitAdapter, "kettle/dev/git_adapter"
|
117
122
|
autoload :GitCommitFooter, "kettle/dev/git_commit_footer"
|
123
|
+
autoload :InputAdapter, "kettle/dev/input_adapter"
|
118
124
|
autoload :ReadmeBackers, "kettle/dev/readme_backers"
|
119
125
|
autoload :ReleaseCLI, "kettle/dev/release_cli"
|
120
126
|
autoload :TemplateHelpers, "kettle/dev/template_helpers"
|
121
|
-
autoload :ExitAdapter, "kettle/dev/exit_adapter"
|
122
127
|
autoload :Version, "kettle/dev/version"
|
128
|
+
autoload :Versioning, "kettle/dev/versioning"
|
123
129
|
|
124
130
|
# Nested tasks namespace with autoloaded task modules
|
125
131
|
module Tasks
|
126
|
-
autoload :TemplateTask, "kettle/dev/tasks/template_task"
|
127
|
-
autoload :InstallTask, "kettle/dev/tasks/install_task"
|
128
132
|
autoload :CITask, "kettle/dev/tasks/ci_task"
|
133
|
+
autoload :InstallTask, "kettle/dev/tasks/install_task"
|
134
|
+
autoload :TemplateTask, "kettle/dev/tasks/template_task"
|
129
135
|
end
|
130
136
|
end
|
131
137
|
end
|
data/lib/kettle/emoji_regex.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
# because that project is Ruby >= 2.4, and this project is Ruby >= 2.3.
|
4
4
|
# That project is under the MIT license, same as this project:
|
5
5
|
# https://github.com/ticky/ruby-emoji-regex/blob/develop/LICENSE.md
|
6
|
-
# If the
|
6
|
+
# If the required_ruby_version numbers align, will switch to a real dependency.
|
7
7
|
# Wrapping it in a namespace to avoid collisions with the real emoji_regex.
|
8
8
|
module Kettle
|
9
9
|
module EmojiRegex
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Kettle
|
2
|
+
module Dev
|
3
|
+
class GemSpecReader
|
4
|
+
def self.load: (String root) -> {
|
5
|
+
gemspec_path: String?,
|
6
|
+
gem_name: String,
|
7
|
+
min_ruby: String,
|
8
|
+
homepage: String,
|
9
|
+
gh_org: String?,
|
10
|
+
forge_org: String?,
|
11
|
+
funding_org: String?,
|
12
|
+
gh_repo: String?,
|
13
|
+
namespace: String,
|
14
|
+
namespace_shield: String,
|
15
|
+
entrypoint_require: String,
|
16
|
+
gem_shield: String,
|
17
|
+
authors: Array[String],
|
18
|
+
email: Array[String],
|
19
|
+
summary: String,
|
20
|
+
description: String,
|
21
|
+
license: String,
|
22
|
+
licenses: Array[String],
|
23
|
+
required_ruby_version: String,
|
24
|
+
require_paths: Array[String],
|
25
|
+
bindir: String,
|
26
|
+
executables: Array[String],
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -66,6 +66,16 @@ module Kettle
|
|
66
66
|
namespace_shield: String,
|
67
67
|
entrypoint_require: String,
|
68
68
|
gem_shield: String,
|
69
|
+
authors: Array[String],
|
70
|
+
email: Array[String],
|
71
|
+
summary: String,
|
72
|
+
description: String,
|
73
|
+
license: String,
|
74
|
+
licenses: Array[String],
|
75
|
+
required_ruby_version: String,
|
76
|
+
require_paths: Array[String],
|
77
|
+
bindir: String,
|
78
|
+
executables: Array[String],
|
69
79
|
}
|
70
80
|
end
|
71
81
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kettle-dev
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.24
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter H. Boling
|
@@ -219,6 +219,7 @@ extra_rdoc_files:
|
|
219
219
|
- CITATION.cff
|
220
220
|
- CODE_OF_CONDUCT.md
|
221
221
|
- CONTRIBUTING.md
|
222
|
+
- FUNDING.md
|
222
223
|
- LICENSE.txt
|
223
224
|
- README.md
|
224
225
|
- REEK
|
@@ -273,6 +274,7 @@ files:
|
|
273
274
|
- CITATION.cff
|
274
275
|
- CODE_OF_CONDUCT.md
|
275
276
|
- CONTRIBUTING.md
|
277
|
+
- FUNDING.md
|
276
278
|
- Gemfile
|
277
279
|
- Gemfile.example
|
278
280
|
- LICENSE.txt
|
@@ -295,10 +297,12 @@ files:
|
|
295
297
|
- kettle-dev.gemspec.example
|
296
298
|
- lib/kettle-dev.rb
|
297
299
|
- lib/kettle/dev.rb
|
300
|
+
- lib/kettle/dev/changelog_cli.rb
|
298
301
|
- lib/kettle/dev/ci_helpers.rb
|
299
302
|
- lib/kettle/dev/ci_monitor.rb
|
300
303
|
- lib/kettle/dev/commit_msg.rb
|
301
304
|
- lib/kettle/dev/exit_adapter.rb
|
305
|
+
- lib/kettle/dev/gem_spec_reader.rb
|
302
306
|
- lib/kettle/dev/git_adapter.rb
|
303
307
|
- lib/kettle/dev/git_commit_footer.rb
|
304
308
|
- lib/kettle/dev/input_adapter.rb
|
@@ -329,6 +333,7 @@ files:
|
|
329
333
|
- sig/kettle/dev/ci_monitor.rbs
|
330
334
|
- sig/kettle/dev/commit_msg.rbs
|
331
335
|
- sig/kettle/dev/exit_adapter.rbs
|
336
|
+
- sig/kettle/dev/gem_spec_reader.rbs
|
332
337
|
- sig/kettle/dev/git_adapter.rbs
|
333
338
|
- sig/kettle/dev/git_commit_footer.rbs
|
334
339
|
- sig/kettle/dev/input_adapter.rbs
|
@@ -346,10 +351,10 @@ licenses:
|
|
346
351
|
- MIT
|
347
352
|
metadata:
|
348
353
|
homepage_uri: https://kettle-dev.galtzo.com/
|
349
|
-
source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.0.
|
350
|
-
changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.0.
|
354
|
+
source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.0.24
|
355
|
+
changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.0.24/CHANGELOG.md
|
351
356
|
bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
|
352
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.0.
|
357
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.0.24
|
353
358
|
funding_uri: https://github.com/sponsors/pboling
|
354
359
|
wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
|
355
360
|
news_uri: https://www.railsbling.com/tags/kettle-dev
|
metadata.gz.sig
CHANGED
Binary file
|