kettle-dev 3.0.13 → 3.0.14

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: a082b4a2994774e072557058c17670f3f4252e98bf4c406c38265233e37f10df
4
- data.tar.gz: c09ac0a7de3fda62be5676f735a170c6577816cdfde710cbcf48d8805e5e6040
3
+ metadata.gz: '039cd8bb8df2cc898259f53fb65be82bca84a516067e02c61a31295475f92f79'
4
+ data.tar.gz: 6e0c274ac0c78a6e5960d076cd0cf63ad9639b806fb024a2712c4e81e2697856
5
5
  SHA512:
6
- metadata.gz: 41b0bf2772bd39e1f164b82dc1bf0f07accc07a3310a7e642c75ba1729b2c3cca5db0030b16b0af015e63c6902b596276f79470fc2f646be964a03ec485e565c
7
- data.tar.gz: 57a42e46f0dfb6ad000c952e82a46a3f39308d9e3036363f21a8664b00fbb30e3a5a2e96eef8d88bf6a7aa5a68d9b935e934d450796962688ddba216af7ac92a
6
+ metadata.gz: c756231572b2f1e2d446b2011942937032e089b05218560a20b73b5d1f087de688919eb7b8056b0638926b2e1ea9c80023eca85dd402a3ce99b20f9f90e45173
7
+ data.tar.gz: 87000a51e097e84a8d21ed9bf40e11792d2fd55937f728176c931df54715400ea5c07dfcdc76fce2979914dda7412b12b9287f68ec78e48f97cee255244f05b5
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,35 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [3.0.14] - 2026-08-28
34
+
35
+ - TAG: [v3.0.14][3.0.14t]
36
+ - COVERAGE: 91.46% -- 5818/6361 lines in 47 files
37
+ - BRANCH COVERAGE: 76.14% -- 2230/2929 branches in 47 files
38
+ - 50.86% documented
39
+
40
+ ### Changed
41
+
42
+ - [kc] kettle-jem/prepare: updated 9 project files:
43
+ - configuration (1)
44
+ - dependencies (8)
45
+
46
+ - [kc] kettle-jem/template: updated 14 project files:
47
+ - code and tests (2)
48
+ - configuration (1)
49
+ - dependencies (1)
50
+ - documentation (1)
51
+ - other (1)
52
+ - workflows (8)
53
+
54
+ ### Fixed
55
+
56
+ - Teach kettle-bump to update literal fallback versions in conditional gemspec loaders.
57
+
58
+ - Release lockfile resets now update the locked Bundler version before the release preparation commit, preventing the release's own Bundler upgrade from dirtying the working tree during publication.
59
+
60
+ - Standalone releases now commit Bundler lockfile updates separately before release preparation.
61
+
33
62
  ## [3.0.13] - 2026-08-25
34
63
 
35
64
  - TAG: [v3.0.13][3.0.13t]
@@ -3568,7 +3597,9 @@ Please file a bug if you notice a violation of semantic versioning.
3568
3597
  - Selecting will run the selected workflow via `act`
3569
3598
  - This may move to its own gem in the future.
3570
3599
 
