kettle-family 0.1.9 → 0.1.10
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 +16 -1
- data/README.md +1 -1
- data/lib/kettle/family/cli.rb +19 -0
- data/lib/kettle/family/report.rb +14 -2
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +65 -0
- data.tar.gz.sig +0 -0
- metadata +4 -4
- 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: 703c624ada4b7494a0a038c8a1e909c45a09b3172b581a81863f12eec6f747ce
|
|
4
|
+
data.tar.gz: 7a71da9d94bd1945ccb091d16b6b0f6b537ff33ad00f6b42805e82cbf443a25e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2eceaf1a932d83e3d2ca0c4f6498fed8232735702d6454043521df1e9df48d18d92495adb3827b1fa2e5632126a64dfaabb4bcad9a01922d0eb226d8cb845161
|
|
7
|
+
data.tar.gz: a7f8a0e30d55c3d7b75dfaed30e03ec0ba30fbc74ea6f09d321a7355ac998a4fcaa9947d4a66028ab59a06ed8a348d468ec835cb71f18ba2652c09d4f4b31b87
|
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
|
+
## [0.1.10] - 2026-06-23
|
|
34
|
+
|
|
35
|
+
- TAG: [v0.1.10][0.1.10t]
|
|
36
|
+
- COVERAGE: 94.34% -- 1300/1378 lines in 20 files
|
|
37
|
+
- BRANCH COVERAGE: 75.92% -- 432/569 branches in 20 files
|
|
38
|
+
- 40.14% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Workflow commands now honor member-local `.kettle-family.yml` release target
|
|
43
|
+
branches when the active family root has no branch stack, and reports list
|
|
44
|
+
those member-local branch targets.
|
|
45
|
+
|
|
33
46
|
## [0.1.9] - 2026-06-23
|
|
34
47
|
|
|
35
48
|
- TAG: [v0.1.9][0.1.9t]
|
|
@@ -240,7 +253,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
240
253
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
241
254
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
242
255
|
|
|
243
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v0.1.
|
|
256
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v0.1.10...HEAD
|
|
257
|
+
[0.1.10]: https://github.com/kettle-dev/kettle-family/compare/v0.1.9...v0.1.10
|
|
258
|
+
[0.1.10t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.1.10
|
|
244
259
|
[0.1.9]: https://github.com/kettle-dev/kettle-family/compare/v0.1.8...v0.1.9
|
|
245
260
|
[0.1.9t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.1.9
|
|
246
261
|
[0.1.8]: https://github.com/kettle-dev/kettle-family/compare/v0.1.7...v0.1.8
|
data/README.md
CHANGED
|
@@ -562,7 +562,7 @@ Thanks for RTFM. ☺️
|
|
|
562
562
|
[📌gitmoji]: https://gitmoji.dev
|
|
563
563
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
564
564
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
565
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-1.
|
|
565
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-1.378-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
566
566
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
567
567
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
568
568
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
data/lib/kettle/family/cli.rb
CHANGED
|
@@ -176,6 +176,7 @@ module Kettle
|
|
|
176
176
|
config_path: config.path,
|
|
177
177
|
branch_lanes: config.branch_lanes,
|
|
178
178
|
release_target_branches: config.release_target_branches,
|
|
179
|
+
member_release_target_branches: member_release_target_branches(members: selected, config: config),
|
|
179
180
|
command: command,
|
|
180
181
|
results: results
|
|
181
182
|
)
|
|
@@ -331,6 +332,24 @@ module Kettle
|
|
|
331
332
|
ReleaseStateCheck.new(config: config, members: members).results
|
|
332
333
|
end
|
|
333
334
|
|
|
335
|
+
def member_release_target_branches(members:, config:)
|
|
336
|
+
members.each_with_object({}) do |member, memo|
|
|
337
|
+
member_config = member_local_release_config(member: member, config: config)
|
|
338
|
+
memo[member.name] = member_config.release_target_branches if member_config
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
def member_local_release_config(member:, config:)
|
|
343
|
+
member_config = Config.load(root: member.root)
|
|
344
|
+
return unless member_config.path
|
|
345
|
+
return if config.path && File.realpath(member_config.path) == File.realpath(config.path)
|
|
346
|
+
return if member_config.release_target_branches.empty?
|
|
347
|
+
|
|
348
|
+
member_config
|
|
349
|
+
rescue Errno::ENOENT
|
|
350
|
+
nil
|
|
351
|
+
end
|
|
352
|
+
|
|
334
353
|
def install_order(members, config)
|
|
335
354
|
by_name = members.to_h { |member| [member.name, member] }
|
|
336
355
|
hinted = config.order_hints.filter_map { |name| by_name[name] }
|
data/lib/kettle/family/report.rb
CHANGED
|
@@ -5,9 +5,9 @@ require "json"
|
|
|
5
5
|
module Kettle
|
|
6
6
|
module Family
|
|
7
7
|
class Report
|
|
8
|
-
attr_reader :family_name, :family_mode, :order_mode, :members, :selected_members, :config_path, :command, :results, :branch_lanes, :release_target_branches
|
|
8
|
+
attr_reader :family_name, :family_mode, :order_mode, :members, :selected_members, :config_path, :command, :results, :branch_lanes, :release_target_branches, :member_release_target_branches
|
|
9
9
|
|
|
10
|
-
def initialize(family_name:, order_mode:, members:, selected_members:, config_path:, family_mode: nil, branch_lanes: {}, release_target_branches: [], command: nil, results: [])
|
|
10
|
+
def initialize(family_name:, order_mode:, members:, selected_members:, config_path:, family_mode: nil, branch_lanes: {}, release_target_branches: [], member_release_target_branches: {}, command: nil, results: [])
|
|
11
11
|
@family_name = family_name
|
|
12
12
|
@family_mode = family_mode
|
|
13
13
|
@order_mode = order_mode
|
|
@@ -18,6 +18,7 @@ module Kettle
|
|
|
18
18
|
@results = results
|
|
19
19
|
@branch_lanes = branch_lanes
|
|
20
20
|
@release_target_branches = release_target_branches
|
|
21
|
+
@member_release_target_branches = member_release_target_branches
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
def to_h
|
|
@@ -30,6 +31,7 @@ module Kettle
|
|
|
30
31
|
"selected_members" => selected_members.map(&:name),
|
|
31
32
|
"branch_lanes" => branch_lanes,
|
|
32
33
|
"release_target_branches" => release_target_branches,
|
|
34
|
+
"member_release_target_branches" => member_release_target_branches,
|
|
33
35
|
"command" => command,
|
|
34
36
|
"results" => results.map(&:to_h),
|
|
35
37
|
"resume_hint" => resume_hint
|
|
@@ -47,6 +49,7 @@ module Kettle
|
|
|
47
49
|
lines << "order: #{order_mode}"
|
|
48
50
|
lines << "command: #{command}" if command
|
|
49
51
|
lines << "release targets: #{release_target_branches.join(", ")}" unless release_target_branches.empty?
|
|
52
|
+
append_member_release_targets(lines)
|
|
50
53
|
lines << "members:"
|
|
51
54
|
selected_names = selected_members.map(&:name)
|
|
52
55
|
members.each do |member|
|
|
@@ -77,6 +80,15 @@ module Kettle
|
|
|
77
80
|
end
|
|
78
81
|
end
|
|
79
82
|
|
|
83
|
+
def append_member_release_targets(lines)
|
|
84
|
+
return if member_release_target_branches.empty?
|
|
85
|
+
|
|
86
|
+
lines << "member release targets:"
|
|
87
|
+
member_release_target_branches.each do |member_name, branches|
|
|
88
|
+
lines << " #{member_name}: #{branches.join(", ")}"
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
80
92
|
def result_state(result)
|
|
81
93
|
return "skipped" if result.skipped
|
|
82
94
|
return "ok" if result.success
|
|
@@ -35,6 +35,7 @@ module Kettle
|
|
|
35
35
|
def results
|
|
36
36
|
prompt_for_gem_signing_password if command == "release" && execute && publish && gem_signing_required?
|
|
37
37
|
return branch_target_results unless config.release_target_branches.empty?
|
|
38
|
+
return member_local_branch_target_results if member_local_branch_targets?
|
|
38
39
|
|
|
39
40
|
current_branch_results(members)
|
|
40
41
|
end
|
|
@@ -88,6 +89,55 @@ module Kettle
|
|
|
88
89
|
end
|
|
89
90
|
end
|
|
90
91
|
|
|
92
|
+
def member_local_branch_target_results
|
|
93
|
+
return release_member_local_branch_target_results if command == "release"
|
|
94
|
+
|
|
95
|
+
members.each_with_object([]) do |member, memo|
|
|
96
|
+
member_config = member_local_release_config(member)
|
|
97
|
+
if member_config
|
|
98
|
+
memo.concat(member_local_workflow(member: member, member_config: member_config).results)
|
|
99
|
+
else
|
|
100
|
+
memo.concat(current_branch_results([member]))
|
|
101
|
+
end
|
|
102
|
+
break memo unless memo.last&.ok?
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def release_member_local_branch_target_results
|
|
107
|
+
runner = command_runner
|
|
108
|
+
results = []
|
|
109
|
+
append_family_changelog_result(runner: runner, memo: results)
|
|
110
|
+
return results unless results.all?(&:ok?)
|
|
111
|
+
|
|
112
|
+
members.each_with_object(results) do |member, memo|
|
|
113
|
+
member_config = member_local_release_config(member)
|
|
114
|
+
if member_config
|
|
115
|
+
memo.concat(member_local_workflow(member: member, member_config: member_config).results)
|
|
116
|
+
else
|
|
117
|
+
memo.concat(release_member_results([member], include_family_changelog: false))
|
|
118
|
+
end
|
|
119
|
+
break memo unless memo.last&.ok?
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def member_local_workflow(member:, member_config:)
|
|
124
|
+
self.class.new(
|
|
125
|
+
command: command,
|
|
126
|
+
config: member_config,
|
|
127
|
+
members: [member],
|
|
128
|
+
execute: execute,
|
|
129
|
+
commit: commit,
|
|
130
|
+
allow_dirty: allow_dirty,
|
|
131
|
+
publish: publish,
|
|
132
|
+
push: push,
|
|
133
|
+
tag: tag,
|
|
134
|
+
start_step: start_step,
|
|
135
|
+
local_ci: local_ci,
|
|
136
|
+
continue_ci_failures: continue_ci_failures,
|
|
137
|
+
env_overrides: env_overrides
|
|
138
|
+
)
|
|
139
|
+
end
|
|
140
|
+
|
|
91
141
|
def release_member_results(release_members, include_family_changelog: false)
|
|
92
142
|
runner = command_runner
|
|
93
143
|
results = []
|
|
@@ -127,6 +177,21 @@ module Kettle
|
|
|
127
177
|
ordered.select { |member| selected_names.include?(member.name) }
|
|
128
178
|
end
|
|
129
179
|
|
|
180
|
+
def member_local_branch_targets?
|
|
181
|
+
members.any? { |member| member_local_release_config(member) }
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def member_local_release_config(member)
|
|
185
|
+
member_config = Config.load(root: member.root)
|
|
186
|
+
return unless member_config.path
|
|
187
|
+
return if config.path && File.realpath(member_config.path) == File.realpath(config.path)
|
|
188
|
+
return if member_config.release_target_branches.empty?
|
|
189
|
+
|
|
190
|
+
member_config
|
|
191
|
+
rescue Errno::ENOENT
|
|
192
|
+
nil
|
|
193
|
+
end
|
|
194
|
+
|
|
130
195
|
def checkout_branch_result(branch:, runner:)
|
|
131
196
|
runner.call(
|
|
132
197
|
member: family_member,
|
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.1.
|
|
4
|
+
version: 0.1.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -309,10 +309,10 @@ licenses:
|
|
|
309
309
|
- AGPL-3.0-only
|
|
310
310
|
metadata:
|
|
311
311
|
homepage_uri: https://kettle-family.galtzo.com
|
|
312
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.1.
|
|
313
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.1.
|
|
312
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.1.10
|
|
313
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.1.10/CHANGELOG.md
|
|
314
314
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
315
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.1.
|
|
315
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.1.10
|
|
316
316
|
funding_uri: https://github.com/sponsors/pboling
|
|
317
317
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
318
318
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
metadata.gz.sig
CHANGED
|
Binary file
|