kettle-dev 3.0.21 → 3.0.23
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 +27 -1
- data/README.md +9 -7
- data/exe/kettle-release +17 -2
- data/lib/kettle/dev/release_cli.rb +9 -2
- data/lib/kettle/dev/reset_cli.rb +7 -3
- 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: b985d06999d067d64979c99918110a0203d706c53392e498ab667126e9388d68
|
|
4
|
+
data.tar.gz: 73b20adeb029d70f67152d6ae8ee4377629c846c851ac1a6c484fc2ff6add583
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4af9b35a01651eb7eab623ea2f7d1a2829fee953467fd92f3fe27886333dc417397ddb430485b74dc1413d2aeb5553d840636fef9cab83425f32eaccd283ce99
|
|
7
|
+
data.tar.gz: 8d73396e1a95de0eac8a19ec6625830779505144d9dc7bb4852de362e9f3f83bcbc2190b221b971687459e6b7e2b2a3aa7c6453b71e87479a4b14d5ec805d2e1
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,28 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [3.0.23] - 2026-08-30
|
|
34
|
+
|
|
35
|
+
- TAG: [v3.0.23][3.0.23t]
|
|
36
|
+
- COVERAGE: 91.35% -- 5881/6438 lines in 47 files
|
|
37
|
+
- BRANCH COVERAGE: 76.01% -- 2250/2960 branches in 47 files
|
|
38
|
+
- 50.47% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Add an explicit reset option for release graphs that must omit the optional changelog dependency.
|
|
43
|
+
|
|
44
|
+
## [3.0.22] - 2026-08-30
|
|
45
|
+
|
|
46
|
+
- TAG: [v3.0.22][3.0.22t]
|
|
47
|
+
- COVERAGE: 91.58% -- 5893/6435 lines in 47 files
|
|
48
|
+
- BRANCH COVERAGE: 76.32% -- 2259/2960 branches in 47 files
|
|
49
|
+
- 50.47% documented
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
|
|
53
|
+
- Add an appraisal-only release skip while preserving documentation generation.
|
|
54
|
+
|
|
33
55
|
## [3.0.21] - 2026-08-30
|
|
34
56
|
|
|
35
57
|
- TAG: [v3.0.21][3.0.21t]
|
|
@@ -3688,7 +3710,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
3688
3710
|
- Selecting will run the selected workflow via `act`
|
|
3689
3711
|
- This may move to its own gem in the future.
|
|
3690
3712
|
|
|
3691
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.
|
|
3713
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.23...HEAD
|
|
3714
|
+
[3.0.23]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.22...v3.0.23
|
|
3715
|
+
[3.0.23t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.23
|
|
3716
|
+
[3.0.22]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.21...v3.0.22
|
|
3717
|
+
[3.0.22t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.22
|
|
3692
3718
|
[3.0.21]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.20...v3.0.21
|
|
3693
3719
|
[3.0.21t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.21
|
|
3694
3720
|
[3.0.20]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.19...v3.0.20
|
data/README.md
CHANGED
|
@@ -415,7 +415,7 @@ What it does:
|
|
|
415
415
|
Markdown fixtures under `spec/` and `test/`, along with `tmp/`, are intentionally excluded.
|
|
416
416
|
- Skips pre-release checks for any `start_step` greater than `0`, so resumptions begin directly at the requested numbered step.
|
|
417
417
|
- Verifies Bundler >= 2.7, updates the primary and appraisal bundles with `bundle update --bundler`, and commits those lockfiles separately as `🔒️ Update bundle` before release preparation.
|
|
418
|
-
- Runs sanity checks (`bin/setup`, `bin/rake`), confirms version/changelog, optionally updates Appraisals, regenerates docs via `bin/rake yard`, and commits “🔖 Prepare release vX.Y.Z”.
|
|
418
|
+
- Runs sanity checks (`bin/setup`, `bin/rake`), confirms version/changelog, optionally updates Appraisals, regenerates docs via `bin/rake yard`, and commits “🔖 Prepare release vX.Y.Z”. Use `--skip-appraisals` only to omit appraisal generation while retaining documentation generation.
|
|
419
419
|
- Optionally runs your CI locally with `act` before any push:
|
|
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.
|
|
@@ -446,9 +446,10 @@ What it does:
|
|
|
446
446
|
18. Create GitHub Release (requires `GITHUB_TOKEN`)
|
|
447
447
|
19. Push tags to remotes (final)
|
|
448
448
|
- Examples:
|
|
449
|
-
- After a transient CI or provider failure with no code, version, changelog, or lockfile changes, restart
|
|
449
|
+
- After a transient CI or provider failure with no code, version, changelog, or lockfile changes, restart at the failed step: for example, `bundle exec kettle-release --start-step 10` for CI monitoring or `bundle exec kettle-release --start-step 15` for RubyGems publication. The legacy `start_step=10` spelling remains supported.
|
|
450
450
|
- 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.
|
|
451
451
|
- For an intentional same-commit CI bypass, use `bundle exec kettle-release --skip-ci` (or `--skip-steps 10`); this skips remote CI monitoring only and does not claim that CI passed.
|
|
452
|
+
- To retain release documentation generation while bypassing a known Appraisal-only issue, use `bundle exec kettle-release --skip-appraisals`.
|
|
452
453
|
- After fixing a failed pre-release gate, rerun from step 0: `bundle exec kettle-release`
|
|
453
454
|
- After intentionally handling a failed pre-release gate, skip it and start numbered release steps: `bundle exec kettle-release --start-step 1`
|
|
454
455
|
- Auto-approve release confirmation prompts: `bundle exec kettle-release --yes`
|
|
@@ -471,10 +472,11 @@ What it does:
|
|
|
471
472
|
`kettle-changelog` depends on `kettle-dev`, so including it in
|
|
472
473
|
`kettle-dev`'s development bundle creates a downstream development-cycle
|
|
473
474
|
when sibling versions are unpublished. The
|
|
474
|
-
`
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
475
|
+
`--skip-changelog-dependency` (or the equivalent
|
|
476
|
+
`KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY=true` Gemfile switch) is available
|
|
477
|
+
for an explicit bootstrap/release graph that cannot resolve that
|
|
478
|
+
downstream tool. It is intentionally not the default for standalone
|
|
479
|
+
tracked development lockfiles.
|
|
478
480
|
- At release step 1, `kettle-release` runs the equivalent of
|
|
479
481
|
`kettle-family bupb`: it updates the primary lockfile and, when present,
|
|
480
482
|
`Appraisal.root.gemfile.lock`, resets appraisal locks, and commits only
|
|
@@ -1056,7 +1058,7 @@ Thanks for RTFM. ☺️
|
|
|
1056
1058
|
[📌gitmoji]: https://gitmoji.dev
|
|
1057
1059
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1058
1060
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1059
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.
|
|
1061
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.438-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1060
1062
|
[🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
|
|
1061
1063
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1062
1064
|
[📄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
|
@@ -49,7 +49,7 @@ end
|
|
|
49
49
|
# Do not guard with __FILE__ == $PROGRAM_NAME because binstubs use Kernel.load.
|
|
50
50
|
if ARGV.include?("-h") || ARGV.include?("--help")
|
|
51
51
|
puts <<~USAGE
|
|
52
|
-
Usage: kettle-release [--version VERSION] [--local-ci] [--yes] [--appraisal-update] [--skip-changelog] [--skip-bundle-audit] [--start-step STEP] [--skip-ci] [--skip-steps STEPS] [--ci-workflows WORKFLOWS] [--skip-remotes REMOTES] [--required-remotes REMOTES] [--secrets-provider NAME] [--json|--events[=TYPES]] [--report PATH] [start_step=<0-19>]
|
|
52
|
+
Usage: kettle-release [--version VERSION] [--local-ci] [--yes] [--appraisal-update] [--skip-changelog] [--skip-appraisals] [--skip-bundle-audit] [--start-step STEP] [--skip-ci] [--skip-steps STEPS] [--ci-workflows WORKFLOWS] [--skip-remotes REMOTES] [--required-remotes REMOTES] [--secrets-provider NAME] [--json|--events[=TYPES]] [--report PATH] [start_step=<0-19>]
|
|
53
53
|
|
|
54
54
|
Automates the release flow for a Ruby gem in the host project.
|
|
55
55
|
|
|
@@ -91,6 +91,7 @@ if ARGV.include?("-h") || ARGV.include?("--help")
|
|
|
91
91
|
--yes # Auto-approve release confirmation prompts
|
|
92
92
|
--appraisal-update # Use slower appraisal:update instead of default appraisal:generate
|
|
93
93
|
--skip-changelog # Skip kettle-changelog but retain pre-release gates and the default task
|
|
94
|
+
--skip-appraisals # Skip appraisal generation at step 5 but still generate documentation
|
|
94
95
|
--skip-bundle-audit # Skip bundle:audit/update during release rake checks
|
|
95
96
|
--ci-workflows WORKFLOWS # Comma-separated workflow files or stems to monitor at CI step 10
|
|
96
97
|
--skip-remotes REMOTES # Comma-separated git remote names to exclude from release fetch/push parity
|
|
@@ -227,6 +228,19 @@ def extract_skip_changelog_arg!(argv)
|
|
|
227
228
|
skip_changelog
|
|
228
229
|
end
|
|
229
230
|
|
|
231
|
+
def extract_skip_appraisals_arg!(argv)
|
|
232
|
+
skip_appraisals = !!argv.delete("--skip-appraisals")
|
|
233
|
+
argv.delete_if do |arg|
|
|
234
|
+
if arg.start_with?("skip_appraisals=")
|
|
235
|
+
skip_appraisals = arg.split("=", 2)[1].to_s.downcase != "false"
|
|
236
|
+
true
|
|
237
|
+
else
|
|
238
|
+
false
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
skip_appraisals
|
|
242
|
+
end
|
|
243
|
+
|
|
230
244
|
def extract_ci_workflows_arg!(argv)
|
|
231
245
|
workflows = nil
|
|
232
246
|
if (idx = argv.index("--ci-workflows"))
|
|
@@ -353,6 +367,7 @@ yes = !!ARGV.delete("--yes")
|
|
|
353
367
|
appraisal_task = ARGV.delete("--appraisal-update") ? "appraisal:update" : nil
|
|
354
368
|
skip_bundle_audit = !!ARGV.delete("--skip-bundle-audit")
|
|
355
369
|
skip_changelog = extract_skip_changelog_arg!(ARGV)
|
|
370
|
+
skip_appraisals = extract_skip_appraisals_arg!(ARGV)
|
|
356
371
|
json_output = !!ARGV.delete("--json")
|
|
357
372
|
events_output, event_types = extract_events_arg!(ARGV)
|
|
358
373
|
Kettle::Dev::ExitAdapter.abort("--events cannot be combined with --json") if events_output && json_output
|
|
@@ -369,7 +384,7 @@ secrets_provider = extract_secrets_provider_arg!(ARGV)
|
|
|
369
384
|
|
|
370
385
|
begin
|
|
371
386
|
event_stream = events_output ? Kettle::Ndjson.event_stream($stdout, types: event_types) : nil
|
|
372
|
-
Kettle::Dev::ReleaseCLI.new(start_step: start_step, local_ci: local_ci, version: version_override, appraisal_task: appraisal_task, skip_steps: skip_steps, skip_changelog: skip_changelog, skip_bundle_audit: skip_bundle_audit, ci_workflows: ci_workflows, skip_remotes: skip_remotes, required_remotes: required_remotes, secrets_provider_name: secrets_provider, yes: yes, event_stream: event_stream, json_output: json_output, json_io: $stdout, report_path: report_path).run
|
|
387
|
+
Kettle::Dev::ReleaseCLI.new(start_step: start_step, local_ci: local_ci, version: version_override, appraisal_task: appraisal_task, skip_steps: skip_steps, skip_changelog: skip_changelog, skip_appraisals: skip_appraisals, skip_bundle_audit: skip_bundle_audit, ci_workflows: ci_workflows, skip_remotes: skip_remotes, required_remotes: required_remotes, secrets_provider_name: secrets_provider, yes: yes, event_stream: event_stream, json_output: json_output, json_io: $stdout, report_path: report_path).run
|
|
373
388
|
rescue LoadError => e
|
|
374
389
|
warn("#{script_basename}: could not load dependency: #{e.class}: #{e.message}")
|
|
375
390
|
warn(Array(e.backtrace).join("\n")) if ENV["DEBUG"]
|
|
@@ -191,13 +191,14 @@ module Kettle
|
|
|
191
191
|
|
|
192
192
|
public
|
|
193
193
|
|
|
194
|
-
def initialize(start_step: 0, local_ci: false, version: nil, appraisal_task: nil, skip_steps: nil, skip_changelog: nil, skip_bundle_audit: nil, ci_workflows: nil, skip_remotes: nil, required_remotes: nil, secrets_provider_name: nil, yes: false, **options)
|
|
194
|
+
def initialize(start_step: 0, local_ci: false, version: nil, appraisal_task: nil, skip_steps: nil, skip_changelog: nil, skip_appraisals: nil, skip_bundle_audit: nil, ci_workflows: nil, skip_remotes: nil, required_remotes: nil, secrets_provider_name: nil, yes: false, **options)
|
|
195
195
|
@root = Kettle::Dev::CIHelpers.project_root
|
|
196
196
|
@git = Kettle::Dev::GitAdapter.new(@root)
|
|
197
197
|
@start_step = (start_step || 0).to_i
|
|
198
198
|
@start_step = 0 if @start_step < 0
|
|
199
199
|
@skip_steps = normalize_skip_steps(skip_steps)
|
|
200
200
|
@skip_changelog = truthy_value?(skip_changelog) || truthy_value?(ENV["KETTLE_DEV_SKIP_CHANGELOG"])
|
|
201
|
+
@skip_appraisals = truthy_value?(skip_appraisals) || truthy_value?(ENV["KETTLE_DEV_SKIP_APPRAISALS"])
|
|
201
202
|
@ci_workflows = normalize_ci_workflows(ci_workflows || ENV["K_RELEASE_CI_WORKFLOWS"])
|
|
202
203
|
@skip_remotes = normalize_remote_names(skip_remotes || ENV["K_RELEASE_SKIP_REMOTES"], "skip remotes")
|
|
203
204
|
@required_remotes = normalize_required_remotes(required_remotes)
|
|
@@ -371,7 +372,9 @@ module Kettle
|
|
|
371
372
|
# 5. appraisal:generate (optional) + canonical docs build
|
|
372
373
|
if run_step?(5)
|
|
373
374
|
appraisals_path = File.join(@root, "Appraisals")
|
|
374
|
-
if
|
|
375
|
+
if skip_appraisals?
|
|
376
|
+
puts "Skipping #{@appraisal_task} because --skip-appraisals was provided."
|
|
377
|
+
elsif File.file?(appraisals_path)
|
|
375
378
|
puts "Appraisals detected at #{Kettle::Dev.display_path(appraisals_path)}. Running: bin/rake #{@appraisal_task}"
|
|
376
379
|
run_cmd!(release_project_command("bin/rake #{@appraisal_task}"))
|
|
377
380
|
else
|
|
@@ -680,6 +683,10 @@ module Kettle
|
|
|
680
683
|
@skip_changelog
|
|
681
684
|
end
|
|
682
685
|
|
|
686
|
+
def skip_appraisals?
|
|
687
|
+
@skip_appraisals
|
|
688
|
+
end
|
|
689
|
+
|
|
683
690
|
def prepare_release_lockfiles_for_commit!
|
|
684
691
|
# Release setup and documentation tasks can re-materialize local PATH
|
|
685
692
|
# sources in the parent development bundle after the preflight reset.
|
data/lib/kettle/dev/reset_cli.rb
CHANGED
|
@@ -9,6 +9,7 @@ module Kettle
|
|
|
9
9
|
@argv = Array(argv).dup
|
|
10
10
|
@root = root
|
|
11
11
|
@check = false
|
|
12
|
+
@skip_changelog_dependency = false
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def run!
|
|
@@ -25,7 +26,7 @@ module Kettle
|
|
|
25
26
|
puts "#{target} is already reset."
|
|
26
27
|
return 0
|
|
27
28
|
end
|
|
28
|
-
resetter.reset(target)
|
|
29
|
+
resetter.reset(target, skip_changelog_dependency: skip_changelog_dependency)
|
|
29
30
|
puts "Reset #{target}."
|
|
30
31
|
end
|
|
31
32
|
0
|
|
@@ -33,7 +34,7 @@ module Kettle
|
|
|
33
34
|
|
|
34
35
|
private
|
|
35
36
|
|
|
36
|
-
attr_reader :argv, :root, :check
|
|
37
|
+
attr_reader :argv, :root, :check, :skip_changelog_dependency
|
|
37
38
|
|
|
38
39
|
def parse!
|
|
39
40
|
parser.parse!(argv)
|
|
@@ -43,9 +44,12 @@ module Kettle
|
|
|
43
44
|
|
|
44
45
|
def parser
|
|
45
46
|
OptionParser.new do |opts|
|
|
46
|
-
opts.banner = "Usage: kettle-reset [--check] TARGET"
|
|
47
|
+
opts.banner = "Usage: kettle-reset [--check] [--skip-changelog-dependency] TARGET"
|
|
47
48
|
opts.separator "Targets: Gemfile.lock, Appraisal.root.gemfile.lock, release-lockfiles"
|
|
48
49
|
opts.on("--check", "Validate TARGET without changing it") { @check = true }
|
|
50
|
+
opts.on("--skip-changelog-dependency", "Omit optional kettle-changelog while resetting a bootstrap/release graph") do
|
|
51
|
+
@skip_changelog_dependency = true
|
|
52
|
+
end
|
|
49
53
|
opts.on("-h", "--help", "Show this help") do
|
|
50
54
|
puts opts
|
|
51
55
|
exit(0)
|
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.23"
|
|
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.23
|
|
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.23
|
|
404
|
+
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.23/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.23
|
|
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
|