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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b954b64713359f0955f303327bccadeff89c0d9e56733e325404c04774530550
4
- data.tar.gz: ccb2a4329abb25e1e2e9999c15f86572f52bc0baa65a0702c8a1e779ee046f07
3
+ metadata.gz: b985d06999d067d64979c99918110a0203d706c53392e498ab667126e9388d68
4
+ data.tar.gz: 73b20adeb029d70f67152d6ae8ee4377629c846c851ac1a6c484fc2ff6add583
5
5
  SHA512:
6
- metadata.gz: b521c0a0b72e751b3ec1f4633dce08e6b5b1d53a4a09e48690a57041dc81c0d515f656bcc4ab5fb9a0f3861ab595e71f76af21eec8116fa25a16f599775700cc
7
- data.tar.gz: 71ff4f43113cca27f09047d9252b761edf5f734f7d562ef49178ffc2025e1b9057a4f4dc79061a4ce9966320557929fab21e5ae18f1e5481fa6646da8c8a483b
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.21...HEAD
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 from monitoring: `bundle exec kettle-release --start-step 10` (the legacy `start_step=10` spelling remains supported)
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
- `KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY=true` switch remains available for
475
- an explicit bootstrap/release graph that cannot resolve that downstream
476
- tool, but it is not used while rewriting the tracked development
477
- lockfiles.
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.430-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
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 File.file?(appraisals_path)
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.
@@ -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)
@@ -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.21"
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.21
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.21
404
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.21/CHANGELOG.md
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.21
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