kettle-dev 1.1.19 → 1.1.20

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f7d3c953377dfc1858b5a8469bf30105b01ef83dc7eadabf909dfa0d64160b04
4
- data.tar.gz: a2fe2a9480a1f6a8b8ee80228c4d37dd9f3eae46d7a925c8ecc3af6e5b569587
3
+ metadata.gz: 898754550e179a5b5757c58d45a2dd50a61de0334051ab4947769cc4a33c6624
4
+ data.tar.gz: f2b3cb209b23f9074086cb22e52e674e2b0ba84788241b2222bdca9bf26d5699
5
5
  SHA512:
6
- metadata.gz: 414144368ee1dfb6afc667d6c52b87093211647e136ac2f1e3bbe621980d278b987275d8ffa8885531400935a715c7b6eed4ea6eb4a4aaea9890f9c8d1d49b4b
7
- data.tar.gz: '049b44a4e3d2add7cac3b44ad29ddfc268ed3b1a7ec2c3e423bb5ea3c06088b74a175805cbe473702cb5c7d94905b233854462f8de2e4936c19c6e5ac8d8501e'
6
+ metadata.gz: 73108e8b6bc65bd2b11e04b0a0cb20ac2fa0f7c5f3b83533c469ece206af419e1c1033bb61253815e1c98b84f21122176825e16abbb2121478c6154647812d33
7
+ data.tar.gz: 53cf04abaea992d6a6c4047e7be8292c4eb8d452614755aeb368b37d7d8f950bc42271556a39b873cf683950f49db3325b5a2245cb4687f07776044f4f562a78
checksums.yaml.gz.sig CHANGED
Binary file
data/.licenserc.yaml ADDED
@@ -0,0 +1,7 @@
1
+ header:
2
+ license:
3
+ spdx-id: MIT
4
+
5
+ dependency:
6
+ files:
7
+ - Gemfile.lock
data/CHANGELOG.md CHANGED
@@ -24,6 +24,21 @@ Please file a bug if you notice a violation of semantic versioning.
24
24
  ### Fixed
25
25
  ### Security
26
26
 
27
+ ## [1.1.20] - 2025-09-15
28
+ - TAG: [v1.1.20][1.1.20t]
29
+ - COVERAGE: 96.80% -- 3660/3781 lines in 25 files
30
+ - BRANCH COVERAGE: 81.65% -- 1504/1842 branches in 25 files
31
+ - 77.01% documented
32
+ ### Added
33
+ - Allow reformating of CHANGELOG.md without version bump
34
+ - `--include=GLOB` includes files not otherwise included in default template
35
+ - more test coverage
36
+ ### Fixed
37
+ - Add .licenserc.yaml to gem package
38
+ - Handling of GFM fenced code blocks in CHANGELOG.md
39
+ - Handling of nested list items in CHANGELOG.md
40
+ - Handling of blank lines around all headings in CHANGELOG.md
41
+
27
42
  ## [1.1.19] - 2025-09-14
28
43
  - TAG: [v1.1.19][1.1.19t]
29
44
  - COVERAGE: 96.58% -- 3531/3656 lines in 25 files
@@ -660,7 +675,9 @@ Please file a bug if you notice a violation of semantic versioning.
660
675
  - Selecting will run the selected workflow via `act`
661
676
  - This may move to its own gem in the future.
662
677
 
