kettle-dev 3.1.15 → 3.1.17

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: a92c25418ab7487a902fd03260cf2c457e2d156c09f2ec9ec426998fd7a31729
4
- data.tar.gz: 437b8e39726ba9a2ed4990b38217dcb1336f48eeb504e5edff13009601febc8e
3
+ metadata.gz: 7509713aebd3dc8b2dfce4e04399bd8a004fdf0ab9d128b9147a3060e183fa7c
4
+ data.tar.gz: 06d242cd7e431a629f278b3ca28f4f6347bc40561056381ccd712886cf6ea48d
5
5
  SHA512:
6
- metadata.gz: ce6778cb2d3676ef46727327a08f464a6c664cec8e6d1c472ed6ef283c4e8e8d132a6b1a36012597efaf392d22785c2c559b07c107c13eb2fba142a4f21255ed
7
- data.tar.gz: 8ff9fc510de127537b010179d6f67548e2df8a0b72c76e7ab1a680d9417aeb16c2f98eda05ef532b51c9604a85b98dbe03d1678220e89ea65982dd2e0e538297
6
+ metadata.gz: 4659485434c16e16fcddd290cfb9afb233f1b5f9e60adc4c2dc933d951ce49f324b27763189b80f8bf2004ceed4dfbb713fc9f73301da040c3f891391d53a754
7
+ data.tar.gz: ddf71af290de3619c7bb48e296bb41501a01e2bb5defdcf999e51c8126cd3a41471efbb413d537cc91c9236dfafbaf0c50459fdda92019cff8850748aacf161d
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.1.17] - 2026-10-18
34
+
35
+ - TAG: [v3.1.17][3.1.17t]
36
+ - COVERAGE: 91.84% -- 5761/6273 lines in 48 files
37
+ - BRANCH COVERAGE: 75.75% -- 2212/2920 branches in 48 files
38
+ - 53.60% documented
39
+
40
+ ### Fixed
41
+
42
+ - Family member publish materializes the release task lockfile before building: run_family_member_publish now runs the same normalize guard as the step 14/15 build entry points, so the BUNDLE_LOCKFILE snapshot copied from the committed Gemfile.lock is bundle-installed before rake build. Without it, a monorepo member build failed with: Could not find tool-old-version in locally installed gems, when the committed lockfile pinned an older release-tool resolution than the boot environment.
43
+
44
+ ## [3.1.16] - 2026-10-18
45
+
46
+ - TAG: [v3.1.16][3.1.16t]
47
+ - COVERAGE: 91.33% -- 5728/6272 lines in 48 files
48
+ - BRANCH COVERAGE: 75.41% -- 2202/2920 branches in 48 files
49
+ - 53.60% documented
50
+
51
+ ### Fixed
52
+
53
+ - kettle-release surfaces spec failures instead of a bare exit status: kettle-changelog commands now stream output while retaining the last 30 lines, and a failure abort appends an OUTPUT tail, so a failed coverage suite reads as a spec failure in the release summary. BundlerPinning.installed_stable also reads bundler gemspecs from disk under every Gem.path: under bundle exec the spec index is scoped to the active bundle, so a lockfile that pinned a prerelease bundler (4.1.0.betaN) hid every stable version and broke update-bundler/bupb and normalize lockfiles.
54
+
33
55
  ## [3.1.15] - 2026-10-16
34
56
 
35
57
  - TAG: [v3.1.15][3.1.15t]
@@ -4145,7 +4167,11 @@ Please file a bug if you notice a violation of semantic versioning.
4145
4167
  - Selecting will run the selected workflow via `act`
4146
4168
  - This may move to its own gem in the future.
4147
4169
 
