kettle-jem 7.1.3 → 7.1.4

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: 3fb60c644be8bcdb4360d8a26fd07474cd3a0b395b219e4e28acabee18e91df0
4
- data.tar.gz: 946fb2cb8276f4f617be75f6abf674579a850632b85ab78044540b045c6f0c5b
3
+ metadata.gz: 3900eae88b47a873cae6083d0465467ebd57842a12ed7e4b8cab28d37092fef7
4
+ data.tar.gz: a0df0ddab136eb1079901cda7ee1715ddb574b5392d2ee314196fd54b2042d7c
5
5
  SHA512:
6
- metadata.gz: 4d4a66d55400ac8324176d418be9c64f3f09367eed95081dedf95b81c4fc85a112cfe1939743310d82ca68b1b1b01980387667c86ed851854d2d1993f65d9df9
7
- data.tar.gz: 3d233a58e400bf078ad4505423bf0bb8aed22bd50a774288419fa7eaf9761ddc85f47ca69b9dae8e57aa791645b8c1a9a3b43967dffb3622cbfe12f094bf1020
6
+ metadata.gz: 47a922c1ad1fdd9f57838b74de337777129ed2127752c5d579f0070b084fd7973c50ea68f7dd7258cad159229958d611185e4ef3470557f86412a9b53af77211
7
+ data.tar.gz: e05ba9400554b325770fcad5bc79c94180c626188c41d003fc1dbd368c322e474fb4ea9484b97fc717e6d8e4b4f6c4b94cda5d29543d5f9418bcd544d7abbb6b
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,36 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [7.1.4] - 2026-08-12
34
+
35
+ - TAG: [v7.1.4][7.1.4t]
36
+ - COVERAGE: 93.57% -- 10753/11492 lines in 16 files
37
+ - BRANCH COVERAGE: 77.10% -- 4599/5965 branches in 16 files
38
+ - 18.00% documented
39
+
40
+ ### Changed
41
+
42
+ - Write-mode dependency-floor and workflow-pin maintenance tools now document their updates in CHANGELOG.md by default.
43
+
44
+ - [kc] kettle-jem-deps-floor: Update kettle-jem template dependency floors:
45
+ - kettle-dev (~> 3.0, >= 3.0.0 -> ~> 3.0, >= 3.0.6)
46
+ - kettle-family (~> 1.2, >= 1.2.44 -> ~> 1.2, >= 1.2.51)
47
+ - kettle-jem (~> 7.1, >= 7.1.1 -> ~> 7.1, >= 7.1.3)
48
+ - yard-lint (~> 1.10, >= 1.10.3 -> ~> 1.11, >= 1.11.0)
49
+
50
+ - [kc] kettle-jem-workflow-pins: Update pinned GitHub Actions in kettle-jem templates:
51
+ - github/codeql-action/analyze v4.37.4 (f205ea1c3313d32999d8d6a48b4f6530d4437b38) -> v4.37.6 (5595ccaf912efad79be6eef63a5619ff05969be3)
52
+ - github/codeql-action/autobuild v4.37.4 (f205ea1c3313d32999d8d6a48b4f6530d4437b38) -> v4.37.6 (5595ccaf912efad79be6eef63a5619ff05969be3)
53
+ - github/codeql-action/init v4.37.4 (f205ea1c3313d32999d8d6a48b4f6530d4437b38) -> v4.37.6 (5595ccaf912efad79be6eef63a5619ff05969be3)
54
+
55
+ - Declare kettle-changelog as a runtime dependency for packaged maintenance commands.
56
+
57
+ - Main templating commands now record an aggregate Changed entry through kettle-changelog only when template files change, while transfer replay uses kettle-changelog's structural merger.
58
+
59
+ ### Fixed
60
+
61
+ - Restore source-checkout loading for the repository-local dependency-floor and workflow-pin maintenance tools.
62
+
33
63
  ## [7.1.3] - 2026-08-11
34
64
 