663
- [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.19...HEAD
678
+ [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.20...HEAD
679
+ [1.1.20]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.19...v1.1.20
680
+ [1.1.20t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.20
664
681
  [1.1.19]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.18...v1.1.19
665
682
  [1.1.19t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.19
666
683
  [1.1.18]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.17...v1.1.18
data/README.md CHANGED
@@ -241,10 +241,12 @@ That’s it. Once installed, kettle-dev:
241
241
  - option: force: When truthy (1, true, y, yes), treat all y/N prompts as Yes. Useful for non-interactive runs or to accept defaults quickly. Example: `bundle exec rake kettle:dev:template force=true`
242
242
  - option: allowed: When truthy (1, true, y, yes), resume task after you have reviewed `.envrc`/`.env.local` and run `direnv allow`. If either file is created or updated, the task will abort with instructions unless `allowed=true` is present. Example: `bundle exec rake kettle:dev:install allowed=true`
243
243
  - option: only: A comma-separated list of glob patterns to include in templating. Any destination file whose path+filename does not match one of the patterns is excluded. Patterns are matched relative to your project root. Examples: `only="README.md,.github/**"`, `only="docs/**,lib/**/*.rb"`.
244
+ - option: include: A comma-separated list of glob patterns that opt-in additional, non-default files. Currently, `.github/workflows/discord-notifier.yml` is not copied by default and will only be copied when `include` matches it (e.g., `include=".github/workflows/discord-notifier.yml"`).
244
245
  - `kettle:dev:template` — templates files from this gem into your project (e.g., .github workflows, .devcontainer, .qlty, modular Gemfiles, README/CONTRIBUTING stubs). You can run this independently to refresh templates without the extra install prompts.
245
246
  - option: force: When truthy (1, true, y, yes), treat all y/N prompts as Yes. Useful for non-interactive runs or to accept defaults quickly. Example: `bundle exec rake kettle:dev:template force=true`
246
247
  - option: allowed: When truthy (1, true, y, yes), resume task after you have reviewed `.envrc`/`.env.local` and run `direnv allow`. If either file is created or updated, the task will abort with instructions unless `allowed=true` is present. Example: `bundle exec rake kettle:dev:template allowed=true`
247
248
  - option: only: Same as for install; limits which destination files are written based on glob patterns relative to the project root.
249
+ - option: include: Same as for install; opts into optional files (e.g., `.github/workflows/discord-notifier.yml`).
248
250
 
249
251
  Recommended one-time setup in your project:
250
252
  - Install binstubs so kettle-dev executables are available under `./bin`:
@@ -506,6 +508,7 @@ What it does:
506
508
  - `--force` Pass `force=true` to accept prompts non-interactively.
507
509
  - `--hook_templates=VAL` Pass `hook_templates=VAL` to control git hook templating.
508
510
  - `--only=VAL` Pass `only=VAL` to restrict install scope.
511
+ - `--include=VAL` Pass `include=VAL` to include optional files by glob (see notes below).
509
512
  - `-h`, `--help` Show help.
510
513
  - Behavior:
511
514
  - Verifies a clean git working tree, presence of a Gemfile and a gemspec.
@@ -911,7 +914,7 @@ Thanks for RTFM. ☺️
911
914
  [📌gitmoji]:https://gitmoji.dev
912
915
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
913
916
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
914
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.656-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
917
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.781-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
915
918
  [🔐security]: SECURITY.md
916
919
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
917
920
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
data/README.md.example CHANGED
@@ -511,7 +511,7 @@ Thanks for RTFM. ☺️
511
511
  [📌gitmoji]:https://gitmoji.dev
512
512
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
513
513
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
514
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.656-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
514
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.781-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
515
515
  [🔐security]: SECURITY.md
516
516
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
517
517
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
data/Rakefile.example CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # kettle-dev Rakefile v1.1.19 - 2025-09-14
3
+ # kettle-dev Rakefile v1.1.20 - 2025-09-15
4
4
  # Ruby 2.3 (Safe Navigation) or higher required
5
5
  #
6
6
  # MIT License (see License.txt)
data/exe/kettle-dev-setup CHANGED
@@ -44,6 +44,7 @@ if ARGV.include?("-h") || ARGV.include?("--help")
44
44
  --force
45
45
  --hook_templates=VAL
46
46
  --only=VAL
47
+ --include=VAL
47
48
 
48
49
  Environment:
49
50
  DEBUG=true # print backtraces on errors
@@ -24,9 +24,22 @@ module Kettle
24
24
 
25
25
  changelog = File.read(@changelog_path)
26
26
 
27
- # If the detected version already exists in the changelog, abort to avoid duplicates
27
+ # If the detected version already exists in the changelog, offer reformat-only mode
28
28
  if changelog =~ /^## \[#{Regexp.escape(version)}\]/
29
- abort("CHANGELOG.md already has a section for version #{version}. Bump version.rb or remove the duplicate.")
29
+ warn("CHANGELOG.md already has a section for version #{version}.")
30
+ warn("It appears the version has not been bumped. You can reformat CHANGELOG.md without adding a new release section.")
31
+ print("Proceed with reformat only? [y/N]: ")
32
+ ans = Kettle::Dev::InputAdapter.gets&.strip&.downcase
33
+ if ans == "y" || ans == "yes"
34
+ updated = normalize_heading_spacing(changelog)
35
+ updated = ensure_footer_spacing(updated)
36
+ updated = updated.rstrip + "\n"
37
+ File.write(@changelog_path, updated)
38
+ puts "CHANGELOG.md reformatted. No new version section added."
39
+ return
40
+ else
41
+ abort("Aborting: version not bumped. Re-run after bumping version or answer 'y' to reformat-only.")
42
+ end
30
43
  end
31
44
 
32
45
  unreleased_block, before, after = extract_unreleased(changelog)
@@ -86,6 +99,9 @@ module Kettle
86
99
 
87
100
  updated = update_link_refs(updated, owner, repo, prev_version, version)
88
101
 
102
+ # Normalize spacing around headings to aid Markdown renderers
103
+ updated = normalize_heading_spacing(updated)
104
+
89
105
  # Ensure exactly one trailing newline at EOF
90
106
  updated = updated.rstrip + "\n"
91
107
 
@@ -340,10 +356,71 @@ module Kettle
340
356
  new_ref_block << tags[v] if tags[v]
341
357
  end
342
358
  # Replace the old block
343
- rebuilt = lines[0...first_ref] + new_ref_block + ["\n"]
359
+ head = lines[0...first_ref]
360
+ # Ensure exactly one blank line separating body content from the reference block
361
+ if head.any? && head.last.to_s.strip != ""
362
+ head << "\n"
363
+ end
364
+ rebuilt = head + new_ref_block + ["\n"]
344
365
  rebuilt.join
345
366
  end
346
367
 
368
+ # Ensure every Markdown atx-style heading line (e.g., "# ", "## ") has exactly one blank line
369
+ # before and after it, skipping content inside fenced code blocks.
370
+ def normalize_heading_spacing(text)
371
+ lines = text.split("\n", -1)
372
+ out = []
373
+ in_fence = false
374
+ fence_re = /^\s*```/
375
+ heading_re = /^\s*#+\s+.+/
376
+ lines.each_with_index do |ln, idx|
377
+ if ln =~ fence_re
378
+ in_fence = !in_fence
379
+ out << ln
380
+ next
381
+ end
382
+ if !in_fence && ln =~ heading_re
383
+ # Ensure previous line is blank (unless start of file or already blank)
384
+ prev_blank = out.empty? ? false : out.last.to_s.strip == ""
385
+ out << "" unless out.empty? || prev_blank
386
+ out << ln
387
+ # Peek at next line in source to decide if we need to inject a blank now.
388
+ nxt = lines[idx + 1]
389
+ out << "" unless nxt.to_s.strip == ""
390
+ else
391
+ out << ln
392
+ end
393
+ end
394
+ # Collapse multiple consecutive blank lines down to a single between regions that our logic might have doubled
395
+ collapsed = []
396
+ lines_enum = out
397
+ lines_enum.each do |l|
398
+ if l.strip == "" && collapsed.last.to_s.strip == ""
399
+ next
400
+ end
401
+ collapsed << l
402
+ end
403
+ collapsed.join("\n")
404
+ end
405
+
406
+ def ensure_footer_spacing(text)
407
+ lines = text.split("\n", -1)
408
+ # Find the Unreleased link-ref which denotes start of footer refs
409
+ idx = lines.index { |l| l.start_with?(UNRELEASED_SECTION_HEADING) }
410
+ return text unless idx
411
+ head = lines[0...idx]
412
+ tail = lines[idx..-1]
413
+ # Ensure exactly one blank line between body and refs
414
+ if head.any? && head.last.to_s.strip != ""
415
+ head << ""
416
+ elsif head.any? && head.last.to_s.strip == "" && head[-2].to_s.strip == ""
417
+ # Collapse multiple blanks before footer to a single
418
+ head.pop while head.any? && head.last.to_s.strip == ""
419
+ head << ""
420
+ end
421
+ (head + tail).join("\n")
422
+ end
423
+
347
424
  def detect_initial_compare_base(lines)
348
425
  # Fallback when prev_version is unknown: try to find the first compare base used historically
349
426
  # e.g., for 1.0.0 it may be a commit SHA instead of a tag
@@ -106,16 +106,22 @@ module Kettle
106
106
  if funding_org_env && funding_org_env.to_s.strip.casecmp("false").zero?
107
107
  funding_org = nil
108
108
  else
109
- funding_org = ENV["OPENCOLLECTIVE_HANDLE"].to_s.strip if funding_org.empty?
110
- if funding_org.to_s.empty?
111
- oc_path = File.join(root.to_s, ".opencollective.yml")
112
- if File.file?(oc_path)
113
- txt = File.read(oc_path)
114
- if (m = txt.match(/\borg:\s*([\w\-]+)/i))
115
- funding_org = m[1].to_s
116
- end
109
+ # Prefer .opencollective.yml when present so that specs forcing the file path are stable
110
+ oc_path = File.join(root.to_s, ".opencollective.yml")
111
+ if File.file?(oc_path)
112
+ txt = File.read(oc_path)
113
+ funding_org = if (m = txt.match(/\borg:\s*([\w\-]+)/i))
114
+ m[1].to_s
115
+ else
116
+ ""
117
117
  end
118
118
  end
119
+
120
+ # Fallback to ENV when file not present or did not contain an org
121
+ if funding_org.to_s.strip.empty?
122
+ funding_org = ENV["OPENCOLLECTIVE_HANDLE"].to_s.strip if funding_org.empty?
123
+ end
124
+
119
125
  # Be lenient: if funding_org cannot be determined, do not raise — leave it nil and warn.
120
126
  if funding_org.to_s.empty?
121
127
  Kernel.warn("kettle-dev: Could not determine funding org.\n - Options:\n * Set ENV['FUNDING_ORG'] to your funding handle (e.g., 'opencollective-handle').\n * Or set ENV['OPENCOLLECTIVE_HANDLE'].\n * Or add .opencollective.yml with: org: <handle>\n * Or bypass by setting ENV['FUNDING_ORG']=false for gems without funding.")
@@ -114,6 +114,7 @@ module Kettle
114
114
  end
115
115
  opts.on("--hook_templates=VAL", "Pass through to kettle:dev:install") { |v| @passthrough << "hook_templates=#{v}" }
116
116
  opts.on("--only=VAL", "Pass through to kettle:dev:install") { |v| @passthrough << "only=#{v}" }
117
+ opts.on("--include=VAL", "Pass through to kettle:dev:install") { |v| @passthrough << "include=#{v}" }
117
118
  opts.on("-h", "--help", "Show help") do
118
119
  puts opts
119
120
  Kettle::Dev::ExitAdapter.exit(0)
@@ -10,6 +10,41 @@ module Kettle
10
10
 
11
11
  module_function
12
12
 
13
+ # Ensure every Markdown atx-style heading line has exactly one blank line
14
+ # before and after, skipping content inside fenced code blocks.
15
+ def normalize_heading_spacing(text)
16
+ lines = text.split("\n", -1)
17
+ out = []
18
+ in_fence = false
19
+ fence_re = /^\s*```/
20
+ heading_re = /^\s*#+\s+.+/
21
+ lines.each_with_index do |ln, idx|
22
+ if ln =~ fence_re
23
+ in_fence = !in_fence
24
+ out << ln
25
+ next
26
+ end
27
+ if !in_fence && ln =~ heading_re
28
+ prev_blank = out.empty? ? false : out.last.to_s.strip == ""
29
+ out << "" unless out.empty? || prev_blank
30
+ out << ln
31
+ nxt = lines[idx + 1]
32
+ out << "" unless nxt.to_s.strip == ""
33
+ else
34
+ out << ln
35
+ end
36
+ end
37
+ # Collapse accidental multiple blanks
38
+ collapsed = []
39
+ out.each do |l|
40
+ if l.strip == "" && collapsed.last.to_s.strip == ""
41
+ next
42
+ end
43
+ collapsed << l
44
+ end
45
+ collapsed.join("\n")
46
+ end
47
+
13
48
  # Abort wrapper that avoids terminating the entire process during specs
14
49
  def task_abort(msg)
15
50
  raise Kettle::Dev::Error, msg
@@ -57,11 +92,48 @@ module Kettle
57
92
  selected[key] ||= path
58
93
  end
59
94
  end
95
+ # Parse optional include patterns (comma-separated globs relative to project root)
96
+ include_raw = ENV["include"].to_s
97
+ include_patterns = include_raw.split(",").map { |s| s.strip }.reject(&:empty?)
98
+ matches_include = lambda do |abs_dest|
99
+ return false if include_patterns.empty?
100
+ begin
101
+ rel_dest = abs_dest.to_s
102
+ proj = project_root.to_s
103
+ if rel_dest.start_with?(proj + "/")
104
+ rel_dest = rel_dest[(proj.length + 1)..-1]
105
+ elsif rel_dest == proj
106
+ rel_dest = ""
107
+ end
108
+ include_patterns.any? do |pat|
109
+ if pat.end_with?("/**")
110
+ base = pat[0..-4]
111
+ rel_dest == base || rel_dest.start_with?(base + "/")
112
+ else
113
+ File.fnmatch?(pat, rel_dest, File::FNM_PATHNAME | File::FNM_EXTGLOB | File::FNM_DOTMATCH)
114
+ end
115
+ end
116
+ rescue StandardError => e
117
+ Kettle::Dev.debug_error(e, __method__)
118
+ false
119
+ end
120
+ end
121
+
60
122
  selected.values.each do |orig_src|
61
123
  src = helpers.prefer_example(orig_src)
62
124
  # Destination path should never include the .example suffix.
63
125
  rel = orig_src.sub(/^#{Regexp.escape(gem_checkout_root)}\/?/, "").sub(/\.example\z/, "")
64
126
  dest = File.join(project_root, rel)
127
+
128
+ # Optional file: .github/workflows/discord-notifier.yml should NOT be copied by default.
129
+ # Only copy when --include matches it.
130
+ if rel == ".github/workflows/discord-notifier.yml"
131
+ unless matches_include.call(dest)
132
+ # Explicitly skip without prompting
133
+ next
134
+ end
135
+ end
136
+
65
137
  if File.basename(rel) == "FUNDING.yml"
66
138
  helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true) do |content|
67
139
  c = content.dup
@@ -599,14 +671,63 @@ module Kettle
599
671
  parse_items = lambda do |body_lines|
600
672
  result = {}
601
673
  cur = nil
602
- body_lines.each do |ln|
674
+ i = 0
675
+ while i < body_lines.length
676
+ ln = body_lines[i]
603
677
  if ln.start_with?("### ")
604
678
  cur = ln.strip
605
679
  result[cur] ||= []
606
- elsif ln.start_with?("- ")
680
+ i += 1
681
+ next
682
+ end
683
+
684
+ # Detect a list item bullet (allow optional indentation)
685
+ if (m = ln.match(/^(\s*)[-*]\s/))
607
686
  result[cur] ||= []
687
+ base_indent = m[1].length
688
+ # Start a new item: include the bullet line
608
689
  result[cur] << ln.rstrip
690
+ i += 1
691
+
692
+ # Include subsequent lines that belong to this list item:
693
+ # - blank lines
694
+ # - lines with indentation greater than the bullet's indentation
695
+ # - any lines inside fenced code blocks (```), regardless of indentation until fence closes
696
+ in_fence = false
697
+ fence_re = /^\s*```/
698
+ while i < body_lines.length
699
+ l2 = body_lines[i]
700
+ # Stop if next sibling/top-level bullet of same or smaller indent and not inside a fence
701
+ if !in_fence && l2 =~ /^(\s*)[-*]\s/
702
+ ind = Regexp.last_match(1).length
703
+ break if ind <= base_indent
704
+ end
705
+ # Break if a new section heading appears and we're not in a fence
706
+ break if !in_fence && l2.start_with?("### ")
707
+
708
+ if l2 =~ fence_re
709
+ in_fence = !in_fence
710
+ result[cur] << l2.rstrip
711
+ i += 1
712
+ next
713
+ end
714
+
715
+ # Include blanks and lines indented more than base indent, or anything while in fence
716
+ if in_fence || l2.strip.empty? || (l2[/^\s*/].length > base_indent)
717
+ result[cur] << l2.rstrip
718
+ i += 1
719
+ next
720
+ end
721
+
722
+ # Otherwise, this line does not belong to the current list item
723
+ break
724
+ end
725
+
726
+ next
609
727
  end
728
+
729
+ # Non-bullet, non-heading line: just advance
730
+ i += 1
610
731
  end
611
732
  result
612
733
  end
@@ -664,6 +785,8 @@ module Kettle
664
785
  c = lines.join("\n")
665
786
  end
666
787
  end
788
+ # Normalize spacing around Markdown headings for broad renderer compatibility
789
+ c = normalize_heading_spacing(c)
667
790
  c
668
791
  end
669
792
  else
@@ -6,7 +6,7 @@ module Kettle
6
6
  module Version
7
7
  # The gem version.
8
8
  # @return [String]
9
- VERSION = "1.1.19"
9
+ VERSION = "1.1.20"
10
10
 
11
11
  module_function
12
12
 
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.1.19
4
+ version: 1.1.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -235,7 +235,7 @@ files:
235
235
  - ".github/workflows/current.yml"
236
236
  - ".github/workflows/dep-heads.yml"
237
237
  - ".github/workflows/dependency-review.yml"
238
- - ".github/workflows/discord-notifier.yml"
238
+ - ".github/workflows/discord-notifier.yml.example"
239
239
  - ".github/workflows/heads.yml"
240
240
  - ".github/workflows/heads.yml.example"
241
241
  - ".github/workflows/jruby.yml"
@@ -253,6 +253,7 @@ files:
253
253
  - ".gitlab-ci.yml.example"
254
254
  - ".junie/guidelines-rbs.md"
255
255
  - ".junie/guidelines.md"
256
+ - ".licenserc.yaml"
256
257
  - ".opencollective.yml"
257
258
  - ".opencollective.yml.example"
258
259
  - ".qlty/qlty.toml"
@@ -387,10 +388,10 @@ licenses:
387
388
  - MIT
388
389
  metadata:
389
390
  homepage_uri: https://kettle-dev.galtzo.com/
390
- source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.19
391
- changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.19/CHANGELOG.md
391
+ source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.20
392
+ changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.20/CHANGELOG.md
392
393
  bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
393
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.19
394
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.20
394
395
  funding_uri: https://github.com/sponsors/pboling
395
396
  wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
396
397
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file