kettle-family 0.2.0 → 0.2.2

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: 1f37904c4583ed3dbc1ef2c372c5d4aa7e3ecec95d8aba520e0979065106087f
4
- data.tar.gz: ce0b99d87d7a815467428209c2f504ddafc0800890dabf9af5b534e4f8073fc0
3
+ metadata.gz: 4cb4c502493482718d093219b202a58d6b4eef4d99890bdd300a18646fd87448
4
+ data.tar.gz: 396fa2013f8ebb7ae7a3f84f2c74a12d38af9443311f5da5629154d7cb730023
5
5
  SHA512:
6
- metadata.gz: b98994c1f6daa8fd29ec064de3b23a241c3e25c3786b67e67bc765dea795e92dfa6cf3ba510a4782f9a9b5a954ef0f748bb82c0d6f94a5f2a5b1f95da9ac0be9
7
- data.tar.gz: '0189a3faba9e70ec5e333eaee9eaf956d4c7151ded78916f63faaf8d1bce1c2a14d10c636fcec54bb7555dff7332cb0ae8adc9f763231d75b94eac0ec0caaf12'
6
+ metadata.gz: e81e3a9cfba607441cbd5ae8dce13002c92cd9a2744dce24a1928b03d607360bec111d1314fec7570a3365e1631b86ae62af6fe00498084eabc2d74d07bde916
7
+ data.tar.gz: af9e4962ed8bcad15481eca3e38139ad610ab7ce470009ea6aa815e7c46c396efe382d1a520a24c3411d47d127b9311cc9f8137c6691fcaca226ddd046311d3b
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,25 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [0.2.2] - 2026-07-02
34
+
35
+ - TAG: [v0.2.2][0.2.2t]
36
+ - COVERAGE: 95.54% -- 2205/2308 lines in 21 files
37
+ - BRANCH COVERAGE: 76.53% -- 714/933 branches in 21 files
38
+ - 29.82% documented
39
+
40
+ ### Fixed
41
+
42
+ - Branch-target workflows now fail before doing member work when a dirty
43
+ worktree would block `git checkout` for configured release target branches.
44
+
45
+ ## [0.2.1] - 2026-07-02
46
+
47
+ - TAG: [v0.2.1][0.2.1t]
48
+ - COVERAGE: 95.45% -- 2180/2284 lines in 21 files
49
+ - BRANCH COVERAGE: 76.39% -- 702/919 branches in 21 files
50
+ - 29.96% documented
51
+
33
52
  ## [0.2.0] - 2026-07-02
34
53
 
35
54
  - TAG: [v0.2.0][0.2.0t]
@@ -49,6 +68,9 @@ Please file a bug if you notice a violation of semantic versioning.
49
68
 
50
69
  ### Fixed
51
70
 
71
+ - `kettle-family release --execute --publish` now skips already-published
72
+ members whose release-state reports no pending release, even when current
73
+ `HEAD` no longer matches the release tag.
52
74
  - `kettle-family bump-version` now prefers `lib/<gem_name>/version.rb` over
53
75
  alphabetically earlier compatibility namespace version files when discovering
54
76
  each member's editable version file.
@@ -595,7 +617,11 @@ Please file a bug if you notice a violation of semantic versioning.
595
617
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
596
618
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
597
619
 
