kettle-dev 1.1.29 → 1.1.30

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: 32d2a6e6c00c9ad677e9e450b1f26e7f8b6250ece42abbe7738aeb8a9f51451c
4
- data.tar.gz: ffe7fa735f910e42676c52dfb4e6e13004cef7085fa3e9350a06c825c8829a3b
3
+ metadata.gz: 24950b17a0a1ee458861480335acd45429b027a17fd133f72d17f732b403f415
4
+ data.tar.gz: e68596a5a5055a3858b59e0c8ae8ac92f5e5bdcd5bbd3387755762b736c02f88
5
5
  SHA512:
6
- metadata.gz: 786999aa20c92df3aaf8de9d49a56ab0282ade211d06473456a7cd26b7c63d401735c3c57bd5773cbdb2805ee78f5c378315e23a054719670a40cb0bf1841bda
7
- data.tar.gz: c3768bdd213afb598dbb853c78ee5f5951d3337d6d477bb4de84f6d1ae2a81027b2ad6b2c42a3a9de08d4ab6091c9044a9a47fe1c5e6b6624cd213d93bdd0d40
6
+ metadata.gz: 796b0154e4776325371c10d084145fc0e7e137dfc5dd306e11f2f7f2cf15977521530d4ea8871ad68975096e55148df10714dfda6b15a54c1b47afa5dfa35849
7
+ data.tar.gz: 251c64190d20d26286d36cfbfed62c4d9243b1bd2897feb0f3ba1c438f7bcba479db53370416695f6f04cd083934ab69b8f7576125aca0e0fe7cca7b0e95837b
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,18 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.1.30] - 2025-09-21
34
+
35
+ - TAG: [v1.1.30][1.1.30t]
36
+ - COVERAGE: 96.27% -- 3926/4078 lines in 26 files
37
+ - BRANCH COVERAGE: 80.97% -- 1617/1997 branches in 26 files
38
+ - 79.12% documented
39
+
40
+ ### Added
41
+
42
+ - kettle-changelog: handle legacy tag-in-release-heading style
43
+ - convert to tag-in-list style
44
+
33
45
  ## [1.1.29] - 2025-09-21
34
46
 
35
47
  - TAG: [v1.1.29][1.1.29t]
@@ -1018,7 +1030,9 @@ Please file a bug if you notice a violation of semantic versioning.
1018
1030
  - Selecting will run the selected workflow via `act`
1019
1031
  - This may move to its own gem in the future.
1020
1032
 