35
65
  - TAG: [v7.1.3][7.1.3t]
@@ -1494,7 +1524,9 @@ Please file a bug if you notice a violation of semantic versioning.
1494
1524
  - Released kettle-jem as part of the initial StructuredMerge Ruby 7.0.0 gem set.
1495
1525
  - Included packaged templates and parser-backed merge support for Ruby gem templating.
1496
1526
 
1497
- [Unreleased]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.3...HEAD
1527
+ [Unreleased]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.4...HEAD
1528
+ [7.1.4]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.3...v7.1.4
1529
+ [7.1.4t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.4
1498
1530
  [7.1.3]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.2...v7.1.3
1499
1531
  [7.1.3t]: https://github.com/structuredmerge/structuredmerge-ruby/releases/tag/v7.1.3
1500
1532
  [7.1.2]: https://github.com/structuredmerge/structuredmerge-ruby/compare/v7.1.1...v7.1.2
data/README.md CHANGED
@@ -760,7 +760,7 @@ Thanks for RTFM. ☺️
760
760
  [📌gitmoji]: https://gitmoji.dev
761
761
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
762
762
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
763
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-11.445-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
763
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-11.492-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
764
764
  [🔐security]: https://github.com/structuredmerge/structuredmerge-ruby/blob/main/SECURITY.md
765
765
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
766
766
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -9,13 +9,13 @@ module Kettle
9
9
  module CLI
10
10
  USAGE = <<~USAGE
11
11
  Usage:
12
- kettle-jem [PROJECT_ROOT] [--accept-config] [--bootstrap-mode] [--quiet|--verbose]
13
- kettle-jem setup [PROJECT_ROOT] [--accept-config] [--bootstrap-mode] [--quiet|--verbose]
14
- kettle-jem prepare [PROJECT_ROOT] [--json|--events[=TYPE,...]] [--report PATH] [--accept|--force] [--quiet|--verbose]
12
+ kettle-jem [PROJECT_ROOT] [--accept-config] [--bootstrap-mode] [--changelog|--no-changelog] [--quiet|--verbose]
13
+ kettle-jem setup [PROJECT_ROOT] [--accept-config] [--bootstrap-mode] [--changelog|--no-changelog] [--quiet|--verbose]
14
+ kettle-jem prepare [PROJECT_ROOT] [--json|--events[=TYPE,...]] [--report PATH] [--accept|--force] [--changelog|--no-changelog] [--quiet|--verbose]
15
15
  kettle-jem plan [PROJECT_ROOT] [--json|--events[=TYPE,...]] [--report PATH] [--accept|--force|--interactive] [--failure-mode MODE] [--prompt-answer ID=ACTION]
16
- kettle-jem apply [PROJECT_ROOT] [--json|--events[=TYPE,...]] [--report PATH] [--accept|--force|--interactive] [--failure-mode MODE] [--prompt-answer ID=ACTION]
17
- kettle-jem template [PROJECT_ROOT] [--json|--events[=TYPE,...]] [--report PATH] [--accept|--force|--interactive] [--failure-mode MODE] [--prompt-answer ID=ACTION]
18
- kettle-jem install [PROJECT_ROOT] [--json|--events[=TYPE,...]] [--report PATH] [--accept|--force|--interactive] [--failure-mode MODE] [--prompt-answer ID=ACTION]
16
+ kettle-jem apply [PROJECT_ROOT] [--json|--events[=TYPE,...]] [--report PATH] [--accept|--force|--interactive] [--failure-mode MODE] [--prompt-answer ID=ACTION] [--changelog|--no-changelog]
17
+ kettle-jem template [PROJECT_ROOT] [--json|--events[=TYPE,...]] [--report PATH] [--accept|--force|--interactive] [--failure-mode MODE] [--prompt-answer ID=ACTION] [--changelog|--no-changelog]
18
+ kettle-jem install [PROJECT_ROOT] [--json|--events[=TYPE,...]] [--report PATH] [--accept|--force|--interactive] [--failure-mode MODE] [--prompt-answer ID=ACTION] [--changelog|--no-changelog]
19
19
  kettle-jem manifest [PROJECT_ROOT] [--json]
20
20
  kettle-jem selftest [PROJECT_ROOT] [--json] [--report PATH] [--destination PATH] [--template-root PATH] [--selftest-output PATH]
21
21
  kettle-jem version
@@ -146,6 +146,9 @@ module Kettle
146
146
  opts.on("--skip-rubocop-gradual", "Skip post-template RuboCop Gradual autocorrect.") do
147
147
  options[:run_options][:skip_rubocop_gradual] = true
148
148
  end
149
+ opts.on("--[no-]changelog", "Add a Changed entry summarizing actual template changes (default).") do |value|
150
+ options[:run_options][:skip_changelog] = !value
151
+ end
149
152
  opts.on("--skip-binstubs", "Skip post-template curated Bundler binstub generation.") do
150
153
  options[:run_options][:skip_binstubs] = true
151
154
  end
@@ -199,7 +202,7 @@ module Kettle
199
202
  types: options[:event_types]
200
203
  )
