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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +18 -1
- data/README.md +6 -5
- data/lib/kettle/family/config.rb +0 -4
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +11 -88
- data.tar.gz.sig +0 -0
- metadata +6 -6
- 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: 0d4d3ce269fc524e6d65eccda99a8f9e230959e7593ee9c64e06aa7b3c3c1f91
|
|
4
|
+
data.tar.gz: 6a150730bfb48c279c93734b8b6e097db37d3b3e5b6ce4d2ee61915514361a06
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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
|
-
|
|
177
|
-
shell-style URL patterns.
|
|
178
|
-
|
|
179
|
-
|
|
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.
|
|
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
|
data/lib/kettle/family/config.rb
CHANGED
|
@@ -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.
|
|
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 =
|
|
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
|
-
|
|
1554
|
-
if
|
|
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 !
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
365
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
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.
|
|
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
|