kettle-family 1.1.6 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98d4c89b4fe8c5b8dc01b6b16624771da61982b4393117243b8888ca0c34358f
4
- data.tar.gz: b6e7db140bf96d05083d2fc9239b1721528c6f587563ecfe6313b9f936354b47
3
+ metadata.gz: 7b34c502c1d4158097fc4b57ee933d2192c8c524b55334f01b5c59673e6f4c1c
4
+ data.tar.gz: 217f64284ba06e32f53c83e4c20dab2ac6fecbd3dab90c3d31aaf12b1e503452
5
5
  SHA512:
6
- metadata.gz: 2e181e19e17b26a281ec9787dac2fdfcba5811107b35a3bd0fb943411df3d7e2c9aee10903ed846939353d5c7c344992d8397e241e2497a959151bf2742e9f4d
7
- data.tar.gz: 155c75272299e2a04c342bcadbb4a6d07d9b7a86154e4c4c177074678cc6c07ed7dc44042ce695d1baed49ea918b57215060bf98e073fc89397f081de5245427
6
+ metadata.gz: 51d9489dee525ae329a3362f1190f4fa6e83b238aa7cc8c2737507274ce4b37f2000b2d70f2fcff668541e740ae08adbf2b6f2dd003f2d29fbc69b7b7032920b
7
+ data.tar.gz: 2db5f0e162c8a6b534917aef303b4728849ef83f061df8f5265176476c786c9d738449553562fb7fe362cd4aa02aa4a9d46acca44a3db2dd973bc015d40e7aa5
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,24 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.1.7] - 2026-07-25
34
+
35
+ - TAG: [v1.1.7][1.1.7t]
36
+ - COVERAGE: 95.52% -- 3113/3259 lines in 25 files
37
+ - BRANCH COVERAGE: 77.50% -- 1147/1480 branches in 25 files
38
+ - 28.26% documented
39
+
40
+ ### Fixed
41
+
42
+ - Release and template orchestration now consume NDJSON event lines even when
43
+ progress rendering is disabled, preventing raw `--events` payloads from
44
+ leaking into interactive terminal output.
45
+ - TTY workflow progress now clamps member status text and summarizes structured
46
+ diagnostics, preventing long event payloads from wrapping rows and corrupting
47
+ multi-member progress displays.
48
+ - Automated lockfile, bundle-update, and workflow-pin commits now use the
49
+ gitmoji grapheme accepted by generated commit hooks.
50
+
33
51
  ## [1.1.6] - 2026-07-25
34
52
 
35
53
  - TAG: [v1.1.6][1.1.6t]
@@ -1013,7 +1031,9 @@ Please file a bug if you notice a violation of semantic versioning.
1013
1031
  - Fixed CI load failures on engines without compatible `pty` support by falling back to Open3 for interactive release commands.
1014
1032
  - Fixed Ruby 3.2 version-bump support by loading Prism lazily and wiring the Prism gem only for MRI versions that need it.
1015
1033
 