201
204
  end
202
- case command
205
+ result = case command
203
206
  when "setup"
204
207
  Kettle::Jem.setup_project(project_root, env: env, run_options: run_options)
205
208
  when "prepare"
@@ -229,6 +232,14 @@ module Kettle
229
232
  else
230
233
  raise ArgumentError, "Unsupported kettle-jem command #{command.inspect}"
231
234
  end
235
+ return result unless %w[setup prepare apply template install].include?(command)
236
+
237
+ Kettle::Jem::MaintenanceChangelog.record_template_run(
238
+ project_root: project_root,
239
+ report: result,
240
+ run_options: run_options,
241
+ label: (command == "prepare") ? "Prepare project for kettle-jem templates" : "Apply kettle-jem templates"
242
+ )
232
243
  end
233
244
 
234
245
  def scoped_template_run?(run_options)
@@ -0,0 +1,136 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+ require "open3"
5
+ require "rbconfig"
6
+ require "rubygems"
7
+
8
+ module Kettle
9
+ module Jem
10
+ module MaintenanceChangelog
11
+ TEMPLATE_CHANGELOG_INTERNAL_PATHS = %w[
12
+ CHANGELOG.md
13
+ .structuredmerge/kettle-jem.lock
14
+ .kettle-jem.lock
15
+ ].freeze
16
+ TEMPLATE_CHANGE_CATEGORIES = {
17
+ workflows: ->(path) { path.start_with?(".github/workflows/") },
18
+ dependencies: ->(path) {
19
+ path == "Gemfile" || path == "Appraisals" || path.end_with?(".gemspec", ".gemfile", ".gemfile.lock") ||
20
+ path.start_with?("gemfiles/")
21
+ },
22
+ documentation: ->(path) { %w[README.md CONTRIBUTING.md SECURITY.md].include?(path) || path.start_with?("docs/") },
23
+ configuration: ->(path) { path.start_with?(".structuredmerge/") || path == "mise.toml" || path == ".gitignore" },
24
+ code_and_tests: ->(path) { path.start_with?("lib/", "spec/", "test/", "bin/") || path == "Rakefile" }
25
+ }.freeze
26
+ BUNDLER_ENVIRONMENT = %w[
27
+ BUNDLE_BIN_PATH
28
+ BUNDLE_FROZEN
29
+ BUNDLE_GEMFILE
30
+ BUNDLE_LOCKFILE
31
+ BUNDLER_SETUP
32
+ BUNDLER_VERSION
33
+ RUBYLIB
34
+ RUBYOPT
35
+ ].freeze
36
+
37
+ module_function
38
+
39
+ def add_unreleased_entry(project_root:, section:, entry:)
40
+ command = [
41
+ RbConfig.ruby,
42
+ "-rrubygems",
43
+ "-e",
44
+ 'exec Gem.ruby, Gem.bin_path("kettle-changelog", "kettle-changelog"), *ARGV',
45
+ "--",
46
+ "--add-unreleased-entry",
47
+ "--json",
48
+ "--section",
49
+ section.to_s,
50
+ "--entry",
51
+ entry.to_s
52
+ ]
53
+ environment = BUNDLER_ENVIRONMENT.to_h { |key| [key, nil] }
54
+ stdout, stderr, status = Open3.capture3(environment, *command, chdir: project_root)
55
+ unless status.success?
56
+ detail = [stdout, stderr].reject(&:empty?).join("\n")
57
+ raise "kettle-changelog failed (exit #{status.exitstatus}): #{detail}"
58
+ end
59
+
60
+ result = JSON.parse(stdout)
61
+ {
62
+ status: result.fetch("changed") ? "updated" : "unchanged",
63
+ section: result.fetch("section"),
64
+ entry: result.fetch("entry")
65
+ }
66
+ rescue JSON::ParserError => error
67
+ raise "kettle-changelog returned invalid JSON: #{error.message}"
68
+ rescue Gem::Exception => error
69
+ raise "kettle-changelog executable is not installed: #{error.message}"
70
+ end
71
+
72
+ def upsert_unreleased_entry(project_root:, section:, key:, entry:, legacy_prefixes: [])
73
+ result = Kettle::Changelog::KeyedEntryUpserter.new(
74
+ root: project_root,
75
+ section: section,
76
+ key: key,
77
+ entry: entry,
78
+ legacy_prefixes: legacy_prefixes
79
+ ).run
80
+ result.merge(status: result.fetch(:changed) ? "updated" : "unchanged")
81
+ end
82
+
83
+ def record_template_run(project_root:, report:, run_options: {}, label: "Apply kettle-jem templates")
84
+ report = report.to_h
85
+ if template_changelog_disabled?(run_options) || bootstrap_only_report?(report)
86
+ return report.merge(changelog: {status: "skipped", reason: template_changelog_disabled?(run_options) ? "disabled" : "bootstrap_only"})
87
+ end
88
+
89
+ changed_files = template_changed_files(report.fetch(:changed_files, []))
90
+ if changed_files.empty?
91
+ return report.merge(changelog: {status: "skipped", reason: "no_template_changes", changed_files: []})
92
+ end
93
+
94
+ entry = template_run_entry(label, changed_files)
95
+ result = add_unreleased_entry(project_root: project_root, section: "Changed", entry: entry)
96
+ changelog = result.merge(changed_files: changed_files, entry: entry)
97
+ changed_files_with_changelog = if result.fetch(:status) == "updated"
98
+ (Array(report.fetch(:changed_files, [])) + ["CHANGELOG.md"]).uniq.sort
99
+ else
100
+ Array(report.fetch(:changed_files, [])).uniq.sort
101
+ end
102
+ report.merge(changelog: changelog, changed_files: changed_files_with_changelog)
103
+ end
104
+
105
+ def template_changed_files(changed_files)
106
+ Array(changed_files).map(&:to_s).uniq.sort.reject do |path|
107
+ TEMPLATE_CHANGELOG_INTERNAL_PATHS.include?(path)
108
+ end
109
+ end
110
+
111
+ def template_run_entry(label, changed_files)
112
+ counts = changed_files.group_by { |path| template_change_category(path) }
113
+ .sort_by { |category, _paths| category.to_s }
114
+ .map { |category, paths| "#{category.to_s.tr("_", " ")} (#{paths.length})" }
115
+ areas = counts.empty? ? "project files" : counts.join(", ")
116
+ "#{label}: updated #{changed_files.length} project file#{"s" unless changed_files.length == 1} across #{areas}."
117
+ end
118
+
119
+ def template_change_category(path)
120
+ TEMPLATE_CHANGE_CATEGORIES.each do |category, matcher|
121
+ return category if matcher.call(path)
122
+ end
123
+ :other
124
+ end
125
+
126
+ def template_changelog_disabled?(run_options)
127
+ options = run_options.to_h
128
+ DecisionPolicy.value_to_boolean(options[:skip_changelog] || options["skip_changelog"])
129
+ end
130
+
131
+ def bootstrap_only_report?(report)
132
+ report.fetch(:setup_status, "").to_s.start_with?("bootstrap_")
133
+ end
134
+ end
135
+ end
136
+ end
@@ -68,6 +68,7 @@ module Kettle
68
68
  skip_binstubs: truthy?(env["KETTLE_JEM_SKIP_BINSTUBS"]),
