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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +18 -1
- data/README.md +1 -1
- data/lib/kettle/family/command_runner.rb +32 -1
- data/lib/kettle/family/dependency_floor.rb +18 -0
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +8 -5
- data.tar.gz.sig +0 -0
- metadata +6 -6
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8b8d7a476e1af0096eca0bc0870cd9a8623b2ad2ccdcfa5080ec184b5b561096
|
|
4
|
+
data.tar.gz: df5707cdac3c7838df5cbbc83731ffb7741dfe818e440a83d917792a1f4290b3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
2727
|
-
#
|
|
2728
|
-
#
|
|
2729
|
-
#
|
|
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 =
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
447
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
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.
|
|
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
|