kettle-dev 2.5.1 → 2.5.3

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: 9975348ccc03484b31a14bcb13b9da4191f2296547d72c7866b35cd603fd66cd
4
- data.tar.gz: 87918a8f059258b36fe87ceb242eb1d8abe4ee8e18a7a5ddf9a04a0be8679b55
3
+ metadata.gz: 27bd22792f389003c84598a97928551098982336ecc8a8266c8c9d681aa842db
4
+ data.tar.gz: d152ad9402e99f1705b25c94512e5c547dbf81fe471c5f05e883a65defa29224
5
5
  SHA512:
6
- metadata.gz: 21373f304fbeeae9a69c93596f68cf718ae0c61432e4bd527a447702f8f50357eb0b9ec226758438049415a3d222672388e01792ceb12ba64456463dff12ad2f
7
- data.tar.gz: 78250942ecb9f4d6b5adc5635cf5e4b3151f82d8c5a968913361e984dede50852103c912eae25153e59c939e97b0d73f7bdfc9faf01c8bbc853a081a1316167f
6
+ metadata.gz: 0b41c1056e1cdf746e37a7cfe70e66bcc5a2a7c1b012867150fa48d607cbc86a5ed77f6021443cf32ac1ab76414b171a9fabd2db8a0c7d89d5a7e331564fea20
7
+ data.tar.gz: 86c5763509b503634019b7894fb69ab811a680698ca8a5f15dc4eb4f761238da1a9fcac60250b6733318e2ce09eb2e27bbf908af6fbdb2974526a6bd6f65ccf3
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,41 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [2.5.3] - 2026-07-27
34
+
35
+ - TAG: [v2.5.3][2.5.3t]
36
+ - COVERAGE: 91.86% -- 4627/5037 lines in 42 files
37
+ - BRANCH COVERAGE: 76.58% -- 1769/2310 branches in 42 files
38
+ - 56.04% documented
39
+
40
+ ### Fixed
41
+
42
+ - `kettle-release` now resets release lockfiles before release task bundle
43
+ installs, preventing stale `Appraisal.root.gemfile.lock` entries for
44
+ unreleased sibling gems from aborting appraisal generation.
45
+
46
+ ## [2.5.2] - 2026-07-27
47
+
48
+ - TAG: [v2.5.2][2.5.2t]
49
+ - COVERAGE: 91.92% -- 4619/5025 lines in 42 files
50
+ - BRANCH COVERAGE: 76.50% -- 1761/2302 branches in 42 files
51
+ - 56.04% documented
52
+
53
+ ### Fixed
54
+
55
+ - `kettle-reset release-lockfiles` now detects local workspace gem versions
56
+ that Bundler locked as registry gems even when checksum entries are present,
57
+ so unreleased sibling versions are not committed into release lockfiles.
58
+
59
+ - `kettle-reset` now scans workspace sibling directories with Ruby 2.4
60
+ compatible APIs, fixing Ruby 2.4 CI failures in lockfile reset specs.
61
+
62
+ ### Changed
63
+
64
+ - kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
65
+ setup-ruby-flash planning and can prepare appraisal-only jobs without
66
+ installing the main Gemfile bundle.
67
+
33
68
  ## [2.5.1] - 2026-07-27
34
69
 
35
70
  - TAG: [v2.5.1][2.5.1t]
@@ -2893,7 +2928,11 @@ Please file a bug if you notice a violation of semantic versioning.
2893
2928
  - Selecting will run the selected workflow via `act`
2894
2929
  - This may move to its own gem in the future.
2895
2930
 
