kettle-dev 3.0.32 → 3.0.34

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: 9132d12950e549b34487cfee3dfdbe7fc3e3fc8d09c61e5c469200ebcfd33494
4
- data.tar.gz: bc7028945556631f6580263cb484e2fe355eb183230b26858622efd5e72c2684
3
+ metadata.gz: cf4388ae02268bbe6676ece5cee25b5548277a6e60432554c460f189ca02d2f0
4
+ data.tar.gz: 80841fd013dbd2868b22e36b185c18c0a7f90ed3698f5cb3a2d666c46a80b41b
5
5
  SHA512:
6
- metadata.gz: 54f36d581d481382e2916eede84a4445eb89505f87021e422efec8ff7fe1a185059d06e451f1332717a8cd6ccdfb4dd8e4ba22de77ce6b20af4895cbd2d93ca4
7
- data.tar.gz: c25ead2234bda685bb6c3e6d4f3a3af33a673788705744a3efd69a866e7d9027034ce1cb6e6775fd63f240455593a2c2b505548331a73fd4ed5148b7de2ad736
6
+ metadata.gz: 713c1d308268ce8cde18124db06ad5efed08d53fc945af0c723843de08d840b6db23f946941de187b2adcf61e482e206e307fda8bbd52b562c3aaed1fd61ee91
7
+ data.tar.gz: 8e94e9a97e3ae52b955fd098db642ab23639fb6e0d67b2abed14fe8684248430c50618b8f8d6f3d0a57bb1934954e1f41fe7b17711fac151bdca9928b98a0795
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
+ ## [3.0.34] - 2026-09-09
34
+
35
+ - TAG: [v3.0.34][3.0.34t]
36
+ - COVERAGE: 91.95% -- 6101/6635 lines in 47 files
37
+ - BRANCH COVERAGE: 76.43% -- 2332/3051 branches in 47 files
38
+ - 50.23% documented
39
+
40
+ ### Fixed
41
+
42
+ - Detect and reset release lockfiles whose BUNDLED WITH version lacks a matching Bundler checksum.
43
+
44
+ - Declare the intentional version_gem runtime-heads dependency overlap for templating self-tests.
45
+
46
+ ## [3.0.33] - 2026-09-07
47
+
48
+ - TAG: [v3.0.33][3.0.33t]
49
+ - COVERAGE: 91.76% -- 6068/6613 lines in 47 files
50
+ - BRANCH COVERAGE: 76.11% -- 2310/3035 branches in 47 files
51
+ - 50.35% documented
52
+
53
+ ### Fixed
54
+
55
+ - Isolate the published-gem availability probe from locally activated gems so release validation resolves the registry dependency graph.
56
+
33
57
  ## [3.0.32] - 2026-09-07
34
58
 
35
59
  - TAG: [v3.0.32][3.0.32t]
@@ -3823,7 +3847,11 @@ Please file a bug if you notice a violation of semantic versioning.
3823
3847
  - Selecting will run the selected workflow via `act`
3824
3848
  - This may move to its own gem in the future.
3825
3849
 
