kettle-dev 3.0.33 → 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: 0b611b573a644bc27585a4f82cf71f8d66753af9b5f6035292e051ed67f684d3
4
- data.tar.gz: 15f5ffe131324656a00be51f91a8d68aacca31152f2051a0b0338ee9dc6e0742
3
+ metadata.gz: cf4388ae02268bbe6676ece5cee25b5548277a6e60432554c460f189ca02d2f0
4
+ data.tar.gz: 80841fd013dbd2868b22e36b185c18c0a7f90ed3698f5cb3a2d666c46a80b41b
5
5
  SHA512:
6
- metadata.gz: '088b91253bd99bc0b7b02a526f65b2ad117cd3d5a4f15c0d50f19c42bd5829b9b0c5b2ee9db7957f1cfa9f6662d213f02f5b3f8771f150b4e7816d6bbf6c210e'
7
- data.tar.gz: 394dd243472f9d6ad45489eeb00af4084069103ea5280f567bc5f1772d9f4ddf71e233c997907ad22d0c39aad95b4de8bbdbdb5c007f4e67ad1349856155c05e
6
+ metadata.gz: 713c1d308268ce8cde18124db06ad5efed08d53fc945af0c723843de08d840b6db23f946941de187b2adcf61e482e206e307fda8bbd52b562c3aaed1fd61ee91
7
+ data.tar.gz: 8e94e9a97e3ae52b955fd098db642ab23639fb6e0d67b2abed14fe8684248430c50618b8f8d6f3d0a57bb1934954e1f41fe7b17711fac151bdca9928b98a0795
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,19 @@ 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
+
33
46
  ## [3.0.33] - 2026-09-07
34
47
 
35
48
  - TAG: [v3.0.33][3.0.33t]
@@ -3834,7 +3847,9 @@ Please file a bug if you notice a violation of semantic versioning.
3834
3847
  - Selecting will run the selected workflow via `act`
3835
3848
  - This may move to its own gem in the future.
3836
3849
 
3837
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.33...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
3838
3853
  [3.0.33]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.32...v3.0.33
3839
3854
  [3.0.33t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.33
3840
3855
  [3.0.32]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.31...v3.0.32
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.613-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
@@ -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.33"
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.33
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.33
404
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.33/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.33
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