kettle-dev 2.2.20 → 2.2.22

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: 22a0bb59de4bca05c100302f2050a300c2a60a90a2124f2f5aa07c215c6b6919
4
- data.tar.gz: 6b314236d27b59baa482317413c5b5c95303b9530b33693ee03841491ed00bc6
3
+ metadata.gz: e8c48d8192f541834457ce29c83b4169ac7476eb14273d6591608ff9292f8ce1
4
+ data.tar.gz: de8058fb6e66bd6f804cdf6bc48deded0e7b0b52ec80ece2de168777844b06ba
5
5
  SHA512:
6
- metadata.gz: 1f8a2d831b26d101a1ea8e381ff3cfc7bbce6d88682e70ec43c22a37b3ba047da5376247b5f32b1184f088514da8a1377f54ffcbe4def383b249515c70c3c518
7
- data.tar.gz: 1aa2b1ceb5886238f9034491256e3c7fbdd5cbba121c27393288bced653f92051e43fec7f242a35b4cab7e316731e422a46c73c054548c96ee4b1537c6b371ac
6
+ metadata.gz: 51b8849553e75278f25fe2193aec2a7fe88e3a6f022e58a8effba2577e85fefc4fdc536a9f81ca7e6b2fa0748145054facf4a79395072f38c3b659c26224749d
7
+ data.tar.gz: 5190b2c20b7d947337f5405d0f605fdb91d305a62d8bc646d2ab8c99c24050e06e4e2707219083f76aaf261636d792ac6afc0eed47fda5ab0c2f6b5af321b497
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,31 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [2.2.22] - 2026-06-28
34
+
35
+ - TAG: [v2.2.22][2.2.22t]
36
+ - COVERAGE: 92.01% -- 4171/4533 lines in 33 files
37
+ - BRANCH COVERAGE: 73.08% -- 1653/2262 branches in 33 files
38
+ - 61.04% documented
39
+
40
+ ### Fixed
41
+
42
+ - `kettle-release` now passes the exact built gem artifact to `bin/gem_checksums`
43
+ so stale packages in `pkg/` cannot cause checksums for the wrong version.
44
+
45
+ ## [2.2.21] - 2026-06-28
46
+
47
+ - TAG: [v2.2.21][2.2.21t]
48
+ - COVERAGE: 92.34% -- 4182/4529 lines in 33 files
49
+ - BRANCH COVERAGE: 73.34% -- 1659/2262 branches in 33 files
50
+ - 61.04% documented
51
+
52
+ ### Fixed
53
+
54
+ - `kettle-release` now detects local `.kettle-family.yml` branch-stack release
55
+ targets and skips trunk sync, trunk merge, and trunk checkout for those release
56
+ branches.
57
+
33
58
  ## [2.2.20] - 2026-06-27
34
59
 
35
60
  - TAG: [v2.2.20][2.2.20t]
@@ -2321,7 +2346,11 @@ Please file a bug if you notice a violation of semantic versioning.
2321
2346
  - Selecting will run the selected workflow via `act`
2322
2347
  - This may move to its own gem in the future.
2323
2348
 
