kettle-family 1.2.65 → 1.2.66

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: 91689a2523f60872d8bf698271affca29c3a9149510543f87b3df956300527a2
4
- data.tar.gz: cab4664fe55f396532f46d0f808398d43880830baa824d41da9ffeb55a3d2659
3
+ metadata.gz: 2a19cf5604af70e74e9f7b12803c1d4fceb80f5ec66975c4f6ebc418a20b950f
4
+ data.tar.gz: 40529c2035a5896477c17d34eb7ac1d38904acbfddb831220ffd9b68c301f112
5
5
  SHA512:
6
- metadata.gz: 1efb4bbb117cba0494d53461f06b3921eef031dec347f905ada977116335c1f65d980e0909906f8d6bcf78e42a4902332fa4f28ab57d0c8a5634f5310d5c3a93
7
- data.tar.gz: d3098d0dbe835bd746a7b0e93f524d22bf2007e19cb6968ef09a3a0f34486893edb84385fb6deaf8d8eb1984d0d8974ec273ea2f3b2d99fccb08e6e05f19497b
6
+ metadata.gz: 2e0c056d35770de260972bb0e7a17177292dbb8574f40a20aa7fbc37807a26d75e0aa888bacebc490fce9266b5cd99ed463e5d43e307912affa787cae6a62620
7
+ data.tar.gz: 581fb42e3f2e7c40ffbf05b5e0725a8c7807606e2ca7787c02258dc277ac98fe9e1ecd0971925780e7bd1df259fef119b82d44d93d75636d4108bff4040ea156
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,17 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.2.66] - 2026-08-30
34
+
35
+ - TAG: [v1.2.66][1.2.66t]
36
+ - COVERAGE: 93.11% -- 5404/5804 lines in 33 files
37
+ - BRANCH COVERAGE: 76.06% -- 2179/2865 branches in 33 files
38
+ - 30.03% documented
39
+
40
+ ### Fixed
41
+
42
+ - Derive monorepo release lockfile path policy from family configuration and keep sibling tool paths opt-in.
43
+
33
44
  ## [1.2.65] - 2026-08-30
34
45
 
35
46
  - TAG: [v1.2.65][1.2.65t]
@@ -2279,7 +2290,9 @@ Please file a bug if you notice a violation of semantic versioning.
2279
2290
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
2280
2291
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
2281
2292
 
