kettle-family 1.2.97 → 1.2.98
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 +2 -1
- data/CHANGELOG.md +16 -1
- data/README.md +10 -1
- data/lib/kettle/family/execution_profile.rb +12 -0
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +36 -10
- 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: a170049375aa0330277e878596e92a61b58655a29ca9aeba1e9ab0006fa46c04
|
|
4
|
+
data.tar.gz: 5bfcd0c99c774fad470b8510188e6eaad700c2ca3157f64eb1a9b52ac320d6c6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c527202894d4bca3ada36684b9a7f3700052ebd53967ebb7ea7a65cc0db5cc20a5bf04eec6730f380a444fd69ed6828428fc29e16a1718371eab48eea0647601
|
|
7
|
+
data.tar.gz: b147945409bca869bf23ea6ab8773b7fc8fc6c7677ef877367d2970b3c73edb1efe628606c267de48f58af8cb4db761d527ce8df457b1fe6d4f729ae8c662229
|
checksums.yaml.gz.sig
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
\^˅���S�!�as�&�s������S�����������\���@�8@<��v+�@����(�T���'��l������@��q)~��*�`��o���AEXy�;EG˱�D�E��k�Vi�eL��}�@�5�4����u�mI4�ЍĊ6�� ���<�'�]d>&��;�Q�����G�ʪ��=�9>�
|
|
2
|
+
^;���@�� �P�"h"�C@�����Q��?
|
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.98] - 2026-09-09
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.98][1.2.98t]
|
|
36
|
+
- COVERAGE: 93.50% -- 6245/6679 lines in 35 files
|
|
37
|
+
- BRANCH COVERAGE: 78.08% -- 2529/3239 branches in 35 files
|
|
38
|
+
- 32.75% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Commit the final normalized Gemfile.lock after sibling and branch-worktree template runs.
|
|
43
|
+
|
|
44
|
+
- Bootstrap member releases from the family tool bundle before registry lockfile normalization.
|
|
45
|
+
|
|
33
46
|
## [1.2.97] - 2026-09-08
|
|
34
47
|
|
|
35
48
|
- TAG: [v1.2.97][1.2.97t]
|
|
@@ -2679,7 +2692,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2679
2692
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
2680
2693
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
2681
2694
|
|
|
2682
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
2695
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.98...HEAD
|
|
2696
|
+
[1.2.98]: https://github.com/kettle-dev/kettle-family/compare/v1.2.97...v1.2.98
|
|
2697
|
+
[1.2.98t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.98
|
|
2683
2698
|
[1.2.97]: https://github.com/kettle-dev/kettle-family/compare/v1.2.96...v1.2.97
|
|
2684
2699
|
[1.2.97t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.97
|
|
2685
2700
|
[1.2.96]: https://github.com/kettle-dev/kettle-family/compare/v1.2.95...v1.2.96
|
data/README.md
CHANGED
|
@@ -662,6 +662,15 @@ and leaves RubyGems MFA prompts interactive by default:
|
|
|
662
662
|
kettle-family release --publish --execute
|
|
663
663
|
```
|
|
664
664
|
|
|
665
|
+
Release uses two explicitly separate execution contexts. `release_bootstrap`
|
|
666
|
+
starts `kettle-release` from the family-root tool bundle, so a family can retain
|
|
667
|
+
its configured local sibling graph while it prepares a release wave. It never
|
|
668
|
+
uses a member's development Gemfile to boot the release tool. `release_registry`
|
|
669
|
+
then resets each tracked release lockfile against registry dependencies and is
|
|
670
|
+
also used by every project release child command. Local sibling paths therefore
|
|
671
|
+
remain available only before that transition; they cannot enter the canonical
|
|
672
|
+
lockfile, the release-preparation commit, or CI-facing project commands.
|
|
673
|
+
|
|
665
674
|
Use named recovery modes when a publish wave has already prepared a member:
|
|
666
675
|
|
|
667
676
|
```console
|
|
@@ -1171,7 +1180,7 @@ Thanks for RTFM. ☺️
|
|
|
1171
1180
|
[📌gitmoji]: https://gitmoji.dev
|
|
1172
1181
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1173
1182
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1174
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.
|
|
1183
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.679-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1175
1184
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
1176
1185
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1177
1186
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -40,6 +40,18 @@ module Kettle
|
|
|
40
40
|
host_platform_policy: :active_platform_must_resolve,
|
|
41
41
|
allowed_mutations: %i[template development_lockfiles generated]
|
|
42
42
|
),
|
|
43
|
+
# This profile only starts the release implementation from the family
|
|
44
|
+
# tool bundle. It is intentionally distinct from release_registry:
|
|
45
|
+
# canonical lockfile reset and all project release children use that
|
|
46
|
+
# registry-only profile after the tool has booted.
|
|
47
|
+
release_bootstrap: Definition.new(
|
|
48
|
+
name: :release_bootstrap,
|
|
49
|
+
path_gem_policy: :configured_siblings,
|
|
50
|
+
lockfile_role: :tool,
|
|
51
|
+
install_location: :family,
|
|
52
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
53
|
+
allowed_mutations: %i[release_tool_bootstrap]
|
|
54
|
+
),
|
|
43
55
|
release_registry: Definition.new(
|
|
44
56
|
name: :release_registry,
|
|
45
57
|
path_gem_policy: :registry_only,
|
|
@@ -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.98"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -1451,6 +1451,7 @@ module Kettle
|
|
|
1451
1451
|
normalize_lockfiles(member: member, runner: runner, memo: memo, phase: "normalize_lockfiles", commit_changes: commit_changes)
|
|
1452
1452
|
emit_member_result_progress(member, memo.last, progress: progress, progress_key: progress_key, progress_label: progress_label)
|
|
1453
1453
|
commit_template_changes(member: member, runner: runner, memo: memo) if commit_changes
|
|
1454
|
+
commit_template_normalized_gemfile_lock(member: member, runner: runner, memo: memo, commit_changes: commit_changes)
|
|
1454
1455
|
emit_member_result_progress(member, memo.last, progress: progress, progress_key: progress_key, progress_label: progress_label) if memo.last&.phase == "commit_template"
|
|
1455
1456
|
ensure
|
|
1456
1457
|
template_result = memo.find { |result| result.phase == "template" } || memo.last
|
|
@@ -3637,7 +3638,7 @@ module Kettle
|
|
|
3637
3638
|
# changelog may live at the family root. Pass the shared paths to the
|
|
3638
3639
|
# member release phase as well as to the separate family phase.
|
|
3639
3640
|
def release_env_for_member(member, family_root: config.root, wave_jobs: 1)
|
|
3640
|
-
env = release_env
|
|
3641
|
+
env = execution_profile(release_bootstrap_execution_profile, release_env)
|
|
3641
3642
|
env.merge!(release_wave_local_path_env_for(member, family_root: family_root))
|
|
3642
3643
|
env.merge!(release_local_path_policy_env(family_root: family_root))
|
|
3643
3644
|
# Family release performs one live pin review before member releases.
|
|
@@ -3703,15 +3704,15 @@ module Kettle
|
|
|
3703
3704
|
candidates.find { |path| File.file?(path) }
|
|
3704
3705
|
end
|
|
3705
3706
|
|
|
3706
|
-
# A member's development
|
|
3707
|
-
#
|
|
3708
|
-
#
|
|
3709
|
-
#
|
|
3710
|
-
#
|
|
3707
|
+
# A member's development Gemfile can contain a deliberately local family
|
|
3708
|
+
# graph that is not independently bootable after an earlier release wave
|
|
3709
|
+
# changes a sibling's dependency floor. Launch kettle-release from the
|
|
3710
|
+
# family tool bundle instead. The release tool still runs project commands
|
|
3711
|
+
# from the member checkout, where it first normalizes canonical lockfiles
|
|
3712
|
+
# with local paths disabled.
|
|
3711
3713
|
def release_tool_gemfile_path(local_kettle_dev)
|
|
3712
3714
|
local_kettle_dev_gemfile = local_kettle_dev_gemfile_path(local_kettle_dev)
|
|
3713
3715
|
return local_kettle_dev_gemfile if local_kettle_dev_gemfile
|
|
3714
|
-
return unless config.configured_monorepo_release?
|
|
3715
3716
|
|
|
3716
3717
|
family_gemfile = File.join(config.root, "Gemfile")
|
|
3717
3718
|
family_gemfile if File.file?(family_gemfile)
|
|
@@ -5319,6 +5320,23 @@ module Kettle
|
|
|
5319
5320
|
end
|
|
5320
5321
|
end
|
|
5321
5322
|
|
|
5323
|
+
# Kettle Jem commits its own changes for sibling repositories. The final
|
|
5324
|
+
# lockfile normalization therefore happens after that commit and needs a
|
|
5325
|
+
# separate, deliberately narrow cleanup commit. Monorepos defer the
|
|
5326
|
+
# template commit, which already includes the normalized lockfile.
|
|
5327
|
+
def commit_template_normalized_gemfile_lock(member:, runner:, memo:, commit_changes:)
|
|
5328
|
+
return unless execute && commit_changes && memo.all?
|
|
5329
|
+
return if deferred_monorepo_template_commit?(member)
|
|
5330
|
+
|
|
5331
|
+
commit_normalized_lockfiles(
|
|
5332
|
+
branch_members: [member],
|
|
5333
|
+
runner: runner,
|
|
5334
|
+
memo: memo,
|
|
5335
|
+
reason: "template",
|
|
5336
|
+
paths: ["Gemfile.lock"]
|
|
5337
|
+
)
|
|
5338
|
+
end
|
|
5339
|
+
|
|
5322
5340
|
def template_commit_message(member)
|
|
5323
5341
|
"🎨 Template #{member.name} by kettle-family"
|
|
5324
5342
|
end
|
|
@@ -5357,6 +5375,10 @@ module Kettle
|
|
|
5357
5375
|
ExecutionProfile.fetch(:template_local)
|
|
5358
5376
|
end
|
|
5359
5377
|
|
|
5378
|
+
def release_bootstrap_execution_profile
|
|
5379
|
+
ExecutionProfile.fetch(:release_bootstrap)
|
|
5380
|
+
end
|
|
5381
|
+
|
|
5360
5382
|
def release_lockfile_execution_profile
|
|
5361
5383
|
return ExecutionProfile.fetch(:release_recovery) if release_recovery?
|
|
5362
5384
|
return ExecutionProfile.fetch(:release_monorepo) if preserve_monorepo_template_context?
|
|
@@ -5375,7 +5397,7 @@ module Kettle
|
|
|
5375
5397
|
when :template_local
|
|
5376
5398
|
env["K_JEM_TEMPLATING"] = "true"
|
|
5377
5399
|
env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
|
|
5378
|
-
when :release_registry, :release_monorepo, :release_recovery
|
|
5400
|
+
when :release_bootstrap, :release_registry, :release_monorepo, :release_recovery
|
|
5379
5401
|
# Release profiles deliberately leave Bundler mutation decisions to
|
|
5380
5402
|
# kettle-dev. The profile selection controls which local-path
|
|
5381
5403
|
# overrides this workflow contributes below.
|
|
@@ -5588,10 +5610,14 @@ module Kettle
|
|
|
5588
5610
|
text.include?(File::SEPARATOR)
|
|
5589
5611
|
end
|
|
5590
5612
|
|
|
5591
|
-
def commit_normalized_lockfiles(branch_members:, runner:, memo:, reason: command, force: false)
|
|
5613
|
+
def commit_normalized_lockfiles(branch_members:, runner:, memo:, reason: command, force: false, paths: nil)
|
|
5592
5614
|
return unless commit
|
|
5593
5615
|
return unless force || commit_normalized_lockfiles?(reason)
|
|
5594
5616
|
|
|
5617
|
+
pathspecs = Array(paths).map { |path| Shellwords.escape(path) }
|
|
5618
|
+
pathspecs = ["Gemfile.lock", "'*.lock'", "'**/*.lock'"] if pathspecs.empty?
|
|
5619
|
+
pathspec = pathspecs.join(" ")
|
|
5620
|
+
|
|
5595
5621
|
branch_members.each do |member|
|
|
5596
5622
|
result = runner.call(
|
|
5597
5623
|
member: member,
|
|
@@ -5599,7 +5625,7 @@ module Kettle
|
|
|
5599
5625
|
command: [
|
|
5600
5626
|
"sh",
|
|
5601
5627
|
"-lc",
|
|
5602
|
-
"files=$(git ls-files --modified --others --exclude-standard --
|
|
5628
|
+
"files=$(git ls-files --modified --others --exclude-standard -- #{pathspec}); " \
|
|
5603
5629
|
"if [ -n \"$files\" ]; then printf '%s\\n' \"$files\" | xargs git add -- && git commit -m " \
|
|
5604
5630
|
"#{Shellwords.escape(normalized_lockfiles_commit_message(reason))}; fi"
|
|
5605
5631
|
]
|
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.98
|
|
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.
|
|
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.98
|
|
447
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.98/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.98
|
|
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
|