2896
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v2.5.1...HEAD
2931
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v2.5.3...HEAD
2932
+ [2.5.3]: https://github.com/kettle-dev/kettle-dev/compare/v2.5.2...v2.5.3
2933
+ [2.5.3t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.5.3
2934
+ [2.5.2]: https://github.com/kettle-dev/kettle-dev/compare/v2.5.1...v2.5.2
2935
+ [2.5.2t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.5.2
2897
2936
  [2.5.1]: https://github.com/kettle-dev/kettle-dev/compare/v2.5.0...v2.5.1
2898
2937
  [2.5.1t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.5.1
2899
2938
  [2.5.0]: https://github.com/kettle-dev/kettle-dev/compare/v2.4.6...v2.5.0
data/README.md CHANGED
@@ -1005,7 +1005,7 @@ Thanks for RTFM. ☺️
1005
1005
  [📌gitmoji]: https://gitmoji.dev
1006
1006
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1007
1007
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1008
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.006-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1008
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.037-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1009
1009
  [🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
1010
1010
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1011
1011
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -91,12 +91,13 @@ module Kettle
91
91
  (
92
92
  path_source_gems(path).to_a |
93
93
  path_dependency_gems(path).to_a |
94
- empty_registry_checksums(path).map(&:first)
94
+ empty_registry_checksums(path).map(&:first) |
95
+ unreleased_workspace_registry_specs(path).map(&:first)
95
96
  ).uniq.sort
96
97
  end
97
98
 
98
99
  def normalization_needed?(path)
99
- has_local_path_remote?(path) || !empty_registry_checksums(path).empty?
100
+ has_local_path_remote?(path) || !empty_registry_checksums(path).empty? || !unreleased_workspace_registry_specs(path).empty?
100
101
  end
101
102
 
102
103
  def diagnostics(path)
@@ -107,6 +108,9 @@ module Kettle
107
108
  empty_registry_checksums(path).each do |name, version, line_number|
108
109
  diagnostics << "#{display_path(path)} CHECKSUMS has no sha256 for #{name} #{version} at line #{line_number}"
109
110
  end
111
+ unreleased_workspace_registry_specs(path).each do |name, version, line_number|
112
+ diagnostics << "#{display_path(path)} locks local workspace gem #{name} #{version} as a registry gem, but that version is not released on RubyGems.org at line #{line_number}"
113
+ end
110
114
  diagnostics
111
115
  end
112
116
 
@@ -224,6 +228,18 @@ module Kettle
224
228
  entries
225
229
  end
226
230
 
231
+ def unreleased_workspace_registry_specs(path)
232
+ local_names = local_workspace_gem_names
233
+ return [] if local_names.empty?
234
+
235
+ registry_specs_with_lines(path).filter_map do |name, version, line_number|
236
+ next unless local_names.include?(name)
237
+ next if ruby_gems_version_available?(name, version)
238
+
239
+ [name, version, line_number]
240
+ end
241
+ end
242
+
227
243
  def has_any_sha_checksum?(path)
228
244
  in_checksums = false
229
245
  File.readlines(path).any? do |line|
@@ -347,10 +363,14 @@ module Kettle
347
363
  end
348
364
 
349
365
  def registry_specs(path)
366
+ registry_specs_with_lines(path).map { |name, version, _line_number| [name, version] }
367
+ end
368
+
369
+ def registry_specs_with_lines(path)
350
370
  specs = []
351
371
  in_gem = false
352
372
  in_specs = false
353
- File.readlines(path).each do |line|
373
+ File.readlines(path).each.with_index(1) do |line, line_number|
354
374
  stripped = line.chomp
355
375
  if stripped == "GEM"
356
376
  in_gem = true
@@ -367,7 +387,7 @@ module Kettle
367
387
  next unless in_specs
368
388
 
369
389
  match = stripped.match(/\A ([A-Za-z0-9_.-]+) \(([^)]+)\)/)
370
- specs << [match[1], match[2]] if match
390
+ specs << [match[1], match[2], line_number] if match
371
391
  end
372
392
  specs
373
393
  end
@@ -425,12 +445,28 @@ module Kettle
425
445
  paths.each_with_object(Set.new) do |path, names|
426
446
  next unless File.directory?(path)
427
447
 
428
- Dir[File.join(path, "*", "*.gemspec")].each do |gemspec|
429
- names << File.basename(gemspec, ".gemspec")
448
+ workspace_children(path).each do |child|
449
+ next unless directory?(child)
450
+
451
+ Dir[File.join(child, "*.gemspec")].each do |gemspec|
452
+ names << File.basename(gemspec, ".gemspec")
453
+ end
430
454
  end
431
455
  end
432
456
  end
433
457
 
458
+ def workspace_children(path)
459
+ Dir.entries(path).reject { |child| child == "." || child == ".." }.map { |child| File.join(path, child) }
460
+ rescue SystemCallError
461
+ []
462
+ end
463
+
464
+ def directory?(path)
465
+ File.stat(path).directory?
466
+ rescue SystemCallError
467
+ false
468
+ end
469
+
434
470
  def validation_message(target, diagnostics)
435
471
  <<~MSG
436
472
  Reset #{target} failed validation:
@@ -3,8 +3,12 @@
3
3
  # --- Appraisals (dev-only) ---
4
4
  begin
5
5
  require "appraisal/task"
6
+ require "kettle/dev/lockfile_reset"
6
7
 
7
8
  bundle = "bundle"
9
+ unbundled_env = Kettle::Dev::LockfileReset::UNBUNDLED_ENV_KEYS.each_with_object({}) do |key, env|
10
+ env[key] = nil
11
+ end
8
12
  quiet_env = {
9
13
  "KETTLE_JEM_QUIET" => "true",
10
14
  "KETTLE_JEM_DEBUG" => "false",
@@ -25,7 +29,14 @@ begin
25
29
  "BUNDLE_SILENCE_ROOT_WARNING" => "true",
26
30
  "BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES" => "true"
27
31
  }
28
- appraisal_env = quiet_env.merge("BUNDLE_GEMFILE" => "Appraisal.root.gemfile")
32
+ appraisal_env = quiet_env.merge(
33
+ Kettle::Dev::LockfileReset.new(root: Dir.pwd, command_runner: ->(_command) {}).normalization_env
34
+ ).merge(
35
+ unbundled_env
36
+ ).merge(
37
+ "BUNDLE_GEMFILE" => "Appraisal.root.gemfile",
38
+ "BUNDLE_LOCKFILE" => "Appraisal.root.gemfile.lock"
39
+ )
29
40
 
30
41
  run_command = lambda do |failure_message, *args|
31
42
  ok = system(*args)
@@ -272,6 +272,7 @@ module Kettle
272
272
  end
273
273
 
274
274
  prepare_rubocop_lts_local_branch! if rubocop_lts_release_preflight_needed?
275
+ prepare_release_lockfiles_for_release_tasks! if release_lockfile_preflight_needed?
275
276
 
276
277
  # 3. bin/setup
277
278
  run_cmd!("bin/setup") if run_step?(3)
@@ -509,6 +510,10 @@ module Kettle
509
510
  (3..5).any? { |step| run_step?(step) }
510
511
  end
511
512
 
513
+ def release_lockfile_preflight_needed?
514
+ (3..5).any? { |step| run_step?(step) }
515
+ end
516
+
512
517
  def prepare_rubocop_lts_local_branch!
513
518
  local_root = rubocop_lts_local_root
514
519
  return unless local_root
@@ -570,7 +575,18 @@ module Kettle
570
575
  end
571
576
 
572
577
  def prepare_release_lockfiles_for_commit!
573
- puts "Resetting release lockfiles with local path dependencies disabled..."
578
+ reset_release_lockfiles!(stage: "before release prep commit") unless @release_lockfiles_reset_for_release_tasks
579
+ validate_release_lockfiles!(stage: "before release prep commit")
580
+ end
581
+
582
+ def prepare_release_lockfiles_for_release_tasks!
583
+ reset_release_lockfiles!(stage: "before release task bundle installs")
584
+ end
585
+
586
+ def reset_release_lockfiles!(stage:)
587
+ return if @release_lockfiles_reset_for_release_tasks && stage == "before release task bundle installs"
588
+
589
+ puts "Resetting release lockfiles with local path dependencies disabled #{stage}..."
574
590
  begin
575
591
  lockfile_reset.reset(Kettle::Dev::LockfileReset::RELEASE_LOCKFILES_TARGET)
576
592
  rescue Kettle::Dev::Error => error
@@ -585,7 +601,7 @@ module Kettle
585
601
  if diagnostics.empty?
586
602
  puts "Release lockfile reset complete: #{release_lockfile_paths.length} lockfile(s) checked, no diagnostics remain."
587
603
  end
588
- validate_release_lockfiles!(stage: "before release prep commit")
604
+ @release_lockfiles_reset_for_release_tasks = true if stage == "before release task bundle installs"
589
605
  end
590
606
 
591
607
  def validate_release_lockfiles!(stage:)
@@ -5,7 +5,7 @@ module Kettle
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = "2.5.1"
8
+ VERSION = "2.5.3"
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: 2.5.1
4
+ version: 2.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -395,10 +395,10 @@ licenses:
395
395
  - AGPL-3.0-only
396
396
  metadata:
397
397
  homepage_uri: https://kettle-dev.galtzo.com
398
- source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.5.1
399
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.5.1/CHANGELOG.md
398
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.5.3
399
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.5.3/CHANGELOG.md
400
400
  bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
401
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.5.1
401
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.5.3
402
402
  funding_uri: https://github.com/sponsors/pboling
403
403
  wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
404
404
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file