kettle-family 1.3.25 → 1.3.26
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 +14 -1
- data/README.md +1 -1
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +65 -18
- 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: 6cd05963542f86f54bc825842b8f73649a7520e61ddc695c505a6d19b3897581
|
|
4
|
+
data.tar.gz: c4fc9a81de19c42aa0265fa04d255dc4f40ddcd5485aff3eec57b44647a26ddd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 97f87951b90ef59a674a55678be2af49d853f874d221297f3dd8661311400997f5430b9dd9b9e4ce88b32c543baf0d60977b975602a2d01c54f3c0217442c495
|
|
7
|
+
data.tar.gz: d25120f0322dc957334262f218c07ad8be84669d3632ddcc33aecc7e4f9217407246489b3bcca24aae5e26a43618bc8be888fbba0a3278b8920f6985468be242
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,17 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.3.26] - 2026-10-20
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.3.26][1.3.26t]
|
|
36
|
+
- COVERAGE: 93.00% -- 7399/7956 lines in 44 files
|
|
37
|
+
- BRANCH COVERAGE: 77.40% -- 2962/3827 branches in 44 files
|
|
38
|
+
- 37.68% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Register template progress starts atomically with queue dispatch, and render progress rows in dependency-queue order.
|
|
43
|
+
|
|
33
44
|
## [1.3.25] - 2026-10-20
|
|
34
45
|
|
|
35
46
|
- TAG: [v1.3.25][1.3.25t]
|
|
@@ -3154,7 +3165,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
3154
3165
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
3155
3166
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
3156
3167
|
|
|
3157
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.3.
|
|
3168
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.3.26...HEAD
|
|
3169
|
+
[1.3.26]: https://github.com/kettle-dev/kettle-family/compare/v1.3.25...v1.3.26
|
|
3170
|
+
[1.3.26t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.3.26
|
|
3158
3171
|
[1.3.25]: https://github.com/kettle-dev/kettle-family/compare/v1.3.24...v1.3.25
|
|
3159
3172
|
[1.3.25t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.3.25
|
|
3160
3173
|
[1.3.24]: https://github.com/kettle-dev/kettle-family/compare/v1.3.23...v1.3.24
|
data/README.md
CHANGED
|
@@ -1225,7 +1225,7 @@ Thanks for RTFM. ☺️
|
|
|
1225
1225
|
[📌gitmoji]: https://gitmoji.dev
|
|
1226
1226
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1227
1227
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1228
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-7.
|
|
1228
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-7.956-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1229
1229
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
1230
1230
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1231
1231
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -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.3.
|
|
8
|
+
VERSION = "1.3.26"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -943,8 +943,9 @@ module Kettle
|
|
|
943
943
|
bootstrap_results = template_member_bootstrap_results(workflow_members)
|
|
944
944
|
return bootstrap_results unless bootstrap_results.all?(&:ok?)
|
|
945
945
|
|
|
946
|
-
|
|
947
|
-
|
|
946
|
+
template_waves = template_dependency_waves(workflow_members)
|
|
947
|
+
template_progress = start_template_progress(template_waves.flatten)
|
|
948
|
+
results = template_waves.each_with_object([]) do |wave, memo|
|
|
948
949
|
wave_results = template_results_for_wave(wave, progress: template_progress)
|
|
949
950
|
memo.concat(wave_results)
|
|
950
951
|
break memo unless wave_results.all?(&:ok?)
|
|
@@ -998,9 +999,21 @@ module Kettle
|
|
|
998
999
|
Array.new(wave_jobs) do
|
|
999
1000
|
Thread.new do # rubocop:disable ThreadSafety/NewThread -- family templating intentionally runs independent members concurrently.
|
|
1000
1001
|
loop do
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1002
|
+
assignment = mutex.synchronize do
|
|
1003
|
+
next if stop
|
|
1004
|
+
|
|
1005
|
+
begin
|
|
1006
|
+
index, member = queue.pop(true)
|
|
1007
|
+
start_template_member_progress(progress, member)
|
|
1008
|
+
[index, member]
|
|
1009
|
+
rescue ThreadError
|
|
1010
|
+
nil
|
|
1011
|
+
end
|
|
1012
|
+
end
|
|
1013
|
+
break unless assignment
|
|
1014
|
+
|
|
1015
|
+
index, member = assignment
|
|
1016
|
+
member_results = template_results_for_member(member, progress: progress, progress_started: true, wave_jobs: wave_jobs)
|
|
1004
1017
|
mutex.synchronize do
|
|
1005
1018
|
ordered_results[index] = member_results
|
|
1006
1019
|
stop = true unless member_results.all?(&:ok?)
|
|
@@ -1130,12 +1143,24 @@ module Kettle
|
|
|
1130
1143
|
Array.new(wave_jobs) do
|
|
1131
1144
|
Thread.new do # rubocop:disable ThreadSafety/NewThread -- detached worktrees isolate concurrent monorepo template members.
|
|
1132
1145
|
loop do
|
|
1133
|
-
|
|
1146
|
+
assignment = mutex.synchronize do
|
|
1147
|
+
next if stop
|
|
1148
|
+
|
|
1149
|
+
begin
|
|
1150
|
+
index, entry = queue.pop(true)
|
|
1151
|
+
start_template_member_progress(progress, entry.fetch(:member))
|
|
1152
|
+
[index, entry]
|
|
1153
|
+
rescue ThreadError
|
|
1154
|
+
nil
|
|
1155
|
+
end
|
|
1156
|
+
end
|
|
1157
|
+
break unless assignment
|
|
1134
1158
|
|
|
1135
|
-
index, entry =
|
|
1159
|
+
index, entry = assignment
|
|
1136
1160
|
member_results = template_results_for_member(
|
|
1137
1161
|
entry.fetch(:member),
|
|
1138
1162
|
progress: progress,
|
|
1163
|
+
progress_started: true,
|
|
1139
1164
|
commit_changes: false,
|
|
1140
1165
|
wave_jobs: wave_jobs
|
|
1141
1166
|
)
|
|
@@ -1486,15 +1511,10 @@ module Kettle
|
|
|
1486
1511
|
)
|
|
1487
1512
|
end
|
|
1488
1513
|
|
|
1489
|
-
def template_results_for_member(member, progress: nil, progress_key: nil, progress_label: nil, commit_changes: true, wave_jobs: 1)
|
|
1514
|
+
def template_results_for_member(member, progress: nil, progress_key: nil, progress_label: nil, progress_started: false, commit_changes: true, wave_jobs: 1)
|
|
1490
1515
|
progress_key ||= member.name
|
|
1491
1516
|
progress_label ||= member.name
|
|
1492
|
-
progress
|
|
1493
|
-
member,
|
|
1494
|
-
total: template_phase_total(member),
|
|
1495
|
-
status: template_initial_status(member),
|
|
1496
|
-
**template_progress_identity_options(member, progress_key, progress_label)
|
|
1497
|
-
)
|
|
1517
|
+
start_template_member_progress(progress, member, progress_key: progress_key, progress_label: progress_label) unless progress_started
|
|
1498
1518
|
runner = CommandRunner.new(execute: execute, accept: accept)
|
|
1499
1519
|
[].tap do |memo|
|
|
1500
1520
|
if config.normalize_lockfiles?
|
|
@@ -1769,9 +1789,26 @@ module Kettle
|
|
|
1769
1789
|
Array.new(wave_jobs) do
|
|
1770
1790
|
Thread.new do # rubocop:disable ThreadSafety/NewThread -- independent branch worktrees are safe to template concurrently.
|
|
1771
1791
|
loop do
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1792
|
+
assignment = mutex.synchronize do
|
|
1793
|
+
next if stop
|
|
1794
|
+
|
|
1795
|
+
begin
|
|
1796
|
+
index, entry = queue.pop(true)
|
|
1797
|
+
start_template_member_progress(
|
|
1798
|
+
progress,
|
|
1799
|
+
entry.fetch(:member),
|
|
1800
|
+
progress_key: template_branch_progress_key(entry),
|
|
1801
|
+
progress_label: template_branch_progress_label(entry)
|
|
1802
|
+
)
|
|
1803
|
+
[index, entry]
|
|
1804
|
+
rescue ThreadError
|
|
1805
|
+
nil
|
|
1806
|
+
end
|
|
1807
|
+
end
|
|
1808
|
+
break unless assignment
|
|
1809
|
+
|
|
1810
|
+
index, entry = assignment
|
|
1811
|
+
branch_results = template_branch_worktree_entry_results(entry, progress: progress, progress_started: true, wave_jobs: wave_jobs)
|
|
1775
1812
|
mutex.synchronize do
|
|
1776
1813
|
ordered_results[index] = branch_results
|
|
1777
1814
|
stop = true unless branch_results.all?(&:ok?)
|
|
@@ -1784,7 +1821,7 @@ module Kettle
|
|
|
1784
1821
|
results + ordered_results.compact.flatten
|
|
1785
1822
|
end
|
|
1786
1823
|
|
|
1787
|
-
def template_branch_worktree_entry_results(entry, progress: nil, wave_jobs: 1)
|
|
1824
|
+
def template_branch_worktree_entry_results(entry, progress: nil, progress_started: false, wave_jobs: 1)
|
|
1788
1825
|
member = entry.fetch(:member)
|
|
1789
1826
|
branch = entry.fetch(:branch)
|
|
1790
1827
|
# Bootstrap and upstream synchronization are deliberately performed
|
|
@@ -1795,6 +1832,7 @@ module Kettle
|
|
|
1795
1832
|
progress: progress,
|
|
1796
1833
|
progress_key: template_branch_progress_key(entry),
|
|
1797
1834
|
progress_label: template_branch_progress_label(entry),
|
|
1835
|
+
progress_started: progress_started,
|
|
1798
1836
|
wave_jobs: wave_jobs
|
|
1799
1837
|
)
|
|
1800
1838
|
tag_branch_results(results, branch)
|
|
@@ -4822,6 +4860,15 @@ module Kettle
|
|
|
4822
4860
|
progress
|
|
4823
4861
|
end
|
|
4824
4862
|
|
|
4863
|
+
def start_template_member_progress(progress, member, progress_key: member.name, progress_label: member.name)
|
|
4864
|
+
progress&.start_member(
|
|
4865
|
+
member,
|
|
4866
|
+
total: template_phase_total(member),
|
|
4867
|
+
status: template_initial_status(member),
|
|
4868
|
+
**template_progress_identity_options(member, progress_key, progress_label)
|
|
4869
|
+
)
|
|
4870
|
+
end
|
|
4871
|
+
|
|
4825
4872
|
def start_release_progress(release_members)
|
|
4826
4873
|
wave_numbers = release_waves(release_members).each_with_index.flat_map do |wave, index|
|
|
4827
4874
|
wave.map { |member| [member.name, index + 1] }
|
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.3.
|
|
4
|
+
version: 1.3.26
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -567,10 +567,10 @@ licenses:
|
|
|
567
567
|
- AGPL-3.0-only
|
|
568
568
|
metadata:
|
|
569
569
|
homepage_uri: https://kettle-family.galtzo.com
|
|
570
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.3.
|
|
571
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.3.
|
|
570
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.3.26
|
|
571
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.3.26/CHANGELOG.md
|
|
572
572
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
573
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.3.
|
|
573
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.3.26
|
|
574
574
|
funding_uri: https://github.com/sponsors/pboling
|
|
575
575
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
576
576
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
metadata.gz.sig
CHANGED
|
Binary file
|