kettle-family 1.2.98 → 1.2.99

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: a170049375aa0330277e878596e92a61b58655a29ca9aeba1e9ab0006fa46c04
4
- data.tar.gz: 5bfcd0c99c774fad470b8510188e6eaad700c2ca3157f64eb1a9b52ac320d6c6
3
+ metadata.gz: e3fff3ab628dc6f5338ddf0a820485b986ce5f40aec27a905f1ee15e18450ab9
4
+ data.tar.gz: fa34533d50ee506f05e2f1cd9f865c011d12e91996b1c38cbabfe76eb0f9c676
5
5
  SHA512:
6
- metadata.gz: c527202894d4bca3ada36684b9a7f3700052ebd53967ebb7ea7a65cc0db5cc20a5bf04eec6730f380a444fd69ed6828428fc29e16a1718371eab48eea0647601
7
- data.tar.gz: b147945409bca869bf23ea6ab8773b7fc8fc6c7677ef877367d2970b3c73edb1efe628606c267de48f58af8cb4db761d527ce8df457b1fe6d4f729ae8c662229
6
+ metadata.gz: 81f62b1263cd2afbe483f7af09d0a4c1b3e4efac0328938592c84e381d5d731188031e1e9dad97ce343573b025a50d9de62424ce92d12be7245beced5de9996d
7
+ data.tar.gz: 95713fbc85dd8e285b7b94364bfe799735df2d2b9f19b1205d2ad0819d793f66c94e39aa3b3816826b2987dacabc14519e24f01a0447f29af1edb55567d49f95
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,19 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.2.99] - 2026-09-09
34
+
35
+ - TAG: [v1.2.99][1.2.99t]
36
+ - COVERAGE: 93.52% -- 6261/6695 lines in 35 files
37
+ - BRANCH COVERAGE: 78.19% -- 2542/3251 branches in 35 files
38
+ - 32.75% documented
39
+
40
+ ### Fixed
41
+
42
+ - Keep resumed family releases on the prepared CI commit by skipping dependency-floor reconciliation and disabling sibling paths for child release validation.
43
+
44
+ - Scope branch-stack release resumes to the prepared branch so later targets run their complete release lifecycle before CI monitoring.
45
+
33
46
  ## [1.2.98] - 2026-09-09
34
47
 
35
48
  - TAG: [v1.2.98][1.2.98t]
@@ -2692,7 +2705,9 @@ Please file a bug if you notice a violation of semantic versioning.
2692
2705
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
2693
2706
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
2694
2707
 
