kettle-family 0.2.3 → 0.2.5

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: 1321ed38de6cb72dbb54f07eb9d64ad603d534ee0bde3986c69a12aea3209bd7
4
- data.tar.gz: fb828bcc85d5a373bfbaa19b9f409e4ccc061840943bb7605337106c346d1531
3
+ metadata.gz: 2bc8f54983986ae1576f3f766324a35d5bc87b2776086a07eb3258d43bba386d
4
+ data.tar.gz: edc612181ca90bd0ebdfdc196d88810d82c99cdb54b752c66b3173d85fa896a2
5
5
  SHA512:
6
- metadata.gz: 93890dd533ed38d98f53ddf6c6c3a54e2be63e62d115e90e1c87caa3613eaeb0fe73c4fc76baf6de3f92c68591cbb73ac8dc6e869a817ff5ad7a8db200021ddb
7
- data.tar.gz: 36fe85d72cc06f7bae910e45161ebc65d4d1f847f9627c18625b402a401be8f2698bffb13562fbbd881b3c63b90cdcc03c412f6e9ea2ce4d35be307dfa25a8d1
6
+ metadata.gz: b3f19512bb9a8b3e66ba7037a44877afc0d76eebccd50b2ea9ff233ed2a3eb74e4e0e4cc14cb2125d059c66b59ecf9f9a238b60e77cc85a81a6ab6c5dfd13749
7
+ data.tar.gz: 2abdfc91601545b26d5a3a392f833cb439901a4b2d33b64a1574cbb6a57ae8f71bbbfbd8610d18af80a919bdea1e776063319e6b8670cd3b678950cd4e3964d7
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,46 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [0.2.5] - 2026-07-11
34
+
35
+ - TAG: [v0.2.5][0.2.5t]
36
+ - COVERAGE: 95.22% -- 2309/2425 lines in 23 files
37
+ - BRANCH COVERAGE: 76.75% -- 766/998 branches in 23 files
38
+ - 29.54% documented
39
+
40
+ ### Added
41
+
42
+ - Family workflows now inject a derived local family path environment variable
43
+ by default, such as `RUBY_OAUTH_DEV=/path/to/ruby-oauth`, so in-flight family
44
+ members can resolve unreleased sibling gems during orchestration.
45
+ - Family configs now expose `pre_release.image_url_skip_patterns` and pass the
46
+ active config path to release commands so `kettle-pre-release` can skip
47
+ project-specific volatile image URLs.
48
+ - `kettle-family release --skip-bundle-audit` now forwards
49
+ `--skip-bundle-audit` and `KETTLE_DEV_SKIP_BUNDLE_AUDIT=true` to downstream
50
+ `kettle-release` commands.
51
+
52
+ ### Changed
53
+
54
+ - `require "kettle/family"` no longer loads `version_gem` by default; require
55
+ `kettle/family/version_gem` for the optional `VersionGem::Basic` extension.
56
+ - Release lockfile normalization now forces configured local path environment
57
+ variables off after caller overrides so release locks are cleaned
58
+ deterministically.
59
+
60
+ ## [0.2.4] - 2026-07-04
61
+
62
+ - TAG: [v0.2.4][0.2.4t]
63
+ - COVERAGE: 95.33% -- 2288/2400 lines in 22 files
64
+ - BRANCH COVERAGE: 76.42% -- 752/984 branches in 22 files
65
+ - 30.04% documented
66
+
67
+ ### Added
68
+
69
+ - Family releases now raise downstream family dependency floors after each
70
+ member release by default, with `--no-auto-floors` and
71
+ `release.auto_dependency_floors: false` opt-outs.
72
+
33
73
  ## [0.2.3] - 2026-07-03
34
74
 
35
75
  - TAG: [v0.2.3][0.2.3t]
@@ -630,7 +670,11 @@ Please file a bug if you notice a violation of semantic versioning.
630
670
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
631
671
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
632
672
 