2324
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.20...HEAD
2349
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.22...HEAD
2350
+ [2.2.22]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.21...v2.2.22
2351
+ [2.2.22t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.2.22
2352
+ [2.2.21]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.20...v2.2.21
2353
+ [2.2.21t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.2.21
2325
2354
  [2.2.20]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.19...v2.2.20
2326
2355
  [2.2.20t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.2.20
2327
2356
  [2.2.19]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.18...v2.2.19
data/README.md CHANGED
@@ -874,7 +874,7 @@ Thanks for RTFM. ☺️
874
874
  [📌gitmoji]: https://gitmoji.dev
875
875
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
876
876
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
877
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.499-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
877
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-4.533-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
878
878
  [🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
879
879
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
880
880
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -196,7 +196,7 @@ module Kettle
196
196
  end
197
197
 
198
198
  def declared_version_file_path(root)
199
- gemspec_path = Dir.glob(File.join(root.to_s, "*.gemspec")).sort.first
199
+ gemspec_path = Dir.glob(File.join(root.to_s, "*.gemspec")).min
200
200
  return unless gemspec_path && File.file?(gemspec_path)
201
201
 
202
202
  gemspec_source = File.read(gemspec_path)
@@ -9,6 +9,7 @@ require "fileutils"
9
9
  require "net/http"
10
10
  require "json"
11
11
  require "uri"
12
+ require "yaml"
12
13
 
13
14
  # External gems
14
15
  require "kettle/rb/compat_matrix"
@@ -128,6 +129,7 @@ module Kettle
128
129
  committed = nil
129
130
  trunk = nil
130
131
  feature = nil
132
+ branch_stack_release = false
131
133
 
132
134
  # 2. Version detection and sanity checks + prompt
133
135
  if run_step?(2)
@@ -257,8 +259,12 @@ module Kettle
257
259
  if run_step?(8) && !local_ci?
258
260
  trunk = detect_trunk_branch
259
261
  feature = current_branch
262
+ branch_stack_release = branch_stack_release_branch?(feature, trunk)
263
+ if branch_stack_release
264
+ puts "Kettle-family branch stack release branch detected: #{feature}; skipping trunk sync/rebase."
265
+ end
260
266
  puts "Trunk branch detected: #{trunk}"
261
- ensure_trunk_synced_before_push!(trunk, feature)
267
+ ensure_trunk_synced_before_push!(trunk, feature) unless branch_stack_release
262
268
  elsif run_step?(8)
263
269
  puts "Local CI release mode: skipping remote trunk sync before publishing."
264
270
  end
@@ -273,14 +279,25 @@ module Kettle
273
279
  if run_step?(11) && !local_ci?
274
280
  trunk ||= detect_trunk_branch
275
281
  feature ||= current_branch
276
- merge_feature_into_trunk_and_push!(trunk, feature)
282
+ branch_stack_release ||= branch_stack_release_branch?(feature, trunk)
283
+ if branch_stack_release
284
+ puts "Kettle-family branch stack release branch detected: #{feature}; skipping merge into #{trunk}."
285
+ else
286
+ merge_feature_into_trunk_and_push!(trunk, feature)
287
+ end
277
288
  end
278
289
 
279
290
  # 12. checkout trunk and pull
280
291
  if run_step?(12) && !local_ci?
281
292
  trunk ||= detect_trunk_branch
282
- checkout!(trunk)
283
- pull!(trunk)
293
+ feature ||= current_branch
294
+ branch_stack_release ||= branch_stack_release_branch?(feature, trunk)
295
+ if branch_stack_release
296
+ puts "Kettle-family branch stack release branch detected: #{feature}; staying on release branch."
297
+ else
298
+ checkout!(trunk)
299
+ pull!(trunk)
300
+ end
284
301
  end
285
302
 
286
303
  # 13. signing guidance and checks
@@ -327,8 +344,9 @@ module Kettle
327
344
  # release build to include them in the gem, thus altering the artifact, and invalidating the checksums.
328
345
  if run_step?(16)
329
346
  # Generate checksums for the just-built artifact, commit them, then validate
330
- run_cmd!("bin/gem_checksums")
331
347
  version ||= detect_version
348
+ gem_path = checksum_gem_path_for_version!(version)
349
+ run_cmd!("bin/gem_checksums #{Shellwords.escape(gem_path)}")
332
350
  validate_checksums!(version, stage: "after release")
333
351
  end
334
352
 
@@ -1086,6 +1104,44 @@ module Kettle
1086
1104
  puts "Merged #{feature} into #{trunk} and pushed. The PR (if any) should auto-close."
1087
1105
  end
1088
1106
 
1107
+ def branch_stack_release_branch?(branch, trunk = nil)
1108
+ return false if branch.to_s.empty?
1109
+ return false if trunk && branch == trunk
1110
+
1111
+ local_kettle_family_release_target_branches.include?(branch)
1112
+ end
1113
+
1114
+ def local_kettle_family_release_target_branches
1115
+ local_kettle_family_config_paths.each do |path|
1116
+ next unless File.file?(path)
1117
+
1118
+ begin
1119
+ data = YAML.safe_load(File.read(path), permitted_classes: [], aliases: false) || {}
1120
+ branches = Array(dig_string_keys(data, "release", "target_branches")) +
1121
+ Array(dig_string_keys(data, "branches", "release_targets"))
1122
+ return branches.map(&:to_s).reject(&:empty?) unless branches.empty?
1123
+ rescue Psych::Exception => e
1124
+ warn("Ignoring invalid kettle-family config #{Kettle::Dev.display_path(path)}: #{e.message}")
1125
+ end
1126
+ end
1127
+ []
1128
+ end
1129
+
1130
+ def local_kettle_family_config_paths
1131
+ [
1132
+ File.join(@root, ".kettle-family.yml"),
1133
+ File.join(@root, ".structuredmerge", "kettle-family.yml")
1134
+ ]
1135
+ end
1136
+
1137
+ def dig_string_keys(data, *keys)
1138
+ keys.reduce(data) do |memo, key|
1139
+ break nil unless memo.is_a?(Hash)
1140
+
1141
+ memo[key] || memo[key.to_sym]
1142
+ end
1143
+ end
1144
+
1089
1145
  def ensure_signing_setup_or_skip!
1090
1146
  # Treat any non-/true/i value as an explicit skip signal
1091
1147
  return if ENV.fetch("SKIP_GEM_SIGNING", "").casecmp("true").zero?
@@ -1104,10 +1160,7 @@ module Kettle
1104
1160
  end
1105
1161
 
1106
1162
  def validate_checksums!(version, stage: "")
1107
- gem_path = gem_file_for_version(version)
1108
- unless gem_path && File.file?(gem_path)
1109
- abort("Unable to locate built gem for version #{version} in pkg/. Did the build succeed?")
1110
- end
1163
+ gem_path = checksum_gem_path_for_version!(version)
1111
1164
  actual = compute_sha256(gem_path)
1112
1165
  checks_path = File.join(@root, "checksums", "#{File.basename(gem_path)}.sha256")
1113
1166
  unless File.file?(checks_path)
@@ -1129,6 +1182,14 @@ module Kettle
1129
1182
  end
1130
1183
  end
1131
1184
 
1185
+ def checksum_gem_path_for_version!(version)
1186
+ gem_path = gem_file_for_version(version)
1187
+ unless gem_path && File.file?(gem_path)
1188
+ abort("Unable to locate built gem for version #{version} in pkg/. Did the build succeed?")
1189
+ end
1190
+ gem_path
1191
+ end
1192
+
1132
1193
  def gem_file_for_version(version)
1133
1194
  pkg = File.join(@root, "pkg")
1134
1195
  pattern = File.join(pkg, "*.gem")
@@ -3,7 +3,7 @@
3
3
  module Kettle
4
4
  module Dev
5
5
  module Version
6
- VERSION = "2.2.20"
6
+ VERSION = "2.2.22"
7
7
  end
8
8
  VERSION = Version::VERSION # Traditional Constant Location
9
9
  end
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.20
4
+ version: 2.2.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -208,7 +208,7 @@ dependencies:
208
208
  version: '1.0'
209
209
  - - ">="
210
210
  - !ruby/object:Gem::Version
211
- version: 1.0.3
211
+ version: 1.0.4
212
212
  type: :development
213
213
  prerelease: false
214
214
  version_requirements: !ruby/object:Gem::Requirement
@@ -218,7 +218,7 @@ dependencies:
218
218
  version: '1.0'
219
219
  - - ">="
220
220
  - !ruby/object:Gem::Version
221
- version: 1.0.3
221
+ version: 1.0.4
222
222
  - !ruby/object:Gem::Dependency
223
223
  name: gitmoji-regex
224
224
  requirement: !ruby/object:Gem::Requirement
@@ -359,10 +359,10 @@ licenses:
359
359
  - AGPL-3.0-only
360
360
  metadata:
361
361
  homepage_uri: https://kettle-dev.galtzo.com
362
- source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.2.20
363
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.2.20/CHANGELOG.md
362
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.2.22
363
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.2.22/CHANGELOG.md
364
364
  bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
365
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.2.20
365
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.2.22
366
366
  funding_uri: https://github.com/sponsors/pboling
367
367
  wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
368
368
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file