69
69
  skip_appraisal_generate: truthy?(env["KETTLE_JEM_SKIP_APPRAISAL_GENERATE"]),
70
70
  skip_lock_normalization: truthy?(env["KETTLE_JEM_SKIP_LOCK_NORMALIZATION"]),
71
+ skip_changelog: truthy?(env["KETTLE_JEM_SKIP_CHANGELOG"]),
71
72
  checksums: env["KETTLE_JEM_CHECKSUMS"],
72
73
  accept_config: truthy?(env["KETTLE_JEM_ACCEPT_CONFIG"]),
73
74
  bootstrap_mode: truthy?(env["KETTLE_JEM_BOOTSTRAP_MODE"]),
@@ -5,8 +5,8 @@
5
5
  *.gem
6
6
 
7
7
  # Bundler
8
- /vendor/bundle/
9
8
  /.bundle/
9
+ /vendor/bundle*/
10
10
  /gemfiles/*.lock
11
11
  /gemfiles/**/*.gemfile.lock
12
12
  /gemfiles/.bundle/
@@ -118,7 +118,7 @@ Gem::Specification.new do |spec|
118
118
  # and preferably a modular one (see gemfiles/modular/*.gemfile).
119
119
 
120
120
  # Dev, Test, & Release Tasks
121
- spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.0") # ruby >= {KJ|MIN_TEST_RUBY}
121
+ spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.6") # ruby >= {KJ|MIN_TEST_RUBY}
122
122
 
