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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +27 -1
- data/README.md +1 -1
- data/lib/kettle/family/git_status.rb +7 -0
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +66 -4
- 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: 4cb4c502493482718d093219b202a58d6b4eef4d99890bdd300a18646fd87448
|
|
4
|
+
data.tar.gz: 396fa2013f8ebb7ae7a3f84f2c74a12d38af9443311f5da5629154d7cb730023
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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.
|
|
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
|
|
@@ -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
|
-
|
|
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:
|
|
585
|
-
success:
|
|
639
|
+
status: skipped ? 0 : 1,
|
|
640
|
+
success: skipped,
|
|
586
641
|
stdout: stdout,
|
|
587
642
|
stderr: "",
|
|
588
643
|
elapsed_seconds: 0.0,
|
|
589
|
-
skipped:
|
|
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.
|
|
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.
|
|
343
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v0.2.
|
|
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.
|
|
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
|