1016
- [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.1.6...HEAD
1034
+ [Unreleased]: https://github.com/kettle-dev/kettle-family/compare/v1.1.7...HEAD
1035
+ [1.1.7]: https://github.com/kettle-dev/kettle-family/compare/v1.1.6...v1.1.7
1036
+ [1.1.7t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.1.7
1017
1037
  [1.1.6]: https://github.com/kettle-dev/kettle-family/compare/v1.1.5...v1.1.6
1018
1038
  [1.1.6t]: https://github.com/kettle-dev/kettle-family/releases/tag/v1.1.6
1019
1039
  [1.1.5]: https://github.com/kettle-dev/kettle-family/compare/v1.1.4...v1.1.5
data/README.md CHANGED
@@ -669,7 +669,7 @@ Thanks for RTFM. ☺️
669
669
  [📌gitmoji]: https://gitmoji.dev
670
670
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
671
671
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
672
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.240-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
672
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.259-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
673
673
  [🔐security]: https://github.com/kettle-dev/kettle-family/blob/main/SECURITY.md
674
674
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
675
675
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -3,7 +3,7 @@
3
3
  module Kettle
4
4
  module Family
5
5
  module Version
6
- VERSION = "1.1.6"
6
+ VERSION = "1.1.7"
7
7
  end
8
8
  VERSION = Version::VERSION # Traditional Constant Location
9
9
  end
@@ -1219,34 +1219,32 @@ module Kettle
1219
1219
  end
1220
1220
 
1221
1221
  def template_event_line_handler(member, progress: nil)
1222
- return nil unless progress_io
1223
- return nil unless verbose || debug || progress&.tty?
1224
-
1225
1222
  lambda do |line|
1226
1223
  event = parse_template_event(line)
1227
1224
  next false unless event
1228
1225
 
1229
- if verbose || debug
1230
- emit_template_event_progress(member, event)
1231
- else
1232
- emit_template_event_status(member, event, progress: progress)
1226
+ if progress_io
1227
+ if verbose || debug
1228
+ emit_template_event_progress(member, event)
1229
+ elsif progress&.tty?
1230
+ emit_template_event_status(member, event, progress: progress)
1231
+ end
1233
1232
  end
1234
1233
  true
1235
1234
  end
1236
1235
  end
1237
1236
 
1238
1237
  def release_event_line_handler(member, progress: nil)
1239
- return nil unless progress_io
1240
- return nil unless verbose || debug || progress&.tty?
1241
-
1242
1238
  lambda do |line|
1243
1239
  event = parse_template_event(line)
1244
1240
  next false unless event
1245
1241
 
1246
- if verbose || debug
1247
- emit_release_event_progress(member, event)
1248
- else
1249
- emit_release_event_status(member, event, progress: progress)
1242
+ if progress_io
1243
+ if verbose || debug
1244
+ emit_release_event_progress(member, event)
1245
+ elsif progress&.tty?
1246
+ emit_release_event_status(member, event, progress: progress)
1247
+ end
1250
1248
  end
1251
1249
  true
1252
1250
  end
@@ -1272,9 +1270,7 @@ module Kettle
1272
1270
  label = [event["phase"], event["name"]].map(&:to_s).reject(&:empty?).join(":")
1273
1271
  emit_template_event_line(member, template_event_mark(event), label)
1274
1272
  when "diagnostic"
1275
- message = event["message"].to_s
1276
- label = message.empty? ? event["kind"].to_s : message
1277
- emit_template_event_line(member, "!", label)
1273
+ emit_template_event_line(member, "!", diagnostic_event_label(event))
1278
1274
  when "summary"
1279
1275
  emit_template_event_line(member, "done", "#{event["changed_count"].to_i} file#{"s" unless event["changed_count"].to_i == 1} changed")
1280
1276
  end
@@ -1289,8 +1285,7 @@ module Kettle
1289
1285
  when "post_apply_step", "command_step"
1290
1286
  [event["phase"], event["name"]].map(&:to_s).reject(&:empty?).join(":")
1291
1287
  when "diagnostic"
1292
- message = event["message"].to_s
1293
- message.empty? ? event["kind"].to_s : message
1288
+ diagnostic_event_label(event)
1294
1289
  when "summary"
1295
1290
  "#{event["changed_count"].to_i} file#{"s" unless event["changed_count"].to_i == 1} changed"
1296
1291
  end
@@ -1306,9 +1301,7 @@ module Kettle
1306
1301
  label = [event["phase"], event["name"]].map(&:to_s).reject(&:empty?).join(":")
1307
1302
  emit_template_event_line(member, template_event_mark(event), label)
1308
1303
  when "diagnostic"
1309
- message = event["message"].to_s
1310
- label = message.empty? ? event["kind"].to_s : message
1311
- emit_template_event_line(member, "!", label)
1304
+ emit_template_event_line(member, "!", diagnostic_event_label(event))
1312
1305
  when "summary"
1313
1306
  emit_template_event_line(member, phase_finish_event_mark(event), event["status"].to_s)
1314
1307
  end
@@ -1321,8 +1314,7 @@ module Kettle
1321
1314
  when "command_step"
1322
1315
  [event["phase"], event["name"]].map(&:to_s).reject(&:empty?).join(":")
1323
1316
  when "diagnostic"
1324
- message = event["message"].to_s
1325
- message.empty? ? event["kind"].to_s : message
1317
+ diagnostic_event_label(event)
1326
1318
  when "summary"
1327
1319
  event["status"].to_s
1328
1320
  end
@@ -1358,6 +1350,18 @@ module Kettle
1358
1350
  end
1359
1351
  end
1360
1352
 
1353
+ def diagnostic_event_label(event)
1354
+ message = event["message"]
1355
+ return message.to_s unless message.to_s.empty? || message.is_a?(Hash)
1356
+
1357
+ kind = event["kind"].to_s
1358
+ return kind unless kind.empty?
1359
+ return "diagnostic" unless message.is_a?(Hash)
1360
+
1361
+ nested_kind = message["kind"].to_s
1362
+ nested_kind.empty? ? "diagnostic" : nested_kind
1363
+ end
1364
+
1361
1365
  def emit_template_event_line(member, mark, label)
1362
1366
  return if label.to_s.empty?
1363
1367
 
@@ -1491,7 +1495,7 @@ module Kettle
1491
1495
  "sh",
1492
1496
  "-lc",
1493
1497
  "files=$(git ls-files --modified --others --exclude-standard -- Gemfile.lock '*.lock' '**/*.lock'); " \
1494
- "if [ -n \"$files\" ]; then printf '%s\\n' \"$files\" | xargs git add -- && git commit -m '🔒 Normalize lockfiles after templating'; fi"
1498
+ "if [ -n \"$files\" ]; then printf '%s\\n' \"$files\" | xargs git add -- && git commit -m '🔒️ Normalize lockfiles after templating'; fi"
1495
1499
  ]
1496
1500
  )
1497
1501
  memo << result
