kettle-changelog 1.0.6 → 1.0.8

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: 91116b5db1a2ec7a70b8bb798aae0e19222ee9eded29fc26b8bdf80e0efd0d0d
4
- data.tar.gz: f1dd9b8ff5dc27c2393a87f4fa74c2323910248fe8765755a2a47ca74aabe105
3
+ metadata.gz: 954993bd18dd105416e4030d44c81ae52514d3354ac795e6e4033fb04bc4da29
4
+ data.tar.gz: afdda2a8c30bf4416a53a6c0663f661e694f4dbb355dbbbcb04ed2d6d7c92949
5
5
  SHA512:
6
- metadata.gz: 383cbcaed4483a26f407bb7f9b433cddb77799f8f6c91b7f241e07c893f8ef41c2982ba071694d5197017bac689eb7c2b7afd82d6feb0d0384cdc565be37c9bf
7
- data.tar.gz: 2b3233ceb38ae67fd12e82d03fa56590f028b5738aa5ebaaf731e6e6a071f5cc849c3ad1843535305184122cfa3478a7ca5d398312e02d726a890b78a740d9a1
6
+ metadata.gz: 9e14f5a627c219d4b8bbe6588358f63703b3bd4a3c740a92f7dda8f58bfcd717bbff7d5045bcf06732518af663db4dadc9966e306f8f64783127fc45f36b40cd
7
+ data.tar.gz: 56a72538485c91e0e0f744e4438d4954cf437c12bcfc7e9d2a0de0e20bd55ce703edea21b77694c7498f039728b2648545f590cb8608f141cca88413826f3740
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,51 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.0.8] - 2026-09-27
34
+
35
+ - TAG: [v1.0.8][1.0.8t]
36
+ - COVERAGE: 94.37% -- 1139/1207 lines in 6 files
37
+ - BRANCH COVERAGE: 77.52% -- 400/516 branches in 6 files
38
+ - 38.89% documented
39
+
40
+ ### Added
41
+
42
+ - kettle-jem-template-20260913-001 - Templating now also surfaces a review
43
+ entry in `dependency_conflicts.resolve` when a direct development
44
+ dependency doesn't support one or more of this project's declared
45
+ `engines:` and has no template-managed modular home (e.g. `sqlite3` on
46
+ `jruby`). Review each entry and pick a resolution per the project's own
47
+ engine support needs.
48
+
49
+ ### Changed
50
+
51
+ - [kc] kettle-jem/prepare: updated 15 project files:
52
+ - configuration (1)
53
+ - dependencies (14)
54
+
55
+ - [kc] kettle-jem/template: updated 15 project files:
56
+ - code and tests (1)
57
+ - dependencies (2)
58
+ - other (3)
59
+ - workflows (9)
60
+
61
+ ### Fixed
62
+
63
+ - Run YARD binstubs through Ruby so release metadata checks work on Windows without Unix executable bits.
64
+
65
+ ## [1.0.7] - 2026-08-30
66
+
67
+ - TAG: [v1.0.7][1.0.7t]
68
+ - COVERAGE: 94.35% -- 1136/1204 lines in 6 files
69
+ - BRANCH COVERAGE: 77.73% -- 398/512 branches in 6 files
70
+ - 38.89% documented
71
+
72
+ ### Fixed
73
+
74
+ - Honor the release-provided disposable lockfile when generating strict changelog coverage.
75
+
76
+ - Use generated coverage bundles for changelog coverage when available, with explicit bundle selection overrides.
77
+
33
78
  ## [1.0.6] - 2026-08-29
34
79
 
35
80
  - TAG: [v1.0.6][1.0.6t]
@@ -192,7 +237,11 @@ Please file a bug if you notice a violation of semantic versioning.
192
237
 
193
238
  - Initial release
194
239
 
195
- [Unreleased]: https://github.com/kettle-dev/kettle-changelog/compare/v1.0.6...HEAD
240
+ [Unreleased]: https://github.com/kettle-dev/kettle-changelog/compare/v1.0.8...HEAD
241
+ [1.0.8]: https://github.com/kettle-dev/kettle-changelog/compare/v1.0.7...v1.0.8
242
+ [1.0.8t]: https://github.com/kettle-dev/kettle-changelog/releases/tag/v1.0.8
243
+ [1.0.7]: https://github.com/kettle-dev/kettle-changelog/compare/v1.0.6...v1.0.7
244
+ [1.0.7t]: https://github.com/kettle-dev/kettle-changelog/releases/tag/v1.0.7
196
245
  [1.0.6]: https://github.com/kettle-dev/kettle-changelog/compare/v1.0.5...v1.0.6