3826
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.32...HEAD
3850
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.34...HEAD
3851
+ [3.0.34]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.33...v3.0.34
3852
+ [3.0.34t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.34
3853
+ [3.0.33]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.32...v3.0.33
3854
+ [3.0.33t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.33
3827
3855
  [3.0.32]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.31...v3.0.32
3828
3856
  [3.0.32t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.32
3829
3857
  [3.0.31]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.30...v3.0.31
data/README.md CHANGED
@@ -1066,7 +1066,7 @@ Thanks for RTFM. ☺️
1066
1066
  [📌gitmoji]: https://gitmoji.dev
1067
1067
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1068
1068
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1069
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.607-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1069
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.635-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1070
1070
  [🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
1071
1071
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1072
1072
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -194,6 +194,29 @@ module Kettle
194
194
  env["GEM_HOME"] = isolated_gem_home
195
195
  env["GEM_PATH"] = isolated_gem_path || isolated_gem_home
196
196
  end
197
+ command_prefix = bundler_command_prefix(env)
198
+ command = +"#{command_prefix} bundle lock"
199
+ # Bundler accepts each platform option once followed by a list. Repeating
200
+ # either option silently keeps only the final occurrence with Bundler 4.
201
+ command << " --remove-platform #{removed_platforms.sort.map { |platform| Shellwords.escape(platform) }.join(" ")}" unless removed_platforms.empty?
202
+ command << " --add-platform #{platforms.map { |platform| Shellwords.escape(platform) }.join(" ")}" unless platforms.empty?
203
+ command << " --update"
204
+ command << " #{update_gems.map { |gem_name| Shellwords.escape(gem_name) }.join(" ")}" unless update_gems.empty?
205
+ command << " --add-checksums" unless update_bundler
206
+ return command unless update_bundler
207
+
208
+ # `bundle lock --bundler` accepts a requirement and retains a locked
209
+ # prerelease that satisfies it. `bundle update --bundler=VERSION`
210
+ # records the exact Bundler that is executing the reset instead.
211
+ # Finish with `bundle lock --add-checksums`, since `bundle update`
212
+ # does not support that option.
213
+ bundler_version = Shellwords.escape(Bundler::VERSION)
214
+ command << " && #{command_prefix} bundle update --bundler=#{bundler_version}"
215
+ command << " && #{command_prefix} bundle lock --add-checksums"
216
+ command
217
+ end
218
+
219
+ def bundler_command_prefix(env)
197
220
  command = +"env"
198
221
  UNBUNDLED_ENV_KEYS.each do |key|
199
222
  command << " -u #{key}"
@@ -201,19 +224,6 @@ module Kettle
201
224
  env.each do |key, value|
202
225
  command << " #{key}=#{Shellwords.escape(value)}"
203
226
  end
204
- command << " bundle lock"
205
- # Bundler accepts each platform option once followed by a list. Repeating
206
- # either option silently keeps only the final occurrence with Bundler 4.
207
- command << " --remove-platform #{removed_platforms.sort.map { |platform| Shellwords.escape(platform) }.join(" ")}" unless removed_platforms.empty?
208
- command << " --add-platform #{platforms.map { |platform| Shellwords.escape(platform) }.join(" ")}" unless platforms.empty?
209
- command << " --update"
210
- command << " #{update_gems.map { |gem_name| Shellwords.escape(gem_name) }.join(" ")}" unless update_gems.empty?
211
- # Bundler preserves BUNDLED WITH during a normal lockfile update.
212
- # Release lockfiles must record the Bundler that performed the final
213
- # reset, or the next release command can dirty them after the prep
214
- # commit by reconciling to a newer installed Bundler.
215
- command << " --bundler" if update_bundler
216
- command << " --add-checksums"
217
227
  command
218
228
  end
219
229
 
@@ -254,7 +264,10 @@ module Kettle
254
264
  end
255
265
 
256
266
  def normalization_needed?(path)
257
- has_local_path_remote?(path) || !empty_registry_checksums(path).empty? || !unreleased_workspace_registry_specs(path).empty?
267
+ has_local_path_remote?(path) ||
268
+ !empty_registry_checksums(path).empty? ||
269
+ !unreleased_workspace_registry_specs(path).empty? ||
270
+ bundled_with_checksum_mismatch?(path)
258
271
  end
259
272
 
260
273
  def diagnostics(path)
@@ -268,6 +281,9 @@ module Kettle
268
281
  unreleased_workspace_registry_specs(path).each do |name, version, line_number|
269
282
  diagnostics << "#{display_path(path)} locks local workspace gem #{name} #{version} as a registry gem, but that version is not resolvable from the configured gem source at line #{line_number}"
270
283
  end
284
+ if bundled_with_checksum_mismatch?(path)
285
+ diagnostics.push("#{display_path(path)} BUNDLED WITH #{bundled_with_version(path)} has no matching Bundler checksum")
286
+ end
271
287
  diagnostics
272
288
  end
273
289
 
@@ -459,6 +475,33 @@ module Kettle
459
475
  end
460
476
  end
461
477
 
478
+ # A release reset updates both `BUNDLED WITH` and CHECKSUMS. When a
479
+ # nested tool leaked its Bundler into a member lockfile, a later cleanup
480
+ # can otherwise replace only the checksum entry and leave an impossible
481
+ # lockfile behind. Only flag a mismatch when the lockfile already tracks
482
+ # Bundler in CHECKSUMS, preserving older lockfiles that lack that entry.
483
+ def bundled_with_checksum_mismatch?(path)
484
+ version = bundled_with_version(path)
485
+ return false if version.empty?
486
+
487
+ checksums = self.class.checksum_entries_from_source(File.read(path))
488
+ return false unless checksums&.keys&.any? { |name, _checksum_version| name == "bundler" }
489
+
490
+ !checksums.key?(["bundler", version])
491
+ end
492
+
493
+ def bundled_with_version(path)
494
+ lines = File.readlines(path)
495
+ marker = lines.index { |line| line.strip == "BUNDLED WITH" }
496
+ return "" unless marker
497
+
498
+ lines[marker.succ..-1].each do |line|
499
+ version = line.strip
500
+ return version unless version.empty?
501
+ end
502
+ ""
503
+ end
504
+
462
505
  def path_source_gems(path)
463
506
  lockfile_parser(path).specs.each_with_object(Set.new) do |spec, gems|
464
507
  source = spec.source
@@ -6,6 +6,7 @@ require "open3"
6
6
  require "shellwords"
7
7
  require "time"
8
8
  require "fileutils"
9
+ require "tmpdir"
9
10
  require "net/http"
10
11
  require "openssl"
11
12
  require "json"
@@ -2035,7 +2036,13 @@ module Kettle
2035
2036
  stderr_str = nil
2036
2037
  status = nil
2037
2038
  with_unbundled_release_probe_env do
2038
- stdout_str, stderr_str, status = Open3.capture3(self.class.send(:command_env), Gem.ruby, script_path)
2039
+ with_release_availability_probe_gem_home do |gem_home|
2040
+ stdout_str, stderr_str, status = Open3.capture3(
2041
+ self.class.send(:command_env).merge("GEM_HOME" => gem_home, "GEM_PATH" => gem_home),
2042
+ Gem.ruby,
2043
+ script_path
2044
+ )
2045
+ end
2039
2046
  end
2040
2047
  $stdout.print(stdout_str) unless stdout_str.to_s.empty?
2041
2048
  if status.success?
@@ -2074,6 +2081,12 @@ module Kettle
2074
2081
  10
2075
2082
  end
2076
2083
 
2084
+ def with_release_availability_probe_gem_home
2085
+ dir = File.join(@root, "tmp", "kettle-release")
2086
+ FileUtils.mkdir_p(dir)
2087
+ Dir.mktmpdir("probe-gem-home-", dir) { |gem_home| yield gem_home }
2088
+ end
2089
+
2077
2090
  def with_unbundled_release_probe_env(&block)
2078
2091
  if defined?(Bundler)
2079
2092
  Bundler.with_unbundled_env(&block)
@@ -5,7 +5,7 @@ module Kettle
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = "3.0.32"
8
+ VERSION = "3.0.34"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
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: 3.0.32
4
+ version: 3.0.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -100,7 +100,7 @@ dependencies:
100
100
  version: '0.1'
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 0.1.11
103
+ version: 0.1.12
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
@@ -110,7 +110,7 @@ dependencies:
110
110
  version: '0.1'
111
111
  - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: 0.1.11
113
+ version: 0.1.12
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: kettle-test
116
116
  requirement: !ruby/object:Gem::Requirement
@@ -400,10 +400,10 @@ licenses:
400
400
  - AGPL-3.0-only
401
401
  metadata:
402
402
  homepage_uri: https://kettle-dev.galtzo.com
403
- source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.32
404
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.32/CHANGELOG.md
403
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.34
404
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.34/CHANGELOG.md
405
405
  bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
406
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.32
406
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.34
407
407
  funding_uri: https://github.com/sponsors/pboling
408
408
  wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
409
409
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file