3571
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.13...HEAD
3600
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.14...HEAD
3601
+ [3.0.14]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.13...v3.0.14
3602
+ [3.0.14t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.14
3572
3603
  [3.0.13]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.12...v3.0.13
3573
3604
  [3.0.13t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.13
3574
3605
  [3.0.12]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.11...v3.0.12
data/README.md CHANGED
@@ -145,7 +145,9 @@ The _amazing_ test matrix is powered by the kettle-dev stack.
145
145
 
146
146
  </details>
147
147
 
148
- ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/kettle-dev)](https://tidelift.com/subscription/pkg/rubygems-kettle-dev?utm_source=rubygems-kettle-dev&utm_medium=referral&utm_campaign=readme)
148
+ ### Enterprise Support
149
+
150
+ [![Tidelift](https://tidelift.com/badges/package/rubygems/kettle-dev)](https://tidelift.com/subscription/pkg/rubygems-kettle-dev?utm_source=rubygems-kettle-dev&utm_medium=referral&utm_campaign=readme)
149
151
 
150
152
  Available as part of the Tidelift Subscription.
151
153
 
@@ -412,7 +414,8 @@ What it does:
412
414
  - Validates Markdown reference definitions and local heading anchors across releasable documentation before network checks.
413
415
  Markdown fixtures under `spec/` and `test/`, along with `tmp/`, are intentionally excluded.
414
416
  - Skips pre-release checks for any `start_step` greater than `0`, so resumptions begin directly at the requested numbered step.
415
- - Runs sanity checks (`bin/setup`, `bin/rake`), confirms version/changelog, optionally updates Appraisals, regenerates docs via `bin/rake yard`, commits ā€œšŸ”– Prepare release vX.Y.Zā€.
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ā€.
416
419
  - Optionally runs your CI locally with `act` before any push:
417
420
  - Enable with env: `K_RELEASE_LOCAL_CI="true"` (run automatically) or `K_RELEASE_LOCAL_CI="ask"` (prompt \[Y/n\]).
418
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,7 +425,7 @@ What it does:
422
425
  - Options:
423
426
  - `start_step` map (skip directly to a phase):
424
427
  0. Run `kettle-pre-release` gates
425
- 1. Verify Bundler \>= 2.7 (start at 1 to skip pre-release checks)
428
+ 1. Verify Bundler \>= 2.7; update and commit the primary/appraisal Bundler lockfiles (start at 1 to skip pre-release checks)
426
429
  2. Detect version; RubyGems sanity check; confirm CHANGELOG/version; sync copyright years; update badges/headers
427
430
  3. Run bin/setup
428
431
  4. Run bin/rake (default task)
@@ -463,10 +466,26 @@ What it does:
463
466
  variables, known local-template toggles, and writes checksums while
464
467
  updating path-sourced and checksum-gap gems back to released registry
465
468
  versions.
466
- - Release lockfile resets set `KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY=true`.
467
- This does not skip changelog generation; it keeps the development-only
468
- `kettle-changelog` gem out of the release bundle so unpublished family
469
- gems cannot enter Bundler's resolution graph.
469
+ - Release lockfile resets normally keep the complete development Gemfile
470
+ graph, including the development-only `kettle-changelog` dependency.
471
+ `kettle-changelog` depends on `kettle-dev`, so including it in
472
+ `kettle-dev`'s development bundle creates a downstream development-cycle
473
+ 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.
478
+ - At release step 1, `kettle-release` runs the equivalent of
479
+ `kettle-family bupb`: it updates the primary lockfile and, when present,
480
+ `Appraisal.root.gemfile.lock`, resets appraisal locks, and commits only
481
+ those lockfiles as `šŸ”’ļø Update bundle`. This keeps Bundler maintenance in
482
+ its own atomic commit. `kettle-changelog` writes changelog content but
483
+ does not own this commit; the release helper commits release metadata
484
+ separately.
485
+ - Release-target resets also pass `bundle lock --bundler`, recording the
486
+ Bundler that performed the final reset in each committed release
487
+ lockfile. This keeps the normalized lockfile consistent with the
488
+ Bundler used by the release.
470
489
  - During `kettle-release`, release lockfiles are reset before the release
471
490
  prep commit. Before pushing, `kettle-release` validates those committed
472
491
  lockfiles again; if local paths or checksum gaps reappear, it prints the
@@ -1014,7 +1033,7 @@ Thanks for RTFM. ā˜ŗļø
1014
1033
  [šŸ“Œgitmoji]: https://gitmoji.dev
1015
1034
  [šŸ“Œgitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1016
1035
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1017
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.290-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1036
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.361-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1018
1037
  [šŸ”security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
1019
1038
  [šŸ”security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1020
1039
  [šŸ“„copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -82,6 +82,21 @@ module Kettle
82
82
  false
83
83
  end
84
84
 
85
+ # Commit only the changes already staged by the caller.
86
+ #
87
+ # This is intentionally different from +commit_all+: bundle maintenance
88
+ # must not sweep unrelated release-preparation changes into its own
89
+ # atomic commit.
90
+ #
91
+ # @param message [String]
92
+ # @return [Boolean]
93
+ def commit_staged(message)
94
+ git_system("commit", "-m", message.to_s)
95
+ rescue => e
96
+ Kettle::Dev.debug_error(e, __method__)
97
+ false
98
+ end
99
+
85
100
  # Amend the current commit without changing its message.
86
101
  #
87
102
  # @return [Boolean]
@@ -116,7 +116,6 @@ module Kettle
116
116
  BundlerEnvGuard.warn_unexpected_env!
117
117
  paths = lockfile_paths_for(target)
118
118
  force_full_update = release_lockfiles_target?(target)
119
- skip_changelog_dependency ||= force_full_update
120
119
  platforms = release_platforms_for(paths) if force_full_update
121
120
  uninstall_unreleased_local_gems(paths) if force_full_update
122
121
  paths.each do |path|
@@ -125,7 +124,8 @@ module Kettle
125
124
  path,
126
125
  full_update: force_full_update,
127
126
  platforms: platforms&.fetch(path),
128
- skip_changelog_dependency: skip_changelog_dependency
127
+ skip_changelog_dependency: skip_changelog_dependency,
128
+ update_bundler: force_full_update
129
129
  )
130
130
  end
131
131
  end
@@ -135,7 +135,8 @@ module Kettle
135
135
  path,
136
136
  full_update: true,
137
137
  platforms: platforms.fetch(path),
138
- skip_changelog_dependency: skip_changelog_dependency
138
+ skip_changelog_dependency: skip_changelog_dependency,
139
+ update_bundler: true
139
140
  )
140
141
  end
141
142
  end
@@ -145,7 +146,7 @@ module Kettle
145
146
  paths
146
147
  end
147
148
 
148
- def reset_lockfile!(path, full_update: false, platforms: nil, skip_changelog_dependency: false)
149
+ def reset_lockfile!(path, full_update: false, platforms: nil, skip_changelog_dependency: false, update_bundler: false)
149
150
  gemfile = gemfile_for_lockfile(path)
150
151
  unless gemfile && File.file?(gemfile)
151
152
  warn("Cannot reset #{display_path(path)} because its Gemfile was not found.")
@@ -159,6 +160,7 @@ module Kettle
159
160
  full_update: full_update,
160
161
  platforms: platforms,
161
162
  skip_changelog_dependency: skip_changelog_dependency,
163
+ update_bundler: update_bundler,
162
164
  isolated_gem_home: gem_home
163
165
  )
164
166
  if full_update || has_local_path_remote?(path)
@@ -169,7 +171,7 @@ module Kettle
169
171
  end
170
172
  end
171
173
 
172
- def reset_command(path:, gemfile:, full_update: false, platforms: nil, skip_changelog_dependency: false, isolated_gem_home: nil)
174
+ def reset_command(path:, gemfile:, full_update: false, platforms: nil, skip_changelog_dependency: false, update_bundler: false, isolated_gem_home: nil)
173
175
  update_gems = (full_update || has_local_path_remote?(path)) ? [] : reset_update_gems(path)
174
176
  platforms ||= reset_platforms(path)
175
177
  removed_platforms = full_update ? [] : lockfile_platforms(path) - platforms
@@ -198,6 +200,11 @@ module Kettle
198
200
  end
199
201
  command << " --update"
200
202
  command << " #{update_gems.map { |gem_name| Shellwords.escape(gem_name) }.join(" ")}" unless update_gems.empty?
203
+ # Bundler preserves BUNDLED WITH during a normal lockfile update.
204
+ # Release lockfiles must record the Bundler that performed the final
205
+ # reset, or the next release command can dirty them after the prep
206
+ # commit by reconciling to a newer installed Bundler.
207
+ command << " --bundler" if update_bundler
201
208
  command << " --add-checksums"
202
209
  command
203
210
  end
@@ -145,6 +145,7 @@ module Kettle
145
145
  words = effective_command_words(cmd)
146
146
  words == ["bin/setup"] ||
147
147
  words.first(1) == ["bin/rake"] ||
148
+ words.first(2) == ["bundle", "update"] ||
148
149
  words.first(3) == ["bundle", "exec", "rake"] ||
149
150
  words.first(3) == ["bundle", "exec", "kettle-changelog"]
150
151
  rescue ArgumentError
@@ -252,8 +253,12 @@ module Kettle
252
253
  def run_with_release_environment
253
254
  run_pre_release_checks! if run_step?(0)
254
255
 
255
- # 1. Ensure Bundler version āœ“
256
- ensure_bundler_2_7_plus! if run_step?(1)
256
+ # 1. Ensure Bundler version and record its current release in the
257
+ # development lockfiles before any release-preparation commit.
258
+ if run_step?(1)
259
+ ensure_bundler_2_7_plus!
260
+ update_bundler_and_commit!
261
+ end
257
262
 
258
263
  version = nil
259
264
  committed = nil
@@ -690,8 +695,7 @@ module Kettle
690
695
  puts "Resetting release lockfiles with local path dependencies disabled #{stage} (attempt #{attempt}/#{attempts})..."
691
696
  begin
692
697
  lockfile_reset.reset(
693
- Kettle::Dev::LockfileReset::RELEASE_LOCKFILES_TARGET,
694
- skip_changelog_dependency: true
698
+ Kettle::Dev::LockfileReset::RELEASE_LOCKFILES_TARGET
695
699
  )
696
700
  emit_release_lockfile_event(action: "reset", status: "ok", stage: stage, attempt: attempt, attempts: attempts)
697
701
  break
@@ -778,7 +782,7 @@ module Kettle
778
782
  end
779
783
 
780
784
  def normalize_release_lockfile!(path)
781
- lockfile_reset.reset_lockfile!(path, skip_changelog_dependency: true)
785
+ lockfile_reset.reset_lockfile!(path)
782
786
  end
783
787
 
784
788
  def release_gemfile_for_lockfile(path)
@@ -786,7 +790,7 @@ module Kettle
786
790
  end
787
791
 
788
792
  def release_lockfile_normalization_env
789
- lockfile_reset.normalization_env.merge("KETTLE_DEV_SKIP_CHANGELOG_DEPENDENCY" => "true")
793
+ lockfile_reset.normalization_env
790
794
  end
791
795
 
792
796
  def release_lockfile_diagnostics(path)
@@ -1602,6 +1606,90 @@ module Kettle
1602
1606
  end
1603
1607
  end
1604
1608
 
1609
+ # Keep Bundler maintenance separate from the release metadata commit.
1610
+ # The project lockfiles are shared development state, so the update must
1611
+ # be real and committed rather than hidden behind a temporary lockfile.
1612
+ def update_bundler_and_commit!
1613
+ run_cmd!(release_project_command("bundle update --bundler"))
1614
+
1615
+ appraisal_gemfile = File.join(@root, "Appraisal.root.gemfile")
1616
+ if File.file?(appraisal_gemfile)
1617
+ appraisal_lockfile = File.join(@root, "Appraisal.root.gemfile.lock")
1618
+ appraisal_command = "BUNDLE_GEMFILE=#{Shellwords.escape(appraisal_gemfile)} " \
1619
+ "BUNDLE_LOCKFILE=#{Shellwords.escape(appraisal_lockfile)} bundle update --bundler"
1620
+ run_cmd!(release_project_command(appraisal_command))
1621
+ run_cmd!(release_project_command("bundle exec rake appraisal:reset"))
1622
+ end
1623
+
1624
+ commit_bundle_update!
1625
+ end
1626
+
1627
+ def commit_bundle_update!
1628
+ paths = changed_bundle_lockfile_paths
1629
+ return false if paths.empty?
1630
+
1631
+ unexpected = staged_paths - paths
1632
+ unless unexpected.empty?
1633
+ abort(<<~MSG)
1634
+ Cannot commit Bundler updates atomically because unrelated files are already staged:
1635
+ #{unexpected.map { |path| " - #{path}" }.join("\n")}
1636
+ Commit or unstage those files, then retry the release.
1637
+ MSG
1638
+ end
1639
+
1640
+ puts "Committing Bundler update in #{paths.length} lockfile(s)."
1641
+ abort("Failed to stage Bundler update lockfiles.") unless @git.add_paths(paths)
1642
+ abort("Failed to commit Bundler update lockfiles.") unless @git.commit_staged("šŸ”’ļø Update bundle")
1643
+ reconcile_bundle_update_commit!
1644
+ true
1645
+ end
1646
+
1647
+ def changed_bundle_lockfile_paths
1648
+ tracked, tracked_ok = git_output(["diff", "--name-only", "HEAD", "--"])
1649
+ untracked, untracked_ok = git_output(["ls-files", "--others", "--exclude-standard"])
1650
+ return [] unless tracked_ok && untracked_ok
1651
+
1652
+ (tracked.lines + untracked.lines).map(&:strip).reject(&:empty?).select { |path| bundle_lockfile_path?(path) }.uniq
1653
+ end
1654
+
1655
+ def staged_paths
1656
+ output, ok = git_output(["diff", "--cached", "--name-only"])
1657
+ return [] unless ok
1658
+
1659
+ output.lines.map(&:strip).reject(&:empty?).uniq
1660
+ end
1661
+
1662
+ def bundle_lockfile_path?(path)
1663
+ path == "Gemfile.lock" || File.basename(path).end_with?(".lock")
1664
+ end
1665
+
1666
+ def reconcile_bundle_update_commit!
1667
+ 3.times do
1668
+ paths = changed_bundle_lockfile_paths
1669
+ return if paths.empty?
1670
+
1671
+ puts "Bundler changed lockfiles while committing; amending the bundle update commit."
1672
+ abort("Failed to stage post-commit Bundler lockfile changes.") unless @git.add_paths(paths)
1673
+ abort("Failed to amend the bundle update commit.") unless @git.commit_amend_no_edit
1674
+ end
1675
+
1676
+ abort("Bundler continued changing lockfiles after the bundle update commit.") unless changed_bundle_lockfile_paths.empty?
1677
+ end
1678
+
1679
+ def reconcile_release_prep_commit!
1680
+ 3.times do
1681
+ output, = git_output(["status", "--porcelain"])
1682
+ return if output.empty?
1683
+
1684
+ puts "Release commit hooks changed tracked files; amending the release preparation commit."
1685
+ abort("Failed to stage post-commit release changes.") unless @git.add_all
1686
+ abort("Failed to amend the release preparation commit.") unless @git.commit_amend_no_edit
1687
+ end
1688
+
1689
+ output, = git_output(["status", "--porcelain"])
1690
+ abort("Release commit hooks continued changing files after the release preparation commit.") unless output.empty?
1691
+ end
1692
+
1605
1693
  def maybe_run_local_ci_before_push!(committed, force: false)
1606
1694
  mode = (ENV["K_RELEASE_LOCAL_CI"] || "").strip.downcase
1607
1695
  run_it =
@@ -1898,6 +1986,7 @@ module Kettle
1898
1986
  false
1899
1987
  else
1900
1988
  abort("Failed to commit release prep changes.") unless @git.commit_all(msg)
1989
+ reconcile_release_prep_commit!
1901
1990
  true
1902
1991
  end
1903
1992
  end
@@ -1982,6 +2071,7 @@ module Kettle
1982
2071
  return "gem_release" if joined == "bundle exec rake release"
1983
2072
  return "gem_push" if effective_words.first(2) == ["gem", "push"]
1984
2073
  return "gem_checksums" if effective_words.first == "bin/gem_checksums"
2074
+ return "bundle_update" if effective_words.first(2) == ["bundle", "update"]
1985
2075
  return "bundle_lock" if effective_words.first(2) == ["bundle", "lock"]
1986
2076
  return "bin_setup" if effective_words == ["bin/setup"]
1987
2077
  return "default_task" if effective_words == ["bin/rake"]
@@ -2023,6 +2113,7 @@ module Kettle
2023
2113
  joined = effective_words.join(" ")
2024
2114
 
2025
2115
  return "changelog" if joined.start_with?("bundle exec kettle-changelog")
2116
+ return "bundle update" if effective_words.first(2) == ["bundle", "update"]
2026
2117
  return command_event_bundle_lock_summary(words) if effective_words.first(2) == ["bundle", "lock"]
2027
2118
  return "setup" if effective_words == ["bin/setup"]
2028
2119
  return "default task" if effective_words == ["bin/rake"]
@@ -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.13"
8
+ VERSION = "3.0.14"
9
9
  end
10
10
  # Current gem version exposed at the traditional constant location.
11
11
  VERSION = Version::VERSION # Traditional Constant Location
@@ -189,11 +189,7 @@ module Kettle
189
189
 
190
190
  source = File.read(gemspec_path)
191
191
  parse_result = self.class.parse_source(source, gemspec_path)
192
- self.class.each_node(parse_result.value).filter_map do |node|
193
- next unless node.is_a?(Prism::CallNode) && node.name == :version=
194
-
195
- version_node = node.arguments&.arguments&.first
196
- next unless version_node.is_a?(Prism::StringNode)
192
+ gemspec_version_literal_nodes(parse_result).filter_map do |version_node|
197
193
  next unless version_node.unescaped == current_version
198
194
  next if version_node.unescaped == target_version
199
195
 
@@ -202,6 +198,34 @@ module Kettle
202
198
  end
203
199
  end
204
200
 
201
+ def gemspec_version_literal_nodes(parse_result)
202
+ version_assignments = self.class.each_node(parse_result.value).select do |node|
203
+ node.is_a?(Prism::CallNode) && node.name == :version=
204
+ end
205
+ local_version_assignments = self.class.each_node(parse_result.value).select do |node|
206
+ node.is_a?(Prism::LocalVariableWriteNode) && node.name == :gem_version
207
+ end
208
+
209
+ version_assignments.flat_map do |assignment|
210
+ value = assignment.arguments&.arguments&.first
211
+ if value.is_a?(Prism::StringNode)
212
+ [value]
213
+ elsif value.is_a?(Prism::LocalVariableReadNode) && value.name == :gem_version
214
+ local_version_assignments.flat_map { |node| version_literals(node.value) }
215
+ else
216
+ version_literals(value)
217
+ end
218
+ end.uniq
219
+ end
220
+
221
+ def version_literals(node)
222
+ return [] unless node
223
+
224
+ self.class.each_node(node).select do |candidate|
225
+ candidate.is_a?(Prism::StringNode)
226
+ end
227
+ end
228
+
205
229
  def gemspec_path_for_bump
206
230
  paths = Dir.glob(File.join(root, "*.gemspec")).sort
207
231
  return nil if paths.empty?
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.13
4
+ version: 3.0.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -60,7 +60,7 @@ dependencies:
60
60
  version: '0.3'
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 0.3.13
63
+ version: 0.3.14
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
@@ -70,7 +70,7 @@ dependencies:
70
70
  version: '0.3'
71
71
  - - ">="
72
72
  - !ruby/object:Gem::Version
73
- version: 0.3.13
73
+ version: 0.3.14
74
74
  - !ruby/object:Gem::Dependency
75
75
  name: kettle-ndjson
76
76
  requirement: !ruby/object:Gem::Requirement
@@ -80,7 +80,7 @@ dependencies:
80
80
  version: '0.1'
81
81
  - - ">="
82
82
  - !ruby/object:Gem::Version
83
- version: 0.1.12
83
+ version: 0.1.13
84
84
  type: :runtime
85
85
  prerelease: false
86
86
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +90,7 @@ dependencies:
90
90
  version: '0.1'
91
91
  - - ">="
92
92
  - !ruby/object:Gem::Version
93
- version: 0.1.12
93
+ version: 0.1.13
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: kettle-rb
96
96
  requirement: !ruby/object:Gem::Requirement
@@ -100,7 +100,7 @@ dependencies:
100
100
  version: '0.1'
101
101
  - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: 0.1.10
103
+ version: 0.1.11
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
@@ -110,7 +110,7 @@ dependencies:
110
110
  version: '0.1'
111
111
  - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: 0.1.10
113
+ version: 0.1.11
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: kettle-test
116
116
  requirement: !ruby/object:Gem::Requirement
@@ -256,7 +256,7 @@ dependencies:
256
256
  version: '3.2'
257
257
  - - ">="
258
258
  - !ruby/object:Gem::Version
259
- version: 3.2.5
259
+ version: 3.2.6
260
260
  type: :development
261
261
  prerelease: false
262
262
  version_requirements: !ruby/object:Gem::Requirement
@@ -266,7 +266,7 @@ dependencies:
266
266
  version: '3.2'
267
267
  - - ">="
268
268
  - !ruby/object:Gem::Version
269
- version: 3.2.5
269
+ version: 3.2.6
270
270
  - !ruby/object:Gem::Dependency
271
271
  name: stone_checksums
272
272
  requirement: !ruby/object:Gem::Requirement
@@ -296,7 +296,7 @@ dependencies:
296
296
  version: '2.0'
297
297
  - - ">="
298
298
  - !ruby/object:Gem::Version
299
- version: 2.0.11
299
+ version: 2.0.12
300
300
  type: :development
301
301
  prerelease: false
302
302
  version_requirements: !ruby/object:Gem::Requirement
@@ -306,7 +306,7 @@ dependencies:
306
306
  version: '2.0'
307
307
  - - ">="
308
308
  - !ruby/object:Gem::Version
309
- version: 2.0.11
309
+ version: 2.0.12
310
310
  description: "\U0001F372 Kettle::Dev is a meta tool from kettle-dev to streamline
311
311
  development and testing. Acts as a shim dependency, pulling in many other dependencies,
312
312
  to give you OOTB productivity with a RubyGem, or Ruby app project. Configures a
@@ -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.13
404
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.13/CHANGELOG.md
403
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.0.14
404
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.14/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.13
406
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.0.14
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