kettle-dev 2.2.5 → 2.2.7
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 +37 -1
- data/README.md +1 -1
- data/exe/kettle-changelog +31 -4
- data/lib/kettle/dev/changelog_cli.rb +61 -2
- data/lib/kettle/dev/version.rb +1 -1
- data/sig/kettle/dev/changelog_cli.rbs +7 -2
- 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: 3468f777c78fb3017468fbb76728ee056aa1924738b8935d1fd748d41c91f3ff
|
|
4
|
+
data.tar.gz: 10386b28122fb17e85f555c70784a398d0f8692f3b02d77ebafab8540ae74cc6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3de744ea449a1f6f738b6b19704bbf48a996a67c835201310bfd60b9127fa3b3a2634fd52c9f3d8f2ce45a571e6caf316f91d902f2f8fab8a8d3511bc21c13bc
|
|
7
|
+
data.tar.gz: 1efa9c2da744cdd3fa16d0676b06b78836df3d4194ee6908a756ad479d63c5c50e015a8dde67f416d0cd2e2da3e3c9bff4971c980840603db4613c9bf9f37cc3
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,38 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [2.2.7] - 2026-06-13
|
|
34
|
+
|
|
35
|
+
- TAG: [v2.2.7][2.2.7t]
|
|
36
|
+
- COVERAGE: 92.36% -- 3843/4161 lines in 28 files
|
|
37
|
+
- BRANCH COVERAGE: 73.54% -- 1520/2067 branches in 28 files
|
|
38
|
+
- 66.02% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
#### Changelog
|
|
43
|
+
|
|
44
|
+
- Added `kettle-changelog --release-state` / `--release-status` with optional
|
|
45
|
+
`--json` output for single-gem changelog release state reporting.
|
|
46
|
+
- Added a richer `Kettle::Dev::ChangelogCLI#release_state` API that reports the
|
|
47
|
+
latest released version, latest changelog release section, and pending
|
|
48
|
+
changelog sources.
|
|
49
|
+
|
|
50
|
+
## [2.2.6] - 2026-06-13
|
|
51
|
+
|
|
52
|
+
- TAG: [v2.2.6][2.2.6t]
|
|
53
|
+
- COVERAGE: 92.27% -- 3833/4154 lines in 28 files
|
|
54
|
+
- BRANCH COVERAGE: 73.51% -- 1518/2065 branches in 28 files
|
|
55
|
+
- 66.67% documented
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
|
|
59
|
+
#### Changelog
|
|
60
|
+
|
|
61
|
+
- Added `kettle-changelog --pending-release`, a non-mutating query that exits
|
|
62
|
+
successfully when `CHANGELOG.md` has unreleased entries or its most recent
|
|
63
|
+
release section has not been published yet.
|
|
64
|
+
|
|
33
65
|
## [2.2.5] - 2026-06-13
|
|
34
66
|
|
|
35
67
|
- TAG: [v2.2.5][2.2.5t]
|
|
@@ -2060,7 +2092,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2060
2092
|
- Selecting will run the selected workflow via `act`
|
|
2061
2093
|
- This may move to its own gem in the future.
|
|
2062
2094
|
|
|
2063
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.
|
|
2095
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.7...HEAD
|
|
2096
|
+
[2.2.7]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.6...v2.2.7
|
|
2097
|
+
[2.2.7t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.2.7
|
|
2098
|
+
[2.2.6]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.5...v2.2.6
|
|
2099
|
+
[2.2.6t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.2.6
|
|
2064
2100
|
[2.2.5]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.4...v2.2.5
|
|
2065
2101
|
[2.2.5t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.2.5
|
|
2066
2102
|
[2.2.4]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.3...v2.2.4
|
data/README.md
CHANGED
|
@@ -854,7 +854,7 @@ Thanks for RTFM. ☺️
|
|
|
854
854
|
[📌gitmoji]: https://gitmoji.dev
|
|
855
855
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
856
856
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
857
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-4.
|
|
857
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-4.161-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
858
858
|
[🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
|
|
859
859
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
860
860
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
data/exe/kettle-changelog
CHANGED
|
@@ -41,7 +41,7 @@ begin
|
|
|
41
41
|
|
|
42
42
|
# This library
|
|
43
43
|
require "kettle/dev"
|
|
44
|
-
puts "== #{script_basename} v#{Kettle::Dev::Version::VERSION} =="
|
|
44
|
+
puts "== #{script_basename} v#{Kettle::Dev::Version::VERSION} ==" unless ARGV.include?("--json")
|
|
45
45
|
rescue LoadError => e
|
|
46
46
|
warn("#{script_basename}: could not load dependency: #{e.class}: #{e.message}")
|
|
47
47
|
warn("Hint: Ensure the host project has kettle-dev as a dependency and run bundle install.")
|
|
@@ -51,7 +51,7 @@ end
|
|
|
51
51
|
begin
|
|
52
52
|
if ARGV.include?("-h") || ARGV.include?("--help")
|
|
53
53
|
puts <<~USAGE
|
|
54
|
-
Usage: kettle-changelog [--update-prep] [--no-strict] [--no-coverage-threshold]
|
|
54
|
+
Usage: kettle-changelog [--update-prep] [--pending-release] [--release-state] [--json] [--no-strict] [--no-coverage-threshold]
|
|
55
55
|
|
|
56
56
|
Detects the current version from lib/**/version.rb, the latest live release, and
|
|
57
57
|
the most recent CHANGELOG.md release section, then prompts to confirm the selected plan:
|
|
@@ -62,6 +62,10 @@ begin
|
|
|
62
62
|
|
|
63
63
|
Options:
|
|
64
64
|
--update-prep Force updating the most recent prepared release section in place
|
|
65
|
+
--pending-release Query whether the changelog has release work pending; exits 0 for yes, 1 for no
|
|
66
|
+
--release-state,
|
|
67
|
+
--release-status Print changelog release state, including latest published release and pending sources
|
|
68
|
+
--json Print query output as JSON
|
|
65
69
|
--no-strict Allow missing coverage and yard data (warnings only, no errors)
|
|
66
70
|
--no-coverage-threshold Generate coverage without hard-failing below configured thresholds
|
|
67
71
|
|
|
@@ -89,11 +93,34 @@ end
|
|
|
89
93
|
begin
|
|
90
94
|
# Determine if strict mode is enabled (default: true)
|
|
91
95
|
strict_mode = !ARGV.include?("--no-strict") && ENV.fetch("K_CHANGELOG_STRICT", "true").downcase != "false"
|
|
92
|
-
update_prep = ARGV.
|
|
96
|
+
update_prep = ARGV.delete("--update-prep")
|
|
97
|
+
pending_release_query = ARGV.delete("--pending-release")
|
|
98
|
+
release_state_query = ARGV.delete("--release-state") || ARGV.delete("--release-status")
|
|
99
|
+
json_output = ARGV.delete("--json")
|
|
93
100
|
coverage_threshold_disabled = ARGV.include?("--no-coverage-threshold") || ARGV.include?("--no-coverage-thresholds")
|
|
94
101
|
coverage_hard = !coverage_threshold_disabled && ENV.fetch("K_CHANGELOG_COVERAGE_HARD", "true").downcase != "false"
|
|
95
102
|
|
|
96
|
-
Kettle::Dev::ChangelogCLI.new(strict: strict_mode, enforce_coverage_thresholds: coverage_hard, update_prep: update_prep)
|
|
103
|
+
cli = Kettle::Dev::ChangelogCLI.new(strict: strict_mode, enforce_coverage_thresholds: coverage_hard, update_prep: update_prep)
|
|
104
|
+
if release_state_query
|
|
105
|
+
state = cli.release_state
|
|
106
|
+
puts(json_output ? JSON.pretty_generate(state) : cli.release_state_table(state))
|
|
107
|
+
exit(0)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
if pending_release_query
|
|
111
|
+
state = cli.pending_release_status
|
|
112
|
+
output = if json_output
|
|
113
|
+
JSON.pretty_generate(state)
|
|
114
|
+
elsif state.fetch(:pending_release)
|
|
115
|
+
"true"
|
|
116
|
+
else
|
|
117
|
+
"false"
|
|
118
|
+
end
|
|
119
|
+
puts(output)
|
|
120
|
+
exit(state.fetch(:pending_release) ? 0 : 1)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
cli.run
|
|
97
124
|
rescue LoadError => e
|
|
98
125
|
warn("#{script_basename}: could not load dependency: #{e.class}: #{e.message}")
|
|
99
126
|
warn(e.backtrace.join("\n")) if ENV["DEBUG"]
|
|
@@ -24,8 +24,8 @@ module Kettle
|
|
|
24
24
|
# @param strict [Boolean] when true (default), require coverage and yard data; raise errors if unavailable
|
|
25
25
|
# @param enforce_coverage_thresholds [Boolean] when true, fail strict coverage generation below project thresholds
|
|
26
26
|
# @param update_prep [Boolean] when true, update the most recent prepared release section in place
|
|
27
|
-
def initialize(strict: true, enforce_coverage_thresholds: true, update_prep: false)
|
|
28
|
-
@root =
|
|
27
|
+
def initialize(strict: true, enforce_coverage_thresholds: true, update_prep: false, root: Kettle::Dev::CIHelpers.project_root)
|
|
28
|
+
@root = root
|
|
29
29
|
@changelog_path = File.join(@root, "CHANGELOG.md")
|
|
30
30
|
@coverage_path = File.join(@root, "coverage", "coverage.json")
|
|
31
31
|
@strict = strict
|
|
@@ -135,12 +135,71 @@ module Kettle
|
|
|
135
135
|
puts "CHANGELOG.md updated with v#{version} section."
|
|
136
136
|
end
|
|
137
137
|
|
|
138
|
+
def pending_release_status
|
|
139
|
+
release_state
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def release_state
|
|
143
|
+
changelog = File.read(@changelog_path)
|
|
144
|
+
unreleased_block, _before, after = extract_unreleased(changelog)
|
|
145
|
+
unreleased_entries = unreleased_block_has_entries?(unreleased_block)
|
|
146
|
+
latest_changelog_version = detect_previous_version(after.to_s)
|
|
147
|
+
version = detect_version
|
|
148
|
+
gem_name = detect_gem_name
|
|
149
|
+
release_lookup_version = latest_changelog_version || version
|
|
150
|
+
latest_overall, latest_for_series = latest_released_versions(gem_name, release_lookup_version)
|
|
151
|
+
latest_target = latest_release_target(release_lookup_version, latest_overall, latest_for_series)
|
|
152
|
+
prepared_release_pending = !!latest_changelog_version && latest_target != latest_changelog_version
|
|
153
|
+
|
|
154
|
+
{
|
|
155
|
+
root: @root,
|
|
156
|
+
gem_name: gem_name,
|
|
157
|
+
version: version,
|
|
158
|
+
pending: unreleased_entries || prepared_release_pending,
|
|
159
|
+
pending_release: unreleased_entries || prepared_release_pending,
|
|
160
|
+
unreleased_entries: unreleased_entries,
|
|
161
|
+
prepared_release_pending: prepared_release_pending,
|
|
162
|
+
latest_changelog_version: latest_changelog_version,
|
|
163
|
+
latest_released: latest_overall,
|
|
164
|
+
latest_released_for_current_series: latest_for_series,
|
|
165
|
+
latest_release_target: latest_target
|
|
166
|
+
}
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def release_state_table(state = release_state)
|
|
170
|
+
rows = [
|
|
171
|
+
["gem", "version.rb", "latest released", "latest changelog", "unreleased", "prepared", "pending"],
|
|
172
|
+
[
|
|
173
|
+
state.fetch(:gem_name),
|
|
174
|
+
state.fetch(:version),
|
|
175
|
+
state.fetch(:latest_released) || "unknown",
|
|
176
|
+
state.fetch(:latest_changelog_version) || "none",
|
|
177
|
+
yes_no(state.fetch(:unreleased_entries)),
|
|
178
|
+
yes_no(state.fetch(:prepared_release_pending)),
|
|
179
|
+
yes_no(state.fetch(:pending_release))
|
|
180
|
+
]
|
|
181
|
+
]
|
|
182
|
+
widths = rows.transpose.map { |column| column.map(&:length).max }
|
|
183
|
+
rows.map.with_index do |row, index|
|
|
184
|
+
line = row.each_with_index.map { |value, i| value.ljust(widths.fetch(i)) }.join(" ").rstrip
|
|
185
|
+
if index == 0
|
|
186
|
+
[line, widths.map { |width| "-" * width }.join(" ")].join("\n")
|
|
187
|
+
else
|
|
188
|
+
line
|
|
189
|
+
end
|
|
190
|
+
end.join("\n")
|
|
191
|
+
end
|
|
192
|
+
|
|
138
193
|
private
|
|
139
194
|
|
|
140
195
|
def abort(msg)
|
|
141
196
|
Kettle::Dev::ExitAdapter.abort(msg)
|
|
142
197
|
end
|
|
143
198
|
|
|
199
|
+
def yes_no(value)
|
|
200
|
+
value ? "yes" : "no"
|
|
201
|
+
end
|
|
202
|
+
|
|
144
203
|
def detect_plan(changelog, version)
|
|
145
204
|
latest_overall = nil
|
|
146
205
|
latest_for_series = nil
|
data/lib/kettle/dev/version.rb
CHANGED
|
@@ -10,11 +10,17 @@ module Kettle
|
|
|
10
10
|
@changelog_path: String
|
|
11
11
|
@coverage_path: String
|
|
12
12
|
|
|
13
|
-
def initialize: () -> void
|
|
13
|
+
def initialize: (?strict: bool, ?enforce_coverage_thresholds: bool, ?update_prep: bool, ?root: String) -> void
|
|
14
14
|
|
|
15
15
|
# Main entry point that updates CHANGELOG.md
|
|
16
16
|
def run: () -> void
|
|
17
17
|
|
|
18
|
+
def pending_release_status: () -> Hash[Symbol, untyped]
|
|
19
|
+
|
|
20
|
+
def release_state: () -> Hash[Symbol, untyped]
|
|
21
|
+
|
|
22
|
+
def release_state_table: (?Hash[Symbol, untyped] state) -> String
|
|
23
|
+
|
|
18
24
|
private
|
|
19
25
|
|
|
20
26
|
# Abort with error message
|
|
@@ -61,4 +67,3 @@ module Kettle
|
|
|
61
67
|
end
|
|
62
68
|
end
|
|
63
69
|
end
|
|
64
|
-
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kettle-dev
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.2.
|
|
4
|
+
version: 2.2.7
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -338,10 +338,10 @@ licenses:
|
|
|
338
338
|
- AGPL-3.0-only
|
|
339
339
|
metadata:
|
|
340
340
|
homepage_uri: https://kettle-dev.galtzo.com
|
|
341
|
-
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.2.
|
|
342
|
-
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.2.
|
|
341
|
+
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.2.7
|
|
342
|
+
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.2.7/CHANGELOG.md
|
|
343
343
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
|
|
344
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.2.
|
|
344
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.2.7
|
|
345
345
|
funding_uri: https://github.com/sponsors/pboling
|
|
346
346
|
wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
|
|
347
347
|
news_uri: https://www.railsbling.com/tags/kettle-dev
|
metadata.gz.sig
CHANGED
|
Binary file
|