kettle-dev 3.1.5 → 3.1.6

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: 0e99b028eb7b7f955a4d4c6bc4d62b812d9e8a6a6399d0aadf448e525d9680a4
4
- data.tar.gz: f5432081e590c22460c4876eb1e2e35406bcb1617881eb9814eccd3449e4fb45
3
+ metadata.gz: a3eedbe026cd767bf8c441626bcb96dea0701b1c03665ae754a1c1a9d8a5145c
4
+ data.tar.gz: 90750eaeb7d50a06b475fc893a5184e28a9526d7a439ecd74b4804fd152c43cc
5
5
  SHA512:
6
- metadata.gz: bffb2a5e07b7cb6ea1c225808e4a011c670a6768905052447112e4de5a9e15122fb9f0d3a1f65ed1a3cc80d290271e1844133cd4b64cb2c050b01d7d2f200552
7
- data.tar.gz: 666f1974ea5d780e5b845039dc7923c769869faa50075074986cf165d9773e72848cfd2c200ced47a376ce08f15c01e317294e31a0811895880a25567d033059
6
+ metadata.gz: 46e1634ec393b5e6f4dace446165c407002d81f94841066b2da98a183f0c5251886cac9c93daf6ebbd75bd8333be6fb278aec44c137dad2c7d34a2b1de82334e
7
+ data.tar.gz: 1e7b236a4e37268062b4c3ac7620ddc179c35aa615f53529c5490b681335aec8d2c710a740eb34b825c9248509664c8b808e85e2932375728a24a859f9d21778
checksums.yaml.gz.sig CHANGED
@@ -1,3 +1 @@
1
- zi� �s� I?G3�i�J��u���T����>�r�¥4
2
- �/h�JU(�Fk��Zڧ9��h]�q
3
- ;�7q<��؄��9����i�(��w�})�`t�h/O���ao�|;J��[��=#�T|]�("_#�:���(pj���g#��3S��M��Wpr�-�|�d����ED��cW� C��b8{}���J��ZBc7t��.a(�j��2�嬱�l䶼����������Y�K/�V½��yx����f)� ��������ͮ4����z�3l��9�$k7�f�;}�W6|p�k?�r�W��^�z�U�
1
+ a��%$a)��=QD���X��^½��G���ya��@hj��=�&9�ﲚG�MY(a����:lW�p⭴��r���L�'CY��u'�n�#J����?�O���1|�������!*{�~t�dv�tj���ep��9x;�g�A�O�4 G^�~ph����l�����0���`~y��h`bZ�P��>~k����H�i�;:9ⲅ��!�����Yȭj@�3�H7�m�j��Ӫ(l�N{)�2�)6%puW?��7ٿ/rħ��s9"ؼ>�.̻{��*��Jo}�F�H���cr����k�쬔V& �Ow�W�)��3�Y
data/CHANGELOG.md CHANGED
@@ -30,6 +30,21 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [3.1.6] - 2026-10-02
34
+
35
+ - TAG: [v3.1.6][3.1.6t]
36
+ - COVERAGE: 91.66% -- 6210/6775 lines in 49 files
37
+ - BRANCH COVERAGE: 76.13% -- 2370/3113 branches in 49 files
38
+ - 51.34% documented
39
+
40
+ ### Fixed
41
+
42
+ - Branch-stack releases now dispatch selected GitHub Actions workflows directly on the release branch instead of relying on a possibly conflicted validation PR.
43
+
44
+ - Branch-stack release workflow validation now supports the older Psych API bundled with Ruby 2.4.
45
+
46
+ - YAML loading now selects the supported Psych API by version, including Ruby 2.5 environments that report misleading keyword parameters.
47
+
33
48
  ## [3.1.5] - 2026-09-28
34
49
 
35
50
  - TAG: [v3.1.5][3.1.5t]
@@ -3938,7 +3953,9 @@ Please file a bug if you notice a violation of semantic versioning.
3938
3953
  - Selecting will run the selected workflow via `act`
3939
3954
  - This may move to its own gem in the future.
3940
3955
 
3941
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.5...HEAD
3956
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.6...HEAD
3957
+ [3.1.6]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.5...v3.1.6
3958
+ [3.1.6t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.6
3942
3959
  [3.1.5]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.4...v3.1.5
3943
3960
  [3.1.5t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.5
3944
3961
  [3.1.4]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.3...v3.1.4
data/README.md CHANGED
@@ -420,7 +420,8 @@ What it does:
420
420
  - Enable with env: `K_RELEASE_LOCAL_CI="true"` (run automatically) or `K_RELEASE_LOCAL_CI="ask"` (prompt \[Y/n\]).
421
421
  - Select workflow with `K_RELEASE_LOCAL_CI_WORKFLOW` (with or without .yml/.yaml). Defaults to `locked_deps.yml` if present; otherwise the first workflow discovered.
422
422
  - On failure, the release prep commit is soft-rolled-back (`git reset --soft HEAD^`) and the process aborts.
423
- - Ensures trunk sync and rebases feature as needed, pushes, monitors GitHub Actions with a progress bar, and merges feature to trunk on success.
423
+ - Ensures trunk sync and rebases feature branches as needed, pushes, monitors GitHub Actions with a progress bar, and merges feature to trunk on success.
424
+ - For release branches listed in `.kettle-family.yml` branch-stack targets, it intentionally does not pull/rebase from trunk or merge the leaf branch into trunk. Instead, it starts the selected GitHub Actions workflows directly on the pushed release branch; each selected workflow must declare `workflow_dispatch`. This validates the exact branch-stack commit without requiring an often-conflicting PR to trunk.
424
425
  - Exports `SOURCE_DATE_EPOCH`, builds (optionally signed), creates gem checksums, and runs `bundle exec rake release` (prompts for signing key + RubyGems MFA OTP as needed).
425
426
  - Options:
426
427
  - `start_step` map (skip directly to a phase):
@@ -433,11 +434,11 @@ What it does:
433
434
  (or appraisal:update with --appraisal-update)
434
435
  6. Ensure git user configured; commit release prep
435
436
  7. Optional local CI with `act` (controlled by `K_RELEASE_LOCAL_CI`)
436
- 8. Ensure trunk in sync across remotes; rebase feature as needed
437
+ 8. Ensure trunk in sync across remotes; rebase feature as needed (skipped for configured branch-stack release targets)
437
438
  9. Push current branch to remotes (or 'all' remote)
438
- 10. Monitor CI after push; abort on failures
439
- 11. Merge feature into trunk and push
440
- 12. Checkout trunk and pull latest
439
+ 10. Monitor CI after push; configured branch-stack releases dispatch each selected workflow directly on the release branch
440
+ 11. Merge feature into trunk and push (skipped for branch-stack release targets)
441
+ 12. Checkout trunk and pull latest (skipped for branch-stack release targets)
441
442
  13. Gem signing checks/guidance (skip with `SKIP_GEM_SIGNING=true`)
442
443
  14. Build gem (bundle exec rake build)
443
444
  15. Release gem (bundle exec rake release)
@@ -1066,7 +1067,7 @@ Thanks for RTFM. ☺️
1066
1067
  [📌gitmoji]: https://gitmoji.dev
1067
1068
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1068
1069
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1069
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.748-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1070
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.775-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1070
1071
  [🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
1071
1072
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1072
1073
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -1419,7 +1419,7 @@ module Kettle
1419
1419
  end
1420
1420
 
1421
1421
  def monitor_workflows_after_push!
1422
- ensure_github_pull_request_for_ci!
1422
+ ensure_ci_trigger_for_release_branch!
1423
1423
  keep_release_secrets_alive!("CI monitoring")
1424
1424
  restart_hint = "bundle exec kettle-release --start-step 10"
1425
1425
  emit_ci_monitor_event(action: "start", status: "started", workflows: @ci_workflows, restart_hint: restart_hint)
@@ -1452,13 +1452,18 @@ module Kettle
1452
1452
  end
1453
1453
  end
1454
1454
 
1455
- def ensure_github_pull_request_for_ci!
1455
+ def ensure_ci_trigger_for_release_branch!
1456
1456
  branch = current_branch
1457
1457
  return if branch.to_s.empty?
1458
1458
 
1459
1459
  trunk = detect_trunk_branch
1460
1460
  return if branch == trunk
1461
1461
 
1462
+ if branch_stack_release_branch?(branch, trunk)
1463
+ dispatch_github_workflows!(branch: branch)
1464
+ return
1465
+ end
1466
+
1462
1467
  gh_remote = preferred_github_remote
1463
1468
  return unless gh_remote
1464
1469
 
@@ -1487,6 +1492,44 @@ module Kettle
1487
1492
  }
1488
1493
  end
1489
1494
 
1495
+ def dispatch_github_workflows!(branch:)
1496
+ gh_remote = preferred_github_remote
1497
+ return unless gh_remote
1498
+
1499
+ owner, repo = parse_github_owner_repo(remote_url(gh_remote))
1500
+ return unless owner && repo
1501
+
1502
+ root = Kettle::Dev::CIHelpers.ci_project_root
1503
+ workflows = @ci_workflows.empty? ? Kettle::Dev::CIHelpers.workflows_list(root) : @ci_workflows
1504
+ unsupported = workflows.reject { |workflow| workflow_dispatch_configured?(root, workflow) }
1505
+ unless unsupported.empty?
1506
+ abort("Branch-stack release CI requires workflow_dispatch in every selected workflow; unsupported: #{unsupported.join(", ")}")
1507
+ end
1508
+
1509
+ workflows.each do |workflow|
1510
+ gh_output!("workflow", "run", workflow, "--repo", "#{owner}/#{repo}", "--ref", branch)
1511
+ puts "Dispatched GitHub Actions workflow #{workflow} on branch #{branch}."
1512
+ end
1513
+ end
1514
+
1515
+ def workflow_dispatch_configured?(root, workflow)
1516
+ path = File.join(root, ".github", "workflows", workflow)
1517
+ return false unless File.file?(path)
1518
+
1519
+ document = Kettle::Dev.safe_load_yaml(File.read(path), aliases: true)
1520
+ triggers = document.is_a?(Hash) ? (document["on"] || document[true]) : nil
1521
+ case triggers
1522
+ when Hash
1523
+ triggers.key?("workflow_dispatch") || triggers.key?(:workflow_dispatch)
1524
+ when Array
1525
+ triggers.any? { |trigger| trigger.to_s == "workflow_dispatch" }
1526
+ else
1527
+ false
1528
+ end
1529
+ rescue Psych::Exception
1530
+ false
1531
+ end
1532
+
1490
1533
  def github_pull_request_for_branch(owner:, repo:, branch:, base:)
1491
1534
  output = gh_output!(
1492
1535
  "pr",
@@ -1561,9 +1604,9 @@ module Kettle
1561
1604
 
1562
1605
  exit_code = status.respond_to?(:exitstatus) ? status.exitstatus : 1
1563
1606
  diag = stderr_str.to_s.empty? ? "" : "\n--- STDERR ---\n#{stderr_str}".rstrip
1564
- abort("GitHub pull request setup failed: gh #{args.join(" ")} (exit #{exit_code})#{diag}")
1607
+ abort("GitHub CLI command failed: gh #{args.join(" ")} (exit #{exit_code})#{diag}")
1565
1608
  rescue Errno::ENOENT
1566
- abort("GitHub pull request setup failed: gh CLI is required to create or find the release PR.")
1609
+ abort("GitHub CLI command failed: gh CLI is required for release CI setup.")
1567
1610
  end
1568
1611
 
1569
1612
  def run_cmd!(cmd, resume_step: @release_resume_step)
@@ -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.1.5"
8
+ VERSION = "3.1.6"
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/dev.rb CHANGED
@@ -115,10 +115,11 @@ module Kettle
115
115
  text.to_s.gsub(VAR_HOME_TEXT, "/home")
116
116
  end
117
117
 
118
- def safe_load_yaml(content)
119
- YAML.safe_load(content, permitted_classes: [], aliases: false)
120
- rescue ArgumentError
121
- YAML.safe_load(content, [], [], false)
118
+ def safe_load_yaml(content, aliases: false)
119
+ supports_keyword_options = Gem::Version.new(Psych::VERSION) >= Gem::Version.new("4.0")
120
+ return YAML.safe_load(content, permitted_classes: [], aliases: aliases) if supports_keyword_options
121
+
122
+ YAML.safe_load(content, [], [], aliases)
122
123
  end
123
124
 
124
125
  def safe_load_yaml_file(path)
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.1.5
4
+ version: 3.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -422,10 +422,10 @@ licenses:
422
422
  - AGPL-3.0-only
423
423
  metadata:
424
424
  homepage_uri: https://kettle-dev.galtzo.com
425
- source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.5
426
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.5/CHANGELOG.md
425
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.6
426
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.6/CHANGELOG.md
427
427
  bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
428
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.5
428
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.6
429
429
  funding_uri: https://github.com/sponsors/pboling
430
430
  wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
431
431
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file