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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +21 -1
- data/README.md +1 -1
- data/lib/kettle/family/version.rb +1 -1
- data/lib/kettle/family/workflow.rb +31 -27
- data/lib/kettle/family/workflow_progress.rb +28 -2
- data.tar.gz.sig +0 -0
- metadata +6 -6
- 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: 7b34c502c1d4158097fc4b57ee933d2192c8c524b55334f01b5c59673e6f4c1c
|
|
4
|
+
data.tar.gz: 217f64284ba06e32f53c83e4c20dab2ac6fecbd3dab90c3d31aaf12b1e503452
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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.
|
|
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
|
|
@@ -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
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
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
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 '
|
|
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 '
|
|
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 '
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
323
|
-
changelog_uri: https://github.com/kettle-dev/kettle-family/blob/v1.1.
|
|
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.
|
|
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
|