kettle-family 1.2.41 → 1.2.42

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: 06e650b41451e42fa21f02b33415452f6150a28f23a7201476d7b53898985836
4
- data.tar.gz: 78d0efc3990b00ae0f89e9fb0e4ea1f187248cdfb23280492495cd119e4b5e42
3
+ metadata.gz: 157856f222f5dac0c7e19ebd7d09eda5f53d9e5653bed4f3639749233aa4463d
4
+ data.tar.gz: 4e39b78d092ed3047ac7a53b278bd5917f7becdb498166e0f5a5157a91f54000
5
5
  SHA512:
6
- metadata.gz: 73a92a80cfa7c1774bdf4af3cdd36f5e9d56eaab91a350b3ef9ac2478d3c142f8843c732b2d7a5c5690dfb317a0fad2d855bead22054e5044cd08504d978e87d
7
- data.tar.gz: 3266c134547b5a0001c1979d706b2d68bee48deea4b4f4fa787a833e8a47379c5d94e4b121885f5f99a9f81c0b1fedcd1099babbce9807c91ee269a9c5c403d9
6
+ metadata.gz: 3cd3ccf5433ec8a181a0ff453475ed76b7fcdd162e8496fdedf1b64b2469b3aa91e27492af034dcbb7e5005f877ff26e77bce5b62e9878ed83793046312977ae
7
+ data.tar.gz: c51400cee32ece6b7b8c1b5b978bbb98e7bc1c04cb8a1372578e03fd3a9ee4811884911e05aca3065d6831e8397f4d4688dabc8a1c8df1c609fbefd07936be2a
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,23 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.2.42] - 2026-08-07
34
+
35
+ - TAG: [v1.2.42][1.2.42t]
36
+ - COVERAGE: 93.58% -- 5047/5393 lines in 32 files
37
+ - BRANCH COVERAGE: 76.05% -- 2019/2655 branches in 32 files
38
+ - 29.72% documented
39
+
40
+ ### Added
41
+
42
+ - Support wave-aware release environments that shrink local sibling paths as selected dependencies become available from the registry.
43
+
44
+ ### Fixed
45
+
46
+ - Preserve explicitly requested local dependency paths during family bundle updates while keeping default updates release-safe.
47
+
48
+ - Keep aggregate monorepo GitHub-release execution out of release dry-runs.
49
+
33
50
  ## [1.2.41] - 2026-08-07
34
51
 
35
52
  - TAG: [v1.2.41][1.2.41t]
@@ -1924,7 +1941,9 @@ Please file a bug if you notice a violation of semantic versioning.
1924
1941
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
1925
1942
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
1926
1943
 
