kettle-family 0.2.5 → 0.2.6

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: 2bc8f54983986ae1576f3f766324a35d5bc87b2776086a07eb3258d43bba386d
4
- data.tar.gz: edc612181ca90bd0ebdfdc196d88810d82c99cdb54b752c66b3173d85fa896a2
3
+ metadata.gz: e60652d7fefc590ce39d77a3344c00d5f54603fec08e881633907309666d7123
4
+ data.tar.gz: 7c63758c740901820321012a2b63816ea578ba240ba9f2553e3c77971e15c416
5
5
  SHA512:
6
- metadata.gz: b3f19512bb9a8b3e66ba7037a44877afc0d76eebccd50b2ea9ff233ed2a3eb74e4e0e4cc14cb2125d059c66b59ecf9f9a238b60e77cc85a81a6ab6c5dfd13749
7
- data.tar.gz: 2abdfc91601545b26d5a3a392f833cb439901a4b2d33b64a1574cbb6a57ae8f71bbbfbd8610d18af80a919bdea1e776063319e6b8670cd3b678950cd4e3964d7
6
+ metadata.gz: 814faf3a55b8be19df30565b6a968191a985ed751d3beb3af2079c9bd939f6e7ca2c1968f3709d97f263a2313dbf468d814f28ffd7a72ee36aa3b8d12e6236b4
7
+ data.tar.gz: 1017d4d63d75a6932e6ca21d1e860f3cb822373751a626c0ee8291d1f11228500143b4e13c3cd7ee480fb8d0c43a37f84b214327a0d93fe23c001fc170c0dbc5
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,22 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [0.2.6] - 2026-07-14
34
+
35
+ - TAG: [v0.2.6][0.2.6t]
36
+ - COVERAGE: 95.14% -- 2311/2429 lines in 23 files
37
+ - BRANCH COVERAGE: 76.75% -- 769/1002 branches in 23 files
38
+ - 29.54% documented
39
+
40
+ ### Fixed
41
+
42
+ - Command runner child processes now use a per-child unbundled environment
43
+ instead of mutating global `ENV`, avoiding threaded release crashes on
44
+ TruffleRuby.
45
+ - Family release commands no longer receive the implicit family local path
46
+ environment variable by default, preventing `kettle-release` from committing
47
+ sibling path sources into release lockfiles.
48
+
33
49
  ## [0.2.5] - 2026-07-11
34
50
 
35
51
  - TAG: [v0.2.5][0.2.5t]
@@ -670,7 +686,9 @@ Please file a bug if you notice a violation of semantic versioning.
670
686
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
671
687
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
672
688
 
