kettle-family 1.2.90 → 1.2.91

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: fd4de333d6aa3b2bc027ec582b2bcc0b890d61b20a0a57c70bcf25196b2f9c32
4
- data.tar.gz: 67754f998efad13f47f00f0e07222a17e9413c890b2cee1097ffbccd1114801d
3
+ metadata.gz: e63a81da6b871ee1c27d813b23f7840e7c0e0a577e3a992076922ff2750574b3
4
+ data.tar.gz: 859158cd1aa7b293126edb628f02eb8bc641a0fcd4797a6f097af9fe46a9ef27
5
5
  SHA512:
6
- metadata.gz: 7238680a28fa74944856d3ebe514193ac070df02fa25b319e28090bbb18f8f6a0f989ccf0d73e84f485d5e7d446de692440304dd0e99cf79b9834f4ba1212143
7
- data.tar.gz: 75c99992e6539a9aa9e37f6ad5ea45afa0692bd9214f10df75f9c604f56af1799099e4cb1fa80b47bd9e843fa8a130103dffae010b14eb8e8f64936834447c35
6
+ metadata.gz: ee75302308856eb21755bfdc3a598fe9e0d3992b4a493c84825e891dbd76f514f976549fde093de80bfe55d822567d36cba2375a666c1ca2fc6b4a9844f8ae5c
7
+ data.tar.gz: 3845dff951350adc5177e8ea3bb4ce9b80a155a4a6fbb2b05618acb2363e77e9e8ce158129521f03ca8d02816b8bdfd1f1c5ec80507c982a0546e95314815068
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
+ ## [1.2.91] - 2026-09-06
34
+
35
+ - TAG: [v1.2.91][1.2.91t]
36
+ - COVERAGE: 93.58% -- 6109/6528 lines in 35 files
37
+ - BRANCH COVERAGE: 78.06% -- 2483/3181 branches in 35 files
38
+ - 32.41% documented
39
+
40
+ ### Fixed
41
+
42
+ - Trust Mise configurations in disposable worktrees before member commands run.
43
+
44
+ - Remove retired appraisal declarations cleanly from files without a trailing newline during template bootstrap.
45
+
33
46
  ## [1.2.90] - 2026-09-06
34
47
 
35
48
  - TAG: [v1.2.90][1.2.90t]
@@ -2592,7 +2605,9 @@ Please file a bug if you notice a violation of semantic versioning.
2592
2605
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
2593
2606
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
2594
2607
 
