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 +4 -4
- checksums.yaml.gz.sig +2 -2
- data/CHANGELOG.md +14 -1
- data/README.md +18 -3
- data/exe/kettle-release +13 -5
- data/lib/kettle/dev/release_cli.rb +39 -0
- data/lib/kettle/dev/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +4 -4
- 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: b33eb850afdd492ae8078a8670f93e7f452665f60feed6fe56da0ec7501fb688
|
|
4
|
+
data.tar.gz: b9e680943a5054b237b7b747ea85af306e428ffc6d39af8b4ec316e1e254aa54
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0254c1bd4f95fff49146664b9e2071b213b722c736ef2d196fbefc0480d06900e1494dca631c7f7afaabfeb444b964aca179d2cedfa834225aa11d6c40ac5255
|
|
7
|
+
data.tar.gz: 30b20f7364cd3e4e5fee5354cee5cb03daabc8219fe3695ae3585dd98695d1102068392a24477e11ca3423d52660206cc8b86c65b1ef50134f74ece81ecd4c75
|
checksums.yaml.gz.sig
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
�S���\�������Դ���.oкDaI�Hh���S����w�]�5�<ض�A߹��ot��s¸ŷ���%7cȤ���7�Q>(�r6N���3;9�YŇ\I���%*2K��a� ���Ff7#�����
|
|
2
|
+
��%LEma�6�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.
|
|
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:
|
|
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
|
|
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.
|
|
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
|
|
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 #
|
|
136
|
-
kettle-release skip_steps=10 #
|
|
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
|
data/lib/kettle/dev/version.rb
CHANGED
|
@@ -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
|
+
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.
|
|
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.
|
|
404
|
-
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.
|
|
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.
|
|
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
|