kettle-family 1.2.85 → 1.2.86
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 +12 -3
- data/lib/kettle/family/execution_profile.rb +76 -0
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +44 -17
- data/lib/kettle/family.rb +1 -0
- data.tar.gz.sig +0 -0
- metadata +7 -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: 21a652aea8226a4e77e30eec15208ab8337acb1c588828c2513d74b73d83186b
|
|
4
|
+
data.tar.gz: fe8cefdd96d256b3a0c08db1eab5ff75c03a2afe7f70d1a8ca3778d9b1609444
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 491966653b36eb913a447b028de8f68dc7bf3f9e8291bea3205d95083d7d7173fe310eb8f81f456793a7f4f86650229ac2b940ef6f29bb0a7620c949c6444dbd
|
|
7
|
+
data.tar.gz: 98e477f02f7d1d7dbfd142108430061d11061e215702544cb304e0a126403ec2fc15aa41f89b0431436cfe6b0c53c1dcc7eb60239805d8a0d4c384bd2558985d
|
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.86] - 2026-09-06
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.86][1.2.86t]
|
|
36
|
+
- COVERAGE: 93.09% -- 5805/6236 lines in 34 files
|
|
37
|
+
- BRANCH COVERAGE: 76.16% -- 2354/3091 branches in 34 files
|
|
38
|
+
- 31.88% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Recover template lockfiles in the configured local dependency graph instead of release normalization mode.
|
|
43
|
+
|
|
44
|
+
- Use the templating dependency graph during initial template lockfile preparation.
|
|
45
|
+
|
|
46
|
+
- Define execution profiles and add real Bundler compatibility scenarios for template and release lockfile isolation.
|
|
47
|
+
|
|
33
48
|
## [1.2.85] - 2026-09-06
|
|
34
49
|
|
|
35
50
|
- TAG: [v1.2.85][1.2.85t]
|
|
@@ -2523,7 +2538,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2523
2538
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
2524
2539
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
2525
2540
|
|
|
2526
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
2541
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.86...HEAD
|
|
2542
|
+
[1.2.86]: https://github.com/kettle-dev/kettle-family/compare/v1.2.85...v1.2.86
|
|
2543
|
+
[1.2.86t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.86
|
|
2527
2544
|
[1.2.85]: https://github.com/kettle-dev/kettle-family/compare/v1.2.84...v1.2.85
|
|
2528
2545
|
[1.2.85t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.85
|
|
2529
2546
|
[1.2.84]: https://github.com/kettle-dev/kettle-family/compare/v1.2.83...v1.2.84
|
data/README.md
CHANGED
|
@@ -799,9 +799,13 @@ kettle-family template --execute \
|
|
|
799
799
|
|
|
800
800
|
### Template Bootstrap Environment
|
|
801
801
|
|
|
802
|
+
The complete path-gem, lockfile, install, platform, and mutation policy is
|
|
803
|
+
defined in [Execution Profiles](EXECUTION_PROFILES.md). The rules below are
|
|
804
|
+
the template-local portion of that policy.
|
|
805
|
+
|
|
802
806
|
Before invoking `kettle-jem`, `kettle-family template` may refresh `nomono` so
|
|
803
|
-
the member Gemfile can activate its generated local dependency wiring.
|
|
804
|
-
bootstrap
|
|
807
|
+
the member Gemfile can activate its generated local dependency wiring. Both
|
|
808
|
+
bootstrap and lockfile preparation use the same development dependency graph:
|
|
805
809
|
|
|
806
810
|
- `K_JEM_TEMPLATING=true` is enforced. It selects the templating Gemfile graph
|
|
807
811
|
and activates generated local sibling closures. It is not a release-lockfile
|
|
@@ -820,6 +824,11 @@ bootstrap uses the same development dependency graph as template preparation:
|
|
|
820
824
|
Release lockfile normalization is a separate operation with its own local-path
|
|
821
825
|
policy; it must not be inferred from template bootstrap settings.
|
|
822
826
|
|
|
827
|
+
If template lockfile preparation needs a recovery update, that retry also uses
|
|
828
|
+
the template dependency graph. It must not invoke release-lockfile reset logic:
|
|
829
|
+
release normalization intentionally disables local paths, while template
|
|
830
|
+
recovery needs configured sibling paths to resolve unreleased family versions.
|
|
831
|
+
|
|
823
832
|
## 🔐 Security
|
|
824
833
|
|
|
825
834
|
See [SECURITY.md][🔐security].
|
|
@@ -1072,7 +1081,7 @@ Thanks for RTFM. ☺️
|
|
|
1072
1081
|
[📌gitmoji]: https://gitmoji.dev
|
|
1073
1082
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1074
1083
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1075
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.
|
|
1084
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.236-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1076
1085
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
1077
1086
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1078
1087
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Kettle
|
|
4
|
+
module Family
|
|
5
|
+
# The execution context is a compatibility boundary, not a collection of
|
|
6
|
+
# incidental ENV assignments. Each workflow command selects one profile so
|
|
7
|
+
# path-gem, lockfile, install, and mutation rules remain reviewable.
|
|
8
|
+
class ExecutionProfile
|
|
9
|
+
Definition = Struct.new(
|
|
10
|
+
:name,
|
|
11
|
+
:path_gem_policy,
|
|
12
|
+
:lockfile_role,
|
|
13
|
+
:install_location,
|
|
14
|
+
:host_platform_policy,
|
|
15
|
+
:allowed_mutations
|
|
16
|
+
) do
|
|
17
|
+
def local_path_gems?
|
|
18
|
+
path_gem_policy != :registry_only
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def canonical_lockfile?
|
|
22
|
+
lockfile_role == :canonical
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
DEFINITIONS = {
|
|
27
|
+
development_local: Definition.new(
|
|
28
|
+
name: :development_local,
|
|
29
|
+
path_gem_policy: :configured_siblings,
|
|
30
|
+
lockfile_role: :canonical,
|
|
31
|
+
install_location: :member,
|
|
32
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
33
|
+
allowed_mutations: %i[development_lockfiles source test]
|
|
34
|
+
),
|
|
35
|
+
template_local: Definition.new(
|
|
36
|
+
name: :template_local,
|
|
37
|
+
path_gem_policy: :configured_siblings,
|
|
38
|
+
lockfile_role: :canonical,
|
|
39
|
+
install_location: :member,
|
|
40
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
41
|
+
allowed_mutations: %i[template development_lockfiles generated]
|
|
42
|
+
),
|
|
43
|
+
release_registry: Definition.new(
|
|
44
|
+
name: :release_registry,
|
|
45
|
+
path_gem_policy: :registry_only,
|
|
46
|
+
lockfile_role: :canonical,
|
|
47
|
+
install_location: :disposable,
|
|
48
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
49
|
+
allowed_mutations: %i[canonical_release_lockfiles]
|
|
50
|
+
),
|
|
51
|
+
release_monorepo: Definition.new(
|
|
52
|
+
name: :release_monorepo,
|
|
53
|
+
path_gem_policy: :configured_release_wave,
|
|
54
|
+
lockfile_role: :canonical,
|
|
55
|
+
install_location: :disposable,
|
|
56
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
57
|
+
allowed_mutations: %i[canonical_release_lockfiles configured_wave_paths]
|
|
58
|
+
),
|
|
59
|
+
release_recovery: Definition.new(
|
|
60
|
+
name: :release_recovery,
|
|
61
|
+
path_gem_policy: :configured_release_wave,
|
|
62
|
+
lockfile_role: :canonical,
|
|
63
|
+
install_location: :disposable,
|
|
64
|
+
host_platform_policy: :active_platform_must_resolve,
|
|
65
|
+
allowed_mutations: %i[canonical_release_lockfiles configured_wave_paths]
|
|
66
|
+
)
|
|
67
|
+
}.each_value(&:freeze).freeze
|
|
68
|
+
|
|
69
|
+
def self.fetch(name)
|
|
70
|
+
DEFINITIONS.fetch(name.to_sym)
|
|
71
|
+
rescue KeyError
|
|
72
|
+
raise ArgumentError, "unknown execution profile: #{name.inspect}"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -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.86"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -833,8 +833,6 @@ module Kettle
|
|
|
833
833
|
# available only for an explicit, known optional-dependency constraint
|
|
834
834
|
# conflict; it is not a general solution for local-path resolution.
|
|
835
835
|
env["KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY"] = template_bootstrap_changelog_dependency_setting
|
|
836
|
-
env["K_JEM_TEMPLATING"] = "true"
|
|
837
|
-
env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
|
|
838
836
|
env
|
|
839
837
|
end
|
|
840
838
|
|
|
@@ -4386,13 +4384,13 @@ module Kettle
|
|
|
4386
4384
|
end
|
|
4387
4385
|
|
|
4388
4386
|
def recover_template_lockfiles(member:, runner:, memo:, phase:)
|
|
4389
|
-
|
|
4387
|
+
result = runner.call(
|
|
4390
4388
|
member: member,
|
|
4391
|
-
runner: runner,
|
|
4392
|
-
memo: memo,
|
|
4393
4389
|
phase: phase,
|
|
4394
|
-
|
|
4390
|
+
command: normalize_lockfiles_command(member: member, phase: "prepare_lockfiles"),
|
|
4391
|
+
env: template_lockfile_recovery_env
|
|
4395
4392
|
)
|
|
4393
|
+
memo << result
|
|
4396
4394
|
return unless memo.last&.ok?
|
|
4397
4395
|
|
|
4398
4396
|
commit_normalized_lockfiles(
|
|
@@ -4417,15 +4415,11 @@ module Kettle
|
|
|
4417
4415
|
[result.stdout, result.stderr].join("\n").match?(/Unknown switches? .*--add-checksums/)
|
|
4418
4416
|
end
|
|
4419
4417
|
|
|
4420
|
-
def template_lockfile_recovery_env(
|
|
4421
|
-
|
|
4422
|
-
|
|
4423
|
-
|
|
4424
|
-
|
|
4425
|
-
env.merge!(env_overrides)
|
|
4426
|
-
env["K_JEM_TEMPLATING"] = "false"
|
|
4427
|
-
env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
|
|
4428
|
-
env
|
|
4418
|
+
def template_lockfile_recovery_env(_member = nil)
|
|
4419
|
+
# A failed template preparation can be caused by an unreleased sibling
|
|
4420
|
+
# version. Recover in the template graph, not the release graph, so
|
|
4421
|
+
# Bundler uses the configured monorepo paths.
|
|
4422
|
+
execution_profile(template_execution_profile, workflow_env)
|
|
4429
4423
|
end
|
|
4430
4424
|
|
|
4431
4425
|
def normalize_lockfiles_command(member:, phase:, skip_checksum_option: false)
|
|
@@ -4631,7 +4625,37 @@ module Kettle
|
|
|
4631
4625
|
# Templating is development work. It must resolve the configured
|
|
4632
4626
|
# family graph exactly as template application does; release-only
|
|
4633
4627
|
# lockfile cleanup owns disabling local path sources.
|
|
4634
|
-
workflow_env
|
|
4628
|
+
execution_profile(template_execution_profile, workflow_env)
|
|
4629
|
+
end
|
|
4630
|
+
|
|
4631
|
+
def template_execution_profile
|
|
4632
|
+
ExecutionProfile.fetch(:template_local)
|
|
4633
|
+
end
|
|
4634
|
+
|
|
4635
|
+
def release_lockfile_execution_profile
|
|
4636
|
+
return ExecutionProfile.fetch(:release_recovery) if release_recovery?
|
|
4637
|
+
return ExecutionProfile.fetch(:release_monorepo) if preserve_monorepo_template_context?
|
|
4638
|
+
|
|
4639
|
+
ExecutionProfile.fetch(:release_registry)
|
|
4640
|
+
end
|
|
4641
|
+
|
|
4642
|
+
def release_recovery?
|
|
4643
|
+
!start_step.nil? || !skip_steps.to_s.empty? || fast_recovery || skip_ci
|
|
4644
|
+
end
|
|
4645
|
+
|
|
4646
|
+
def execution_profile(profile, env)
|
|
4647
|
+
profile = ExecutionProfile.fetch(profile) unless profile.is_a?(ExecutionProfile::Definition)
|
|
4648
|
+
env = env.dup
|
|
4649
|
+
case profile.name
|
|
4650
|
+
when :template_local
|
|
4651
|
+
env["K_JEM_TEMPLATING"] = "true"
|
|
4652
|
+
env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
|
|
4653
|
+
when :release_registry, :release_monorepo, :release_recovery
|
|
4654
|
+
# Release profiles deliberately leave Bundler mutation decisions to
|
|
4655
|
+
# kettle-dev. The profile selection controls which local-path
|
|
4656
|
+
# overrides this workflow contributes below.
|
|
4657
|
+
end
|
|
4658
|
+
env
|
|
4635
4659
|
end
|
|
4636
4660
|
|
|
4637
4661
|
def local_path_env_requested?(name)
|
|
@@ -4685,10 +4709,13 @@ module Kettle
|
|
|
4685
4709
|
end
|
|
4686
4710
|
|
|
4687
4711
|
def release_lockfile_env(member = nil)
|
|
4688
|
-
|
|
4712
|
+
execution_profile(
|
|
4713
|
+
release_lockfile_execution_profile,
|
|
4714
|
+
base_release_env
|
|
4689
4715
|
.merge(release_lockfile_bundler_env_resets)
|
|
4690
4716
|
.merge(env_overrides)
|
|
4691
4717
|
.merge(release_lockfile_local_path_env_overrides(member))
|
|
4718
|
+
)
|
|
4692
4719
|
end
|
|
4693
4720
|
|
|
4694
4721
|
def release_lockfile_bundler_env_resets
|
data/lib/kettle/family.rb
CHANGED
|
@@ -21,6 +21,7 @@ require_relative "family/nomono_bootstrap"
|
|
|
21
21
|
require_relative "family/debugger_bootstrap"
|
|
22
22
|
require_relative "family/appraisal_bootstrap"
|
|
23
23
|
require_relative "family/release_waves"
|
|
24
|
+
require_relative "family/execution_profile"
|
|
24
25
|
require_relative "family/workflow"
|
|
25
26
|
require_relative "family/discovery"
|
|
26
27
|
require_relative "family/orderer"
|
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.86
|
|
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.31
|
|
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.31
|
|
105
105
|
- - "<"
|
|
106
106
|
- !ruby/object:Gem::Version
|
|
107
107
|
version: 4.0.0
|
|
@@ -414,6 +414,7 @@ files:
|
|
|
414
414
|
- lib/kettle/family/debugger_bootstrap.rb
|
|
415
415
|
- lib/kettle/family/dependency_floor.rb
|
|
416
416
|
- lib/kettle/family/discovery.rb
|
|
417
|
+
- lib/kettle/family/execution_profile.rb
|
|
417
418
|
- lib/kettle/family/git_status.rb
|
|
418
419
|
- lib/kettle/family/local_install.rb
|
|
419
420
|
- lib/kettle/family/member.rb
|
|
@@ -441,10 +442,10 @@ licenses:
|
|
|
441
442
|
- AGPL-3.0-only
|
|
442
443
|
metadata:
|
|
443
444
|
homepage_uri: https://kettle-family.galtzo.com
|
|
444
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.
|
|
445
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
445
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.86
|
|
446
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.86/CHANGELOG.md
|
|
446
447
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
447
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.
|
|
448
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.86
|
|
448
449
|
funding_uri: https://github.com/sponsors/pboling
|
|
449
450
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
450
451
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
metadata.gz.sig
CHANGED
|
Binary file
|