1021
- [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.29...HEAD
1033
+ [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.30...HEAD
1034
+ [1.1.30]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.29...v1.1.30
1035
+ [1.1.30t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.30
1022
1036
  [1.1.29]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.28...v1.1.29
1023
1037
  [1.1.29t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.29
1024
1038
  [1.1.28]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.27...v1.1.28
data/README.md CHANGED
@@ -925,7 +925,7 @@ Thanks for RTFM. ☺️
925
925
  [📌gitmoji]:https://gitmoji.dev
926
926
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
927
927
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
928
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.014-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
928
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.078-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
929
929
  [🔐security]: SECURITY.md
930
930
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
931
931
  [📄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
@@ -519,7 +519,7 @@ Thanks for RTFM. ☺️
519
519
  [📌gitmoji]:https://gitmoji.dev
520
520
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
521
521
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
522
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.014-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
522
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.078-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
523
523
  [🔐security]: SECURITY.md
524
524
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
525
525
  [📄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.29 - 2025-09-21
3
+ # kettle-dev Rakefile v1.1.30 - 2025-09-21
4
4
  # Ruby 2.3 (Safe Navigation) or higher required
5
5
  #
6
6
  # MIT License (see License.txt)
@@ -31,7 +31,8 @@ module Kettle
31
31
  print("Proceed with reformat only? [y/N]: ")
32
32
  ans = Kettle::Dev::InputAdapter.gets&.strip&.downcase
33
33
  if ans == "y" || ans == "yes"
34
- updated = normalize_heading_spacing(changelog)
34
+ updated = convert_heading_tag_suffix_to_list(changelog)
35
+ updated = normalize_heading_spacing(updated)
35
36
  updated = ensure_footer_spacing(updated)
36
37
  updated = updated.rstrip + "\n"
37
38
  File.write(@changelog_path, updated)
@@ -99,6 +100,9 @@ module Kettle
99
100
 
100
101
  updated = update_link_refs(updated, owner, repo, prev_version, version)
101
102
 
103
+ # Transform legacy heading suffix tags into list items under headings
104
+ updated = convert_heading_tag_suffix_to_list(updated)
105
+
102
106
  # Normalize spacing around headings to aid Markdown renderers
103
107
  updated = normalize_heading_spacing(updated)
104
108
 
@@ -262,6 +266,109 @@ module Kettle
262
266
  nil
263
267
  end
264
268
 
269
+ # Transform legacy release headings that include a tag suffix, e.g.:
270
+ # "## [1.2.3] 2022-08-29 ([tag][1.2.3t])"
271
+ # into a heading followed by a list item:
272
+ # "## [1.2.3] 2022-08-29\n\n- TAG: [v1.2.3][1.2.3t]"
273
+ # The method is idempotent: if the next non-blank line already starts with "- TAG:",
274
+ # no new list item is inserted. Case-insensitive match for [tag].
275
+ def convert_heading_tag_suffix_to_list(text)
276
+ lines = text.lines
277
+ # Build a set of versions that have a tag reference (e.g., "[1.2.3t]: ...").
278
+ # IMPORTANT: Only scan the footer link-ref block (starting at the [Unreleased]: line)
279
+ # to avoid accidentally picking up body content.
280
+ scan_start = lines.index { |l| l.start_with?(UNRELEASED_SECTION_HEADING) } || lines.length
281
+ t_versions = {}
282
+ non_t_tag_refs = {}
283
+ lines[scan_start..-1].to_a.each do |l|
284
+ # Case A: explicit tag ref key like [1.2.3t]: ...
285
+ if (m = l.match(/^\[(\d+\.\d+\.\d+)t\]:\s+(\S+)/))
286
+ t_versions[m[1]] = true
287
+ next
288
+ end
289
+ # Case B: non-t ref that nevertheless points to a tag URL (GitHub or GitLab)
290
+ if (m2 = l.match(/^\[(\d+\.\d+\.\d+)\]:\s+(\S+)/))
291
+ url = m2[2]
292
+ # Accept only when the URL clearly points to a tag for the SAME version
293
+ # Support both GitHub and GitLab style tag URLs
294
+ if (murl = url.match(%r{/(?:releases/)?tags?/v(\d+\.\d+\.\d+)}i))
295
+ version_in_url = murl[1]
296
+ if version_in_url == m2[1]
297
+ non_t_tag_refs[m2[1]] = url
298
+ end
299
+ end
300
+ end
301
+ end
302
+ # Any version that has either explicit t-ref or a non-t tag-ref is considered tagged
303
+ tag_ref_versions = {}
304
+ t_versions.keys.each { |v| tag_ref_versions[v] = true }
305
+ non_t_tag_refs.keys.each { |v| tag_ref_versions[v] = true }
306
+
307
+ out = []
308
+ i = 0
309
+ while i < lines.length
310
+ line = lines[i]
311
+ # Case 1: Heading contains legacy tag suffix we should convert
312
+ m = line.match(/^## \[(\d+\.\d+\.\d+)\](.*)\(\[tag\]\[(\d+\.\d+\.\d+)t\]\)\s*$/i)
313
+ if m && m[1] == m[3]
314
+ ver = m[1]
315
+ middle = m[2]
316
+ new_heading = ("## [#{ver}]" + middle).rstrip + "\n"
317
+ out << new_heading
318
+ # If the next non-blank line is already a TAG list item, don't add another
319
+ k = i + 1
320
+ k += 1 while k < lines.length && lines[k].strip == ""
321
+ unless k < lines.length && lines[k].lstrip.start_with?("- TAG:")
322
+ out << "\n"
323
+ out << "- TAG: [v#{ver}][#{ver}t]\n"
324
+ out << "\n"
325
+ end
326
+ # Skip any existing blank lines following the heading to avoid duplicate spacing
327
+ i = k
328
+ next
329
+ end
330
+
331
+ # Case 2: Heading does NOT contain suffix, but a matching tag ref exists; ensure a TAG list item
332
+ if (m2 = line.match(/^## \[(\d+\.\d+\.\d+)\](.*)$/))
333
+ ver2 = m2[1]
334
+ # Skip Unreleased heading and non-release headings
335
+ unless ver2.nil?
336
+ k = i + 1
337
+ k += 1 while k < lines.length && lines[k].strip == ""
338
+ needs_tag = tag_ref_versions[ver2] && !(k < lines.length && lines[k].lstrip.start_with?("- TAG:"))
339
+ if needs_tag
340
+ out << (line.end_with?("\n") ? line : line + "\n")
341
+ out << "\n"
342
+ out << "- TAG: [v#{ver2}][#{ver2}t]\n"
343
+ out << "\n"
344
+ i = k
345
+ next
346
+ end
347
+ end
348
+ end
349
+
350
+ # Footer duplication: if we are in the footer block and encounter a non-t tag-ref
351
+ # without a matching t-ref, emit the t-ref immediately after with the same URL.
352
+ if i >= scan_start
353
+ if (mref = line.match(/^\[(\d+\.\d+\.\d+)\]:\s+(\S+)/))
354
+ vref = mref[1]
355
+ mref[2]
356
+ if non_t_tag_refs[vref] && !t_versions[vref]
357
+ out << line
358
+ out << "[#{vref}t]: #{non_t_tag_refs[vref]}\n"
359
+ t_versions[vref] = true
360
+ i += 1
361
+ next
362
+ end
363
+ end
364
+ end
365
+
366
+ out << line
367
+ i += 1
368
+ end
369
+ out.join
370
+ end
371
+
265
372
  def update_link_refs(content, owner, repo, prev_version, new_version)
266
373
  # Convert any GitLab links to GitHub
267
374
  content = content.gsub(%r{https://gitlab\.com/([^/]+)/([^/]+)/-/compare/([^\.]+)\.\.\.([^\s]+)}) do
@@ -6,7 +6,7 @@ module Kettle
6
6
  module Version
7
7
  # The gem version.
8
8
  # @return [String]
9
- VERSION = "1.1.29"
9
+ VERSION = "1.1.30"
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.29
4
+ version: 1.1.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -404,10 +404,10 @@ licenses:
404
404
  - MIT
405
405
  metadata:
406
406
  homepage_uri: https://kettle-dev.galtzo.com/
407
- source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.29
408
- changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.29/CHANGELOG.md
407
+ source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.30
408
+ changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.30/CHANGELOG.md
409
409
  bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
410
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.29
410
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.30
411
411
  funding_uri: https://github.com/sponsors/pboling
412
412
  wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
413
413
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file