kettle-family 1.2.99 → 1.2.100

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: e3fff3ab628dc6f5338ddf0a820485b986ce5f40aec27a905f1ee15e18450ab9
4
- data.tar.gz: fa34533d50ee506f05e2f1cd9f865c011d12e91996b1c38cbabfe76eb0f9c676
3
+ metadata.gz: 8b8d7a476e1af0096eca0bc0870cd9a8623b2ad2ccdcfa5080ec184b5b561096
4
+ data.tar.gz: df5707cdac3c7838df5cbbc83731ffb7741dfe818e440a83d917792a1f4290b3
5
5
  SHA512:
6
- metadata.gz: 81f62b1263cd2afbe483f7af09d0a4c1b3e4efac0328938592c84e381d5d731188031e1e9dad97ce343573b025a50d9de62424ce92d12be7245beced5de9996d
7
- data.tar.gz: 95713fbc85dd8e285b7b94364bfe799735df2d2b9f19b1205d2ad0819d793f66c94e39aa3b3816826b2987dacabc14519e24f01a0447f29af1edb55567d49f95
6
+ metadata.gz: 1cc3290cedbd5e35c1c77f4810b6fba3e562297e66a8f1c0d5a0f575110c231771cb460ae67617d289dcf845cde1f0ef4ed09aa996ca5774631fbe1f0c8a4556
7
+ data.tar.gz: f6e8a65bfd5e7dd3c544a6b47443383a7a9d4cfc7597a52e509bbc9cf765cf1835624f8b4022db1b80b45b2cb0e40c3a5de77acb08f0cfd953c44913d6611454
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.100] - 2026-09-09
34
+
35
+ - TAG: [v1.2.100][1.2.100t]
36
+ - COVERAGE: 93.51% -- 6283/6719 lines in 35 files
37
+ - BRANCH COVERAGE: 78.15% -- 2553/3267 branches in 35 files
38
+ - 32.84% documented
39
+
40
+ ### Fixed
41
+
42
+ - Run each family member through its own mise runtime instead of inheriting the orchestrator runtime.
43
+
44
+ - Refresh dependent release lockfiles after a runtime sibling publishes without waiting for later Gemfile-only tooling dependencies.
45
+
46
+ - Preserve the Mise launcher path when running commands in member worktrees from a Bundler environment.
47
+
33
48
  ## [1.2.99] - 2026-09-09
34
49
 
35
50
  - TAG: [v1.2.99][1.2.99t]
@@ -2705,7 +2720,9 @@ Please file a bug if you notice a violation of semantic versioning.
2705
2720
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
2706
2721
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
2707
2722
 