633
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v0.2.3...HEAD
673
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v0.2.5...HEAD
674
+ [0.2.5]: https://github.com/kettle-dev/kettle-family/compare/v0.2.4...v0.2.5
675
+ [0.2.5t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.2.5
676
+ [0.2.4]: https://github.com/kettle-dev/kettle-family/compare/v0.2.3...v0.2.4
677
+ [0.2.4t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.2.4
634
678
  [0.2.3]: https://github.com/kettle-dev/kettle-family/compare/v0.2.2...v0.2.3
635
679
  [0.2.3t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.2.3
636
680
  [0.2.2]: https://github.com/kettle-dev/kettle-family/compare/v0.2.1...v0.2.2
data/README.md CHANGED
@@ -158,6 +158,17 @@ members:
158
158
  - "**/vendor/**"
159
159
  ```
160
160
 
161
+ Pre-release checks can skip project-specific volatile image URLs with
162
+ shell-style URL patterns. Family release commands pass the active config path
163
+ to member release commands so this setting works when releases run from member
164
+ directories.
165
+
166
+ ```yaml
167
+ pre_release:
168
+ image_url_skip_patterns:
169
+ - https://assets.example.com/generated/*
170
+ ```
171
+
161
172
  Member branch-stack releases can be configured in the member repository itself:
162
173
 
163
174
  ```yaml
@@ -592,7 +603,7 @@ Thanks for RTFM. ☺️
592
603
  [📌gitmoji]: https://gitmoji.dev
593
604
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
594
605
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
595
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-2.314-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
606
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-2.425-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
596
607
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
597
608
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
598
609
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -146,6 +146,7 @@ module Kettle
146
146
  release_skip_steps: nil,
147
147
  release_local_ci: false,
148
148
  release_continue_ci_failures: false,
149
+ release_skip_bundle_audit: false,
149
150
  accept: true,
150
151
  tag: false,
151
152
  push: false,
@@ -403,6 +404,10 @@ module Kettle
403
404
  option :skip_steps, long: "--skip-steps", value: {type: String, usage: "LIST"}, desc: "Pass skip_steps=LIST through to kettle-release commands"
404
405
  option :local_ci, long: "--local-ci", desc: "Pass --local-ci through to kettle-release commands"
405
406
  option :continue_ci_failures, long: "--continue-ci-failures", desc: "Set K_RELEASE_CI_CONTINUE=true for release commands"
407
+ option :skip_bundle_audit, long: "--skip-bundle-audit", desc: "Skip bundle:audit/update during release rake checks"
408
+ option :no_auto_floors, long: "--no-auto-floors", desc: "Do not raise family dependency floors between member releases" do
409
+ options[:no_auto_floors] = true
410
+ end
406
411
  option :accept, desc: "Answer yes to confirmation prompts in interactive commands"
407
412
  option :no_accept, long: "--no-accept", desc: "Wait for user input at confirmation prompts" do
408
413
  options[:accept] = false
@@ -419,6 +424,8 @@ module Kettle
419
424
  release_skip_steps: options[:skip_steps],
420
425
  release_local_ci: truthy_option?(:local_ci),
421
426
  release_continue_ci_failures: truthy_option?(:continue_ci_failures),
427
+ release_skip_bundle_audit: truthy_option?(:skip_bundle_audit),
428
+ release_auto_dependency_floors: !truthy_option?(:no_auto_floors),
422
429
  accept: !options.key?(:accept) || options[:accept],
423
430
  tag: truthy_option?(:tag),
424
431
  push: truthy_option?(:push)
@@ -555,6 +562,8 @@ module Kettle
555
562
  skip_steps: options[:release_skip_steps],
556
563
  local_ci: options[:release_local_ci],
557
564
  continue_ci_failures: options[:release_continue_ci_failures],
565
+ skip_bundle_audit: options[:release_skip_bundle_audit],
566
+ auto_dependency_floors: options[:release_auto_dependency_floors],
558
567
  gha_sha_pins_upgrade: options[:gha_sha_pins_upgrade],
559
568
  gha_sha_pins_check: options[:check],
560
569
  env_overrides: options[:workflow_env],
@@ -674,6 +683,8 @@ module Kettle
674
683
  end
675
684
 
676
685
  def bump_version_results(members:, options:)
686
+ require_relative "version_bump"
687
+
677
688
  results = VersionBump.new(
678
689
  members: members,
679
690
  target_version: options[:target_version],
@@ -40,6 +40,26 @@ module Kettle
40
40
  fetch_path("family", "name") || File.basename(root)
41
41
  end
42
42
 
43
+ def family_local_path_env_name
44
+ configured = fetch_path("family", "local_path_env")
45
+ return nil if configured == false
46
+ return configured.to_s unless configured.to_s.empty?
47
+
48
+ "#{family_name.gsub(/[^A-Za-z0-9]+/, "_").upcase}_DEV"
49
+ end
50
+
51
+ def family_local_path_root
52
+ configured = fetch_path("family", "local_path_root")
53
+ configured ? expand_config_relative_path(configured) : root
54
+ end
55
+
56
+ def family_local_path_env
57
+ name = family_local_path_env_name
58
+ return {} unless name
59
+
60
+ {name => family_local_path_root}
61
+ end
62
+
43
63
  def family_mode
44
64
  fetch_path("family", "mode") || "monorepo"
45
65
  end
@@ -118,6 +138,10 @@ module Kettle
118
138
  fetch_path("check", "readme_links") || {}
119
139
  end
120
140
 
141
+ def pre_release_image_url_skip_patterns
142
+ Array(fetch_path("pre_release", "image_url_skip_patterns")).map(&:to_s)
143
+ end
144
+
121
145
  def changelog_mode
122
146
  fetch_path("changelog", "mode") || "member"
123
147
  end
@@ -212,6 +236,10 @@ module Kettle
212
236
  fetch_path("release", "jobs")
213
237
  end
214
238
 
239
+ def release_auto_dependency_floors?
240
+ fetch_path("release", "auto_dependency_floors") != false
241
+ end
242
+
215
243
  def release_family_changelog?
216
244
  fetch_path("release", "family_changelog", "enabled") == true
217
245
  end
@@ -246,7 +274,7 @@ module Kettle
246
274
  private
247
275
 
248
276
  def default_release_disable_local_path_env
249
- %w[
277
+ local_envs = %w[
250
278
  K_JEM_TEMPLATING
251
279
  SMORG_RB_DEV
252
280
  TSLP_DEV
@@ -256,6 +284,7 @@ module Kettle
256
284
  GALTZO_FLOSS_DEV
257
285
  UR_BRAIN_DEV
258
286
  ]
287
+ [family_local_path_env_name, *local_envs].compact
259
288
  end
260
289
 
261
290
  def expand_config_relative_path(value)
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "kettle/dev"
4
+
5
+ module Kettle
6
+ module Family
7
+ class DependencyFloor
8
+ DEPENDENCY_METHODS = %i[add_dependency add_runtime_dependency].freeze
9
+
10
+ def initialize(released_members:, dependent_members:, mode: :dry_run)
11
+ @released_members = released_members
12
+ @dependent_members = dependent_members
13
+ @mode = mode
14
+ @released_versions = released_members.to_h { |member| [member.name, Gem::Version.new(member.version.to_s)] }
15
+ end
16
+
17
+ def results
18
+ dependent_members.filter_map { |member| result_for(member) }
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :released_members, :dependent_members, :mode, :released_versions
24
+
25
+ def result_for(member)
26
+ edits = collect_edits(member)
27
+ return if edits.empty?
28
+
29
+ write_edits(edits) if mode == :execute
30
+ CommandResult.new(
31
+ member_name: member.name,
32
+ phase: "dependency_floor",
33
+ command: ["internal", "dependency-floor", released_versions.keys.join(",")],
34
+ workdir: member.root,
35
+ status: 0,
36
+ success: true,
37
+ stdout: edit_summary(member: member, edits: edits),
38
+ stderr: "",
39
+ elapsed_seconds: 0.0,
40
+ skipped: mode != :execute,
41
+ reason: (mode == :execute) ? nil : "dry-run; pass --execute to write"
42
+ )
43
+ end
44
+
45
+ def collect_edits(member)
46
+ return [] unless member.gemspec_path && File.file?(member.gemspec_path)
47
+
48
+ source = File.read(member.gemspec_path)
49
+ parse_result = with_dev_errors { Kettle::Dev::VersionBump.parse_source(source, member.gemspec_path) }
50
+ Kettle::Dev::VersionBump.each_node(parse_result.value).filter_map do |node|
51
+ dependency_edit_for(member.gemspec_path, source, node)
52
+ end
53
+ end
54
+
55
+ def dependency_edit_for(path, source, node)
56
+ return unless node.is_a?(Prism::CallNode) && DEPENDENCY_METHODS.include?(node.name)
57
+
58
+ args = node.arguments&.arguments || []
59
+ name_node = args.first
60
+ return unless name_node.is_a?(Prism::StringNode)
61
+
62
+ dependency_name = name_node.unescaped
63
+ released_version = released_versions[dependency_name]
64
+ return unless released_version
65
+
66
+ floor_node = requirement_nodes(args.drop(1)).find do |requirement_node|
67
+ requirement_node.unescaped.start_with?(">= ")
68
+ end
69
+ return unless floor_node
70
+
71
+ current_floor = floor_node.unescaped.delete_prefix(">= ").strip
72
+ return unless floor_lower_than?(current_floor, released_version)
73
+
74
+ replacement = Kettle::Dev::VersionBump.quote_like(floor_node.location.slice, ">= #{released_version}")
75
+ Kettle::Dev::VersionBump.file_edit(path, source, floor_node.location.start_offset, floor_node.location.end_offset, replacement)
76
+ end
77
+
78
+ def requirement_nodes(nodes)
79
+ nodes.flat_map do |node|
80
+ case node
81
+ when Prism::StringNode
82
+ [node]
83
+ when Prism::ArrayNode
84
+ requirement_nodes(node.elements)
85
+ else
86
+ []
87
+ end
88
+ end
89
+ end
90
+
91
+ def floor_lower_than?(current_floor, released_version)
92
+ Gem::Version.new(current_floor) < released_version
93
+ rescue ArgumentError
94
+ false
95
+ end
96
+
97
+ def write_edits(edits)
98
+ Kettle::Dev::VersionBump.write_edits(edits)
99
+ end
100
+
101
+ def edit_summary(member:, edits:)
102
+ verb = (mode == :execute) ? "updated" : "would update"
103
+ ["#{verb} #{edits.length} family dependency floor(s) for #{member.name}", *edits.map { |edit| "#{verb} #{edit.fetch(:path)}" }.uniq].join("\n")
104
+ end
105
+
106
+ def with_dev_errors
107
+ yield
108
+ rescue Kettle::Dev::Error => error
109
+ raise Error, error.message
110
+ end
111
+ end
112
+ end
113
+ end
@@ -3,7 +3,7 @@
3
3
  module Kettle
4
4
  module Family
5
5
  module Version
6
- VERSION = "0.2.3"
6
+ VERSION = "0.2.5"
7
7
  end
8
8
  VERSION = Version::VERSION # Traditional Constant Location
9
9
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "version_gem"
4
+ require_relative "version"
5
+
6
+ Kettle::Family::Version.class_eval do
7
+ extend VersionGem::Basic
8
+ end
@@ -44,7 +44,7 @@ module Kettle
44
44
  "BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES" => "true"
45
45
  }.freeze
46
46
 
47
- def initialize(command:, config:, members:, execute: false, accept: true, commit: true, allow_dirty: false, publish: false, push: false, tag: false, start_step: nil, skip_steps: nil, local_ci: false, continue_ci_failures: false, gha_sha_pins_upgrade: "patch", gha_sha_pins_check: false, env_overrides: {}, debug: false, gem_signing_password: nil, jobs: nil, progress_io: nil, bup_args: [], bex_args: [], start_member: nil, start_branch: nil)
47
+ def initialize(command:, config:, members:, execute: false, accept: true, commit: true, allow_dirty: false, publish: false, push: false, tag: false, start_step: nil, skip_steps: nil, local_ci: false, continue_ci_failures: false, skip_bundle_audit: false, auto_dependency_floors: nil, gha_sha_pins_upgrade: "patch", gha_sha_pins_check: false, env_overrides: {}, debug: false, gem_signing_password: nil, jobs: nil, progress_io: nil, bup_args: [], bex_args: [], start_member: nil, start_branch: nil)
48
48
  @command = command
49
49
  @config = config
50
50
  @members = members
@@ -59,6 +59,8 @@ module Kettle
59
59
  @skip_steps = skip_steps
60
60
  @local_ci = local_ci
61
61
  @continue_ci_failures = continue_ci_failures
62
+ @skip_bundle_audit = skip_bundle_audit
63
+ @auto_dependency_floors = auto_dependency_floors.nil? ? config.release_auto_dependency_floors? : auto_dependency_floors
62
64
  @gha_sha_pins_upgrade = gha_sha_pins_upgrade
63
65
  @gha_sha_pins_check = gha_sha_pins_check
64
66
  @env_overrides = env_overrides
@@ -85,7 +87,7 @@ module Kettle
85
87
 
86
88
  private
87
89
 
88
- attr_reader :command, :config, :members, :execute, :accept, :commit, :allow_dirty, :publish, :push, :tag, :start_step, :skip_steps, :local_ci, :continue_ci_failures, :gha_sha_pins_upgrade, :gha_sha_pins_check, :env_overrides, :debug, :jobs, :progress_io, :bup_args, :bex_args, :start_member, :start_branch
90
+ attr_reader :command, :config, :members, :execute, :accept, :commit, :allow_dirty, :publish, :push, :tag, :start_step, :skip_steps, :local_ci, :continue_ci_failures, :skip_bundle_audit, :auto_dependency_floors, :gha_sha_pins_upgrade, :gha_sha_pins_check, :env_overrides, :debug, :jobs, :progress_io, :bup_args, :bex_args, :start_member, :start_branch
89
91
 
90
92
  def current_branch_results(workflow_members)
91
93
  return check_results(workflow_members) if command == "check"
@@ -286,6 +288,8 @@ module Kettle
286
288
  skip_steps: skip_steps,
287
289
  local_ci: local_ci,
288
290
  continue_ci_failures: continue_ci_failures,
291
+ skip_bundle_audit: skip_bundle_audit,
292
+ auto_dependency_floors: auto_dependency_floors,
289
293
  gha_sha_pins_upgrade: gha_sha_pins_upgrade,
290
294
  gha_sha_pins_check: gha_sha_pins_check,
291
295
  env_overrides: env_overrides,
@@ -315,17 +319,27 @@ module Kettle
315
319
  release_members.each_with_object(results) do |member, memo|
316
320
  memo.concat(release_results_for_member(member, runner: runner))
317
321
  break memo unless memo.last.ok?
322
+
323
+ remaining_members = release_members.drop(release_members.index(member) + 1)
324
+ append_dependency_floor_results(released_members: [member], dependent_members: remaining_members, runner: runner, memo: memo)
325
+ break memo unless memo.last&.ok?
318
326
  end
319
327
  end
320
328
 
321
329
  def parallel_release_member_results(release_members, initial_results)
322
330
  results = initial_results.dup
323
331
  waves = release_waves(release_members)
332
+ completed_members = []
324
333
  waves.each_with_index do |wave, index|
325
334
  results << release_wave_result(wave, index: index, total: waves.length)
326
335
  wave_results = run_release_wave(wave)
327
336
  results.concat(wave_results.flatten)
328
337
  break unless wave_results.all? { |member_results| member_results.all?(&:ok?) }
338
+
339
+ completed_members.concat(wave)
340
+ remaining_members = release_members - completed_members
341
+ append_dependency_floor_results(released_members: wave, dependent_members: remaining_members, runner: release_command_runner, memo: results)
342
+ break unless results.last&.ok?
329
343
  end
330
344
  results
331
345
  end
@@ -477,6 +491,40 @@ module Kettle
477
491
  Array(member.dependencies).map(&:to_s).select { |dependency| by_name.key?(dependency) }
478
492
  end
479
493
 
494
+ def append_dependency_floor_results(released_members:, dependent_members:, runner:, memo:)
495
+ return unless auto_dependency_floors
496
+ return if dependent_members.empty?
497
+
498
+ require_relative "dependency_floor"
499
+
500
+ floor_results = DependencyFloor.new(
501
+ released_members: released_members,
502
+ dependent_members: dependent_members,
503
+ mode: execute ? :execute : :dry_run
504
+ ).results
505
+ memo.concat(floor_results)
506
+ return unless floor_results.any? && floor_results.all?(&:ok?)
507
+
508
+ commit_dependency_floor_changes(dependent_members: floor_results.map(&:member_name), runner: runner, memo: memo) if execute && commit
509
+ end
510
+
511
+ def commit_dependency_floor_changes(dependent_members:, runner:, memo:)
512
+ by_name = members.to_h { |member| [member.name, member] }
513
+ dependent_members.each do |member_name|
514
+ member = by_name.fetch(member_name)
515
+ memo << runner.call(
516
+ member: member,
517
+ phase: "commit_dependency_floor",
518
+ command: [
519
+ "sh",
520
+ "-lc",
521
+ "if ! git diff --quiet -- '*.gemspec'; then git add -- '*.gemspec' && git commit -m '⬆️ Raise family dependency floors'; fi"
522
+ ]
523
+ )
524
+ break unless memo.last.ok?
525
+ end
526
+ end
527
+
480
528
  def distinct_git_roots?(release_members)
481
529
  roots = release_members.map { |member| git_root_for(member) }
482
530
  roots.uniq.length == roots.length
@@ -574,6 +622,7 @@ module Kettle
574
622
  args << "start_step=#{start_step}" if start_step
575
623
  args << "skip_steps=#{skip_steps}" if skip_steps && !skip_steps.to_s.empty?
576
624
  args << "--local-ci" if local_ci
625
+ args << "--skip-bundle-audit" if skip_bundle_audit
577
626
  return command if args.empty?
578
627
 
579
628
  command.is_a?(Array) ? [*command, *args] : "#{command} #{args.join(" ")}"
@@ -586,9 +635,11 @@ module Kettle
586
635
  end
587
636
 
588
637
  def base_release_env
589
- env = config.release_env.dup
638
+ env = config.family_local_path_env.merge(config.release_env)
639
+ env["KETTLE_FAMILY_CONFIG"] = config.path if config.path
590
640
  env.merge!(TEMPLATE_QUIET_ENV) unless debug
591
641
  env["K_RELEASE_CI_CONTINUE"] = "true" if continue_ci_failures
642
+ env["KETTLE_DEV_SKIP_BUNDLE_AUDIT"] = "true" if skip_bundle_audit
592
643
  env
593
644
  end
594
645
 
@@ -781,6 +832,7 @@ module Kettle
781
832
 
782
833
  def workflow_env
783
834
  {}.tap do |env|
835
+ env.merge!(config.family_local_path_env)
784
836
  if command == "template"
785
837
  env["KETTLE_JEM_TEMPLATE_PROFILE"] = config.template_profile if config.template_profile
786
838
  env["KJ_REPOSITORY_TOPOLOGY"] = config.template_repository_topology if config.template_repository_topology
@@ -860,12 +912,12 @@ module Kettle
860
912
 
861
913
  def release_lockfile_env
862
914
  base_release_env
863
- .merge(config.release_disable_local_path_env.to_h { |key| [key, "false"] })
864
915
  .merge(env_overrides)
916
+ .merge(config.release_disable_local_path_env.to_h { |key| [key, "false"] })
865
917
  end
866
918
 
867
919
  def release_allowed_local_path_roots
868
- env_overrides.filter_map do |key, value|
920
+ config.family_local_path_env.merge(env_overrides).filter_map do |key, value|
869
921
  next unless key.end_with?("_LOCAL", "_DEV")
870
922
  next if value.to_s.empty? || value.to_s.casecmp("false").zero?
871
923
 
data/lib/kettle/family.rb CHANGED
@@ -10,7 +10,6 @@ require_relative "family/command_runner"
10
10
  require_relative "family/readiness_check"
11
11
  require_relative "family/changelog_check"
12
12
  require_relative "family/git_status"
13
- require_relative "family/version_bump"
14
13
  require_relative "family/branch_lane_audit"
15
14
  require_relative "family/config"
16
15
  require_relative "family/branch_target_config"
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: 0.2.3
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -66,59 +66,59 @@ dependencies:
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0.1'
68
68
  - !ruby/object:Gem::Dependency
69
- name: tsort
69
+ name: kettle-dev
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: '0.2'
74
+ version: '2.3'
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: 2.3.0
75
78
  type: :runtime
76
79
  prerelease: false
77
80
  version_requirements: !ruby/object:Gem::Requirement
78
81
  requirements:
79
82
  - - "~>"
80
83
  - !ruby/object:Gem::Version
81
- version: '0.2'
84
+ version: '2.3'
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: 2.3.0
82
88
  - !ruby/object:Gem::Dependency
83
- name: version_gem
89
+ name: tsort
84
90
  requirement: !ruby/object:Gem::Requirement
85
91
  requirements:
86
92
  - - "~>"
87
93
  - !ruby/object:Gem::Version
88
- version: '1.1'
89
- - - ">="
90
- - !ruby/object:Gem::Version
91
- version: 1.1.13
94
+ version: '0.2'
92
95
  type: :runtime
93
96
  prerelease: false
94
97
  version_requirements: !ruby/object:Gem::Requirement
95
98
  requirements:
96
99
  - - "~>"
97
100
  - !ruby/object:Gem::Version
98
- version: '1.1'
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- version: 1.1.13
101
+ version: '0.2'
102
102
  - !ruby/object:Gem::Dependency
103
- name: kettle-dev
103
+ name: version_gem
104
104
  requirement: !ruby/object:Gem::Requirement
105
105
  requirements:
106
106
  - - "~>"
107
107
  - !ruby/object:Gem::Version
108
- version: '2.3'
108
+ version: '1.1'
109
109
  - - ">="
110
110
  - !ruby/object:Gem::Version
111
- version: 2.3.0
111
+ version: 1.1.13
112
112
  type: :runtime
113
113
  prerelease: false
114
114
  version_requirements: !ruby/object:Gem::Requirement
115
115
  requirements:
116
116
  - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: '2.3'
118
+ version: '1.1'
119
119
  - - ">="
120
120
  - !ruby/object:Gem::Version
121
- version: 2.3.0
121
+ version: 1.1.13
122
122
  - !ruby/object:Gem::Dependency
123
123
  name: bundler-audit
124
124
  requirement: !ruby/object:Gem::Requirement
@@ -176,7 +176,7 @@ dependencies:
176
176
  version: '3.1'
177
177
  - - ">="
178
178
  - !ruby/object:Gem::Version
179
- version: 3.1.3
179
+ version: 3.1.4
180
180
  type: :development
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
@@ -186,7 +186,7 @@ dependencies:
186
186
  version: '3.1'
187
187
  - - ">="
188
188
  - !ruby/object:Gem::Version
189
- version: 3.1.3
189
+ version: 3.1.4
190
190
  - !ruby/object:Gem::Dependency
191
191
  name: kettle-test
192
192
  requirement: !ruby/object:Gem::Requirement
@@ -196,7 +196,7 @@ dependencies:
196
196
  version: '2.0'
197
197
  - - ">="
198
198
  - !ruby/object:Gem::Version
199
- version: 2.0.9
199
+ version: 2.0.10
200
200
  type: :development
201
201
  prerelease: false
202
202
  version_requirements: !ruby/object:Gem::Requirement
@@ -206,7 +206,7 @@ dependencies:
206
206
  version: '2.0'
207
207
  - - ">="
208
208
  - !ruby/object:Gem::Version
209
- version: 2.0.9
209
+ version: 2.0.10
210
210
  - !ruby/object:Gem::Dependency
211
211
  name: turbo_tests2
212
212
  requirement: !ruby/object:Gem::Requirement
@@ -216,7 +216,7 @@ dependencies:
216
216
  version: '3.1'
217
217
  - - ">="
218
218
  - !ruby/object:Gem::Version
219
- version: 3.1.5
219
+ version: 3.1.6
220
220
  type: :development
221
221
  prerelease: false
222
222
  version_requirements: !ruby/object:Gem::Requirement
@@ -226,7 +226,7 @@ dependencies:
226
226
  version: '3.1'
227
227
  - - ">="
228
228
  - !ruby/object:Gem::Version
229
- version: 3.1.5
229
+ version: 3.1.6
230
230
  - !ruby/object:Gem::Dependency
231
231
  name: ruby-progressbar
232
232
  requirement: !ruby/object:Gem::Requirement
@@ -250,7 +250,7 @@ dependencies:
250
250
  version: '1.0'
251
251
  - - ">="
252
252
  - !ruby/object:Gem::Version
253
- version: 1.0.4
253
+ version: 1.0.5
254
254
  type: :development
255
255
  prerelease: false
256
256
  version_requirements: !ruby/object:Gem::Requirement
@@ -260,7 +260,7 @@ dependencies:
260
260
  version: '1.0'
261
261
  - - ">="
262
262
  - !ruby/object:Gem::Version
263
- version: 1.0.4
263
+ version: 1.0.5
264
264
  - !ruby/object:Gem::Dependency
265
265
  name: gitmoji-regex
266
266
  requirement: !ruby/object:Gem::Requirement
@@ -270,7 +270,7 @@ dependencies:
270
270
  version: '2.0'
271
271
  - - ">="
272
272
  - !ruby/object:Gem::Version
273
- version: 2.0.3
273
+ version: 2.0.4
274
274
  type: :development
275
275
  prerelease: false
276
276
  version_requirements: !ruby/object:Gem::Requirement
@@ -280,7 +280,7 @@ dependencies:
280
280
  version: '2.0'
281
281
  - - ">="
282
282
  - !ruby/object:Gem::Version
283
- version: 2.0.3
283
+ version: 2.0.4
284
284
  description: "\U0001F469‍\U0001F469‍\U0001F467‍\U0001F467 Kettle::Family provides
285
285
  scripts and conventions for coordinating related Ruby gems as one family."
286
286
  email:
@@ -319,6 +319,7 @@ files:
319
319
  - lib/kettle/family/command_result.rb
320
320
  - lib/kettle/family/command_runner.rb
321
321
  - lib/kettle/family/config.rb
322
+ - lib/kettle/family/dependency_floor.rb
322
323
  - lib/kettle/family/discovery.rb
323
324
  - lib/kettle/family/git_status.rb
324
325
  - lib/kettle/family/local_install.rb
@@ -331,6 +332,7 @@ files:
331
332
  - lib/kettle/family/selection.rb
332
333
  - lib/kettle/family/version.rb
333
334
  - lib/kettle/family/version_bump.rb
335
+ - lib/kettle/family/version_gem.rb
334
336
  - lib/kettle/family/workflow.rb
335
337
  - sig/kettle/family.rbs
336
338
  - sig/kettle/family/version.rbs
@@ -339,10 +341,10 @@ licenses:
339
341
  - AGPL-3.0-only
340
342
  metadata:
341
343
  homepage_uri: https://kettle-family.galtzo.com
342
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.2.3
343
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.2.3/CHANGELOG.md
344
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.2.5
345
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.2.5/CHANGELOG.md
344
346
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
345
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.2.3
347
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.2.5
346
348
  funding_uri: https://github.com/sponsors/pboling
347
349
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
348
350
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file