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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c7444a3d6ecfad0866aae1d481043a9daebb360a185d628ffff7250dc46d8cf4
4
- data.tar.gz: dbfa71d55c722830254b219d60b98e330918fc853e5d76f026c90e1b6929d971
3
+ metadata.gz: 02340a086bd67eddf799fba2205032d161ee089ed7bf9f8b093da0feea777d76
4
+ data.tar.gz: 81510157e19abba881846f840031eaac469b179bed0c694213e6d4d6ddbe4fb2
5
5
  SHA512:
6
- metadata.gz: a10e4a4db9fe4bc4769c45757a93767286b19de7657b09b4e6cac32877510f5a46342c9a566dd35776d3ed26ac91e4b7c688deaf646107e8d162873331ed64de
7
- data.tar.gz: dbb1cab4664586a13210038ac5e48a8fb8be2b7e5ec6022cc516f40f58da2c9587c7f3d884b6acc31c7afd89fc01b4b1e9d15b8296bff2986e037b9d5474f6c7
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.23...HEAD
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.960-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
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
- return [] unless File.file?(gemfile)
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
- source = File.read(gemfile)
83
- parse_result = Kettle::Dev::VersionBump.parse_source(source, gemfile)
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.23"
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
- checkout_preflight + sync_results + workflow_results + restore_template_autostashes(stashes, runner: runner)
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
- wave = remaining.select { |member| (member.dependencies & by_name.keys).all? { |name| completed.include?(name) } }
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 = workflow_env.merge(release_lockfile_local_path_env_overrides(member))
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.23
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.23
349
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.23/CHANGELOG.md
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.23
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