kettle-dev 3.0.6 → 3.0.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: 84cc3b69661ffe69649459f3433c0fff925cac38111da9a8b57c0c50360393ac
4
- data.tar.gz: 16acb8f6caae5d385a135be080b5ceb498fb00a622757851457e42f2d6d8eadf
3
+ metadata.gz: a3fdb8abe3a10685ec3e0fc37d17a0c0b5f85ed834ba85c8863e34e0bd64e5f9
4
+ data.tar.gz: 6261b1b044c0c301c219f5c2c9a0d2e6260b5b231784d49e75fc9e3ae12f536a
5
5
  SHA512:
6
- metadata.gz: 37a33518f764205039e9d58ec5f5cac1f06e5c0bee57779380a809ff7c12b4ba28b2e3c7738f3e723d9a8f4c3a61913603cbaebe8a575e58ee449fe5d7019889
7
- data.tar.gz: 5530180b41c5654ca106d4d8d92fa496436ef282b035d6d1db4beb0fcc2763248e67326a2ddd104b0a93ed808fc941469bd6509253b6855f5c4507e48df5900f
6
+ metadata.gz: 2a33c7c722b54f372053469108187e4aab0fb0135633870fc78f33364d85e37c7ef41bf3db95e5a0d571881f8aba735262ff11327a57ba62964dbe66c5007808
7
+ data.tar.gz: 05f5b29d1459e646224fad07bfe1ac0c0987e594a68c829014311ac4ef02ebc52fbdf922e7c23f14f56ca92feedd87a2bce055fb5e809ff1cf10a49fd32e7eac
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,19 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [3.0.7] - 2026-08-15
34
+
35
+ - TAG: [v3.0.7][3.0.7t]
36
+ - COVERAGE: 91.41% -- 5674/6207 lines in 47 files
37
+ - BRANCH COVERAGE: 76.29% -- 2169/2843 branches in 47 files
38
+ - 50.62% documented
39
+
40
+ ### Fixed
41
+
42
+ - Ignore Ruby-style bracket expressions when validating Markdown reference links.
43
+
44
+ - Poll all unfinished GitHub Actions workflows each cycle so late-dispatched workflows cannot be missed by the global CI startup timeout.
45
+
33
46
  ## [3.0.6] - 2026-08-11
34
47
 
35
48
  - TAG: [v3.0.6][3.0.6t]
@@ -3481,7 +3494,9 @@ Please file a bug if you notice a violation of semantic versioning.
3481
3494
  - Selecting will run the selected workflow via `act`
3482
3495
  - This may move to its own gem in the future.
3483
3496
 