4148
- [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.15...HEAD
4170
+ [Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.17...HEAD
4171
+ [3.1.17]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.16...v3.1.17
4172
+ [3.1.17t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.17
4173
+ [3.1.16]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.15...v3.1.16
4174
+ [3.1.16t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.16
4149
4175
  [3.1.15]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.14...v3.1.15
4150
4176
  [3.1.15t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.15
4151
4177
  [3.1.14]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.13...v3.1.14
data/README.md CHANGED
@@ -1084,7 +1084,7 @@ Thanks for RTFM. ☺️
1084
1084
  [📌gitmoji]: https://gitmoji.dev
1085
1085
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
1086
1086
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
1087
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.249-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1087
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-6.273-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
1088
1088
  [🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
1089
1089
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
1090
1090
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bundler"
3
4
  require "rubygems/dependency_installer"
4
5
 
5
6
  module Kettle
@@ -21,9 +22,25 @@ module Kettle
21
22
  # Newest stable Bundler installed locally. Consults BOTH sources —
22
23
  # the activated spec and every installed spec — because bundler/setup
23
24
  # scoping can hide one from the other depending on how the process booted.
25
+ #
26
+ # The spec index itself is not enough: under `bundle exec`, Bundler
27
+ # replaces the index with the ACTIVE BUNDLE's specs, so a lockfile that
28
+ # pinned a prerelease (the 4.1.0.betaN reinfection vector) makes this
29
+ # lookup see only that prerelease and wrongly report "no stable bundler".
30
+ # The gemspec files on disk are read directly from every Gem.path to
31
+ # escape that scoping.
24
32
  def installed_stable
25
33
  active = Gem.loaded_specs["bundler"]&.version
26
34
  versions = Gem::Specification.find_all_by_name("bundler").map(&:version)
35
+ Array(Gem.path).each do |base|
36
+ Dir.glob(File.join(base, "specifications", "bundler-*.gemspec")).each do |path|
37
+ begin
38
+ versions << Gem::Version.new(File.basename(path, ".gemspec").delete_prefix("bundler-"))
39
+ rescue ArgumentError
40
+ nil
41
+ end
42
+ end
43
+ end
27
44
  versions.push(active) if active
28
45
  versions.reject(&:prerelease?).max
29
46
  end
@@ -91,8 +91,20 @@ module Kettle
91
91
  # so they inherit the current TTY and can read the user's input.
92
92
  interactive_words = effective_command_words(cmd)
93
93
  interactive = interactive_words.first(4) == ["bundle", "exec", "rake", "release"] ||
94
- interactive_words.first(2) == ["gem", "push"] ||
95
- interactive_words.first(2) == ["bundle", "exec"] && interactive_words[2] == "kettle-changelog"
94
+ interactive_words.first(2) == ["gem", "push"]
95
+ if interactive_words.first(3) == ["bundle", "exec", "kettle-changelog"]
96
+ # kettle-changelog runs the test suite for coverage data; when that
97
+ # suite fails, the spec summary must surface in the abort message,
98
+ # not just the exit status. Stream output (so the release log keeps
99
+ # its live tail) while retaining the last lines for diagnostics.
100
+ # With --yes the child never reads stdin, so a pipe is safe here.
101
+ ok, diag = stream_with_capture(env_hash, cmd)
102
+ unless ok
103
+ exit_code = $?.respond_to?(:exitstatus) ? $?.exitstatus : 1
104
+ Kettle::Dev::ExitAdapter.abort("Command failed: #{cmd} (exit #{exit_code})#{diag}")
105
+ end
106
+ return
107
+ end
96
108
  if interactive
97
109
  ok = system(env_hash, cmd)
98
110
  unless ok
@@ -124,6 +136,28 @@ module Kettle
124
136
 
125
137
  private
126
138
 
139
+ # Runs cmd with output streamed to $stdout (preserving the live release
140
+ # log tail) while retaining the last `tail_lines` lines. Returns
141
+ # [success, diagnostic] where diagnostic is an empty string on success
142
+ # and a formatted output tail on failure, mirroring the STDERR tail the
143
+ # non-interactive path appends to its abort message.
144
+ def stream_with_capture(env_hash, cmd, tail_lines: 30)
145
+ recent = []
146
+ success = Open3.popen2e(env_hash, cmd) do |_stdin, output, thread|
147
+ output.each_line do |line|
148
+ $stdout.print(line)
149
+ recent << line
150
+ recent.shift while recent.length > tail_lines
151
+ end
152
+ thread.value.success?
153
+ end
154
+ diag = ""
155
+ if !success && recent.any?
156
+ diag = "\n--- OUTPUT (last #{tail_lines} lines) ---\n#{recent.join}".rstrip
157
+ end
158
+ [success, diag]
159
+ end
160
+
127
161
  def command_env
128
162
  env_hash = ENV.respond_to?(:to_hash) ? ENV.to_hash : ENV.to_h
129
163
  return env_hash if debug_env_enabled?
@@ -638,6 +672,14 @@ module Kettle
638
672
 
639
673
  def run_family_member_publish
640
674
  version = detect_version
675
+ # The build pins BUNDLE_LOCKFILE to this run's task lockfile snapshot,
676
+ # copied from the committed Gemfile.lock on first use. Materialize it
677
+ # (bundle install against the snapshot) or the build fails on gems the
678
+ # snapshot pins but the boot env never installed — exactly what a
679
+ # stale committed lockfile plus an independently-versioned release
680
+ # tool produces (e.g. kettle-family 1.3.13 vs 1.3.18). Same guard the
681
+ # step 14/15 entry points run before `bundle exec rake build`.
682
+ normalize_release_lockfiles_before_publish_tasks!
641
683
  prepare_release_lockfiles_for_release_tasks!
642
684
  ensure_signing_setup_or_skip!
643
685
  ensure_release_secrets_ready_for_signing! if signing_enabled? && release_secrets_configured?
@@ -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.1.15"
8
+ VERSION = "3.1.17"
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.1.15
4
+ version: 3.1.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -423,10 +423,10 @@ licenses:
423
423
  - AGPL-3.0-only
424
424
  metadata:
425
425
  homepage_uri: https://kettle-dev.galtzo.com
426
- source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.15
427
- changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.15/CHANGELOG.md
426
+ source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.17
427
+ changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.17/CHANGELOG.md
428
428
  bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
429
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.15
429
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.17
430
430
  funding_uri: https://github.com/sponsors/pboling
431
431
  wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
432
432
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file