123
123
  # Security
124
124
  spec.add_development_dependency("bundler-audit", "~> 0.9.3") # ruby >= 2.0.0
@@ -12,7 +12,7 @@ gem "kramdown-parser-gfm", "~> 1.1", require: false # Ruby >= 2.3
12
12
  gem "yaml-converter", "~> 0.2", ">= 0.2.5", require: false # Ruby >= 3.2
13
13
  gem "yard", "~> 0.9", ">= 0.9.45", require: false
14
14
  gem "yard-junk", "~> 0.1", ">= 0.1.0", require: false # Ruby >= 3.1
15
- gem "yard-lint", "~> 1.10", ">= 1.10.3", require: false # Ruby >= 3.3
15
+ gem "yard-lint", "~> 1.11", ">= 1.11.0", require: false # Ruby >= 3.3
16
16
  gem "yard-relative_markdown_links", "~> 0.6", require: false
17
17
 
18
18
  if ENV.fetch("GALTZO_FLOSS_DEV", "false").casecmp("false").zero?
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency "{KJ|SHIMMED_GEM_NAME}"
31
31
 
32
32
  # Dev, Test, & Release Tasks
33
- spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.0") # ruby >= {KJ|MIN_TEST_RUBY}
33
+ spec.add_development_dependency("kettle-dev", "~> 3.0", ">= 3.0.6") # ruby >= {KJ|MIN_TEST_RUBY}
34
34
 
35
35
  # Tasks
36
36
  spec.add_development_dependency "rake", "~> 13.0"
@@ -5,7 +5,7 @@ module Kettle
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = "7.1.3"
8
+ VERSION = "7.1.4"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
data/lib/kettle/jem.rb CHANGED
@@ -20,9 +20,11 @@ require "ast/crispr/markdown/markly"
20
20
  require "kettle/ndjson"
