kettle-family 1.2.94 → 1.2.95
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 +3 -6
- data/CHANGELOG.md +14 -1
- data/README.md +18 -1
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +54 -16
- 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: 9b482c620e7f5e341caead6b52476cc8dc26e56c5d0ecde281ca27f7aaacc3e3
|
|
4
|
+
data.tar.gz: 78c5c14ec0d5a90a34341650d010216e241fb4927983dff9507b66d9e9ccaf6d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 61ab40f1165dc584b786cf9e5f72005390aa786bcc2f6d0b1f4e9c172d566d8efd310625bac5a218312b221e5f8577071d699dc0eadaa6b1260cdb7ac4444736
|
|
7
|
+
data.tar.gz: f4097829a8ca4127f0a2a6dc4f53ea84886d14e68c9df2ec82db9319904482ba9d6f2339d087596b048419d7c63707462f5c38e45e8bf475149e295fc4479868
|
checksums.yaml.gz.sig
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
�{���>pp�L۹F|�^ҡ8��QS"����ch�m<�=Pn�P�qK
|
|
5
|
-
I�j��97���H ��f�V*�<�zۗ��H�>���f�.���rFi�c�e��6� ����MM�?�s��c������|���l}�����"���q1K�����j/Cx�8<0F�3$��6��"ā���{�md�Kǩ֫�¡!�8lr;
|
|
6
|
-
��ƿ�H4cXKXF5�[;@�v@Oz�
|
|
1
|
+
A(�#�-]Zf��(��ȯ�7ֺJ2Qf
|
|
2
|
+
�Mx'{UM:�F�롄�>�����q�!b�w��2ɤ8#+e*d>#�`NǚB��z��6�8|r�^@����߰���7���G������?�5*݆��.�s9� �y���D��eJ^�N�h����!O]k2ǯ8�/y T5�}Ϥ�'x�hHg�0�wHE$�~���h�Ť��a���I��W9u�.^J3���%-�YJ�ӓ�����>0����K36���4p
|
|
3
|
+
����U�1?ɔo(S�FC�
|
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.2.95] - 2026-09-07
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.95][1.2.95t]
|
|
36
|
+
- COVERAGE: 93.49% -- 6199/6631 lines in 35 files
|
|
37
|
+
- BRANCH COVERAGE: 78.03% -- 2515/3223 branches in 35 files
|
|
38
|
+
- 32.58% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Run release-target branch worktrees through the full template bootstrap workflow before member preparation.
|
|
43
|
+
|
|
33
44
|
## [1.2.94] - 2026-09-07
|
|
34
45
|
|
|
35
46
|
- TAG: [v1.2.94][1.2.94t]
|
|
@@ -2640,7 +2651,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2640
2651
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
2641
2652
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
2642
2653
|
|
|
2643
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
2654
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.95...HEAD
|
|
2655
|
+
[1.2.95]: https://github.com/kettle-dev/kettle-family/compare/v1.2.94...v1.2.95
|
|
2656
|
+
[1.2.95t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.95
|
|
2644
2657
|
[1.2.94]: https://github.com/kettle-dev/kettle-family/compare/v1.2.93...v1.2.94
|
|
2645
2658
|
[1.2.94t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.94
|
|
2646
2659
|
[1.2.93]: https://github.com/kettle-dev/kettle-family/compare/v1.2.92...v1.2.93
|
data/README.md
CHANGED
|
@@ -902,6 +902,23 @@ the template dependency graph. It must not invoke release-lockfile reset logic:
|
|
|
902
902
|
release normalization intentionally disables local paths, while template
|
|
903
903
|
recovery needs configured sibling paths to resolve unreleased family versions.
|
|
904
904
|
|
|
905
|
+
### Branch Worktree Equivalence
|
|
906
|
+
|
|
907
|
+
A release-target branch worktree is a separate checkout of the same template
|
|
908
|
+
member, not a reduced template workflow. Before its member template body runs,
|
|
909
|
+
it executes the same debugger, Appraisal, and Nomono bootstrap boundary as an
|
|
910
|
+
ordinary member. It then executes the same lockfile preparation, dependency
|
|
911
|
+
preparation and recovery, `kettle-jem` invocation, lockfile normalization, and
|
|
912
|
+
template commit path with the same `template_local` environment.
|
|
913
|
+
|
|
914
|
+
Only checkout mechanics differ: Family creates and trusts the linked worktree,
|
|
915
|
+
rebases that target branch on its own upstream when one exists, attaches the
|
|
916
|
+
branch name to the results, and removes the worktree after completion. These
|
|
917
|
+
steps are necessary because each target has a distinct Git ref and an absolute
|
|
918
|
+
`mise` configuration path. They do not change the dependency graph or omit a
|
|
919
|
+
template phase. Regression specs assert that branch worktrees call the shared
|
|
920
|
+
bootstrap boundary and cannot start a member template body when it fails.
|
|
921
|
+
|
|
905
922
|
## 🔐 Security
|
|
906
923
|
|
|
907
924
|
See [SECURITY.md][🔐security].
|
|
@@ -1154,7 +1171,7 @@ Thanks for RTFM. ☺️
|
|
|
1154
1171
|
[📌gitmoji]: https://gitmoji.dev
|
|
1155
1172
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1156
1173
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1157
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.
|
|
1174
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.631-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1158
1175
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
1159
1176
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1160
1177
|
[📄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.2.
|
|
8
|
+
VERSION = "1.2.95"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -932,14 +932,8 @@ module Kettle
|
|
|
932
932
|
end
|
|
933
933
|
|
|
934
934
|
def template_member_workflow_results(workflow_members)
|
|
935
|
-
|
|
936
|
-
return
|
|
937
|
-
|
|
938
|
-
appraisal_results = template_appraisal_bootstrap_results(workflow_members)
|
|
939
|
-
return debugger_results + appraisal_results unless appraisal_results.all?(&:ok?)
|
|
940
|
-
|
|
941
|
-
bootstrap_results = template_bootstrap_dependency_results(workflow_members)
|
|
942
|
-
return debugger_results + appraisal_results + bootstrap_results unless bootstrap_results.all?(&:ok?)
|
|
935
|
+
bootstrap_results = template_member_bootstrap_results(workflow_members)
|
|
936
|
+
return bootstrap_results unless bootstrap_results.all?(&:ok?)
|
|
943
937
|
|
|
944
938
|
template_progress = start_template_progress(workflow_members)
|
|
945
939
|
results = template_dependency_waves(workflow_members).each_with_object([]) do |wave, memo|
|
|
@@ -948,7 +942,22 @@ module Kettle
|
|
|
948
942
|
break memo unless wave_results.all?(&:ok?)
|
|
949
943
|
end
|
|
950
944
|
emit_template_progress_summary(results, progress: template_progress)
|
|
951
|
-
|
|
945
|
+
bootstrap_results + results
|
|
946
|
+
end
|
|
947
|
+
|
|
948
|
+
# This is the common preparation boundary for every template member,
|
|
949
|
+
# regardless of whether it runs in its primary checkout, a monorepo
|
|
950
|
+
# worktree, or a release-target branch worktree. Keep branch mechanics
|
|
951
|
+
# outside this method so they cannot silently omit a bootstrap phase.
|
|
952
|
+
def template_member_bootstrap_results(workflow_members)
|
|
953
|
+
debugger_results = template_debugger_bootstrap_results(workflow_members)
|
|
954
|
+
return debugger_results unless debugger_results.all?(&:ok?)
|
|
955
|
+
|
|
956
|
+
appraisal_results = template_appraisal_bootstrap_results(workflow_members)
|
|
957
|
+
return debugger_results + appraisal_results unless appraisal_results.all?(&:ok?)
|
|
958
|
+
|
|
959
|
+
bootstrap_results = template_bootstrap_dependency_results(workflow_members)
|
|
960
|
+
debugger_results + appraisal_results + bootstrap_results
|
|
952
961
|
end
|
|
953
962
|
|
|
954
963
|
def template_debugger_bootstrap_results(workflow_members)
|
|
@@ -1650,6 +1659,17 @@ module Kettle
|
|
|
1650
1659
|
end
|
|
1651
1660
|
|
|
1652
1661
|
def template_branch_worktree_entries_results(entries)
|
|
1662
|
+
results = template_branch_worktree_sync_results(entries)
|
|
1663
|
+
return results unless results.all?(&:ok?)
|
|
1664
|
+
|
|
1665
|
+
# A branch worktree is a different checkout, not a different template
|
|
1666
|
+
# profile. Run the exact same member bootstrap boundary used by normal
|
|
1667
|
+
# members before any branch begins its member template body.
|
|
1668
|
+
bootstrap_results = template_member_bootstrap_results(entries.map { |entry| entry.fetch(:member) })
|
|
1669
|
+
tag_template_worktree_results(bootstrap_results, entries)
|
|
1670
|
+
results.concat(bootstrap_results)
|
|
1671
|
+
return results unless bootstrap_results.all?(&:ok?)
|
|
1672
|
+
|
|
1653
1673
|
wave_jobs = template_jobs(entries)
|
|
1654
1674
|
queue = Queue.new
|
|
1655
1675
|
entries.each_with_index { |entry, index| queue << [index, entry] }
|
|
@@ -1671,23 +1691,41 @@ module Kettle
|
|
|
1671
1691
|
end
|
|
1672
1692
|
end
|
|
1673
1693
|
end.each(&:join)
|
|
1674
|
-
ordered_results.compact.flatten
|
|
1694
|
+
results + ordered_results.compact.flatten
|
|
1675
1695
|
end
|
|
1676
1696
|
|
|
1677
1697
|
def template_branch_worktree_entry_results(entry, wave_jobs: 1)
|
|
1678
1698
|
member = entry.fetch(:member)
|
|
1679
1699
|
branch = entry.fetch(:branch)
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
end
|
|
1685
|
-
results.concat(template_results_for_member(member, wave_jobs: wave_jobs)) if results.all?(&:ok?)
|
|
1700
|
+
# Bootstrap and upstream synchronization are deliberately performed
|
|
1701
|
+
# for the complete branch set before workers start. The member body is
|
|
1702
|
+
# the same method normal template waves invoke.
|
|
1703
|
+
results = template_results_for_member(member, wave_jobs: wave_jobs)
|
|
1686
1704
|
tag_branch_results(results, branch)
|
|
1687
1705
|
emit_template_event_line(member, results.all?(&:ok?) ? "." : "F", "branch #{branch}")
|
|
1688
1706
|
results
|
|
1689
1707
|
end
|
|
1690
1708
|
|
|
1709
|
+
def template_branch_worktree_sync_results(entries)
|
|
1710
|
+
runner = command_runner
|
|
1711
|
+
entries.filter_map do |entry|
|
|
1712
|
+
member = entry.fetch(:member)
|
|
1713
|
+
upstream = git_upstream_for(member)
|
|
1714
|
+
next unless upstream
|
|
1715
|
+
|
|
1716
|
+
result = runner.call(member: member, phase: "template_branch_sync", command: ["git", "rebase", "@{upstream}"])
|
|
1717
|
+
result.branch = entry.fetch(:branch)
|
|
1718
|
+
result
|
|
1719
|
+
end
|
|
1720
|
+
end
|
|
1721
|
+
|
|
1722
|
+
def tag_template_worktree_results(results, entries)
|
|
1723
|
+
branches_by_root = entries.to_h { |entry| [File.expand_path(entry.fetch(:member).root), entry.fetch(:branch)] }
|
|
1724
|
+
results.each do |result|
|
|
1725
|
+
result.branch = branches_by_root[File.expand_path(result.workdir)] if result.workdir
|
|
1726
|
+
end
|
|
1727
|
+
end
|
|
1728
|
+
|
|
1691
1729
|
def template_branch_worktree_cleanup_results(entries, runner:, control_member:)
|
|
1692
1730
|
entries.filter_map do |entry|
|
|
1693
1731
|
worktree_root = entry[:worktree_root]
|
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.95
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -91,7 +91,7 @@ dependencies:
|
|
|
91
91
|
requirements:
|
|
92
92
|
- - ">="
|
|
93
93
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: 3.0.
|
|
94
|
+
version: 3.0.32
|
|
95
95
|
- - "<"
|
|
96
96
|
- !ruby/object:Gem::Version
|
|
97
97
|
version: 4.0.0
|
|
@@ -101,7 +101,7 @@ dependencies:
|
|
|
101
101
|
requirements:
|
|
102
102
|
- - ">="
|
|
103
103
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: 3.0.
|
|
104
|
+
version: 3.0.32
|
|
105
105
|
- - "<"
|
|
106
106
|
- !ruby/object:Gem::Version
|
|
107
107
|
version: 4.0.0
|
|
@@ -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.95
|
|
447
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.95/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.95
|
|
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
|