197
246
  [1.0.6t]: https://github.com/kettle-dev/kettle-changelog/releases/tag/v1.0.6
198
247
  [1.0.5]: https://github.com/kettle-dev/kettle-changelog/compare/v1.0.4...v1.0.5
data/README.md CHANGED
@@ -123,6 +123,7 @@ gem install kettle-changelog
123
123
 
124
124
  - `K_CHANGELOG_PATH` selects a changelog outside the current project root.
125
125
  - `K_CHANGELOG_COVERAGE_ROOT` selects the project root used for coverage generation.
126
+ - `K_CHANGELOG_COVERAGE_GEMFILE` selects the target-project Gemfile used for coverage generation. It is resolved relative to the coverage root; absent an explicit setting, `gemfiles/coverage.gemfile` is preferred when generated by Appraisal, then the root `Gemfile` is used.
126
127
  - `K_CHANGELOG_VERSION_FILE` selects the version file when the project has more than one version tree.
127
128
  - `K_CHANGELOG_GEM_NAME` overrides the gem name used for release lookups.
128
129
  - `K_CHANGELOG_STRICT=false` allows missing coverage or YARD data.
@@ -137,6 +138,10 @@ Run the release preparation command from the gem root:
137
138
  bundle exec kettle-changelog
138
139
  ```
139
140
 
141
+ Use `--coverage-gemfile PATH` to select a different target-project coverage
142
+ bundle for one invocation. This is intentionally separate from `BUNDLE_GEMFILE`,
143
+ which may be required to run `kettle-changelog` itself from a release bundle.
144
+
140
145
  Use `--yes` for non-interactive release automation. Add a note without preparing a release with:
141
146
 
142
147
  ```console
@@ -397,7 +402,7 @@ Thanks for RTFM. ☺️
397
402
  [📌gitmoji]: https://gitmoji.dev
398
403
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
399
404
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
400
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-1.187-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
405
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-1.207-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
401
406
  [🔐security]: https://github.com/kettle-dev/kettle-changelog/blob/main/SECURITY.md
