kettle-family 1.2.23 → 1.2.24
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 +24 -1
- data/README.md +1 -1
- data/lib/kettle/family/nomono_bootstrap.rb +44 -5
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +36 -3
- 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: 02340a086bd67eddf799fba2205032d161ee089ed7bf9f8b093da0feea777d76
|
|
4
|
+
data.tar.gz: 81510157e19abba881846f840031eaac469b179bed0c694213e6d4d6ddbe4fb2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 64446564bbc1e08eecad5f27bb3a31e6c81a781220e5ecb8b91a557621f656e7cae2187e03771656aa382e1793f7218f954b42a93281cbd7d3e3cb67c71a6ea2
|
|
7
|
+
data.tar.gz: 3da0f1d81b73649ecd3ab77ab5789b0407be5748584a4003907afc67bd6bc935e2cf597dc94c3c4aab7338cb4cceea86bbe0cfb3694895651536ed5263143a21
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,27 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.2.24] - 2026-08-03
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.24][1.2.24t]
|
|
36
|
+
- COVERAGE: 93.93% -- 4691/4994 lines in 31 files
|
|
37
|
+
- BRANCH COVERAGE: 76.50% -- 1839/2404 branches in 31 files
|
|
38
|
+
- 29.31% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Preserve explicit local dependency paths during template dependency bootstrap.
|
|
43
|
+
|
|
44
|
+
- Roll back failed member template output before restoring an autostash.
|
|
45
|
+
|
|
46
|
+
- Pass checksum-validation overrides through template command execution.
|
|
47
|
+
|
|
48
|
+
- Repair stale nomono floors in existing local modular Gemfiles before templating bootstrap Bundler evaluation.
|
|
49
|
+
|
|
50
|
+
- Preserve explicit family-local dependency paths while bootstrapping template dependencies.
|
|
51
|
+
|
|
52
|
+
- Serialize template waves for members that share a Git checkout.
|
|
53
|
+
|
|
33
54
|
## [1.2.23] - 2026-08-02
|
|
34
55
|
|
|
35
56
|
- TAG: [v1.2.23][1.2.23t]
|
|
@@ -1660,7 +1681,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
1660
1681
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
1661
1682
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
1662
1683
|
|
|
1663
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
1684
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.24...HEAD
|
|
1685
|
+
[1.2.24]: https://github.com/kettle-dev/kettle-family/compare/v1.2.23...v1.2.24
|
|
1686
|
+
[1.2.24t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.24
|
|
1664
1687
|
[1.2.23]: https://github.com/kettle-dev/kettle-family/compare/v1.2.22...v1.2.23
|
|
1665
1688
|
[1.2.23t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.23
|
|
1666
1689
|
[1.2.22]: https://github.com/kettle-dev/kettle-family/compare/v1.2.21...v1.2.22
|
data/README.md
CHANGED
|
@@ -828,7 +828,7 @@ Thanks for RTFM. ☺️
|
|
|
828
828
|
[📌gitmoji]: https://gitmoji.dev
|
|
829
829
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
830
830
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
831
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-4.
|
|
831
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-4.994-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
832
832
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
833
833
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
834
834
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -77,13 +77,52 @@ module Kettle
|
|
|
77
77
|
|
|
78
78
|
def gemfile_edits(member)
|
|
79
79
|
gemfile = File.join(member.root, "Gemfile")
|
|
80
|
-
|
|
80
|
+
edits = if File.file?(gemfile)
|
|
81
|
+
source = File.read(gemfile)
|
|
82
|
+
parse_result = Kettle::Dev::VersionBump.parse_source(source, gemfile)
|
|
83
|
+
Kettle::Dev::VersionBump.each_node(parse_result.value).filter_map do |node|
|
|
84
|
+
nomono_floor_edit(gemfile, source, node)
|
|
85
|
+
end
|
|
86
|
+
else
|
|
87
|
+
[]
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
edits + local_gemfile_edits(member)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def local_gemfile_edits(member)
|
|
94
|
+
Dir.glob(File.join(member.root, "gemfiles/modular/**/*_local.gemfile")).sort.flat_map do |path|
|
|
95
|
+
source = File.read(path)
|
|
96
|
+
parse_result = Kettle::Dev::VersionBump.parse_source(source, path)
|
|
97
|
+
Kettle::Dev::VersionBump.each_node(parse_result.value).filter_map do |node|
|
|
98
|
+
local_nomono_floor_edit(path, source, node)
|
|
99
|
+
end
|
|
100
|
+
rescue Prism::ParseError
|
|
101
|
+
[]
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def local_nomono_floor_edit(path, source, node)
|
|
106
|
+
return unless node.is_a?(Prism::LocalVariableWriteNode)
|
|
107
|
+
return unless node.name == :nomono_activation_requirements
|
|
108
|
+
return unless node.value.is_a?(Prism::ArrayNode)
|
|
81
109
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
Kettle::Dev::VersionBump.each_node(parse_result.value).filter_map do |node|
|
|
85
|
-
nomono_floor_edit(gemfile, source, node)
|
|
110
|
+
floor_node = node.value.elements.find do |element|
|
|
111
|
+
element.is_a?(Prism::StringNode) && element.unescaped.start_with?(">= ")
|
|
86
112
|
end
|
|
113
|
+
return unless floor_node
|
|
114
|
+
|
|
115
|
+
current_floor = Gem::Version.new(floor_node.unescaped.sub(/\A>=\s*/, ""))
|
|
116
|
+
return unless current_floor < latest_version
|
|
117
|
+
|
|
118
|
+
replacement = Kettle::Dev::VersionBump.quote_like(floor_node.location.slice, ">= #{latest_version}")
|
|
119
|
+
Kettle::Dev::VersionBump.file_edit(
|
|
120
|
+
path,
|
|
121
|
+
source,
|
|
122
|
+
floor_node.location.start_offset,
|
|
123
|
+
floor_node.location.end_offset,
|
|
124
|
+
replacement
|
|
125
|
+
)
|
|
87
126
|
end
|
|
88
127
|
|
|
89
128
|
def nomono_floor_edit(path, source, node)
|
|
@@ -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.24"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -191,7 +191,8 @@ module Kettle
|
|
|
191
191
|
end
|
|
192
192
|
end
|
|
193
193
|
|
|
194
|
-
|
|
194
|
+
rollback_results = rollback_failed_template_worktrees(stashes, workflow_results, runner: runner)
|
|
195
|
+
checkout_preflight + sync_results + workflow_results + rollback_results + restore_template_autostashes(stashes, runner: runner)
|
|
195
196
|
end
|
|
196
197
|
|
|
197
198
|
def template_worktree_sync_results(runner:)
|
|
@@ -252,6 +253,26 @@ module Kettle
|
|
|
252
253
|
end
|
|
253
254
|
end
|
|
254
255
|
|
|
256
|
+
def rollback_failed_template_worktrees(stashes, workflow_results, runner:)
|
|
257
|
+
failed_members = workflow_results.reject(&:ok?).map(&:member_name).compact.uniq
|
|
258
|
+
stashes.filter_map do |stash|
|
|
259
|
+
member = stash.fetch(:member)
|
|
260
|
+
next unless failed_members.include?(member.name)
|
|
261
|
+
|
|
262
|
+
runner.call(
|
|
263
|
+
member: member,
|
|
264
|
+
phase: "template_autostash_rollback",
|
|
265
|
+
command: [
|
|
266
|
+
"sh", "-lc",
|
|
267
|
+
"paths=$(git diff --name-only; git diff --cached --name-only); " \
|
|
268
|
+
"paths=$(printf '%s\\n' \"$paths\" | sed '/^\\.structuredmerge\\/kettle-jem\\.yml$/d; /^\\.kettle-jem\\.yml$/d' | sort -u); " \
|
|
269
|
+
"if [ -n \"$paths\" ]; then git restore --source=HEAD --staged --worktree -- $paths; fi; " \
|
|
270
|
+
"git clean -fd -e .structuredmerge/kettle-jem.yml -e .kettle-jem.yml"
|
|
271
|
+
]
|
|
272
|
+
)
|
|
273
|
+
end
|
|
274
|
+
end
|
|
275
|
+
|
|
255
276
|
def template_generated_lockfile_only_conflict?(member)
|
|
256
277
|
stdout, _stderr, status = Open3.capture3("git", "diff", "--name-only", "--diff-filter=U", chdir: member.root)
|
|
257
278
|
conflicts = stdout.lines.map(&:strip).reject(&:empty?).sort
|
|
@@ -450,7 +471,13 @@ module Kettle
|
|
|
450
471
|
completed = Set.new
|
|
451
472
|
[].tap do |waves|
|
|
452
473
|
until remaining.empty?
|
|
453
|
-
|
|
474
|
+
ready = remaining.select do |member|
|
|
475
|
+
(member.dependencies & by_name.keys).all? { |name| completed.include?(name) }
|
|
476
|
+
end
|
|
477
|
+
# A Git checkout is a shared mutable transaction boundary. Nested
|
|
478
|
+
# gems in one checkout must not run kettle-jem concurrently, even
|
|
479
|
+
# when their dependency graph would otherwise place them together.
|
|
480
|
+
wave = ready.group_by { |member| git_root_for(member) }.values.map(&:first)
|
|
454
481
|
raise Error, "template dependency wave could not resolve: #{remaining.map(&:name).join(", ")}" if wave.empty?
|
|
455
482
|
|
|
456
483
|
waves << wave
|
|
@@ -532,7 +559,12 @@ module Kettle
|
|
|
532
559
|
end
|
|
533
560
|
|
|
534
561
|
def template_bootstrap_dependency_env(member)
|
|
535
|
-
env =
|
|
562
|
+
env = release_lockfile_local_path_env_overrides(member).merge(workflow_env)
|
|
563
|
+
env.each_key do |key|
|
|
564
|
+
env[key] = "false" if key.end_with?("_DEV") && !env_overrides.key?(key)
|
|
565
|
+
end
|
|
566
|
+
env["K_JEM_TEMPLATING"] = "false"
|
|
567
|
+
env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
|
|
536
568
|
family_env_name = config.family_local_path_env_name
|
|
537
569
|
env[family_env_name] = "false" if family_env_name && !env_overrides.key?(family_env_name)
|
|
538
570
|
env
|
|
@@ -2037,6 +2069,7 @@ module Kettle
|
|
|
2037
2069
|
{}.tap do |env|
|
|
2038
2070
|
env.merge!(workflow_family_local_path_env)
|
|
2039
2071
|
if command == "template"
|
|
2072
|
+
env["BUNDLE_DISABLE_CHECKSUM_VALIDATION"] = "true"
|
|
2040
2073
|
env["KETTLE_JEM_TEMPLATE_PROFILE"] = config.template_profile if config.template_profile
|
|
2041
2074
|
env["KJ_REPOSITORY_TOPOLOGY"] = config.template_repository_topology if config.template_repository_topology
|
|
2042
2075
|
env["KETTLE_JEM_THREAD_WORKERS"] ||= template_thread_worker_budget.to_s
|
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.24
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -345,10 +345,10 @@ licenses:
|
|
|
345
345
|
- AGPL-3.0-only
|
|
346
346
|
metadata:
|
|
347
347
|
homepage_uri: https://kettle-family.galtzo.com
|
|
348
|
-
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.
|
|
349
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
348
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.24
|
|
349
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.24/CHANGELOG.md
|
|
350
350
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
|
|
351
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.
|
|
351
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.24
|
|
352
352
|
funding_uri: https://github.com/sponsors/pboling
|
|
353
353
|
wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
|
|
354
354
|
news_uri: https://www.railsbling.com/tags/kettle-family
|
metadata.gz.sig
CHANGED
|
Binary file
|