673
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v0.2.5...HEAD
689
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v0.2.6...HEAD
690
+ [0.2.6]: https://github.com/kettle-dev/kettle-family/compare/v0.2.5...v0.2.6
691
+ [0.2.6t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.2.6
674
692
  [0.2.5]: https://github.com/kettle-dev/kettle-family/compare/v0.2.4...v0.2.5
675
693
  [0.2.5t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.2.5
676
694
  [0.2.4]: https://github.com/kettle-dev/kettle-family/compare/v0.2.3...v0.2.4
data/README.md CHANGED
@@ -603,7 +603,7 @@ Thanks for RTFM. ☺️
603
603
  [📌gitmoji]: https://gitmoji.dev
604
604
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
605
605
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
606
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-2.425-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
606
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-2.429-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
607
607
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
608
608
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
609
609
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -114,15 +114,14 @@ module Kettle
114
114
  def call(member:, phase:, command:, env: {}, interactive: false)
115
115
  argv = command_argv(member: member, command: command, env: env)
116
116
  process_env = process_env(member: member, env: env)
117
+ spawn_options = process_options
117
118
  return skipped_result(member: member, phase: phase, argv: argv) unless execute
118
119
 
119
120
  started = Process.clock_gettime(Process::CLOCK_MONOTONIC)
120
- stdout, stderr, status = with_unbundled_environment do
121
- if interactive
122
- run_interactive(env: process_env, argv: argv, chdir: member.root, member_name: member.name)
123
- else
124
- Open3.capture3(process_env, *argv, chdir: member.root)
125
- end
121
+ stdout, stderr, status = if interactive
122
+ run_interactive(env: process_env, argv: argv, chdir: member.root, member_name: member.name, process_options: spawn_options)
123
+ else
124
+ Open3.capture3(process_env, *argv, chdir: member.root, **spawn_options)
126
125
  end
127
126
  stdout = normalize_output(stdout)
128
127
  stderr = normalize_output(stderr)
@@ -146,16 +145,16 @@ module Kettle
146
145
 
147
146
  attr_reader :execute, :accept, :gem_signing_password, :otp_coordinator
148
147
 
149
- def run_interactive(env:, argv:, chdir:, member_name:)
150
- return run_interactive_pty(env: env, argv: argv, chdir: chdir, member_name: member_name) if pty_available?
148
+ def run_interactive(env:, argv:, chdir:, member_name:, process_options:)
149
+ return run_interactive_pty(env: env, argv: argv, chdir: chdir, member_name: member_name, process_options: process_options) if pty_available?
151
150
 
152
- run_interactive_open3(env: env, argv: argv, chdir: chdir, member_name: member_name)
151
+ run_interactive_open3(env: env, argv: argv, chdir: chdir, member_name: member_name, process_options: process_options)
153
152
  end
154
153
 
155
- def run_interactive_pty(env:, argv:, chdir:, member_name:)
154
+ def run_interactive_pty(env:, argv:, chdir:, member_name:, process_options:)
156
155
  stdout = +""
157
156
  status = nil
158
- PTY.spawn(env, *argv, chdir: chdir) do |output, input, pid|
157
+ PTY.spawn(env, *argv, chdir: chdir, **process_options) do |output, input, pid|
159
158
  begin
160
159
  loop do
161
160
  readers = [output]
@@ -180,11 +179,11 @@ module Kettle
180
179
  [stdout, "", status]
181
180
  end
182
181
 
183
- def run_interactive_open3(env:, argv:, chdir:, member_name:)
182
+ def run_interactive_open3(env:, argv:, chdir:, member_name:, process_options:)
184
183
  captured_stdout = +""
185
184
  captured_stderr = +""
186
185
  status = nil
187
- Open3.popen3(env, *argv, chdir: chdir) do |input, output, error, wait_thread|
186
+ Open3.popen3(env, *argv, chdir: chdir, **process_options) do |input, output, error, wait_thread|
188
187
  readers = [output, error]
189
188
  readers << $stdin if $stdin.tty? && !otp_coordinator
190
189
  until readers.empty?
@@ -280,14 +279,6 @@ module Kettle
280
279
  output.to_s.encode("UTF-8", invalid: :replace, undef: :replace, replace: "")
281
280
  end
282
281
 
283
- def with_unbundled_environment
284
- if defined?(Bundler)
285
- Bundler.with_unbundled_env { yield }
286
- else
287
- yield
288
- end
289
- end
290
-
291
282
  def command_argv(member:, command:, env: {})
292
283
  argv = normalize_command(command)
293
284
  return argv unless mise_configured?(member)
@@ -304,7 +295,21 @@ module Kettle
304
295
  end
305
296
 
306
297
  def process_env(member:, env:)
307
- return env unless mise_configured?(member)
298
+ base_env = unbundled_process_env
299
+ return base_env.merge(env) unless mise_configured?(member)
300
+
301
+ base_env
302
+ end
303
+
304
+ def unbundled_process_env
305
+ return Bundler.original_env if defined?(Bundler) && Bundler.respond_to?(:original_env)
306
+ return Bundler.unbundled_env if defined?(Bundler) && Bundler.respond_to?(:unbundled_env)
307
+
308
+ {}
309
+ end
310
+
311
+ def process_options
312
+ return {unsetenv_others: true} if defined?(Bundler)
308
313
 
309
314
  {}
310
315
  end
@@ -3,7 +3,7 @@
3
3
  module Kettle
4
4
  module Family
5
5
  module Version
6
- VERSION = "0.2.5"
6
+ VERSION = "0.2.6"
7
7
  end
8
8
  VERSION = Version::VERSION # Traditional Constant Location
9
9
  end
@@ -635,7 +635,7 @@ module Kettle
635
635
  end
636
636
 
637
637
  def base_release_env
638
- env = config.family_local_path_env.merge(config.release_env)
638
+ env = config.release_env
639
639
  env["KETTLE_FAMILY_CONFIG"] = config.path if config.path
640
640
  env.merge!(TEMPLATE_QUIET_ENV) unless debug
641
641
  env["K_RELEASE_CI_CONTINUE"] = "true" if continue_ci_failures
@@ -917,7 +917,7 @@ module Kettle
917
917
  end
918
918
 
919
919
  def release_allowed_local_path_roots
920
- config.family_local_path_env.merge(env_overrides).filter_map do |key, value|
920
+ config.release_env.merge(env_overrides).filter_map do |key, value|
921
921
  next unless key.end_with?("_LOCAL", "_DEV")
922
922
  next if value.to_s.empty? || value.to_s.casecmp("false").zero?
923
923
 
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: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -341,10 +341,10 @@ licenses:
341
341
  - AGPL-3.0-only
342
342
  metadata:
343
343
  homepage_uri: https://kettle-family.galtzo.com
344
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.2.5
345
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.2.5/CHANGELOG.md
344
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.2.6
345
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.2.6/CHANGELOG.md
346
346
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
347
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.2.5
347
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.2.6
348
348
  funding_uri: https://github.com/sponsors/pboling
349
349
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
350
350
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file