2695
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.98...HEAD
2708
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.2.99...HEAD
2709
+ [1.2.99]: https://github.com/kettle-dev/kettle-family/compare/v1.2.98...v1.2.99
2710
+ [1.2.99t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.99
2696
2711
  [1.2.98]: https://github.com/kettle-dev/kettle-family/compare/v1.2.97...v1.2.98
2697
2712
  [1.2.98t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.2.98
2698
2713
  [1.2.97]: https://github.com/kettle-dev/kettle-family/compare/v1.2.96...v1.2.97
data/README.md CHANGED
@@ -435,6 +435,12 @@ metadata fix requires a new full release run from step 0:
435
435
  kettle-family release --publish --start-step 10 --local-ci
436
436
  ```
437
437
 
438
+ For `release.target_branches`, a resume position applies only to the first
439
+ selected branch, which is the one whose already-pushed release commit is being
440
+ resumed. Each later branch starts from step 0 so it creates, commits, and pushes
441
+ its own release candidate before `kettle-release` begins remote CI monitoring.
442
+ Use `--start-at member@branch` when the resumed branch is not the first target.
443
+
438
444
  `--skip-changelog` skips only `kettle-changelog`; `--skip-appraisals` skips
439
445
  only the Appraisal generation portion of release step 5 and still runs
440
446
  `bin/rake yard`; and `--skip-ci` skips only remote CI monitoring. The generic
@@ -1180,7 +1186,7 @@ Thanks for RTFM. ☺️
1180
1186
  [📌gitmoji]: https://gitmoji.dev
1181
1187
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1182
1188
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1183
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.679-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1189
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.695-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1184
1190
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
1185
1191
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1186
1192
  [📄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.98"
8
+ VERSION = "1.2.99"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -1492,7 +1492,7 @@ module Kettle
1492
1492
  memo.concat(template_branch_sync_results(branch_members, runner: runner))
1493
1493
  break memo unless memo.last&.ok?
1494
1494
  end
1495
- branch_results = current_branch_results(branch_members)
1495
+ branch_results = with_release_branch_resume_scope { current_branch_results(branch_members) }
1496
1496
  tag_branch_results(branch_results, branch)
1497
1497
  memo.concat(branch_results)
1498
1498
 
@@ -2604,6 +2604,10 @@ module Kettle
2604
2604
  end
2605
2605
 
2606
2606
  def release_dependency_floor_reconciliation_results(release_members)
2607
+ # A step resume must continue the already-prepared release commit.
2608
+ # Reconciliation can rewrite lockfiles and create a new commit, which
2609
+ # invalidates the CI SHA selected by the caller's --start-step.
2610
+ return [] if release_step_resume?
2607
2611
  return [] unless execute && auto_dependency_floors
2608
2612
  # Monorepo members intentionally keep their family dependencies as
2609
2613
  # paths in the canonical development lockfile. Registry reconciliation
@@ -2671,6 +2675,7 @@ module Kettle
2671
2675
  end
2672
2676
 
2673
2677
  def append_dependency_floor_results(released_members:, dependent_members:, runner:, memo:)
2678
+ return if release_step_resume?
2674
2679
  return unless auto_dependency_floors
2675
2680
  return if dependent_members.empty?
2676
2681
 
@@ -3486,11 +3491,33 @@ module Kettle
3486
3491
  end
3487
3492
 
3488
3493
  def release_start_step_for(member)
3494
+ return nil if release_branch_resume_scoped? && !@release_branch_resume_active
3489
3495
  return start_step unless fast_recovery_for?(member)
3490
3496
 
3491
3497
  (fast_recovery == "retry-ci") ? 10 : 11
3492
3498
  end
3493
3499
 
3500
+ # A release resume identifies one already-prepared branch commit. Later
3501
+ # branches in the same stack still need their complete lifecycle: build,
3502
+ # commit, push, and only then CI monitoring. Do not carry start_step (or
3503
+ # named CI recovery) beyond that first branch.
3504
+ def with_release_branch_resume_scope
3505
+ return yield unless release_branch_resume_scoped?
3506
+
3507
+ previous = @release_branch_resume_active
3508
+ @release_branch_resume_active = !@release_branch_resume_consumed
3509
+ yield
3510
+ ensure
3511
+ @release_branch_resume_consumed = true if @release_branch_resume_active
3512
+ @release_branch_resume_active = previous
3513
+ end
3514
+
3515
+ def release_branch_resume_scoped?
3516
+ command == "release" &&
3517
+ !config.release_target_branches.empty? &&
3518
+ (!start_step.nil? || !fast_recovery.nil?)
3519
+ end
3520
+
3494
3521
  def release_skip_steps_for(member)
3495
3522
  steps = Array(skip_steps).flat_map { |entry| entry.to_s.split(",") }.map(&:strip).reject(&:empty?)
3496
3523
  steps << "10" if skip_ci
@@ -3641,6 +3668,13 @@ module Kettle
3641
3668
  env = execution_profile(release_bootstrap_execution_profile, release_env)
3642
3669
  env.merge!(release_wave_local_path_env_for(member, family_root: family_root))
3643
3670
  env.merge!(release_local_path_policy_env(family_root: family_root))
3671
+ # A resumed child kettle-release starts in the member's mise
3672
+ # environment after the release candidate was already prepared.
3673
+ # Disable sibling paths so mise cannot reactivate them before the
3674
+ # resumed release validates that immutable lockfile. A new release
3675
+ # retains the staged local-graph policy until kettle-release reaches
3676
+ # its own release-lockfile boundary.
3677
+ env.merge!(release_lockfile_local_path_env_overrides(member)) if release_step_resume?
3644
3678
  # Family release performs one live pin review before member releases.
3645
3679
  # Child kettle-release must consume that reviewed cache instead of
3646
3680
  # repeating the GitHub API lookup for every member.
@@ -5390,6 +5424,10 @@ module Kettle
5390
5424
  !start_step.nil? || !skip_steps.to_s.empty? || fast_recovery || skip_ci
5391
5425
  end
5392
5426
 
5427
+ def release_step_resume?
5428
+ !start_step.nil? || !skip_steps.to_s.empty?
5429
+ end
5430
+
5393
5431
  def execution_profile(profile, env)
5394
5432
  profile = ExecutionProfile.fetch(profile) unless profile.is_a?(ExecutionProfile::Definition)
5395
5433
  env = env.dup
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.98
4
+ version: 1.2.99
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -443,10 +443,10 @@ licenses:
443
443
  - AGPL-3.0-only
444
444
  metadata:
445
445
  homepage_uri: https://kettle-family.galtzo.com
446
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.98
447
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.98/CHANGELOG.md
446
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.2.99
447
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.2.99/CHANGELOG.md
448
448
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
449
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.98
449
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.2.99
450
450
  funding_uri: https://github.com/sponsors/pboling
451
451
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
452
452
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file