2282
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.65...HEAD
2293
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.66...HEAD
2294
+ [1.2.66]: https://github.com/kettle-dev/kettle-family/compare/v1.2.65...v1.2.66
2295
+ [1.2.66t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.66
2283
2296
  [1.2.65]: https://github.com/kettle-dev/kettle-family/compare/v1.2.64...v1.2.65
2284
2297
  [1.2.65t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.65
2285
2298
  [1.2.64]: https://github.com/kettle-dev/kettle-family/compare/v1.2.63...v1.2.64
data/README.md CHANGED
@@ -252,21 +252,30 @@ release:
252
252
  ```
253
253
 
254
254
  `family.local_path_env` names the environment variable that activates local
255
- path dependencies for this family. It is the family identity used by other
256
- families when they scan lockfile `PATH` remotes and need to disable local
257
- resolution before writing CI-facing release lockfiles. Configure it when the
258
- env name is not the default derived from `family.name`.
255
+ path dependencies for this family. For an explicitly configured
256
+ `family.mode: monorepo`, `kettle-family` derives a release-lock policy that
257
+ allows only `family.members_root` (or the configured member root) and passes
258
+ that policy to each `kettle-release` child. Those paths are valid because the
259
+ same monorepo checkout exists in CI. The tracked `Gemfile.lock` remains a
260
+ development lockfile and may retain those member `PATH` sources.
261
+
262
+ Sibling-repository families do not receive this exception. Their canonical
263
+ lockfiles must use released dependencies: a local Kettle Dev workspace, or
264
+ any other sibling workspace, is never allowed merely because its `*_DEV`
265
+ variable is set. Use `release.allowed_local_path_roots` together with
266
+ `release.allowed_local_path_env` only for an intentionally CI-available path
267
+ layout that cannot be inferred from a monorepo configuration.
259
268
 
260
269
  `release.disable_local_path_env` is different: it is an extra release-lockfile
261
270
  normalization shutoff list for path-injecting env vars that are not themselves
262
271
  discoverable as family roots, such as vendored parser/tooling paths.
263
272
 
264
- `release.local_path_strategy: waves` allows a release task to provide the
265
- family local-path environment as its default. Member release commands keep
266
- that path only while they have a selected sibling dependency that has not
267
- completed an earlier release wave; once the dependency is available, the
268
- member resolves it from the registry. Release lockfile normalization always
269
- disables local paths regardless of this strategy.
273
+ `release.local_path_strategy: waves` is for sibling families that explicitly
274
+ choose wave-local development resolution. An explicit monorepo instead keeps
275
+ its configured member-root path available throughout its waves, because its
276
+ canonical development lockfile and CI checkout share that path graph. In both
277
+ cases, release normalization rejects every path outside the configured allow
278
+ list.
270
279
 
271
280
  ### Release waves and dependency refresh
272
281
 
@@ -986,7 +995,7 @@ Thanks for RTFM. ☺️
986
995
  [📌gitmoji]: https://gitmoji.dev
987
996
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
988
997
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
989
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.782-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
998
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-5.804-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
990
999
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
991
1000
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
992
1001
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -266,6 +266,23 @@ module Kettle
266
266
  fetch_path("release", "local_path_strategy").to_s
267
267
  end
268
268
 
269
+ def release_allowed_local_path_roots
270
+ inferred = configured_monorepo_release? ? [family_local_path_root] : []
271
+ configured = Array(fetch_path("release", "allowed_local_path_roots"))
272
+ .map { |path| expand_config_relative_path(path) }
273
+ (inferred + configured).uniq
274
+ end
275
+
276
+ def release_allowed_local_path_env_names
277
+ inferred = configured_monorepo_release? ? [family_local_path_env_name] : []
278
+ configured = Array(fetch_path("release", "allowed_local_path_env"))
279
+ (inferred + configured).compact.map(&:to_s).reject(&:empty?).uniq
280
+ end
281
+
282
+ def configured_monorepo_release?
283
+ fetch_path("family", "mode") == "monorepo"
284
+ end
285
+
269
286
  def release_secrets
270
287
  stringify_keys(fetch_path("release", "secrets") || {})
271
288
  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.65"
8
+ VERSION = "1.2.66"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -2349,6 +2349,7 @@ module Kettle
2349
2349
  def release_env_for_member(member)
2350
2350
  env = release_env
2351
2351
  env.merge!(release_wave_local_path_env_for(member))
2352
+ env.merge!(release_local_path_policy_env)
2352
2353
  # Family release performs one live pin review before member releases.
2353
2354
  # Child kettle-release must consume that reviewed cache instead of
2354
2355
  # repeating the GitHub API lookup for every member.
@@ -2412,6 +2413,14 @@ module Kettle
2412
2413
  # already treated as registry dependencies; this is what makes resume
2413
2414
  # runs work after an earlier wave has been published.
2414
2415
  def release_wave_local_path_env_for(member)
2416
+ # Monorepo members and their sibling dependencies share the same CI
2417
+ # checkout, so their canonical development lockfile may keep those
2418
+ # paths throughout every release wave.
2419
+ if config.configured_monorepo_release?
2420
+ env_name = config.family_local_path_env_name
2421
+ return env_name ? {env_name => config.family_local_path_root} : {}
2422
+ end
2423
+
2415
2424
  return {} unless config.release_local_path_strategy == "waves"
2416
2425
 
2417
2426
  env_name = config.family_local_path_env_name
@@ -4034,15 +4043,22 @@ module Kettle
4034
4043
  end
4035
4044
 
4036
4045
  def release_allowed_local_path_roots
4037
- # Release env disables are passed to Bundler normalization, but they
4038
- # must not hide the active workspace roots from readiness diagnostics.
4039
- release_local_path_env_detection_sources.filter_map do |key, value|
4040
- next unless key.end_with?("_LOCAL", "_DEV")
4041
- next unless local_path_env_value?(value)
4042
- next unless value.to_s.strip.start_with?("/", "./", "../", "~")
4046
+ config.release_allowed_local_path_roots
4047
+ end
4043
4048
 
4044
- value
4045
- end
4049
+ def release_allowed_local_path_env_names
4050
+ config.release_allowed_local_path_env_names
4051
+ end
4052
+
4053
+ def release_local_path_policy_env
4054
+ roots = release_allowed_local_path_roots
4055
+ env_names = release_allowed_local_path_env_names
4056
+ return {} if roots.empty? && env_names.empty?
4057
+
4058
+ {
4059
+ "KETTLE_RELEASE_ALLOWED_LOCAL_PATH_ROOTS" => roots.join(File::PATH_SEPARATOR),
4060
+ "KETTLE_RELEASE_ALLOWED_LOCAL_PATH_ENVS" => env_names.join(",")
4061
+ }
4046
4062
  end
4047
4063
 
4048
4064
  def release_lockfile_local_path_env_overrides(member = nil)
@@ -4051,11 +4067,18 @@ module Kettle
4051
4067
  key = key.to_s
4052
4068
  next unless key.end_with?("_LOCAL", "_DEV")
4053
4069
  next unless local_path_env_value?(value)
4070
+ next if release_allowed_local_path_env_names.include?(key)
4054
4071
 
4055
4072
  memo[key] = "false"
4056
4073
  end
4057
4074
  inferred = member ? release_lockfile_inferred_local_path_env(member).to_h { |key| [key, "false"] } : {}
4058
- explicit.merge(derived).merge(inferred)
4075
+ explicit.merge(derived).merge(inferred).merge(release_member_local_path_env(member))
4076
+ end
4077
+
4078
+ def release_member_local_path_env(member)
4079
+ return {} unless config.configured_monorepo_release?
4080
+
4081
+ release_wave_local_path_env_for(member)
4059
4082
  end
4060
4083
 
4061
4084
  def release_lockfile_inferred_local_path_env(member)
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.65
4
+ version: 1.2.66
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -74,7 +74,7 @@ dependencies:
74
74
  version: '1.0'
75
75
  - - ">="
76
76
  - !ruby/object:Gem::Version
77
- version: 1.0.6
77
+ version: 1.0.7
78
78
  type: :runtime
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
@@ -84,14 +84,14 @@ dependencies:
84
84
  version: '1.0'
85
85
  - - ">="
86
86
  - !ruby/object:Gem::Version
87
- version: 1.0.6
87
+ version: 1.0.7
88
88
  - !ruby/object:Gem::Dependency
89
89
  name: kettle-dev
90
90
  requirement: !ruby/object:Gem::Requirement
91
91
  requirements:
92
92
  - - ">="
93
93
  - !ruby/object:Gem::Version
94
- version: 3.0.18
94
+ version: 3.0.20
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.18
104
+ version: 3.0.20
105
105
  - - "<"
106
106
  - !ruby/object:Gem::Version
107
107
  version: 4.0.0
@@ -441,10 +441,10 @@ licenses:
441
441
  - AGPL-3.0-only
442
442
  metadata:
443
443
  homepage_uri: https://kettle-family.galtzo.com
444
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.65
445
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.65/CHANGELOG.md
444
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.66
445
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.66/CHANGELOG.md
446
446
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
447
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.65
447
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.66
448
448
  funding_uri: https://github.com/sponsors/pboling
449
449
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
450
450
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file