1927
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.41...HEAD
1944
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.42...HEAD
1945
+ [1.2.42]: https://github.com/kettle-dev/kettle-family/compare/v1.2.41...v1.2.42
1946
+ [1.2.42t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.42
1928
1947
  [1.2.41]: https://github.com/kettle-dev/kettle-family/compare/v1.2.40...v1.2.41
1929
1948
  [1.2.41t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.41
1930
1949
  [1.2.40]: https://github.com/kettle-dev/kettle-family/compare/v1.2.39...v1.2.40
data/README.md CHANGED
@@ -232,6 +232,7 @@ changelog:
232
232
  release:
233
233
  env:
234
234
  KETTLE_DEV_DEV: false
235
+ local_path_strategy: waves
235
236
  disable_local_path_env:
236
237
  - TSLP_DEV
237
238
  family_changelog:
@@ -249,6 +250,13 @@ env name is not the default derived from `family.name`.
249
250
  normalization shutoff list for path-injecting env vars that are not themselves
250
251
  discoverable as family roots, such as vendored parser/tooling paths.
251
252
 
253
+ `release.local_path_strategy: waves` allows a release task to provide the
254
+ family local-path environment as its default. Member release commands keep
255
+ that path only while they have a selected sibling dependency that has not
256
+ completed an earlier release wave; once the dependency is available, the
257
+ member resolves it from the registry. Release lockfile normalization always
258
+ disables local paths regardless of this strategy.
259
+
252
260
  For `changelog.mode: root`, release commands pass `K_CHANGELOG_GEM_NAME` as the
253
261
  configured family name and `K_CHANGELOG_VERSION_FILE` when `version_file` is
254
262
  configured, so `kettle-changelog` can operate from a repository root without a
@@ -837,7 +845,7 @@ Thanks for RTFM. ☺️
837
845
  [📌gitmoji]: https://gitmoji.dev
838
846
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
839
847
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
840
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.366-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
848
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.393-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
841
849
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
842
850
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
843
851
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -266,6 +266,10 @@ module Kettle
266
266
  stringify_env(fetch_path("release", "env") || {})
267
267
  end
268
268
 
269
+ def release_local_path_strategy
270
+ fetch_path("release", "local_path_strategy").to_s
271
+ end
272
+
269
273
  def release_secrets
270
274
  stringify_keys(fetch_path("release", "secrets") || {})
271
275
  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.41"
8
+ VERSION = "1.2.42"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -1013,6 +1013,7 @@ module Kettle
1013
1013
  def release_member_results(release_members, include_family_changelog: false)
1014
1014
  runner = release_command_runner
1015
1015
  results = []
1016
+ @release_completed_member_names = []
1016
1017
  append_family_changelog_result(runner: runner, memo: results) if include_family_changelog
1017
1018
  return results unless results.all?(&:ok?)
1018
1019
  return parallel_release_member_results(release_members, results) if parallel_release_members?(release_members)
@@ -1025,6 +1026,7 @@ module Kettle
1025
1026
  break memo unless memo.last.ok?
1026
1027
 
1027
1028
  remaining_members = release_members.drop(release_members.index(member) + 1)
1029
+ @release_completed_member_names << member.name
1028
1030
  append_dependency_floor_results(released_members: [member], dependent_members: remaining_members, runner: runner, memo: memo)
1029
1031
  break memo unless memo.last&.ok?
1030
1032
  end
@@ -1038,6 +1040,7 @@ module Kettle
1038
1040
  results = initial_results.dup
1039
1041
  waves = release_waves(release_members)
1040
1042
  completed_members = []
1043
+ @release_completed_member_names = []
1041
1044
  release_progress = start_release_progress(release_members)
1042
1045
  @release_progress = release_progress
1043
1046
  begin
@@ -1048,6 +1051,7 @@ module Kettle
1048
1051
  break unless wave_results.all? { |member_results| member_results.all?(&:ok?) }
1049
1052
 
1050
1053
  completed_members.concat(wave)
1054
+ @release_completed_member_names.concat(wave.map(&:name))
1051
1055
  remaining_members = release_members - completed_members
1052
1056
  append_dependency_floor_results(released_members: wave, dependent_members: remaining_members, runner: release_command_runner, memo: results)
1053
1057
  break unless results.last&.ok?
@@ -1936,6 +1940,7 @@ module Kettle
1936
1940
  # member release phase as well as to the separate family phase.
1937
1941
  def release_env_for_member(member)
1938
1942
  env = release_env
1943
+ env.merge!(release_wave_local_path_env_for(member))
1939
1944
  if config.family_mode == "monorepo"
1940
1945
  # Monorepo members release from subdirectories, while CI workflows
1941
1946
  # live at the shared repository root.
@@ -1962,6 +1967,29 @@ module Kettle
1962
1967
  )
1963
1968
  end
1964
1969
 
1970
+ # A release task may start with local sibling paths so a member can
1971
+ # consume a selected dependency that has not been published yet. Once
1972
+ # that dependency is complete in an earlier wave, use its registry
1973
+ # release for the next member. Dependencies outside the selected set are
1974
+ # already treated as registry dependencies; this is what makes resume
1975
+ # runs work after an earlier wave has been published.
1976
+ def release_wave_local_path_env_for(member)
1977
+ return {} unless config.release_local_path_strategy == "waves"
1978
+
1979
+ env_name = config.family_local_path_env_name
1980
+ return {} if env_name.to_s.empty?
1981
+
1982
+ local_value = release_env[env_name]
1983
+ return {} unless local_path_env_value?(local_value)
1984
+
1985
+ selected_names = members.map(&:name)
1986
+ completed_names = Array(@release_completed_member_names)
1987
+ unresolved_selected_dependency = release_dependency_names(member).any? do |dependency|
1988
+ selected_names.include?(dependency) && !completed_names.include?(dependency)
1989
+ end
1990
+ {env_name => unresolved_selected_dependency ? local_value : "false"}
1991
+ end
1992
+
1965
1993
  # simplecov:disable Covered by monorepo release integration, not sibling-repository suite.
1966
1994
  def aggregate_monorepo_github_release(members)
1967
1995
  version = members.map { |member| member.version.to_s }.uniq
@@ -1974,6 +2002,8 @@ module Kettle
1974
2002
  end
1975
2003
  command = ["bundle", "exec", "kettle-gh-release", "--allow-unpublished", "--release-version", version.first]
1976
2004
  assets.each { |asset| command.concat(["--asset", asset]) }
2005
+ return aggregate_release_dry_run_result(command) unless execute
2006
+
1977
2007
  env = release_env.merge(
1978
2008
  "K_CHANGELOG_GEM_NAME" => config.family_name.to_s,
1979
2009
  "K_CHANGELOG_PATH" => File.expand_path(config.changelog_path, config.root),
@@ -2019,6 +2049,22 @@ module Kettle
2019
2049
  )
2020
2050
  end
2021
2051
 
2052
+ def aggregate_release_dry_run_result(command)
2053
+ CommandResult.new(
2054
+ member_name: config.family_name,
2055
+ phase: "aggregate_github_release",
2056
+ command: command,
2057
+ workdir: config.root,
2058
+ status: 0,
2059
+ success: true,
2060
+ stdout: "aggregate GitHub release dry-run; pass --execute to run\n",
2061
+ stderr: "",
2062
+ elapsed_seconds: 0.0,
2063
+ skipped: true,
2064
+ reason: "dry-run; pass --execute to run"
2065
+ )
2066
+ end
2067
+
2022
2068
  def base_release_env
2023
2069
  env = config.release_env
2024
2070
  env["KETTLE_FAMILY_CONFIG"] = config.path if config.path
@@ -2401,7 +2447,18 @@ module Kettle
2401
2447
  end
2402
2448
 
2403
2449
  def bundle_update_env
2404
- workflow_env.merge(release_lockfile_local_path_env_overrides)
2450
+ env = workflow_env.merge(release_lockfile_local_path_env_overrides)
2451
+ explicit_local_path_env_overrides.each { |key, value| env[key] = value }
2452
+ env
2453
+ end
2454
+
2455
+ def explicit_local_path_env_overrides
2456
+ ENV.to_h.merge(env_overrides).each_with_object({}) do |(key, value), overrides|
2457
+ next unless key.end_with?("_DEV", "_LOCAL") || config.release_disable_local_path_env.include?(key)
2458
+ next unless local_path_env_requested?(key)
2459
+
2460
+ overrides[key] = value
2461
+ end
2405
2462
  end
2406
2463
 
2407
2464
  def monorepo_template?
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.41
4
+ version: 1.2.42
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -74,7 +74,7 @@ dependencies:
74
74
  version: '2.3'
75
75
  - - ">="
76
76
  - !ruby/object:Gem::Version
77
- version: 2.5.24
77
+ version: 2.5.25
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
@@ -84,7 +84,7 @@ dependencies:
84
84
  version: '2.3'
85
85
  - - ">="
86
86
  - !ruby/object:Gem::Version
87
- version: 2.5.24
87
+ version: 2.5.25
88
88
  - !ruby/object:Gem::Dependency
89
89
  name: kettle-test
90
90
  requirement: !ruby/object:Gem::Requirement
@@ -360,10 +360,10 @@ licenses:
360
360
  - AGPL-3.0-only
361
361
  metadata:
362
362
  homepage_uri: https://kettle-family.galtzo.com
363
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.41
364
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.41/CHANGELOG.md
363
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.42
364
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.42/CHANGELOG.md
365
365
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
366
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.41
366
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.42
367
367
  funding_uri: https://github.com/sponsors/pboling
368
368
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
369
369
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file