402
407
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
403
408
  [📄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
@@ -63,7 +63,7 @@ end
63
63
 
64
64
  if ARGV.include?("-h") || ARGV.include?("--help")
65
65
  puts <<~USAGE
66
- Usage: kettle-changelog [--version VERSION] [--yes] [--update-prep|--reformat|--backfill-released-version VERSION] [--pending-release] [--release-state] [--refresh-cache] [--add-unreleased-entry --section SECTION --entry TEXT] [--upsert-unreleased-entry --section SECTION --key KEY --entry TEXT] [--json|--events[=TYPES]] [--no-strict] [--no-coverage-threshold]
66
+ Usage: kettle-changelog [--version VERSION] [--yes] [--coverage-gemfile PATH] [--update-prep|--reformat|--backfill-released-version VERSION] [--pending-release] [--release-state] [--refresh-cache] [--add-unreleased-entry --section SECTION --entry TEXT] [--upsert-unreleased-entry --section SECTION --key KEY --entry TEXT] [--json|--events[=TYPES]] [--no-strict] [--no-coverage-threshold]
67
67
 
68
68
  Detects the current version from lib/**/version.rb, the latest live release, and
69
69
  the most recent CHANGELOG.md release section, then prompts to confirm the selected plan:
@@ -93,12 +93,14 @@ if ARGV.include?("-h") || ARGV.include?("--help")
93
93
  --events[=TYPES] Print newline-delimited JSON changelog events
94
94
  --no-strict Allow missing coverage and yard data (warnings only, no errors)
95
95
  --no-coverage-threshold Generate coverage without hard-failing below configured thresholds
96
+ --coverage-gemfile PATH Run coverage through this target-project Gemfile
96
97
 
97
98
  Environment:
98
99
  K_CHANGELOG_STRICT=false Disable strict mode (equivalent to --no-strict flag)
99
100
  K_CHANGELOG_COVERAGE_HARD=false Disable coverage threshold hard-failure
100
101
  K_CHANGELOG_PATH=path Read and write this changelog instead of ./CHANGELOG.md
101
102
  K_CHANGELOG_COVERAGE_ROOT=path Run/read coverage from this root instead of the gem root
103
+ K_CHANGELOG_COVERAGE_GEMFILE=path Target-project Gemfile for coverage; defaults to gemfiles/coverage.gemfile, then Gemfile
102
104
  K_CHANGELOG_VERSION_FILE=path Read VERSION from this file instead of lib/**/version.rb
103
105
  K_CHANGELOG_GEM_NAME=name Read live release data as this gem instead of root .gemspec
104
106
  KETTLE_GEM_COOP_REFRESH=true Bypass cached gem.coop version data
@@ -206,6 +208,7 @@ begin
206
208
  end
207
209
 
208
210
  historical_backfill_version = extract_option_arg!(ARGV, "--backfill-released-version")
211
+ coverage_gemfile = extract_option_arg!(ARGV, "--coverage-gemfile")
209
212
 
210
213
  if upsert_unreleased_entry
211
214
  section = extract_option_arg!(ARGV, "--section")
@@ -240,7 +243,7 @@ begin
240
243
  end
241
244
 
242
245
  event_stream = events_output ? Kettle::Ndjson.event_stream($stdout, types: event_types) : nil
243
- cli = Kettle::Changelog::CLI.new(strict: strict_mode, enforce_coverage_thresholds: coverage_hard, update_prep: update_prep, reformat_only: reformat_only, historical_backfill_version: historical_backfill_version, version: version_override, refresh_cache: refresh_cache, yes: yes, event_stream: event_stream)
246
+ cli = Kettle::Changelog::CLI.new(strict: strict_mode, enforce_coverage_thresholds: coverage_hard, update_prep: update_prep, reformat_only: reformat_only, historical_backfill_version: historical_backfill_version, version: version_override, refresh_cache: refresh_cache, yes: yes, event_stream: event_stream, coverage_gemfile: coverage_gemfile)
244
247
  if release_state_query
245
248
  state = cli.release_state
246
249
  puts(json_output ? JSON.pretty_generate(state) : cli.release_state_table(state))
@@ -6,6 +6,7 @@ require "net/http"
6
6
  require "uri"
7
7
  require "fileutils"
8
8
  require "yaml"
9
+ require "rbconfig"
9
10
  require "kettle/ndjson"
10
11
 
11
12
  module Kettle
@@ -35,10 +36,11 @@ module Kettle
35
36
  # @param historical_backfill_version [String, nil] tagged release to document without moving Unreleased entries
36
37
  # @param version [String, nil] explicit version override for gems without a literal VERSION constant
37
38
  # @param yes [Boolean] when true, approve the selected release plan without prompting
38
- def initialize(strict: true, enforce_coverage_thresholds: true, update_prep: false, reformat_only: false, historical_backfill_version: nil, version: nil, root: Kettle::Dev::CIHelpers.project_root, refresh_cache: false, yes: false, event_stream: nil)
39
+ def initialize(strict: true, enforce_coverage_thresholds: true, update_prep: false, reformat_only: false, historical_backfill_version: nil, version: nil, root: Kettle::Dev::CIHelpers.project_root, refresh_cache: false, yes: false, event_stream: nil, coverage_gemfile: nil)
39
40
  @root = root
40
41
  @changelog_path = resolved_changelog_path
41
42
  @coverage_root = resolved_coverage_root
43
+ @coverage_gemfile = resolved_coverage_gemfile(coverage_gemfile)
42
44
  @coverage_path = File.join(@coverage_root, "coverage", "coverage.json")
43
45
  @strict = strict
44
46
  @enforce_coverage_thresholds = enforce_coverage_thresholds
@@ -939,11 +941,42 @@ module Kettle
939
941
  env[key] = nil
940
942
  end
941
943
  env.merge!(changelog_coverage_workflow_thresholds)
942
- gemfile = File.join(@coverage_root, "Gemfile")
943
- env["BUNDLE_GEMFILE"] = gemfile if File.file?(gemfile)
944
+ env["BUNDLE_GEMFILE"] = @coverage_gemfile if @coverage_gemfile
945
+ coverage_lockfile = ENV.fetch("KETTLE_CHANGELOG_COVERAGE_LOCKFILE", "").to_s.strip
946
+ unless coverage_lockfile.empty?
947
+ raise "Configured changelog coverage lockfile does not exist: #{coverage_lockfile}" unless File.file?(coverage_lockfile)
948
+
949
+ env["BUNDLE_LOCKFILE"] = coverage_lockfile
950
+ end
951
+ # This is a release-tool handoff, not target-project configuration.
952
+ env["KETTLE_CHANGELOG_COVERAGE_LOCKFILE"] = nil
944
953
  env
945
954
  end
946
955
 
956
+ # Coverage has a deliberately smaller bundle than the project's normal
957
+ # development bundle when Appraisal generated gemfiles/coverage.gemfile.
958
+ # Keep the explicit setting separate from BUNDLE_GEMFILE: that variable
959
+ # commonly belongs to the outer kettle-changelog release bundle.
960
+ def resolved_coverage_gemfile(explicit_gemfile)
961
+ requested = explicit_gemfile.to_s.strip
962
+ requested = ENV.fetch("K_CHANGELOG_COVERAGE_GEMFILE", "").to_s.strip if requested.empty?
963
+
964
+ unless requested.empty?
965
+ path = File.expand_path(requested, @coverage_root)
966
+ raise "Configured changelog coverage Gemfile does not exist: #{path}" unless File.file?(path)
967
+
968
+ return path
969
+ end
970
+
971
+ generated = File.join(@coverage_root, "gemfiles", "coverage.gemfile")
972
+ return generated if File.file?(generated)
973
+
974
+ root_gemfile = File.join(@coverage_root, "Gemfile")
975
+ return root_gemfile if File.file?(root_gemfile)
976
+
977
+ nil
978
+ end
979
+
947
980
  # The changelog coverage run is the final local test gate before a
948
981
  # release commit is pushed. Reuse the checked-in CI workflow thresholds
949
982
  # rather than silently falling back to kettle-soup-cover defaults.
@@ -990,7 +1023,7 @@ module Kettle
990
1023
 
991
1024
  # Run the canonical docs task to get the documentation percentage.
992
1025
  commands.each do |command|
993
- prepare_yard_fence_tmp_files if command == [File.join(@root, "bin", "yard")]
1026
+ prepare_yard_fence_tmp_files if command == [RbConfig.ruby, File.join(@root, "bin", "yard")]
994
1027
  output, status = capture_yard_command(command)
995
1028
  unless command_successful?(status)
996
1029
  return handle_yard_documentation_failure(yard_command_failure_message(command, output, status))
@@ -1047,9 +1080,11 @@ module Kettle
1047
1080
 
1048
1081
  def yard_command_label(command)
1049
1082
  command = Array(command)
1050
- bin = command.first.to_s
1083
+ ruby_script = command.first == RbConfig.ruby
1084
+ bin = ruby_script ? command[1].to_s : command.first.to_s
1085
+ arguments = ruby_script ? command.drop(2) : command.drop(1)
1051
1086
  if bin == File.join(@root, "bin", "rake")
1052
- "bin/rake #{command.drop(1).join(" ")}".strip
1087
+ "bin/rake #{arguments.join(" ")}".strip
1053
1088
  elsif bin == File.join(@root, "bin", "yard")
1054
1089
  "bin/yard"
1055
1090
  else
@@ -1060,9 +1095,9 @@ module Kettle
1060
1095
  def yard_documentation_commands
1061
1096
  commands = []
1062
1097
  rake = File.join(@root, "bin", "rake")
1063
- commands << [rake, "yard"] if File.executable?(rake)
1098
+ commands << [RbConfig.ruby, rake, "yard"] if File.file?(rake)
1064
1099
  yard = File.join(@root, "bin", "yard")
1065
- commands << [yard] if File.executable?(yard)
1100
+ commands << [RbConfig.ruby, yard] if File.file?(yard)
1066
1101
  commands
1067
1102
  end
1068
1103
 
@@ -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.0.6"
8
+ VERSION = "1.0.8"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-changelog
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -61,22 +61,22 @@ dependencies:
61
61
  name: kettle-dev
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
- - - ">="
64
+ - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: 3.0.17
67
- - - "<"
66
+ version: '3.1'
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 4.0.0
69
+ version: 3.1.2
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - ">="
74
+ - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: 3.0.17
77
- - - "<"
76
+ version: '3.1'
77
+ - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 4.0.0
79
+ version: 3.1.2
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: version_gem
82
82
  requirement: !ruby/object:Gem::Requirement
@@ -174,7 +174,7 @@ dependencies:
174
174
  version: '3.2'
175
175
  - - ">="
176
176
  - !ruby/object:Gem::Version
177
- version: 3.2.2
177
+ version: 3.2.4
178
178
  type: :development
179
179
  prerelease: false
180
180
  version_requirements: !ruby/object:Gem::Requirement
@@ -184,7 +184,7 @@ dependencies:
184
184
  version: '3.2'
185
185
  - - ">="
186
186
  - !ruby/object:Gem::Version
187
- version: 3.2.2
187
+ version: 3.2.4
188
188
  - !ruby/object:Gem::Dependency
189
189
  name: kettle-test
190
190
  requirement: !ruby/object:Gem::Requirement
@@ -194,7 +194,7 @@ dependencies:
194
194
  version: '2.0'
195
195
  - - ">="
196
196
  - !ruby/object:Gem::Version
197
- version: 2.0.21
197
+ version: 2.0.23
198
198
  type: :development
199
199
  prerelease: false
200
200
  version_requirements: !ruby/object:Gem::Requirement
@@ -204,7 +204,7 @@ dependencies:
204
204
  version: '2.0'
205
205
  - - ">="
206
206
  - !ruby/object:Gem::Version
207
- version: 2.0.21
207
+ version: 2.0.23
208
208
  - !ruby/object:Gem::Dependency
209
209
  name: turbo_tests2
210
210
  requirement: !ruby/object:Gem::Requirement
@@ -214,7 +214,7 @@ dependencies:
214
214
  version: '3.2'
215
215
  - - ">="
216
216
  - !ruby/object:Gem::Version
217
- version: 3.2.6
217
+ version: 3.2.12
218
218
  type: :development
219
219
  prerelease: false
220
220
  version_requirements: !ruby/object:Gem::Requirement
@@ -224,7 +224,7 @@ dependencies:
224
224
  version: '3.2'
225
225
  - - ">="
226
226
  - !ruby/object:Gem::Version
227
- version: 3.2.6
227
+ version: 3.2.12
228
228
  - !ruby/object:Gem::Dependency
229
229
  name: ruby-progressbar
230
230
  requirement: !ruby/object:Gem::Requirement
@@ -248,7 +248,7 @@ dependencies:
248
248
  version: '1.0'
249
249
  - - ">="
250
250
  - !ruby/object:Gem::Version
251
- version: 1.0.8
251
+ version: 1.0.9
252
252
  type: :development
253
253
  prerelease: false
254
254
  version_requirements: !ruby/object:Gem::Requirement
@@ -258,7 +258,7 @@ dependencies:
258
258
  version: '1.0'
259
259
  - - ">="
260
260
  - !ruby/object:Gem::Version
261
- version: 1.0.8
261
+ version: 1.0.9
262
262
  - !ruby/object:Gem::Dependency
263
263
  name: gitmoji-regex
264
264
  requirement: !ruby/object:Gem::Requirement
@@ -268,7 +268,7 @@ dependencies:
268
268
  version: '2.0'
269
269
  - - ">="
270
270
  - !ruby/object:Gem::Version
271
- version: 2.0.12
271
+ version: 2.0.13
272
272
  type: :development
273
273
  prerelease: false
274
274
  version_requirements: !ruby/object:Gem::Requirement
@@ -278,7 +278,7 @@ dependencies:
278
278
  version: '2.0'
279
279
  - - ">="
280
280
  - !ruby/object:Gem::Version
281
- version: 2.0.12
281
+ version: 2.0.13
282
282
  description: "\U0001F4DD kettle-changelog formats release sections, manages Unreleased
283
283
  entries, and emits machine-readable release events for Ruby gems."
284
284
  email:
@@ -304,10 +304,10 @@ licenses:
304
304
  - AGPL-3.0-only
305
305
  metadata:
306
306
  homepage_uri: https://kettle-changelog.galtzo.com
307
- source_code_uri: https://github.com/kettle-dev/kettle-changelog/tree/v1.0.6
308
- changelog_uri: https://github.com/kettle-dev/kettle-changelog/blob/v1.0.6/CHANGELOG.md
307
+ source_code_uri: https://github.com/kettle-dev/kettle-changelog/tree/v1.0.8
308
+ changelog_uri: https://github.com/kettle-dev/kettle-changelog/blob/v1.0.8/CHANGELOG.md
309
309
  bug_tracker_uri: https://github.com/kettle-dev/kettle-changelog/issues
310
- documentation_uri: https://www.rubydoc.info/gems/kettle-changelog/1.0.6
310
+ documentation_uri: https://www.rubydoc.info/gems/kettle-changelog/1.0.8
311
311
  funding_uri: https://github.com/sponsors/pboling
312
312
  wiki_uri: https://github.com/kettle-dev/kettle-changelog/wiki
313
313
  news_uri: https://www.railsbling.com/tags/kettle-changelog
@@ -337,7 +337,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
337
337
  - !ruby/object:Gem::Version
338
338
  version: '0'
339
339
  requirements: []
340
- rubygems_version: 4.0.17
340
+ rubygems_version: 4.0.20
341
341
  specification_version: 4
342
342
  summary: "\U0001F4DD Release and maintain structured CHANGELOG.md files."
343
343
  test_files: []
metadata.gz.sig CHANGED
Binary file