21
21
  require "rbs"
22
22
  require "kettle/dev"
23
+ require "kettle/changelog"
23
24
  require "kettle/rb/compat_matrix"
24
25
  require_relative "jem/version"
25
26
  require_relative "jem/license_txt_migrator"
27
+ require_relative "jem/maintenance_changelog"
26
28
 
27
29
  begin
28
30
  require "kettle/drift"
@@ -5318,10 +5320,10 @@ module Kettle
5318
5320
  [
5319
5321
  {name: "appraisal2", source: %(gem "appraisal2", "~> 3.2", ">= 3.2.2"\n)},
5320
5322
  {name: "bundler-audit", source: %(gem "bundler-audit", "~> 0.9.3"\n)},
5321
- {name: "kettle-dev", source: %(gem "kettle-dev", "~> 3.0", ">= 3.0.0"\n)},
5323
+ {name: "kettle-dev", source: %(gem "kettle-dev", "~> 3.0", ">= 3.0.6"\n)},
5322
5324
  {name: "kettle-drift", source: %(gem "kettle-drift", "~> 1.0", ">= 1.0.12"\n)},
5323
- {name: "kettle-family", source: %(gem "kettle-family", "~> 1.2", ">= 1.2.44"\n)},
5324
- {name: "kettle-jem", source: %(gem "kettle-jem", "~> 7.1", ">= 7.1.1"\n)},
5325
+ {name: "kettle-family", source: %(gem "kettle-family", "~> 1.2", ">= 1.2.51"\n)},
5326
+ {name: "kettle-jem", source: %(gem "kettle-jem", "~> 7.1", ">= 7.1.3"\n)},
5325
5327
  {name: "kettle-test", source: %(gem "kettle-test", "~> 2.0", ">= 2.0.19"\n)},
5326
5328
  {name: "rake", source: %(gem "rake", "~> 13.0"\n)},
5327
5329
  {name: "rspec", source: %(gem "rspec", "~> 3.0"\n)},
@@ -6390,37 +6392,11 @@ module Kettle
6390
6392
  end
6391
6393
 
6392
6394
  def apply_changelog_transfer_entries(content, entries, excluded_keys: [])
6393
- transfer_entries = Array(entries).select do |entry|
6394
- entry.is_a?(Hash) && entry[:key].to_s != "" && Array(entry[:lines]).any?
6395
- end
6396
-
6397
- normalized = normalize_changelog(content, {})
6398
- normalized = remove_excluded_changelog_transfer_entries(normalized, excluded_keys)
6399
- existing_keys = changelog_transfer_keys(normalized)
6400
- missing = transfer_entries.reject { |entry| existing_keys.include?(entry.fetch(:key)) }
6401
- return ensure_trailing_newline(normalized) if missing.empty?
6402
-
6403
- lines = markdown_source_lines(normalized)
6404
- unreleased = changelog_unreleased_line_index(lines)
6405
- return ensure_trailing_newline(normalized) unless unreleased
6406
-
6407
- destination_end = changelog_unreleased_end_index(lines, unreleased)
6408
- destination_body = lines[(unreleased + 1)...destination_end] || []
6409
- items = changelog_unreleased_items(destination_body)
6410
- missing.group_by { |entry| entry.fetch(:section, "### Changed") }.each do |section, section_entries|
6411
- section = CHANGELOG_STANDARD_HEADINGS.include?(section) ? section : "### Changed"
6412
- items[section] ||= []
6413
- items[section].pop while items[section].any? && items[section].last.to_s.strip.empty?
6414
- items[section] << "" if items[section].any?
6415
- section_entries.each do |entry|
6416
- items[section].concat(Array(entry.fetch(:lines)).map(&:rstrip))
6417
- end
6418
- end
6419
-
6420
- merged_lines = lines[0...unreleased] +
6421
- build_changelog_unreleased_section(lines.fetch(unreleased), items) +
6422
- lines[destination_end..].to_a
6423
- ensure_trailing_newline(merged_lines.join("\n").gsub(/\n{3,}/, "\n\n"))
6395
+ Kettle::Changelog::TransferMerger.apply(
6396
+ content: normalize_changelog(content, {}),
6397
+ entries: entries,
6398
+ excluded_keys: excluded_keys
6399
+ )
6424
6400
  end
6425
6401
 
6426
6402
  def remove_excluded_changelog_transfer_entries(content, excluded_keys)
@@ -13946,19 +13922,21 @@ module Kettle
13946
13922
  return "" if package_name == "kettle-changelog"
13947
13923
 
13948
13924
  <<~RUBY.chomp
13925
+ kettle_changelog_skip = ENV.fetch("KETTLE_DEV_SKIP_CHANGELOG", "false").downcase
13926
+ kettle_changelog_skip = %w[true 1 yes on].include?(kettle_changelog_skip)
13949
13927
  kettle_changelog_local = ENV.fetch("KETTLE_DEV_DEV", "false").downcase
13950
13928
  kettle_changelog_local = !%w[false 0 no off].include?(kettle_changelog_local)
13951
- if kettle_changelog_local
13952
- require "nomono/bundler"
13953
- eval_nomono_gems(
13954
- gems: ["kettle-changelog"],
13955
- prefix: "KETTLE_DEV",
13956
- path_env: "KETTLE_DEV_DEV",
13957
- root: ["src", "my", "kettle-dev"]
13958
- )
13959
- else
13960
- if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("4.0.0")
13961
- gem "kettle-changelog", "~> 1.0", ">= 1.0.0"
13929
+ unless kettle_changelog_skip
13930
+ if kettle_changelog_local
13931
+ require "nomono/bundler"
13932
+ eval_nomono_gems(
13933
+ gems: ["kettle-changelog"],
13934
+ prefix: "KETTLE_DEV",
13935
+ path_env: "KETTLE_DEV_DEV",
13936
+ root: ["src", "my", "kettle-dev"]
13937
+ )
13938
+ elsif Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("4.0.0")
13939
+ gem "kettle-changelog", "~> 1.0", ">= 1.0.2"
13962
13940
  end
13963
13941
  end
13964
13942
  RUBY
@@ -14909,7 +14887,7 @@ module Kettle
14909
14887
  end
14910
14888
 
14911
14889
  def kettle_dev_local_gems(config)
14912
- gems = %w[kettle-dev kettle-family kettle-test kettle-soup-cover]
14890
+ gems = %w[kettle-dev kettle-family kettle-test kettle-soup-cover kettle-changelog]
14913
14891
  plugin_names = PluginLoader.normalize_plugin_names(plugin_names_from_config(config))
14914
14892
  gems.concat(plugin_names.select { |plugin_name| plugin_name.start_with?("kettle-") })
14915
14893
  gems.uniq.join(" ")
@@ -14918,7 +14896,7 @@ module Kettle
14918
14896
  def main_gemfile_kettle_family_gem(package_name)
14919
14897
  return "" if package_name.to_s == "kettle-family"
14920
14898
 
14921
- %(gem "kettle-family", "~> 1.2", ">= 1.2.44"\n)
14899
+ %(gem "kettle-family", "~> 1.2", ">= 1.2.51"\n)
14922
14900
  end
14923
14901
 
14924
14902
  def main_gemfile_nomono_bootstrap(package_name)
@@ -19429,9 +19407,9 @@ module Kettle
19429
19407
  "actions/upload-artifact" => "actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1",
19430
19408
  "amancevice/setup-code-climate" => "amancevice/setup-code-climate@0daf2985a225e8ac15975b4d233010e94d65b76a # v2",
19431
19409
  "actions/dependency-review-action" => "actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0",
19432
- "github/codeql-action/init" => "github/codeql-action/init@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v4.37.4",
19433
- "github/codeql-action/autobuild" => "github/codeql-action/autobuild@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v4.37.4",
19434
- "github/codeql-action/analyze" => "github/codeql-action/analyze@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v4.37.4",
19410
+ "github/codeql-action/init" => "github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6",
19411
+ "github/codeql-action/autobuild" => "github/codeql-action/autobuild@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6",
19412
+ "github/codeql-action/analyze" => "github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6",
19435
19413
  "pozil/auto-assign-issue" => "pozil/auto-assign-issue@af6beea6bdf1e8eb373f061c5bc168681fc6d011 # v4.0.1",
19436
19414
  "apache/skywalking-eyes/dependency" => "apache/skywalking-eyes/dependency@61275cc80d0798a405cb070f7d3a8aaf7cf2c2c1 # v0.8.0",
19437
19415
  "sarisia/actions-status-discord" => "sarisia/actions-status-discord@eb045afee445dc055c18d3d90bd0f244fd062708 # v1.16.0"
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-jem
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.3
4
+ version: 7.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -217,6 +217,26 @@ dependencies:
217
217
  - - ">="
218
218
  - !ruby/object:Gem::Version
219
219
  version: 7.1.3
220
+ - !ruby/object:Gem::Dependency
221
+ name: kettle-changelog
222
+ requirement: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - "~>"
225
+ - !ruby/object:Gem::Version
226
+ version: '1.0'
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: 1.0.2
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '1.0'
237
+ - - ">="
238
+ - !ruby/object:Gem::Version
239
+ version: 1.0.2
220
240
  - !ruby/object:Gem::Dependency
221
241
  name: kettle-dev
222
242
  requirement: !ruby/object:Gem::Requirement
@@ -760,6 +780,7 @@ files:
760
780
  - lib/kettle/jem.rb
761
781
  - lib/kettle/jem/cli.rb
762
782
  - lib/kettle/jem/license_txt_migrator.rb
783
+ - lib/kettle/jem/maintenance_changelog.rb
763
784
  - lib/kettle/jem/rakelib/install.rake
764
785
  - lib/kettle/jem/rakelib/prepare.rake
765
786
  - lib/kettle/jem/rakelib/selftest.rake
@@ -955,10 +976,10 @@ licenses:
955
976
  - PolyForm-Small-Business-1.0.0
956
977
  metadata:
957
978
  homepage_uri: https://structuredmerge.org
958
- source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.3
959
- changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.3/CHANGELOG.md
979
+ source_code_uri: https://github.com/structuredmerge/structuredmerge-ruby/tree/v7.1.4
980
+ changelog_uri: https://github.com/structuredmerge/structuredmerge-ruby/blob/v7.1.4/CHANGELOG.md
960
981
  bug_tracker_uri: https://github.com/structuredmerge/structuredmerge-ruby/issues
961
- documentation_uri: https://www.rubydoc.info/gems/kettle-jem/7.1.3
982
+ documentation_uri: https://www.rubydoc.info/gems/kettle-jem/7.1.4
962
983
  funding_uri: https://github.com/sponsors/pboling
963
984
  wiki_uri: https://github.com/structuredmerge/structuredmerge-ruby/wiki
964
985
  news_uri: https://www.railsbling.com/tags/kettle-jem
metadata.gz.sig CHANGED
@@ -1 +1,2 @@
1
- ��~�(�`/o�!F�s;��
1
+ ����Ji<��
2
+ ��X� ~h'�`�8�;��O�`��l/>c��n�.Y�N�_��3#�g�ޏ<��횚�]���!�M�9GnJÎ���K�w3(hC�<dr&��=��&�+ɶ��ʚ�p;Tg���v�[X�,"T'jȞPHY�d�`T~.�,'��� adI�NJ�AlF8)�_�@���B�B�P&��rˆE�W88q Z�T}��n�x�E�f��H�|���T>J�8���+�z~��}P�4������g'���~��EMw{