@@ -1519,7 +1523,7 @@ module Kettle
1519
1523
  command: [
1520
1524
  "sh",
1521
1525
  "-lc",
1522
- "if ! git diff --quiet -- .github/workflows; then git add -- .github/workflows && git commit -m '🔒 Pin GitHub Actions SHAs'; fi"
1526
+ "if ! git diff --quiet -- .github/workflows; then git add -- .github/workflows && git commit -m '🔒️ Pin GitHub Actions SHAs'; fi"
1523
1527
  ]
1524
1528
  )
1525
1529
  memo << result
@@ -1535,7 +1539,7 @@ module Kettle
1535
1539
  "sh",
1536
1540
  "-lc",
1537
1541
  "files=$(git ls-files --modified --others --exclude-standard -- Gemfile.lock '*.lock' '**/*.lock'); " \
1538
- "if [ -n \"$files\" ]; then printf '%s\\n' \"$files\" | xargs git add -- && git commit -m '🔒 Update bundle'; fi"
1542
+ "if [ -n \"$files\" ]; then printf '%s\\n' \"$files\" | xargs git add -- && git commit -m '🔒️ Update bundle'; fi"
1539
1543
  ]
1540
1544
  )
1541
1545
  memo << result
@@ -1,12 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "tty-progressbar"
4
+ require "tty-screen"
4
5
 
5
6
  module Kettle
6
7
  module Family
7
8
  class WorkflowProgress
8
- FORMAT = "%<member>-24s :events :status"
9
+ MEMBER_WIDTH = 24
10
+ FORMAT = "%<member>-#{MEMBER_WIDTH}.#{MEMBER_WIDTH}s :events :status"
9
11
  EVENT_WIDTH = 30
12
+ MIN_STATUS_WIDTH = 12
13
+ DEFAULT_TERMINAL_WIDTH = 80
14
+ ELLIPSIS = "..."
10
15
 
11
16
  def initialize(io:, label:, total:, jobs:, members: [], enabled: true)
12
17
  @io = io
@@ -132,7 +137,7 @@ module Kettle
132
137
  end
133
138
 
134
139
  def render_name(member_name, status:)
135
- @member_statuses[member_name] = status
140
+ @member_statuses[member_name] = truncate_status(status)
136
141
  @line_order << member_name unless @line_order.include?(member_name)
137
142
  bar_for(member_name).advance(
138
143
  0,
@@ -149,6 +154,27 @@ module Kettle
149
154
  "s" unless count == 1
150
155
  end
151
156
 
157
+ def truncate_status(status)
158
+ normalized = status.to_s.gsub(/\s+/, " ").strip
159
+ width = status_width
160
+ return normalized if normalized.length <= width
161
+ return normalized[0, width] if width <= ELLIPSIS.length
162
+
163
+ "#{normalized[0, width - ELLIPSIS.length]}#{ELLIPSIS}"
164
+ end
165
+
166
+ def status_width
167
+ [terminal_width - MEMBER_WIDTH - 1 - EVENT_WIDTH - 1, MIN_STATUS_WIDTH].max
168
+ end
169
+
170
+ def terminal_width
171
+ return DEFAULT_TERMINAL_WIDTH unless @tty
172
+
173
+ TTY::Screen.width.to_i
174
+ rescue
175
+ DEFAULT_TERMINAL_WIDTH
176
+ end
177
+
152
178
  def write_line(line)
153
179
  @io.puts(line)
154
180
  @io.flush if @io.respond_to?(:flush)
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-family
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
4
+ version: 1.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -264,7 +264,7 @@ dependencies:
264
264
  version: '2.0'
265
265
  - - ">="
266
266
  - !ruby/object:Gem::Version
267
- version: 2.0.4
267
+ version: 2.0.5
268
268
  type: :development
269
269
  prerelease: false
270
270
  version_requirements: !ruby/object:Gem::Requirement
@@ -274,7 +274,7 @@ dependencies:
274
274
  version: '2.0'
275
275
  - - ">="
276
276
  - !ruby/object:Gem::Version
277
- version: 2.0.4
277
+ version: 2.0.5
278
278
  description: "\U0001F469‍\U0001F469‍\U0001F467‍\U0001F467 Kettle::Family provides
279
279
  scripts and conventions for coordinating related Ruby gems as one family."
280
280
  email:
@@ -319,10 +319,10 @@ licenses:
319
319
  - AGPL-3.0-only
320
320
  metadata:
321
321
  homepage_uri: https://kettle-family.galtzo.com
322
- source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.1.6
323
- changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.1.6/CHANGELOG.md
322
+ source_code_uri: https://github.com/kettle-dev/kettle-family/tree/v1.1.7
323
+ changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.1.7/CHANGELOG.md
324
324
  bug_tracker_uri: https://github.com/kettle-dev/kettle-family/issues
325
- documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.1.6
325
+ documentation_uri: https://www.rubydoc.info/gems/kettle-family/1.1.7
326
326
  funding_uri: https://github.com/sponsors/pboling
327
327
  wiki_uri: https://github.com/kettle-dev/kettle-family/wiki
328
328
  news_uri: https://www.railsbling.com/tags/kettle-family
metadata.gz.sig CHANGED
Binary file