kettle-dev 1.1.29 → 1.1.31
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/CHANGELOG.md +29 -1
- data/README.md +3 -3
- data/README.md.example +1 -1
- data/Rakefile.example +1 -1
- data/lib/kettle/dev/changelog_cli.rb +108 -1
- data/lib/kettle/dev/release_cli.rb +9 -7
- data/lib/kettle/dev/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +4 -4
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94de7d823ad51d4a1b86c9b982c7d91b01af35e16d2f042682c1ba792774a066
|
4
|
+
data.tar.gz: f8e64e6615a0dd2ce0315cc56ee5095aa6c786e8767d7aefadbe90f2362054c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 964a6e1a5b82820272c9638039566609f3ef78a44800355db416b3cef0414a44985fc3720e34279e430322f70f6b188689b53008998cc5b0227185ad38e1969f
|
7
|
+
data.tar.gz: f4316fc97d2443957f63f9d19407ac97ba948a4f7702636d165cf507c8313dba5e043175cb443a2716ea6f60b6f2d1b6a2f96669d498c09499675c017435d69a
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -30,6 +30,30 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
30
30
|
|
31
31
|
### Security
|
32
32
|
|
33
|
+
## [1.1.31] - 2025-09-21
|
34
|
+
|
35
|
+
- TAG: [v1.1.31][1.1.31t]
|
36
|
+
- COVERAGE: 96.39% -- 3929/4076 lines in 26 files
|
37
|
+
- BRANCH COVERAGE: 81.07% -- 1619/1997 branches in 26 files
|
38
|
+
- 79.12% documented
|
39
|
+
|
40
|
+
### Fixed
|
41
|
+
|
42
|
+
- order of checksums and release / tag reversed
|
43
|
+
- remove all possibility of gem rebuild (part of reproducible builds) including checksums in the rebuilt gem
|
44
|
+
|
45
|
+
## [1.1.30] - 2025-09-21
|
46
|
+
|
47
|
+
- TAG: [v1.1.30][1.1.30t]
|
48
|
+
- COVERAGE: 96.27% -- 3926/4078 lines in 26 files
|
49
|
+
- BRANCH COVERAGE: 80.97% -- 1617/1997 branches in 26 files
|
50
|
+
- 79.12% documented
|
51
|
+
|
52
|
+
### Added
|
53
|
+
|
54
|
+
- kettle-changelog: handle legacy tag-in-release-heading style
|
55
|
+
- convert to tag-in-list style
|
56
|
+
|
33
57
|
## [1.1.29] - 2025-09-21
|
34
58
|
|
35
59
|
- TAG: [v1.1.29][1.1.29t]
|
@@ -1018,7 +1042,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
1018
1042
|
- Selecting will run the selected workflow via `act`
|
1019
1043
|
- This may move to its own gem in the future.
|
1020
1044
|
|
1021
|
-
[Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.
|
1045
|
+
[Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.31...HEAD
|
1046
|
+
[1.1.31]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.30...v1.1.31
|
1047
|
+
[1.1.31t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.31
|
1048
|
+
[1.1.30]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.29...v1.1.30
|
1049
|
+
[1.1.30t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.30
|
1022
1050
|
[1.1.29]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.28...v1.1.29
|
1023
1051
|
[1.1.29t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.29
|
1024
1052
|
[1.1.28]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.27...v1.1.28
|
data/README.md
CHANGED
@@ -442,8 +442,8 @@ What it does:
|
|
442
442
|
- 12: Checkout trunk and pull latest
|
443
443
|
- 13: Signing checks and guidance (abort when signing enabled but cert missing); respect SKIP_GEM_SIGNING
|
444
444
|
- 14: Build gem (honors SKIP_GEM_SIGNING via env prefix)
|
445
|
-
- 15:
|
446
|
-
- 16:
|
445
|
+
- 15: Release via `bundle exec rake release` (also creates git tag)
|
446
|
+
- 16: Generate and validate gem checksums (bin/gem_checksums)
|
447
447
|
- 17: Create GitHub release from CHANGELOG when GITHUB_TOKEN present
|
448
448
|
- 18: Push git tags to remotes (to "all" remote only when present; otherwise to each remote)
|
449
449
|
- Examples:
|
@@ -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.
|
928
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-4.076-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.
|
522
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-4.076-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
@@ -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 =
|
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
|
@@ -260,17 +260,19 @@ module Kettle
|
|
260
260
|
run_cmd!("bundle exec rake build")
|
261
261
|
end
|
262
262
|
|
263
|
-
# 15.
|
263
|
+
# 15. release and tag
|
264
264
|
if @start_step <= 15
|
265
|
-
|
266
|
-
|
267
|
-
validate_checksums!(version, stage: "after build + gem_checksums")
|
265
|
+
puts "Running release (you may be prompted for signing key password and RubyGems MFA OTP)..."
|
266
|
+
run_cmd!("bundle exec rake release")
|
268
267
|
end
|
269
268
|
|
270
|
-
# 16.
|
269
|
+
# 16. generate checksums
|
270
|
+
# Checksums are generated after release to avoid including checksums/ in gem package
|
271
|
+
# Rationale: Running gem_checksums before release may commit checksums/ and cause Bundler's
|
272
|
+
# release build to include them in the gem, altering the artifact.
|
271
273
|
if @start_step <= 16
|
272
|
-
|
273
|
-
run_cmd!("
|
274
|
+
# Generate checksums for the just-built artifact, then validate
|
275
|
+
run_cmd!("bin/gem_checksums")
|
274
276
|
version ||= detect_version
|
275
277
|
validate_checksums!(version, stage: "after release")
|
276
278
|
end
|
data/lib/kettle/dev/version.rb
CHANGED
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.
|
4
|
+
version: 1.1.31
|
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.
|
408
|
-
changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.
|
407
|
+
source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.31
|
408
|
+
changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.31/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.
|
410
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.31
|
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
|