kettle-family 1.2.59 → 1.2.60

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: 1362393294aee4023a1d11a45973f31affd2a4b858f9fbe400b22ebed831d078
4
- data.tar.gz: e776253f40b9e2c77c2db5638e075d9c0ff08b2841e8be18ab23452da9254e89
3
+ metadata.gz: 0d4d3ce269fc524e6d65eccda99a8f9e230959e7593ee9c64e06aa7b3c3c1f91
4
+ data.tar.gz: 6a150730bfb48c279c93734b8b6e097db37d3b3e5b6ce4d2ee61915514361a06
5
5
  SHA512:
6
- metadata.gz: 7996bae296cfe6b3cee363e53e2992d6033375d34e90866127e59368b8b6b8ed3fe769a15ac66ed7105b365fb591c7fe58967c466ef1f162bf732edb3f2f34ab
7
- data.tar.gz: 03ccd0e0d856f16f596c80f3b028787bc475a9bebe82e34efce92eb1d4ce6bdd0dc571a5e9b7074680a23ee1a01de9aab2d183f88ddc409557519e809a8eff5b
6
+ metadata.gz: 7606bd8c0529ad7fe74db5bd834aefe6b1326b812ea5262a5c3543ffbe9a804c2999f3a4e5bffff715b2c2b4d62ef5322b27752e95f3e0cbb0ca8ba1494e8d39
7
+ data.tar.gz: bf0871528632b1a3af818ec4e38d79716ecaaf6e295ac8c51c3f0d2c53171d07e021968bfedede7399fd7c95232345ba6e53b18e258d2bf2639ad45ed6d069df
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,21 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.2.60] - 2026-08-25
34
+
35
+ - TAG: [v1.2.60][1.2.60t]
36
+ - COVERAGE: 93.47% -- 5311/5682 lines in 33 files
37
+ - BRANCH COVERAGE: 76.24% -- 2140/2807 branches in 33 files
38
+ - 29.86% documented
39
+
40
+ ### Changed
41
+
42
+ - Use kettle-dev lockfile inspection primitives for family release and reset validation.
43
+
44
+ ### Removed
45
+
46
+ - Remove unused family-side pre-release image URL parsing; kettle-dev owns validation for both standalone and family releases.
47
+
33
48
  ## [1.2.59] - 2026-08-25
34
49
 
35
50
  - TAG: [v1.2.59][1.2.59t]
@@ -2166,7 +2181,9 @@ Please file a bug if you notice a violation of semantic versioning.
2166
2181
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
2167
2182
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
2168
2183
 