598
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v0.2.0...HEAD
620
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v0.2.2...HEAD
621
+ [0.2.2]: https://github.com/kettle-dev/kettle-family/compare/v0.2.1...v0.2.2
622
+ [0.2.2t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.2.2
623
+ [0.2.1]: https://github.com/kettle-dev/kettle-family/compare/v0.2.0...v0.2.1
624
+ [0.2.1t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.2.1
599
625
  [0.2.0]: https://github.com/kettle-dev/kettle-family/compare/v0.1.32...v0.2.0
600
626
  [0.2.0t]: https://github.com/kettle-dev/kettle-family/releases/tag/v0.2.0
601
627
  [0.1.32]: https://github.com/kettle-dev/kettle-family/compare/v0.1.31...v0.1.32
data/README.md CHANGED
@@ -592,7 +592,7 @@ Thanks for RTFM. ☺️
592
592
  [📌gitmoji]: https://gitmoji.dev
593
593
  [📌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
594
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
595
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-2.274-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
595
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-2.308-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
596
596
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
597
597
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
598
598
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -9,6 +9,13 @@ module Kettle
9
9
  stdout, _stderr, status = Open3.capture3("git", "status", "--short", chdir: root)
10
10
  status.success? && !stdout.empty?
11
11
  end
12
+
13
+ def self.dirty_paths(root)
14
+ stdout, _stderr, status = Open3.capture3("git", "status", "--short", chdir: root)
15
+ return [] unless status.success?
16
+
17
+ stdout.lines.map(&:chomp).reject(&:empty?)
18
+ end
12
19
  end
13
20
  end
14
21
  end
@@ -3,7 +3,7 @@
3
3
  module Kettle
4
4
  module Family
5
5
  module Version
6
- VERSION = "0.2.0"
6
+ VERSION = "0.2.2"
7
7
  end
8
8
  VERSION = Version::VERSION # Traditional Constant Location
9
9
  end
@@ -73,6 +73,9 @@ module Kettle
73
73
  end
74
74
 
75
75
  def results
76
+ preflight = branch_checkout_dirty_preflight_results
77
+ return preflight unless preflight.empty?
78
+
76
79
  prompt_for_gem_signing_password if command == "release" && execute && release_signing_prompt_required?
77
80
  return branch_target_results unless config.release_target_branches.empty?
78
81
  return member_local_branch_target_results if member_local_branch_targets?
@@ -204,6 +207,52 @@ module Kettle
204
207
  end
205
208
  end
206
209
 
210
+ def branch_checkout_dirty_preflight_results
211
+ return [] unless execute
212
+ return [] if allow_dirty
213
+ return [] unless branch_checkout_preflight_required?
214
+
215
+ branch_checkout_preflight_members.filter_map do |member|
216
+ dirty_paths = GitStatus.dirty_paths(member.root)
217
+ next if dirty_paths.empty?
218
+
219
+ branch_checkout_dirty_result(member, dirty_paths)
220
+ end
221
+ end
222
+
223
+ def branch_checkout_preflight_required?
224
+ !config.release_target_branches.empty? || member_local_branch_targets?
225
+ end
226
+
227
+ def branch_checkout_preflight_members
228
+ members_with_targets = members.select { |member| member_local_release_config(member) }
229
+ members_with_targets = [family_member] if !config.release_target_branches.empty?
230
+ members_with_targets
231
+ end
232
+
233
+ def branch_checkout_dirty_result(member, dirty_paths)
234
+ CommandResult.new(
235
+ member_name: member.name,
236
+ phase: "release_checkout_preflight",
237
+ command: ["git", "status", "--short"],
238
+ workdir: member.root,
239
+ status: 1,
240
+ success: false,
241
+ stdout: "",
242
+ stderr: branch_checkout_dirty_message(dirty_paths),
243
+ elapsed_seconds: 0.0,
244
+ skipped: false,
245
+ reason: "dirty worktree blocks release target branch checkout"
246
+ )
247
+ end
248
+
249
+ def branch_checkout_dirty_message(dirty_paths)
250
+ [
251
+ "local changes would block release target branch checkout; commit or stash them before running kettle-family",
252
+ *dirty_paths
253
+ ].join("\n")
254
+ end
255
+
207
256
  def release_member_local_branch_target_results
208
257
  runner = command_runner
209
258
  results = []
@@ -570,10 +619,16 @@ module Kettle
570
619
  if current_release_head
571
620
  stdout = "#{member.name} #{member.version} is already published and current HEAD matches #{tag}; skipping release"
572
621
  reason = "already released"
573
- else
622
+ skipped = true
623
+ elsif release_pending?(member)
574
624
  stdout = "#{member.name} #{member.version} is already published, but current HEAD is not #{tag}. " \
575
625
  "Bump the version with `kettle-family bump-version patch --execute --only #{member.name}` before releasing."
576
626
  reason = "published version does not match current HEAD"
627
+ skipped = false
628
+ else
629
+ stdout = "#{member.name} #{member.version} is already published and release-state reports no pending release; skipping release"
630
+ reason = "already released; no pending release"
631
+ skipped = true
577
632
  end
578
633
 
579
634
  CommandResult.new(
@@ -581,16 +636,23 @@ module Kettle
581
636
  phase: "release_skip",
582
637
  command: ["internal", "released-version-check", member.version],
583
638
  workdir: member.root,
584
- status: current_release_head ? 0 : 1,
585
- success: current_release_head,
639
+ status: skipped ? 0 : 1,
640
+ success: skipped,
586
641
  stdout: stdout,
587
642
  stderr: "",
588
643
  elapsed_seconds: 0.0,
589
- skipped: current_release_head,
644
+ skipped: skipped,
590
645
  reason: reason
591
646
  )
592
647
  end
593
648
 
649
+ def release_pending?(member)
650
+ results = ReleaseStateCheck.new(members: [member], config: config).results
651
+ return true unless results.all?(&:ok?)
652
+
653
+ results.any? { |result| result.state.fetch("pending_release", true) }
654
+ end
655
+
594
656
  def release_tag_name(version)
595
657
  "v#{version}"
596
658
  end
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.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -339,10 +339,10 @@ licenses:
339
339
  - AGPL-3.0-only
340
340
  metadata:
341
341
  homepage_uri: https://kettle-family.galtzo.com
342
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.2.0
343
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.2.0/CHANGELOG.md
342
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v0.2.2
343
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.2.2/CHANGELOG.md
344
344
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
345
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.2.0
345
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/0.2.2
346
346
  funding_uri: https://github.com/sponsors/pboling
347
347
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
348
348
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file