kettle-dev 2.2.6 → 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 +20 -1
- data/README.md +1 -1
- data/exe/kettle-changelog +23 -5
- data/lib/kettle/dev/changelog_cli.rb +45 -21
- data/lib/kettle/dev/version.rb +1 -1
- data/sig/kettle/dev/changelog_cli.rbs +5 -1
- 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,23 @@ 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
|
+
|
|
33
50
|
## [2.2.6] - 2026-06-13
|
|
34
51
|
|
|
35
52
|
- TAG: [v2.2.6][2.2.6t]
|
|
@@ -2075,7 +2092,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2075
2092
|
- Selecting will run the selected workflow via `act`
|
|
2076
2093
|
- This may move to its own gem in the future.
|
|
2077
2094
|
|
|
2078
|
-
[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
|
|
2079
2098
|
[2.2.6]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.5...v2.2.6
|
|
2080
2099
|
[2.2.6t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.2.6
|
|
2081
2100
|
[2.2.5]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.4...v2.2.5
|
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] [--pending-release] [--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:
|
|
@@ -63,6 +63,9 @@ begin
|
|
|
63
63
|
Options:
|
|
64
64
|
--update-prep Force updating the most recent prepared release section in place
|
|
65
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
|
|
66
69
|
--no-strict Allow missing coverage and yard data (warnings only, no errors)
|
|
67
70
|
--no-coverage-threshold Generate coverage without hard-failing below configured thresholds
|
|
68
71
|
|
|
@@ -92,14 +95,29 @@ begin
|
|
|
92
95
|
strict_mode = !ARGV.include?("--no-strict") && ENV.fetch("K_CHANGELOG_STRICT", "true").downcase != "false"
|
|
93
96
|
update_prep = ARGV.delete("--update-prep")
|
|
94
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")
|
|
95
100
|
coverage_threshold_disabled = ARGV.include?("--no-coverage-threshold") || ARGV.include?("--no-coverage-thresholds")
|
|
96
101
|
coverage_hard = !coverage_threshold_disabled && ENV.fetch("K_CHANGELOG_COVERAGE_HARD", "true").downcase != "false"
|
|
97
102
|
|
|
98
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
|
+
|
|
99
110
|
if pending_release_query
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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)
|
|
103
121
|
end
|
|
104
122
|
|
|
105
123
|
cli.run
|
|
@@ -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
|
|
@@ -136,46 +136,70 @@ module Kettle
|
|
|
136
136
|
end
|
|
137
137
|
|
|
138
138
|
def pending_release_status
|
|
139
|
+
release_state
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def release_state
|
|
139
143
|
changelog = File.read(@changelog_path)
|
|
140
144
|
unreleased_block, _before, after = extract_unreleased(changelog)
|
|
141
145
|
unreleased_entries = unreleased_block_has_entries?(unreleased_block)
|
|
142
146
|
latest_changelog_version = detect_previous_version(after.to_s)
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
begin
|
|
150
|
-
gem_name = detect_gem_name
|
|
151
|
-
latest_overall, latest_for_series = latest_released_versions(gem_name, latest_changelog_version)
|
|
152
|
-
latest_target = latest_release_target(latest_changelog_version, latest_overall, latest_for_series)
|
|
153
|
-
rescue => e
|
|
154
|
-
warn("[kettle-changelog] gem.coop release check failed: #{e.class}: #{e.message}")
|
|
155
|
-
warn("Treating the most recent CHANGELOG.md release section as pending because live release info is unavailable.")
|
|
156
|
-
end
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
prepared_release_pending = !unreleased_entries && !!latest_changelog_version && latest_target != latest_changelog_version
|
|
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
|
|
160
153
|
|
|
161
154
|
{
|
|
155
|
+
root: @root,
|
|
156
|
+
gem_name: gem_name,
|
|
157
|
+
version: version,
|
|
162
158
|
pending: unreleased_entries || prepared_release_pending,
|
|
159
|
+
pending_release: unreleased_entries || prepared_release_pending,
|
|
163
160
|
unreleased_entries: unreleased_entries,
|
|
164
161
|
prepared_release_pending: prepared_release_pending,
|
|
165
162
|
latest_changelog_version: latest_changelog_version,
|
|
166
163
|
latest_released: latest_overall,
|
|
167
164
|
latest_released_for_current_series: latest_for_series,
|
|
168
|
-
latest_release_target: latest_target
|
|
169
|
-
gem_name: gem_name
|
|
165
|
+
latest_release_target: latest_target
|
|
170
166
|
}
|
|
171
167
|
end
|
|
172
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
|
+
|
|
173
193
|
private
|
|
174
194
|
|
|
175
195
|
def abort(msg)
|
|
176
196
|
Kettle::Dev::ExitAdapter.abort(msg)
|
|
177
197
|
end
|
|
178
198
|
|
|
199
|
+
def yes_no(value)
|
|
200
|
+
value ? "yes" : "no"
|
|
201
|
+
end
|
|
202
|
+
|
|
179
203
|
def detect_plan(changelog, version)
|
|
180
204
|
latest_overall = nil
|
|
181
205
|
latest_for_series = nil
|
data/lib/kettle/dev/version.rb
CHANGED
|
@@ -10,13 +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
18
|
def pending_release_status: () -> Hash[Symbol, untyped]
|
|
19
19
|
|
|
20
|
+
def release_state: () -> Hash[Symbol, untyped]
|
|
21
|
+
|
|
22
|
+
def release_state_table: (?Hash[Symbol, untyped] state) -> String
|
|
23
|
+
|
|
20
24
|
private
|
|
21
25
|
|
|
22
26
|
# Abort with error message
|
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
|