2169
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.59...HEAD
2184
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.60...HEAD
2185
+ [1.2.60]: https://github.com/kettle-dev/kettle-family/compare/v1.2.59...v1.2.60
2186
+ [1.2.60t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.60
2170
2187
  [1.2.59]: https://github.com/kettle-dev/kettle-family/compare/v1.2.58...v1.2.59
2171
2188
  [1.2.59t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.59
2172
2189
  [1.2.58]: https://github.com/kettle-dev/kettle-family/compare/v1.2.57...v1.2.58
data/README.md CHANGED
@@ -173,10 +173,11 @@ members:
173
173
  - "**/vendor/**"
174
174
  ```
175
175
 
176
- Pre-release checks can skip project-specific volatile image URLs with
177
- shell-style URL patterns. Family release commands pass the active config path
178
- to member release commands so this setting works when releases run from member
179
- directories.
176
+ Member pre-release checks can skip project-specific volatile image URLs with
177
+ shell-style URL patterns. `kettle-family` treats this as family policy and
178
+ passes the active config path to the member's standalone `kettle-dev` release
179
+ command. URL matching and validation remain owned by `kettle-pre-release`, so
180
+ the same setting also works when a member is released directly.
180
181
 
181
182
  ```yaml
182
183
  pre_release:
@@ -863,7 +864,7 @@ Thanks for RTFM. ☺️
863
864
  [📌gitmoji]: https://gitmoji.dev
864
865
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
865
866
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
866
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.739-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
867
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.682-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
867
868
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
868
869
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
869
870
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -151,10 +151,6 @@ module Kettle
151
151
  fetch_path("check", "readme_links") || {}
152
152
  end
153
153
 
154
- def pre_release_image_url_skip_patterns
155
- Array(fetch_path("pre_release", "image_url_skip_patterns")).map(&:to_s)
156
- end
157
-
158
154
  def changelog_mode
159
155
  fetch_path("changelog", "mode") || "member"
160
156
  end
@@ -5,7 +5,7 @@ module Kettle
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = "1.2.59"
8
+ VERSION = "1.2.60"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -1546,14 +1546,15 @@ module Kettle
1546
1546
  return ["Gemfile.lock was not created by dependency floor lockfile refresh"] unless File.file?(lockfile)
1547
1547
 
1548
1548
  lockfile_source = File.read(lockfile)
1549
- diagnostics = release_lockfile_local_path_remote_lines(lockfile_source).map do |line_number|
1549
+ diagnostics = Kettle::Dev::LockfileReset.local_path_remote_lines_from_source(lockfile_source).map do |line_number|
1550
1550
  "Gemfile.lock has local path remote at line #{line_number}"
1551
1551
  end
1552
+ checksum_entries = Kettle::Dev::LockfileReset.checksum_entries_from_source(lockfile_source) || {}
1552
1553
  diagnostics.concat(released_members.filter_map do |released_member|
1553
- checksum_line = checksum_line_for(lockfile_source: lockfile_source, member: released_member)
1554
- if checksum_line.nil?
1554
+ checksum = checksum_entries[[released_member.name, released_member.version]]
1555
+ if checksum.nil?
1555
1556
  "Gemfile.lock CHECKSUMS is missing #{released_member.name} #{released_member.version}"
1556
- elsif !checksum_line.include?("sha256=")
1557
+ elsif !checksum.include?("sha256=")
1557
1558
  "Gemfile.lock CHECKSUMS has no sha256 for #{released_member.name} #{released_member.version}"
1558
1559
  end
1559
1560
  end)
@@ -1712,16 +1713,16 @@ module Kettle
1712
1713
  def reset_lockfile_diagnostics(lockfile)
1713
1714
  lockfile_name = File.basename(lockfile)
1714
1715
  lockfile_source = File.read(lockfile)
1715
- diagnostics = release_lockfile_local_path_remote_lines(lockfile_source).map do |line_number|
1716
+ diagnostics = Kettle::Dev::LockfileReset.local_path_remote_lines_from_source(lockfile_source).map do |line_number|
1716
1717
  "#{lockfile_name} has local path remote at line #{line_number}"
1717
1718
  end
1718
- checksum_entries = lockfile_checksum_entries(lockfile_source)
1719
+ checksum_entries = Kettle::Dev::LockfileReset.checksum_entries_from_source(lockfile_source)
1719
1720
  if checksum_entries.nil?
1720
1721
  diagnostics << "#{lockfile_name} CHECKSUMS section is missing"
1721
1722
  return diagnostics
1722
1723
  end
1723
1724
 
1724
- lockfile_gem_specs(lockfile_source).each do |name, version|
1725
+ Kettle::Dev::LockfileReset.gem_specs_from_source(lockfile_source).each do |name, version|
1725
1726
  checksum = checksum_entries[[name, version]]
1726
1727
  if checksum.nil?
1727
1728
  diagnostics << "#{lockfile_name} CHECKSUMS is missing #{name} #{version}"
@@ -1732,87 +1733,6 @@ module Kettle
1732
1733
  diagnostics
1733
1734
  end
1734
1735
 
1735
- def release_lockfile_local_path_remote_lines(lockfile_source)
1736
- lockfile_source.each_line.with_index(1).filter_map do |line, line_number|
1737
- next if line == " remote: .\n"
1738
-
1739
- line_number if line.start_with?(" remote: /", " remote: .", " remote: ./", " remote: ../")
1740
- end
1741
- end
1742
-
1743
- def checksum_line_for(lockfile_source:, member:)
1744
- in_checksums = false
1745
- lockfile_source.each_line do |line|
1746
- stripped = line.chomp
1747
- if stripped == "CHECKSUMS"
1748
- in_checksums = true
1749
- next
1750
- end
1751
- next unless in_checksums
1752
- break if !stripped.empty? && stripped == stripped.upcase && !stripped.start_with?(" ")
1753
-
1754
- return stripped if stripped.start_with?(" #{member.name} (#{member.version})")
1755
- end
1756
- nil
1757
- end
1758
-
1759
- def lockfile_checksum_entries(lockfile_source)
1760
- in_checksums = false
1761
- entries = {}
1762
- lockfile_source.each_line do |line|
1763
- stripped = line.chomp
1764
- if stripped == "CHECKSUMS"
1765
- in_checksums = true
1766
- next
1767
- end
1768
- next unless in_checksums
1769
- break if !stripped.empty? && stripped == stripped.upcase && !stripped.start_with?(" ")
1770
- next unless stripped.start_with?(" ")
1771
-
1772
- parsed = parse_lockfile_spec_line(stripped)
1773
- entries[[parsed.fetch(:name), parsed.fetch(:version)]] = parsed.fetch(:suffix) if parsed
1774
- end
1775
- in_checksums ? entries : nil
1776
- end
1777
-
1778
- def lockfile_gem_specs(lockfile_source)
1779
- in_gem = false
1780
- in_specs = false
1781
- specs = []
1782
- lockfile_source.each_line do |line|
1783
- stripped = line.chomp
1784
- if stripped == "GEM"
1785
- in_gem = true
1786
- in_specs = false
1787
- next
1788
- end
1789
- next unless in_gem
1790
- break if !stripped.empty? && stripped == stripped.upcase && !stripped.start_with?(" ")
1791
-
1792
- if stripped == " specs:"
1793
- in_specs = true
1794
- next
1795
- end
1796
- next unless in_specs
1797
- next unless line.start_with?(" ") && !line.start_with?(" ")
1798
-
1799
- parsed = parse_lockfile_spec_line(stripped)
1800
- specs << [parsed.fetch(:name), parsed.fetch(:version)] if parsed
1801
- end
1802
- specs.uniq
1803
- end
1804
-
1805
- def parse_lockfile_spec_line(line)
1806
- stripped = line.to_s.strip
1807
- return nil if stripped.empty? || !stripped.include?(" (")
1808
-
1809
- name, remainder = stripped.split(" (", 2)
1810
- version, suffix = remainder.to_s.split(")", 2)
1811
- return nil if name.to_s.empty? || version.to_s.empty?
1812
-
1813
- {name: name, version: version, suffix: suffix.to_s.strip}
1814
- end
1815
-
1816
1736
  def annotate_dependency_floor_lockfile_result(result, attempts)
1817
1737
  return unless result
1818
1738
 
@@ -2394,6 +2314,9 @@ module Kettle
2394
2314
 
2395
2315
  def base_release_env
2396
2316
  env = config.release_env
2317
+ # kettle-family transports family policy to the standalone kettle-dev
2318
+ # release command. It does not interpret pre-release URL patterns;
2319
+ # kettle-pre-release owns validation for both release entry points.
2397
2320
  env["KETTLE_FAMILY_CONFIG"] = config.path if config.path
2398
2321
  env.merge!(TEMPLATE_QUIET_ENV) unless debug
2399
2322
  env["K_RELEASE_CI_CONTINUE"] = "true" if continue_ci_failures
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-family
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.59
4
+ version: 1.2.60
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -71,7 +71,7 @@ dependencies:
71
71
  requirements:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: 3.0.11
74
+ version: 3.0.12
75
75
  - - "<"
76
76
  - !ruby/object:Gem::Version
77
77
  version: 4.0.0
@@ -81,7 +81,7 @@ dependencies:
81
81
  requirements:
82
82
  - - ">="
83
83
  - !ruby/object:Gem::Version
84
- version: 3.0.11
84
+ version: 3.0.12
85
85
  - - "<"
86
86
  - !ruby/object:Gem::Version
87
87
  version: 4.0.0
@@ -361,10 +361,10 @@ licenses:
361
361
  - AGPL-3.0-only
362
362
  metadata:
363
363
  homepage_uri: https://kettle-family.galtzo.com
364
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.59
365
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.59/CHANGELOG.md
364
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.60
365
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.60/CHANGELOG.md
366
366
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
367
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.59
367
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.60
368
368
  funding_uri: https://github.com/sponsors/pboling
369
369
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
370
370
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file