kettle-dev 3.0.28 → 3.0.29

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: dda94d3be88afd70177ebf10e5272e19ade1b64468e8c44479145949382a954f
4
- data.tar.gz: cc4a9f69fef74faad9f592909bfdc58caf913c6a7e3f52fde4a70101840b47ed
3
+ metadata.gz: bc59b144ad35c13c8dc77cdadfcea930ba96aaf4d5d3896de8eaba577e83cd41
4
+ data.tar.gz: 3c045b3ba0e37e744a2e6305dd2b06edd30726973fb06c8462c2d40bb553e812
5
5
  SHA512:
6
- metadata.gz: b8c9a7f9b079a7c040dd025ff7093bcf74ac30a37163b32a5460353bf1d1c4cf4a0cff964f14d11eb126343e8d5eb8ef3413e580eb33605d850f23863e25639c
7
- data.tar.gz: 7da28d9024ac1c4ae381ae97d6331ee21eb1bda66b720ba09c6d7af5eaf8fcd973cc98eeead7b9710884f056c63a7a981ffd6423ec4389aebbf4bc9a1a2fbf70
6
+ metadata.gz: 1844c35d044d30ea440baca2c784b7aea035f37848c8dfa5b2a5a7533759e00eeaf20e04af3da857821617c762eaa717639b44fd17aabdd78cba5a1b2b7380ed
7
+ data.tar.gz: 7b4e5f90dbcf71235efe088f84ae03ec0707539f2072e2f246d0a48e1dc43bd361c8c5befc6a2bebfe7d017ceffca1fab631e897558bbcdf9882f3253cfe747a
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.29] - 2026-09-01
34
+
35
+ - TAG: [v3.0.29][3.0.29t]
36
+ - COVERAGE: 91.58% -- 6003/6555 lines in 47 files
37
+ - BRANCH COVERAGE: 76.25% -- 2302/3019 branches in 47 files
38
+ - 50.24% documented
39
+
40
+ ### Fixed
41
+
42
+ - Install bootstrap gems required by statically evaluated Gemfiles before isolated release lockfile resolution.
43
+
44
+ - Ignore inactive nested Gemfile bootstrap requirements when their appraisal lockfile does not include the bootstrap gem.
45
+
33
46
  ## [3.0.28] - 2026-09-01
34
47
 
35
48
  - TAG: [v3.0.28][3.0.28t]
@@ -3773,7 +3786,9 @@ Please file a bug if you notice a violation of semantic versioning.
3773
3786
  - Selecting will run the selected workflow via `act`
3774
3787
  - This may move to its own gem in the future.
3775
3788
 
3776
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.28...HEAD
3789
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.29...HEAD
3790
+ [3.0.29]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.28...v3.0.29
3791
+ [3.0.29t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.29
3777
3792
  [3.0.28]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.27...v3.0.28
3778
3793
  [3.0.28t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.28
3779
3794
  [3.0.27]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.26...v3.0.27
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.542-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1069
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.555-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
@@ -476,14 +476,18 @@ module Kettle
476
476
  end
477
477
  end
478
478
 
479
- # Bundler evaluates a Gemfile before it resolves the gems declared in it.
480
- # Install only direct, literal bootstrap requires into the reset sandbox so
481
- # unrelated gems from the invoking Ruby cannot influence resolution.
479
+ # Bundler evaluates a Gemfile and its static eval_gemfile inputs before it
480
+ # resolves declared gems. Install only literal bootstrap requires into the
481
+ # reset sandbox so unrelated gems from the invoking Ruby cannot influence
482
+ # resolution.
482
483
  def install_gemfile_bootstrap_gems!(gemfile:, lockfile:, gem_home:)
483
- gemfile_bootstrap_gem_names(gemfile).each do |name|
484
+ gemfile_bootstrap_gems(gemfile).each do |name, required_by_root_gemfile|
484
485
  version = locked_registry_gem_version(lockfile, name)
485
486
  source_url = registry_source_urls(lockfile).first
486
- unless version && source_url
487
+ needs_install = required_by_root_gemfile || (version && source_url)
488
+ next unless needs_install
489
+
490
+ if !version || !source_url
487
491
  raise Error, "Cannot isolate Gemfile bootstrap #{name.inspect}: #{display_path(lockfile)} does not lock it from a registry source"
488
492
  end
489
493
 
@@ -491,9 +495,27 @@ module Kettle
491
495
  end
492
496
  end
493
497
 
494
- def gemfile_bootstrap_gem_names(gemfile)
495
- calls = require_calls_from_ripper(Ripper.sexp(File.read(gemfile)))
496
- calls.filter_map { |method_name, argument| bootstrap_gem_name(method_name, argument) }.uniq
498
+ def gemfile_bootstrap_gems(gemfile)
499
+ gemfile_source_paths(gemfile).each_with_index.each_with_object({}) do |(path, index), gems|
500
+ calls = require_calls_from_ripper(Ripper.sexp(File.read(path)))
501
+ calls.filter_map { |method_name, argument| bootstrap_gem_name(method_name, argument) }.each do |name|
502
+ gems[name] = gems.fetch(name, false) || index.zero?
503
+ end
504
+ end
505
+ end
506
+
507
+ def gemfile_source_paths(gemfile, seen = Set.new)
508
+ path = File.expand_path(gemfile)
509
+ return [] if seen.include?(path) || !File.file?(path)
510
+
511
+ seen << path
512
+ calls = require_calls_from_ripper(Ripper.sexp(File.read(path)))
513
+ nested_paths = calls.filter_map do |method_name, argument|
514
+ next unless method_name == "eval_gemfile" && argument
515
+
516
+ File.expand_path(argument, File.dirname(path))
517
+ end
518
+ [path, *nested_paths.flat_map { |nested_path| gemfile_source_paths(nested_path, seen) }]
497
519
  end
498
520
 
499
521
  def require_calls_from_ripper(node, calls = [])
@@ -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.28"
8
+ VERSION = "3.0.29"
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.28
4
+ version: 3.0.29
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -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.28
404
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.28/CHANGELOG.md
403
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.29
404
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.29/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.28
406
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.29
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