2708
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.99...HEAD
2723
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.100...HEAD
2724
+ [1.2.100]: https://github.com/kettle-dev/kettle-family/compare/v1.2.99...v1.2.100
2725
+ [1.2.100t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.100
2709
2726
  [1.2.99]: https://github.com/kettle-dev/kettle-family/compare/v1.2.98...v1.2.99
2710
2727
  [1.2.99t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.99
2711
2728
  [1.2.98]: https://github.com/kettle-dev/kettle-family/compare/v1.2.97...v1.2.98
data/README.md CHANGED
@@ -1186,7 +1186,7 @@ Thanks for RTFM. ☺️
1186
1186
  [📌gitmoji]: https://gitmoji.dev
1187
1187
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1188
1188
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1189
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.695-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1189
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.719-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1190
1190
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
1191
1191
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1192
1192
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -10,6 +10,7 @@ module Kettle
10
10
  SENSITIVE_ENV_KEYS = [
11
11
  "KETTLE_RELEASE_GEM_SIGNING_PASSPHRASE"
12
12
  ].freeze
13
+ MISE_SESSION_ENV_PREFIX = "__MISE_"
13
14
 
14
15
  class OtpCoordinator
15
16
  def initialize(input: $stdin, output: $stdout, queue_total: nil, secrets_provider: nil, event_handler: nil)
@@ -616,11 +617,14 @@ module Kettle
616
617
 
617
618
  def process_env(member:, env:)
618
619
  base_env = unbundled_process_env
620
+ clear_outer_mise_session!(base_env) if mise_configured?(member)
619
621
  # Bundler's unbundled environment intentionally omits activation
620
622
  # variables, but it may also omit PATH. When `unsetenv_others` is used
621
623
  # for mise-managed members, dropping PATH makes nested commands such
622
624
  # as `bundle` unresolvable inside kettle-jem.
623
- base_env["PATH"] = if base_env.key?("PATH")
625
+ base_env["PATH"] = if mise_configured?(member)
626
+ mise_member_path(base_env["PATH"], ENV["PATH"])
627
+ elsif base_env.key?("PATH")
624
628
  executable_path(base_env["PATH"])
625
629
  else
626
630
  ENV["PATH"]
@@ -647,6 +651,33 @@ module Kettle
647
651
  paths.compact.map(&:to_s).flat_map { |value| value.split(File::PATH_SEPARATOR) }.reject(&:empty?).uniq.join(File::PATH_SEPARATOR)
648
652
  end
649
653
 
654
+ # `mise exec` selects a member's declared runtime. Do not let the
655
+ # orchestrator's Ruby or gem bin directory precede it on PATH: Bundler
656
+ # otherwise executes the outer runtime after `mise` has entered the
657
+ # member directory, and can rewrite that member's lockfile with the
658
+ # wrong Bundler version.
659
+ def mise_member_path(*paths)
660
+ outer_runtime_paths = [Gem.bindir, File.dirname(RbConfig.ruby)].filter_map do |entry|
661
+ canonical_path(entry) unless entry.to_s.empty?
662
+ end
663
+ paths.flat_map { |path| path.to_s.split(File::PATH_SEPARATOR) }.reject(&:empty?).reject do |entry|
664
+ outer_runtime_paths.include?(canonical_path(entry))
665
+ end.uniq.join(File::PATH_SEPARATOR)
666
+ end
667
+
668
+ # Mise records its active configuration in private `__MISE_*` variables.
669
+ # Retaining them across a nested `mise exec -C member` makes Mise reuse
670
+ # the orchestrator's tool set instead of loading the member's mise.toml.
671
+ def clear_outer_mise_session!(env)
672
+ env.delete_if { |key, _value| key.start_with?(MISE_SESSION_ENV_PREFIX) }
673
+ end
674
+
675
+ def canonical_path(path)
676
+ File.realpath(path)
677
+ rescue Errno::ENOENT, Errno::ENOTDIR
678
+ File.expand_path(path)
679
+ end
680
+
650
681
  def unbundled_process_env
651
682
  return Bundler.unbundled_env if defined?(Bundler) && Bundler.respond_to?(:unbundled_env)
652
683
  return Bundler.original_env if defined?(Bundler) && Bundler.respond_to?(:original_env)
@@ -7,6 +7,24 @@ module Kettle
7
7
  class DependencyFloor
8
8
  DEPENDENCY_METHODS = %i[add_dependency add_runtime_dependency add_development_dependency].freeze
9
9
 
10
+ # Return only dependencies declared by the gemspec itself. Release
11
+ # ordering also observes Gemfile-only tooling dependencies, but those
12
+ # cannot have their published floor rewritten by this class.
13
+ def self.gemspec_dependency_names(member)
14
+ return [] unless member.gemspec_path && File.file?(member.gemspec_path)
15
+
16
+ source = File.read(member.gemspec_path)
17
+ parse_result = Kettle::Dev::VersionBump.parse_source(source, member.gemspec_path)
18
+ Kettle::Dev::VersionBump.each_node(parse_result.value).filter_map do |node|
19
+ next unless node.is_a?(Prism::CallNode) && DEPENDENCY_METHODS.include?(node.name)
20
+
21
+ name_node = node.arguments&.arguments&.first
22
+ name_node.unescaped if name_node.is_a?(Prism::StringNode)
23
+ end.uniq
24
+ rescue Kettle::Dev::Error => error
25
+ raise Error, error.message
26
+ end
27
+
10
28
  def initialize(released_members:, dependent_members:, mode: :dry_run)
11
29
  @released_members = released_members
12
30
  @dependent_members = dependent_members
@@ -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.99"
8
+ VERSION = "1.2.100"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -2723,13 +2723,16 @@ module Kettle
2723
2723
  end
2724
2724
  end
2725
2725
 
2726
- # A release-valid lockfile must resolve every selected sibling dependency
2727
- # from the registry. Defer refreshes for dependents that still require a
2728
- # selected sibling from a later release wave; their gemspec floors can be
2729
- # updated now, but Bundler cannot resolve the future sibling remotely yet.
2726
+ # A release-valid lockfile must resolve every selected sibling whose
2727
+ # gemspec floor can be rewritten by DependencyFloor. Release ordering
2728
+ # deliberately also includes Gemfile-only tooling dependencies, but
2729
+ # those do not have a floor to reconcile and must not delay a runtime
2730
+ # dependency's lockfile refresh until a later wave.
2730
2731
  def dependency_floor_refresh_ready?(member, released_members:)
2731
2732
  selected_names = members.map(&:name)
2732
- selected_dependencies = release_dependency_names(member).select { |dependency| selected_names.include?(dependency) }
2733
+ selected_dependencies = DependencyFloor.gemspec_dependency_names(member).select do |dependency|
2734
+ selected_names.include?(dependency)
2735
+ end
2733
2736
  completed_names = Array(@release_completed_member_names) + released_members.map(&:name)
2734
2737
  selected_dependencies.all? { |dependency| completed_names.include?(dependency) }
2735
2738
  end
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.99
4
+ version: 1.2.100
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -94,7 +94,7 @@ dependencies:
94
94
  version: '3.0'
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: 3.0.33
97
+ version: 3.0.34
98
98
  type: :runtime
99
99
  prerelease: false
100
100
  version_requirements: !ruby/object:Gem::Requirement
@@ -104,7 +104,7 @@ dependencies:
104
104
  version: '3.0'
105
105
  - - ">="
106
106
  - !ruby/object:Gem::Version
107
- version: 3.0.33
107
+ version: 3.0.34
108
108
  - !ruby/object:Gem::Dependency
109
109
  name: kettle-gha-pins
110
110
  requirement: !ruby/object:Gem::Requirement
@@ -443,10 +443,10 @@ licenses:
443
443
  - AGPL-3.0-only
444
444
  metadata:
445
445
  homepage_uri: https://kettle-family.galtzo.com
446
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.99
447
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.99/CHANGELOG.md
446
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.100
447
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.100/CHANGELOG.md
448
448
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
449
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.99
449
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.100
450
450
  funding_uri: https://github.com/sponsors/pboling
451
451
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
452
452
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file