kettle-dev 3.0.8 → 3.0.9

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: 7124072093bb694c91e9f06b63821090cb992e1a8747f3f83e212a6b927dc25c
4
- data.tar.gz: 861518ad52298f44bc8f76b9d6f4dbb5e9c11c80c4d97bf2c087d6e0ea20d90c
3
+ metadata.gz: b33eb850afdd492ae8078a8670f93e7f452665f60feed6fe56da0ec7501fb688
4
+ data.tar.gz: b9e680943a5054b237b7b747ea85af306e428ffc6d39af8b4ec316e1e254aa54
5
5
  SHA512:
6
- metadata.gz: 0f823bf26a24fcfcd3b52179dd960f9226c985a9cfc2d6962364dac67d329e6aa21e876f1bcf97a43e2e66158707d11325a56bb1d41d1327fdf4ecac977c4bce
7
- data.tar.gz: 356bc62c3d680808bd5f89a73427dbfaac36157b29dabbe59bc584b37bc8a2aeaa0d62fd2d9198a32f1e0f8b3dc068b722e00214ae9b26a6e053bc60305c295b
6
+ metadata.gz: 0254c1bd4f95fff49146664b9e2071b213b722c736ef2d196fbefc0480d06900e1494dca631c7f7afaabfeb444b964aca179d2cedfa834225aa11d6c40ac5255
7
+ data.tar.gz: 30b20f7364cd3e4e5fee5354cee5cb03daabc8219fe3695ae3585dd98695d1102068392a24477e11ca3423d52660206cc8b86c65b1ef50134f74ece81ecd4c75
checksums.yaml.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- ('�ƿk@�;#tl:�����@�� ����d��o�2ߒ����1���|�\����H��#?�#�%U�їT����l�ph/��S��Pr3��CS>=��S+���c<�
2
- E �!��@[�eg��}'#�_�?�y{�>�
1
+ �S���\�������Դ���.oкDaIHh���S����w]�5�<ض�A߹��ot��s¸ŷ���%7cȤ���7�Q>(�r6 N���3;9�YŇ\I���%*2K�� a� ���Ff7#�����
2
+ ��%LEma6�m:��z���֨��>N�.F�������-b'�طc$�;2ط����pVj&��C����-����
data/CHANGELOG.md CHANGED
@@ -30,6 +30,17 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [3.0.9] - 2026-08-23
34
+
35
+ - TAG: [v3.0.9][3.0.9t]
36
+ - COVERAGE: 91.36% -- 5698/6237 lines in 47 files
37
+ - BRANCH COVERAGE: 76.08% -- 2172/2855 branches in 47 files
38
+ - 50.62% documented
39
+
40
+ ### Fixed
41
+
42
+ - Keep Bundler platform reconciliation in an isolated lockfile during release builds and publication so normalized release lockfiles remain clean.
43
+
33
44
  ## [3.0.8] - 2026-08-23
34
45
 
35
46
  - TAG: [v3.0.8][3.0.8t]
@@ -3505,7 +3516,9 @@ Please file a bug if you notice a violation of semantic versioning.
3505
3516
  - Selecting will run the selected workflow via `act`
3506
3517
  - This may move to its own gem in the future.
3507
3518
 
3508
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.8...HEAD
3519
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.9...HEAD
3520
+ [3.0.9]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.8...v3.0.9
3521
+ [3.0.9t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.9
3509
3522
  [3.0.8]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.7...v3.0.8
3510
3523
  [3.0.8t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.8
3511
3524
  [3.0.7]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.6...v3.0.7
data/README.md CHANGED
@@ -426,7 +426,8 @@ What it does:
426
426
  2. Detect version; RubyGems sanity check; confirm CHANGELOG/version; sync copyright years; update badges/headers
427
427
  3. Run bin/setup
428
428
  4. Run bin/rake (default task)
429
- 5. Run bin/rake appraisal:update if Appraisals present, then bin/rake yard
429
+ 5. Run bin/rake appraisal:generate if Appraisals are present, then bin/rake yard
430
+ (or appraisal:update with --appraisal-update)
430
431
  6. Ensure git user configured; commit release prep
431
432
  7. Optional local CI with `act` (controlled by `K_RELEASE_LOCAL_CI`)
432
433
  8. Ensure trunk in sync across remotes; rebase feature as needed
@@ -442,7 +443,9 @@ What it does:
442
443
  18. Create GitHub Release (requires `GITHUB_TOKEN`)
443
444
  19. Push tags to remotes (final)
444
445
  - Examples:
445
- - After intermittent CI failure, restart from monitoring: `bundle exec kettle-release start_step=10`
446
+ - After a transient CI or provider failure with no code, version, changelog, or lockfile changes, restart from monitoring: `bundle exec kettle-release start_step=10`
447
+ - If the failure required a code or release-metadata change, rerun `bundle exec kettle-release` from step 0 so the release checks, prep metadata, commit, and CI all describe the new release commit.
448
+ - For an intentional same-commit CI bypass, use `bundle exec kettle-release skip_steps=10` or `--skip-steps 10`; this skips remote CI monitoring only and does not claim that CI passed.
446
449
  - After fixing a failed pre-release gate, rerun from step 0: `bundle exec kettle-release`
447
450
  - After intentionally handling a failed pre-release gate, skip it and start numbered release steps: `bundle exec kettle-release start_step=1`
448
451
  - Auto-approve release confirmation prompts: `bundle exec kettle-release --yes`
@@ -465,6 +468,18 @@ What it does:
465
468
  lockfiles again; if local paths or checksum gaps reappear, it prints the
466
469
  diagnostics, attempts one reset, amends the release prep commit if the
467
470
  reset changed tracked lockfiles, and aborts if diagnostics remain.
471
+ - Release build and publish tasks use a disposable copy of `Gemfile.lock`.
472
+ This is intentional: `bundle lock --add-platform` records the normalized
473
+ CI platforms, but it is not a permanent preservation directive. A later
474
+ non-frozen `bundle exec rake build` or `bundle exec rake release` can
475
+ reconcile the lockfile for the host platform and rewrite the tracked
476
+ file. RubyGems' `bundler/gem_tasks` then sees that rewrite and aborts at
477
+ its clean-tree guard, even though the release inputs were valid. The
478
+ temporary `BUNDLE_LOCKFILE` lets Bundler perform that runtime
479
+ reconciliation without changing the committed release lockfile; it is
480
+ removed when the release process exits. `BUNDLE_FROZEN=true` is not a
481
+ substitute because it converts the same reconciliation into a failure
482
+ when Bundler needs to write its resolved lockfile.
468
483
  - Tips:
469
484
  - The commit message helper `exe/kettle-commit-msg` prefers project-local `.git-hooks` (then falls back to `~/.git-hooks`).
470
485
  - The goalie file `commit-subjects-goalie.txt` controls when a footer is appended; customize `footer-template.erb.txt` as you like.
@@ -993,7 +1008,7 @@ Thanks for RTFM. ☺️
993
1008
  [📌gitmoji]: https://gitmoji.dev
994
1009
  [📌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
1010
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
996
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.216-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1011
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.237-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
997
1012
  [🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
998
1013
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
999
1014
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
data/exe/kettle-release CHANGED
@@ -64,7 +64,8 @@ if ARGV.include?("-h") || ARGV.include?("--help")
64
64
  2. Detect version; RubyGems sanity check; confirm CHANGELOG/version; sync copyright years; update badges/headers
65
65
  3. Run bin/setup
66
66
  4. Run bin/rake (default task)
67
- 5. Run bin/rake appraisal:generate if Appraisals present
67
+ 5. Run bin/rake appraisal:generate if Appraisals are present
68
+ (or appraisal:update with --appraisal-update)
68
69
  6. Ensure git user configured; commit release prep
69
70
  7. Optional local CI with `act` (controlled by K_RELEASE_LOCAL_CI)
70
71
  8. Ensure trunk in sync across remotes; rebase feature as needed
@@ -81,8 +82,8 @@ if ARGV.include?("-h") || ARGV.include?("--help")
81
82
  19. Push tags to remotes (final)
82
83
 
83
84
  Options:
84
- start_step=<number> # Begin at the numbered step above (e.g., 10 to resume at CI monitoring)
85
- skip_steps=<numbers> # Comma-separated numbered steps to skip while running the rest
85
+ start_step=<number> # Begin at the numbered step above; use 10 only for a transient CI failure on the same commit
86
+ skip_steps=<numbers> # Comma-separated numbered steps to skip while running the rest; 10 skips remote CI monitoring
86
87
  --skip-steps NUMBERS # Alias for skip_steps=NUMBERS (e.g., --skip-steps 10 or --skip-steps 10,18)
87
88
  --version VERSION # Use this version instead of detecting VERSION from lib/**/version.rb
88
89
  --yes # Auto-approve release confirmation prompts
@@ -99,12 +100,19 @@ if ARGV.include?("-h") || ARGV.include?("--help")
99
100
  --local-ci # Sensitive release mode: run act locally, publish before any git push,
100
101
  # create the git tag locally, then push commits and tags after publish
101
102
 
103
+ Recovery guidance:
104
+ start_step=10 # Retry only CI monitoring after a transient CI/provider failure; do not use after code or metadata changes
105
+ start_step=11 # Continue after CI monitoring only when that same release commit was intentionally accepted
106
+ skip_steps=10 # Skip remote CI monitoring for the same prepared release commit; this does not rerun or replace CI
107
+ kettle-release # After code, version, changelog, or lockfile changes, rerun the complete flow from step 0
108
+
102
109
  Environment:
103
110
  SKIP_GEM_SIGNING=true # Build/release unsigned; avoids PEM password prompts
104
111
  GEM_CERT_USER=<user> # Select certs/<user>.pem for signing
105
112
  K_RELEASE_LOCAL_CI=ask|1|0 # Use 'act' locally before push; 'ask' prompts, '1' forces, default off
106
113
  K_RELEASE_LOCAL_CI_WORKFLOW # Name of workflow (without .yml) for local CI; defaults to locked_deps or first
107
114
  K_RELEASE_CI_WORKFLOWS # Comma-separated workflow files or stems to monitor at CI step 10
115
+ K_RELEASE_CI_CONTINUE=true # Continue after a failed CI result; monitoring still runs and failures remain visible
108
116
  K_RELEASE_SKIP_REMOTES # Comma-separated git remote names to exclude from release fetch/push parity
109
117
  K_RELEASE_REQUIRED_REMOTES # Comma-separated remotes that must fetch for release parity; defaults to origin
110
118
  KETTLE_RELEASE_SECRETS_PROVIDER=1password
@@ -132,8 +140,8 @@ if ARGV.include?("-h") || ARGV.include?("--help")
132
140
  kettle-release # full flow from the top (start_step=0)
133
141
  kettle-release --local-ci # run local act CI, publish gem, then push commits/tags
134
142
  kettle-release start_step=1 # skip pre-release checks and start numbered release steps
135
- kettle-release start_step=10 # resume by monitoring CI for the current branch
136
- kettle-release skip_steps=10 # run the release but skip remote CI monitoring
143
+ kettle-release start_step=10 # retry CI monitoring after a transient failure on the unchanged release commit
144
+ kettle-release skip_steps=10 # intentionally skip remote CI monitoring for the unchanged release commit
137
145
  SKIP_GEM_SIGNING=true kettle-release start_step=14 # build+release without signing
138
146
  USAGE
139
147
  exit 0
@@ -217,6 +217,7 @@ module Kettle
217
217
  @started_at = nil
218
218
  @finished_report = nil
219
219
  @changelog_generated_coverage = false
220
+ @release_task_lockfile_path = nil
220
221
  end
221
222
 
222
223
  def run
@@ -242,6 +243,7 @@ module Kettle
242
243
  record_diagnostic("release_error", "#{e.class}: #{e.message}", severity: "error", blocking: true)
243
244
  raise
244
245
  ensure
246
+ cleanup_release_task_lockfile!
245
247
  finish_release_report(status: status, error: error)
246
248
  end
247
249
 
@@ -972,10 +974,47 @@ module Kettle
972
974
  release_lockfile_normalization_env.each do |key, value|
973
975
  command << " #{key}=#{Shellwords.escape(value)}"
974
976
  end
977
+ if release_task_command?(project_command)
978
+ if (lockfile = release_task_lockfile_path)
979
+ command << " BUNDLE_LOCKFILE=#{Shellwords.escape(lockfile)}"
980
+ end
981
+ end
975
982
  command << " #{project_command}"
976
983
  command
977
984
  end
978
985
 
986
+ def release_task_command?(command)
987
+ ["bundle exec rake build", "bundle exec rake release"].include?(command.to_s.strip)
988
+ end
989
+
990
+ # Bundler may reconcile the current machine's platform while loading a
991
+ # project bundle. That is useful during development, but it can dirty the
992
+ # release-preparation commit between the final lockfile reset and
993
+ # bundler/gem_tasks' release:guard_clean check. Keep that reconciliation
994
+ # in a disposable lockfile so the committed, normalized lockfile remains
995
+ # unchanged throughout build and publication.
996
+ def release_task_lockfile_path
997
+ return @release_task_lockfile_path if @release_task_lockfile_path
998
+
999
+ source = File.join(@root, "Gemfile.lock")
1000
+ return unless File.file?(source)
1001
+
1002
+ directory = File.join(@root, "tmp", "kettle-release", "lockfiles")
1003
+ FileUtils.mkdir_p(directory)
1004
+ @release_task_lockfile_path = File.join(directory, "Gemfile-#{$$}.lock")
1005
+ FileUtils.cp(source, @release_task_lockfile_path)
1006
+ @release_task_lockfile_path
1007
+ rescue SystemCallError => error
1008
+ abort("Unable to isolate the release task lockfile: #{error.message}")
1009
+ end
1010
+
1011
+ def cleanup_release_task_lockfile!
1012
+ return unless @release_task_lockfile_path
1013
+
1014
+ FileUtils.rm_f(@release_task_lockfile_path)
1015
+ @release_task_lockfile_path = nil
1016
+ end
1017
+
979
1018
  def confirm_yes!(message, prompt, abort_message)
980
1019
  puts(message)
981
1020
  if @yes
@@ -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.8"
8
+ VERSION = "3.0.9"
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.8
4
+ version: 3.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -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.8
404
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.8/CHANGELOG.md
403
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.9
404
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.9/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.8
406
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.9
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