kettle-family 1.2.69 → 1.2.71
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 +29 -1
- data/README.md +1 -1
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +88 -13
- 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: 8c61cfdc32555584613be9cc40abc3f43596619d6dcaa50296c7c2d0a5a91cdd
|
|
4
|
+
data.tar.gz: f7430c5af93088a425052e2f387a11bd84e43ba861ec417bf12bd26f14a4da7e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 59b42741cd514d00252fdc0e3dec6c8c761d7151b977282b8f028ef29ff41b190564d2e4cd9527efc4eaf22790a35abf865dabc31635fd25b66481587be2afd5
|
|
7
|
+
data.tar.gz: 86a21caf729f0a1bc47eac1b46953c17842e83b05d52ff60ada1018b3b3727e0aa1f7adae8be30d46aeaf1d7e3515ef5c62e008ed38aa724e5410fe143c14449
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,30 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [1.2.71] - 2026-08-30
|
|
34
|
+
|
|
35
|
+
- TAG: [v1.2.71][1.2.71t]
|
|
36
|
+
- COVERAGE: 93.30% -- 5544/5942 lines in 33 files
|
|
37
|
+
- BRANCH COVERAGE: 76.62% -- 2281/2977 branches in 33 files
|
|
38
|
+
- 30.50% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Preserve explicitly enabled monorepo template dependency graphs while reconciling release lockfiles.
|
|
43
|
+
|
|
44
|
+
## [1.2.70] - 2026-08-30
|
|
45
|
+
|
|
46
|
+
- TAG: [v1.2.70][1.2.70t]
|
|
47
|
+
- COVERAGE: 93.22% -- 5502/5902 lines in 33 files
|
|
48
|
+
- BRANCH COVERAGE: 76.41% -- 2258/2955 branches in 33 files
|
|
49
|
+
- 30.50% documented
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- Allow monorepo bundle updates to retain configured in-repository path dependencies.
|
|
54
|
+
|
|
55
|
+
- Launch monorepo member release tools from the family bundle so configured in-repository dependencies remain available across release waves.
|
|
56
|
+
|
|
33
57
|
## [1.2.69] - 2026-08-30
|
|
34
58
|
|
|
35
59
|
- TAG: [v1.2.69][1.2.69t]
|
|
@@ -2333,7 +2357,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2333
2357
|
- Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
|
|
2334
2358
|
- Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
|
|
2335
2359
|
|
|
2336
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.
|
|
2360
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.71...HEAD
|
|
2361
|
+
[1.2.71]: https://github.com/kettle-dev/kettle-family/compare/v1.2.70...v1.2.71
|
|
2362
|
+
[1.2.71t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.71
|
|
2363
|
+
[1.2.70]: https://github.com/kettle-dev/kettle-family/compare/v1.2.69...v1.2.70
|
|
2364
|
+
[1.2.70t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.70
|
|
2337
2365
|
[1.2.69]: https://github.com/kettle-dev/kettle-family/compare/v1.2.68...v1.2.69
|
|
2338
2366
|
[1.2.69t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.69
|
|
2339
2367
|
[1.2.68]: https://github.com/kettle-dev/kettle-family/compare/v1.2.67...v1.2.68
|
data/README.md
CHANGED
|
@@ -1049,7 +1049,7 @@ Thanks for RTFM. ☺️
|
|
|
1049
1049
|
[📌gitmoji]: https://gitmoji.dev
|
|
1050
1050
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1051
1051
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1052
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-5.
|
|
1052
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-5.942-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1053
1053
|
[🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
|
|
1054
1054
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1055
1055
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -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.71"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
|
@@ -1761,11 +1761,16 @@ module Kettle
|
|
|
1761
1761
|
return ["Gemfile.lock was not created by dependency floor lockfile refresh"] unless File.file?(lockfile)
|
|
1762
1762
|
|
|
1763
1763
|
lockfile_source = File.read(lockfile)
|
|
1764
|
-
|
|
1764
|
+
allowed_path_gems = dependency_floor_allowed_path_gems(member: member, lockfile_source: lockfile_source)
|
|
1765
|
+
diagnostics = Kettle::Dev::LockfileReset.local_path_remote_lines_from_source(lockfile_source).reject do |line_number|
|
|
1766
|
+
dependency_floor_allowed_path_remote?(member: member, lockfile_source: lockfile_source, line_number: line_number)
|
|
1767
|
+
end.map do |line_number|
|
|
1765
1768
|
"Gemfile.lock has local path remote at line #{line_number}"
|
|
1766
1769
|
end
|
|
1767
1770
|
checksum_entries = Kettle::Dev::LockfileReset.checksum_entries_from_source(lockfile_source) || {}
|
|
1768
1771
|
diagnostics.concat(released_members.filter_map do |released_member|
|
|
1772
|
+
next if allowed_path_gems.include?(released_member.name)
|
|
1773
|
+
|
|
1769
1774
|
checksum = checksum_entries[[released_member.name, released_member.version]]
|
|
1770
1775
|
if checksum.nil?
|
|
1771
1776
|
"Gemfile.lock CHECKSUMS is missing #{released_member.name} #{released_member.version}"
|
|
@@ -1776,6 +1781,48 @@ module Kettle
|
|
|
1776
1781
|
diagnostics
|
|
1777
1782
|
end
|
|
1778
1783
|
|
|
1784
|
+
def dependency_floor_allowed_path_remote?(member:, lockfile_source:, line_number:)
|
|
1785
|
+
remote = lockfile_source.each_line.with_index(1).find { |_line, index| index == line_number }.first
|
|
1786
|
+
.to_s.split("remote:", 2).last.to_s.strip
|
|
1787
|
+
remote_path = File.expand_path(remote, member.root)
|
|
1788
|
+
release_allowed_local_path_roots.any? do |root|
|
|
1789
|
+
remote_path == root || remote_path.start_with?("#{root}/")
|
|
1790
|
+
end
|
|
1791
|
+
end
|
|
1792
|
+
|
|
1793
|
+
def dependency_floor_allowed_path_gems(member:, lockfile_source:)
|
|
1794
|
+
in_path = false
|
|
1795
|
+
in_specs = false
|
|
1796
|
+
allowed_remote = false
|
|
1797
|
+
lockfile_source.each_line.each_with_object(Set.new) do |line, gems|
|
|
1798
|
+
stripped = line.strip
|
|
1799
|
+
if stripped.match?(/\A[A-Z][A-Z ]*\z/)
|
|
1800
|
+
in_path = stripped == "PATH"
|
|
1801
|
+
in_specs = false
|
|
1802
|
+
allowed_remote = false
|
|
1803
|
+
next
|
|
1804
|
+
end
|
|
1805
|
+
next unless in_path
|
|
1806
|
+
|
|
1807
|
+
if stripped.start_with?("remote:")
|
|
1808
|
+
remote = stripped.split("remote:", 2).last.to_s.strip
|
|
1809
|
+
remote_path = File.expand_path(remote, member.root)
|
|
1810
|
+
allowed_remote = release_allowed_local_path_roots.any? do |root|
|
|
1811
|
+
remote_path == root || remote_path.start_with?("#{root}/")
|
|
1812
|
+
end
|
|
1813
|
+
next
|
|
1814
|
+
end
|
|
1815
|
+
if stripped == "specs:"
|
|
1816
|
+
in_specs = true
|
|
1817
|
+
next
|
|
1818
|
+
end
|
|
1819
|
+
next unless allowed_remote && in_specs && line.start_with?(" ") && !line.start_with?(" ")
|
|
1820
|
+
|
|
1821
|
+
name = stripped.split(" (", 2).first
|
|
1822
|
+
gems << name unless name.empty?
|
|
1823
|
+
end
|
|
1824
|
+
end
|
|
1825
|
+
|
|
1779
1826
|
def dependency_floor_lockfile_command(released_members)
|
|
1780
1827
|
["bundle", "lock", "--update", *released_members.map(&:name), "--add-checksums"]
|
|
1781
1828
|
end
|
|
@@ -2425,8 +2472,8 @@ module Kettle
|
|
|
2425
2472
|
local_kettle_dev = ENV.fetch("KETTLE_DEV_DEV", "").to_s.strip
|
|
2426
2473
|
env["KETTLE_DEV_DEV"] = local_kettle_dev if kettle_release_command?(raw_release_command) && local_path_env_value?(local_kettle_dev)
|
|
2427
2474
|
if kettle_release_command?(raw_release_command)
|
|
2428
|
-
|
|
2429
|
-
env["BUNDLE_GEMFILE"] =
|
|
2475
|
+
release_tool_gemfile = release_tool_gemfile_path(local_kettle_dev)
|
|
2476
|
+
env["BUNDLE_GEMFILE"] = release_tool_gemfile if release_tool_gemfile
|
|
2430
2477
|
end
|
|
2431
2478
|
if config.family_mode == "monorepo"
|
|
2432
2479
|
# Monorepo members release from subdirectories, while CI workflows
|
|
@@ -2471,6 +2518,20 @@ module Kettle
|
|
|
2471
2518
|
candidates.find { |path| File.file?(path) }
|
|
2472
2519
|
end
|
|
2473
2520
|
|
|
2521
|
+
# A member's development lockfile can pin an older kettle-dev than the
|
|
2522
|
+
# family runner. That older release tool may not understand the current
|
|
2523
|
+
# family policy, notably configured monorepo PATH dependencies. Launch
|
|
2524
|
+
# kettle-release from the family bundle instead; the release tool still
|
|
2525
|
+
# runs member project commands from the member checkout.
|
|
2526
|
+
def release_tool_gemfile_path(local_kettle_dev)
|
|
2527
|
+
local_kettle_dev_gemfile = local_kettle_dev_gemfile_path(local_kettle_dev)
|
|
2528
|
+
return local_kettle_dev_gemfile if local_kettle_dev_gemfile
|
|
2529
|
+
return unless config.configured_monorepo_release?
|
|
2530
|
+
|
|
2531
|
+
family_gemfile = File.join(config.root, "Gemfile")
|
|
2532
|
+
family_gemfile if File.file?(family_gemfile)
|
|
2533
|
+
end
|
|
2534
|
+
|
|
2474
2535
|
# A release task may start with local sibling paths so a member can
|
|
2475
2536
|
# consume a selected dependency that has not been published yet. Once
|
|
2476
2537
|
# that dependency is complete in an earlier wave, use its registry
|
|
@@ -4116,7 +4177,9 @@ module Kettle
|
|
|
4116
4177
|
end
|
|
4117
4178
|
|
|
4118
4179
|
def release_allowed_local_path_env_names
|
|
4119
|
-
config.release_allowed_local_path_env_names
|
|
4180
|
+
names = config.release_allowed_local_path_env_names
|
|
4181
|
+
names << "K_JEM_TEMPLATING" if preserve_monorepo_template_context?
|
|
4182
|
+
names.uniq
|
|
4120
4183
|
end
|
|
4121
4184
|
|
|
4122
4185
|
def release_local_path_policy_env
|
|
@@ -4132,6 +4195,7 @@ module Kettle
|
|
|
4132
4195
|
|
|
4133
4196
|
def release_lockfile_local_path_env_overrides(member = nil)
|
|
4134
4197
|
explicit = config.release_disable_local_path_env.to_h { |key| [key.to_s, "false"] }
|
|
4198
|
+
explicit.delete("K_JEM_TEMPLATING") if preserve_monorepo_template_context?
|
|
4135
4199
|
derived = release_local_path_env_detection_sources.each_with_object({}) do |(key, value), memo|
|
|
4136
4200
|
key = key.to_s
|
|
4137
4201
|
next unless key.end_with?("_LOCAL", "_DEV")
|
|
@@ -4141,7 +4205,21 @@ module Kettle
|
|
|
4141
4205
|
memo[key] = "false"
|
|
4142
4206
|
end
|
|
4143
4207
|
inferred = member ? release_lockfile_inferred_local_path_env(member).to_h { |key| [key, "false"] } : {}
|
|
4144
|
-
explicit
|
|
4208
|
+
explicit
|
|
4209
|
+
.merge(derived)
|
|
4210
|
+
.merge(inferred)
|
|
4211
|
+
.merge(release_member_local_path_env(member))
|
|
4212
|
+
.merge(preserve_monorepo_template_context? ? {"K_JEM_TEMPLATING" => "true"} : {})
|
|
4213
|
+
end
|
|
4214
|
+
|
|
4215
|
+
# K_JEM_TEMPLATING activates the generated monorepo dependency closure;
|
|
4216
|
+
# it is not an unrelated local checkout switch. Preserve it only when
|
|
4217
|
+
# the caller explicitly enabled it for a configured monorepo release.
|
|
4218
|
+
def preserve_monorepo_template_context?
|
|
4219
|
+
return false unless config.configured_monorepo_release?
|
|
4220
|
+
|
|
4221
|
+
value = release_local_path_env_sources["K_JEM_TEMPLATING"].to_s.strip.downcase
|
|
4222
|
+
%w[true yes 1 on].include?(value)
|
|
4145
4223
|
end
|
|
4146
4224
|
|
|
4147
4225
|
def release_member_local_path_env(member)
|
|
@@ -4319,14 +4397,11 @@ module Kettle
|
|
|
4319
4397
|
end
|
|
4320
4398
|
|
|
4321
4399
|
def bundle_update_lockfile_diagnostics(member)
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
|
|
4325
|
-
|
|
4326
|
-
|
|
4327
|
-
|
|
4328
|
-
"release lockfile has local path remote at Gemfile.lock:#{index}"
|
|
4329
|
-
end
|
|
4400
|
+
ReadinessCheck.call(
|
|
4401
|
+
member: member,
|
|
4402
|
+
config: config,
|
|
4403
|
+
allowed_local_path_roots: release_allowed_local_path_roots
|
|
4404
|
+
).stdout.lines.grep(/^release lockfile has local path remote at /).map(&:chomp)
|
|
4330
4405
|
end
|
|
4331
4406
|
|
|
4332
4407
|
def commit_bex_changes(member:, runner:, memo:)
|
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.71
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -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.
|
|
445
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.
|
|
444
|
+
source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.71
|
|
445
|
+
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.71/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.
|
|
447
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.71
|
|
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
|