2595
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.90...HEAD
2608
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.91...HEAD
2609
+ [1.2.91]: https://github.com/kettle-dev/kettle-family/compare/v1.2.90...v1.2.91
2610
+ [1.2.91t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.91
2596
2611
  [1.2.90]: https://github.com/kettle-dev/kettle-family/compare/v1.2.89...v1.2.90
2597
2612
  [1.2.90t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.90
2598
2613
  [1.2.89]: https://github.com/kettle-dev/kettle-family/compare/v1.2.88...v1.2.89
data/README.md CHANGED
@@ -1121,7 +1121,7 @@ Thanks for RTFM. ☺️
1121
1121
  [📌gitmoji]: https://gitmoji.dev
1122
1122
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1123
1123
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1124
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.494-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1124
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.528-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1125
1125
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
1126
1126
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1127
1127
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -66,7 +66,8 @@ module Kettle
66
66
  def obsolete_appraisal_edit(path, source, node)
67
67
  return unless legacy_appraisal_call?(node)
68
68
 
69
- line_start = source.rindex("\n", node.location.start_offset - 1).to_i + 1
69
+ preceding_newline = source.rindex("\n", node.location.start_offset - 1)
70
+ line_start = preceding_newline ? preceding_newline + 1 : 0
70
71
  line_end = source.index("\n", node.location.end_offset) || source.length
71
72
  line_end += 1 if line_end < source.length
72
73
  if final_standalone_call?(source, node, line_start, line_end)
@@ -230,8 +230,8 @@ module Kettle
230
230
  @otp_coordinator = otp_coordinator
231
231
  end
232
232
 
233
- def call(member:, phase:, command:, env: {}, interactive: false, stdout_line_handler: nil, log_path: nil, passthrough_output: true)
234
- argv = command_argv(member: member, command: command, env: env)
233
+ def call(member:, phase:, command:, env: {}, interactive: false, raw: false, stdout_line_handler: nil, log_path: nil, passthrough_output: true)
234
+ argv = command_argv(member: member, command: command, env: env, raw: raw)
235
235
  process_env = process_env(member: member, env: env)
236
236
  spawn_options = process_options
237
237
  return skipped_result(member: member, phase: phase, argv: argv) unless execute
@@ -598,9 +598,9 @@ module Kettle
598
598
  nil
599
599
  end
600
600
 
601
- def command_argv(member:, command:, env: {})
601
+ def command_argv(member:, command:, env: {}, raw: false)
602
602
  argv = normalize_command(command)
603
- return argv unless mise_configured?(member)
603
+ return argv if raw || !mise_configured?(member)
604
604
 
605
605
  command_env = nonsensitive_env(env)
606
606
  unset_env, set_env = command_env.partition { |_key, value| value.nil? }
@@ -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.90"
8
+ VERSION = "1.2.91"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -717,11 +717,14 @@ module Kettle
717
717
  results << result
718
718
  break unless result.ok?
719
719
 
720
- entries << {
720
+ entry = {
721
721
  member: relocate_member_to_worktree(member, worktree_root, source_root: config.root),
722
722
  original_member: member,
723
723
  worktree_root: worktree_root
724
724
  }
725
+ entries << entry
726
+ results.concat(worktree_mise_trust_results(entry, runner: runner, phase: "test_member_worktree_mise_trust"))
727
+ break unless results.last.ok?
725
728
  end
726
729
  [entries, results]
727
730
  end
@@ -1038,11 +1041,14 @@ module Kettle
1038
1041
  results << result
1039
1042
  break unless result.ok?
1040
1043
 
1041
- entries << {
1044
+ entry = {
1042
1045
  member: relocate_member_to_worktree(member, worktree_root, source_root: config.root),
1043
1046
  original_member: member,
1044
1047
  worktree_root: worktree_root
1045
1048
  }
1049
+ entries << entry
1050
+ results.concat(worktree_mise_trust_results(entry, runner: runner, phase: "template_member_worktree_mise_trust"))
1051
+ break unless results.last.ok?
1046
1052
  end
1047
1053
  [entries, results]
1048
1054
  end
@@ -1435,7 +1441,11 @@ module Kettle
1435
1441
  outcomes << add
1436
1442
  break unless add.ok?
1437
1443
 
1438
- entries << {branch: branch, member: relocate_member_to_worktree(member, worktree_root), worktree_root: worktree_root}
1444
+ entry = {branch: branch, member: relocate_member_to_worktree(member, worktree_root), worktree_root: worktree_root}
1445
+ entries << entry
1446
+ trust_results = worktree_mise_trust_results(entry.merge(original_member: member), runner: runner, phase: "template_worktree_mise_trust")
1447
+ outcomes.concat(trust_results)
1448
+ break unless trust_results.all?(&:ok?)
1439
1449
  end
1440
1450
 
1441
1451
  if outcomes.all?(&:ok?)
@@ -1491,6 +1501,45 @@ module Kettle
1491
1501
  end
1492
1502
  end
1493
1503
 
1504
+ # A git worktree has a distinct absolute path, and Mise deliberately
1505
+ # tracks trust by config path. Trust every active config between the
1506
+ # worktree root and the member command directory before invoking a
1507
+ # command there. This bootstrap must run raw: wrapping it in `mise exec`
1508
+ # would require the trust it is establishing.
1509
+ def worktree_mise_trust_results(entry, runner:, phase:)
1510
+ member = entry.fetch(:member)
1511
+ original_member = entry.fetch(:original_member, member)
1512
+ worktree_root = entry.fetch(:worktree_root)
1513
+ mise_config_roots_in_worktree(worktree_root, member.root).map do |root|
1514
+ result = runner.call(
1515
+ member: member,
1516
+ phase: phase,
1517
+ command: ["mise", "trust", "-C", root],
1518
+ raw: true
1519
+ )
1520
+ result.member_name = original_member.name
1521
+ result
1522
+ end
1523
+ end
1524
+
1525
+ def mise_config_roots_in_worktree(worktree_root, member_root)
1526
+ root_path = Pathname.new(worktree_root).realpath
1527
+ member_path = Pathname.new(member_root).realpath
1528
+ return [] unless member_path.to_s.start_with?("#{root_path}#{File::SEPARATOR}") || member_path == root_path
1529
+
1530
+ current = member_path
1531
+ roots = []
1532
+ loop do
1533
+ roots << current.to_s if %w[mise.toml .mise.toml].any? { |name| File.file?(current.join(name)) }
1534
+ break if current == root_path
1535
+
1536
+ current = current.parent
1537
+ end
1538
+ roots.reverse
1539
+ rescue Errno::ENOENT
1540
+ []
1541
+ end
1542
+
1494
1543
  def template_branch_worktree_entries_results(entries)
1495
1544
  wave_jobs = template_jobs(entries)
1496
1545
  queue = Queue.new
@@ -2038,7 +2087,10 @@ module Kettle
2038
2087
  results << result
2039
2088
  break unless result.ok?
2040
2089
 
2041
- entries << {member: relocate_member_to_worktree(member, root, source_root: config.root), original_member: member, worktree_root: root}
2090
+ entry = {member: relocate_member_to_worktree(member, root, source_root: config.root), original_member: member, worktree_root: root}
2091
+ entries << entry
2092
+ results.concat(worktree_mise_trust_results(entry, runner: runner, phase: "release_worktree_mise_trust"))
2093
+ break unless results.last.ok?
2042
2094
  end
2043
2095
  [entries, results]
2044
2096
  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.90
4
+ version: 1.2.91
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -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.90
447
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.90/CHANGELOG.md
446
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.91
447
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.91/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.90
449
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.91
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