3484
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.6...HEAD
3497
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.7...HEAD
3498
+ [3.0.7]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.6...v3.0.7
3499
+ [3.0.7t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.7
3485
3500
  [3.0.6]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.5...v3.0.6
3486
3501
  [3.0.6t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.6
3487
3502
  [3.0.5]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.4...v3.0.5
data/README.md CHANGED
@@ -993,7 +993,7 @@ Thanks for RTFM. ☺️
993
993
  [📌gitmoji]: https://gitmoji.dev
994
994
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
995
995
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
996
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.199-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
996
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.207-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
997
997
  [🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
998
998
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
999
999
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -342,50 +342,29 @@ module Kettle
342
342
  poll_interval = github_poll_interval
343
343
  start_deadline = monotonic_time + start_timeout
344
344
  keepalive_timer = keepalive_timer(keepalive)
345
- idx = 0
346
345
  all_started_emitted = false
347
346
  loop do
348
347
  keepalive_timer.call
349
- wf = workflows[idx]
350
- run = Kettle::Dev::CIHelpers.latest_run(owner: owner, repo: repo, workflow_file: wf, branch: branch, require_head: true, head_sha: head_sha)
351
- completed_workflow = nil
352
- if run
353
- unless started[wf]
354
- started[wf] = true
355
- emit_ci_monitor_event(
356
- event_recorder,
357
- action: "github_workflow",
358
- status: "started",
359
- provider: "github",
360
- workflow: wf,
361
- url: run["html_url"],
362
- run_status: run["status"],
363
- conclusion: run["conclusion"],
364
- completed: passed.size,
365
- total: total
366
- )
367
- end
368
- if started.size == total && !all_started_emitted
369
- all_started_emitted = true
370
- emit_ci_monitor_event(
371
- event_recorder,
372
- action: "github_started",
373
- status: "ok",
374
- provider: "github",
375
- completed: passed.size,
376
- total: total,
377
- started: started.size
378
- )
379
- end
380
- if Kettle::Dev::CIHelpers.success?(run)
381
- unless passed[wf] || failed[wf]
382
- passed[wf] = true
383
- completed_workflow = wf
384
- pbar&.increment
348
+
349
+ # Poll each unfinished workflow once per cycle. Polling one workflow
350
+ # per sleep made the global start timeout dependent on workflow order:
351
+ # late-dispatched workflows could be checked only once before timing
352
+ # out, while completed workflows consumed the remaining polls.
353
+ pending_workflows = workflows.reject { |candidate| passed[candidate] || failed[candidate] }
354
+ break if pending_workflows.empty?
355
+
356
+ completed = passed.size + failed.size
357
+ pending_workflows.each do |wf|
358
+ keepalive_timer.call
359
+ run = Kettle::Dev::CIHelpers.latest_run(owner: owner, repo: repo, workflow_file: wf, branch: branch, require_head: true, head_sha: head_sha)
360
+ completed_workflow = nil
361
+ if run
362
+ unless started[wf]
363
+ started[wf] = true
385
364
  emit_ci_monitor_event(
386
365
  event_recorder,
387
366
  action: "github_workflow",
388
- status: "ok",
367
+ status: "started",
389
368
  provider: "github",
390
369
  workflow: wf,
391
370
  url: run["html_url"],
@@ -395,45 +374,76 @@ module Kettle
395
374
  total: total
396
375
  )
397
376
  end
398
- elsif Kettle::Dev::CIHelpers.failed?(run) && !passed[wf] && !failed[wf]
399
- puts
400
- wf_url = run["html_url"] || "https://github.com/#{owner}/#{repo}/actions/workflows/#{wf}"
401
- emit_ci_monitor_event(
402
- event_recorder,
403
- action: "github_workflow",
404
- status: "failed",
405
- provider: "github",
406
- workflow: wf,
407
- url: wf_url,
408
- run_status: run["status"],
409
- conclusion: run["conclusion"],
410
- completed: passed.size,
411
- total: total,
412
- reason: "Workflow failed"
413
- )
414
- unless continue_ci_failures?
415
- abort("Workflow failed: #{wf} -> #{wf_url} Fix the workflow, then restart this tool from CI validation with: #{restart_hint}")
377
+ if started.size == total && !all_started_emitted
378
+ all_started_emitted = true
379
+ emit_ci_monitor_event(
380
+ event_recorder,
381
+ action: "github_started",
382
+ status: "ok",
383
+ provider: "github",
384
+ completed: passed.size,
385
+ total: total,
386
+ started: started.size
387
+ )
416
388
  end
389
+ if Kettle::Dev::CIHelpers.success?(run)
390
+ unless passed[wf] || failed[wf]
391
+ passed[wf] = true
392
+ completed_workflow = wf
393
+ pbar&.increment
394
+ emit_ci_monitor_event(
395
+ event_recorder,
396
+ action: "github_workflow",
397
+ status: "ok",
398
+ provider: "github",
399
+ workflow: wf,
400
+ url: run["html_url"],
401
+ run_status: run["status"],
402
+ conclusion: run["conclusion"],
403
+ completed: passed.size,
404
+ total: total
405
+ )
406
+ end
407
+ elsif Kettle::Dev::CIHelpers.failed?(run) && !passed[wf] && !failed[wf]
408
+ puts
409
+ wf_url = run["html_url"] || "https://github.com/#{owner}/#{repo}/actions/workflows/#{wf}"
410
+ emit_ci_monitor_event(
411
+ event_recorder,
412
+ action: "github_workflow",
413
+ status: "failed",
414
+ provider: "github",
415
+ workflow: wf,
416
+ url: wf_url,
417
+ run_status: run["status"],
418
+ conclusion: run["conclusion"],
419
+ completed: passed.size,
420
+ total: total,
421
+ reason: "Workflow failed"
422
+ )
423
+ unless continue_ci_failures?
424
+ abort("Workflow failed: #{wf} -> #{wf_url} Fix the workflow, then restart this tool from CI validation with: #{restart_hint}")
425
+ end
417
426
 
418
- failed[wf] = true
419
- pbar&.increment
420
- puts "Continuing CI monitoring despite #{wf} failure because K_RELEASE_CI_CONTINUE=true."
427
+ failed[wf] = true
428
+ pbar&.increment
429
+ puts "Continuing CI monitoring despite #{wf} failure because K_RELEASE_CI_CONTINUE=true."
430
+ end
421
431
  end
432
+ completed = passed.size + failed.size
433
+ emit_ci_monitor_event(
434
+ event_recorder,
435
+ action: "github_tick",
436
+ status: "started",
437
+ provider: "github",
438
+ workflow: wf,
439
+ run_status: run && run["status"],
440
+ conclusion: run && run["conclusion"],
441
+ completed_workflow: completed_workflow,
442
+ completed: completed,
443
+ total: total,
444
+ started: started.size
445
+ )
422
446
  end
423
- completed = passed.size + failed.size
424
- emit_ci_monitor_event(
425
- event_recorder,
426
- action: "github_tick",
427
- status: "started",
428
- provider: "github",
429
- workflow: wf,
430
- run_status: run && run["status"],
431
- conclusion: run && run["conclusion"],
432
- completed_workflow: completed_workflow,
433
- completed: completed,
434
- total: total,
435
- started: started.size
436
- )
437
447
  break if completed == total
438
448
  if started.size < total && monotonic_time >= start_deadline
439
449
  missing = (workflows - started.keys).join(", ")
@@ -452,7 +462,6 @@ module Kettle
452
462
  abort("Timed out after #{start_timeout}s waiting for GitHub Actions workflows to start for HEAD #{head_sha[0, 12]}: #{missing}. Confirm GitHub Actions started, then restart this tool from CI validation with: #{restart_hint}")
453
463
  end
454
464
 
455
- idx = (idx + 1) % total
456
465
  sleep(poll_interval)
457
466
  end
458
467
  pbar&.finish unless pbar&.finished?
@@ -98,7 +98,11 @@ module Kettle
98
98
  next
99
99
  end
100
100
 
101
- line.scan(REFERENCE_USAGE_RE) do |text, label|
101
+ line.to_enum(:scan, REFERENCE_USAGE_RE).each do
102
+ match = Regexp.last_match
103
+ next if markdown_bracket_expression?(line, match.begin(0))
104
+
105
+ text, label = match.captures
102
106
  resolved_label = label.empty? ? text : label
103
107
  usages << [line_number, normalize_label(resolved_label)]
104
108
  end
@@ -223,6 +227,12 @@ module Kettle
223
227
  label.to_s.downcase.gsub(/\s+/, " ").strip
224
228
  end
225
229
 
230
+ def markdown_bracket_expression?(line, index)
231
+ return false unless index.positive?
232
+
233
+ line[index - 1].match?(/[[:alnum:]_\])]/)
234
+ end
235
+
226
236
  def heading_for(line)
227
237
  match = line.match(ATX_HEADING_RE)
228
238
  match ? [line[/\A\s*/].to_s.length + 1, match[1]] : nil
@@ -5,7 +5,7 @@ module Kettle
5
5
  # Version namespace for this gem.
6
6
  module Version
7
7
  # Current gem version.
8
- VERSION = "3.0.6"
8
+ VERSION = "3.0.7"
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-dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.6
4
+ version: 3.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -60,7 +60,7 @@ dependencies:
60
60
  version: '0.3'
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 0.3.11
63
+ version: 0.3.13
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
@@ -70,7 +70,7 @@ dependencies:
70
70
  version: '0.3'
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 0.3.11
73
+ version: 0.3.13
74
74
  - !ruby/object:Gem::Dependency
75
75
  name: kettle-ndjson
76
76
  requirement: !ruby/object:Gem::Requirement
@@ -80,7 +80,7 @@ dependencies:
80
80
  version: '0.1'
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: 0.1.10
83
+ version: 0.1.12
84
84
  type: :runtime
85
85
  prerelease: false
86
86
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,7 @@ dependencies:
90
90
  version: '0.1'
91
91
  - - ">="
92
92
  - !ruby/object:Gem::Version
93
- version: 0.1.10
93
+ version: 0.1.12
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: kettle-rb
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -100,7 +100,7 @@ dependencies:
100
100
  version: '0.1'
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 0.1.8
103
+ version: 0.1.10
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
@@ -110,7 +110,7 @@ dependencies:
110
110
  version: '0.1'
111
111
  - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: 0.1.8
113
+ version: 0.1.10
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: kettle-test
116
116
  requirement: !ruby/object:Gem::Requirement
@@ -120,7 +120,7 @@ dependencies:
120
120
  version: '2.0'
121
121
  - - ">="
122
122
  - !ruby/object:Gem::Version
123
- version: 2.0.18
123
+ version: 2.0.20
124
124
  type: :runtime
125
125
  prerelease: false
126
126
  version_requirements: !ruby/object:Gem::Requirement
@@ -130,7 +130,7 @@ dependencies:
130
130
  version: '2.0'
131
131
  - - ">="
132
132
  - !ruby/object:Gem::Version
133
- version: 2.0.18
133
+ version: 2.0.20
134
134
  - !ruby/object:Gem::Dependency
135
135
  name: ruby-progressbar
136
136
  requirement: !ruby/object:Gem::Requirement
@@ -400,10 +400,10 @@ licenses:
400
400
  - AGPL-3.0-only
401
401
  metadata:
402
402
  homepage_uri: https://kettle-dev.galtzo.com
403
- source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.6
404
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.6/CHANGELOG.md
403
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.7
404
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.7/CHANGELOG.md
405
405
  bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
406
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.6
406
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.7
407
407
  funding_uri: https://github.com/sponsors/pboling
408
408
  wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
409
409
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file