kettle-dev 3.1.15 → 3.1.16
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 +14 -1
- data/README.md +1 -1
- data/lib/kettle/dev/bundler_pinning.rb +17 -0
- data/lib/kettle/dev/release_cli.rb +36 -2
- 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: 16802c87427ef8443571014a94b2d7720f246f01ea22cf2821b2b9598f4b804b
|
|
4
|
+
data.tar.gz: 9ced61074b0241db2b225d5bbbe6d3c1e359a16e587a949e47339a4b8a65f144
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 78fab6bbe0cca35be2a872350840b9bcbdc907bbd697ba245c5a47e406790bc72663161bd42518268386bf7df7c8e50900f31ddae2b4b2818670b259db7a7aee
|
|
7
|
+
data.tar.gz: 6f2fc6046be6343e41ce2b917f274b0f6e726a145a09c6273bace66ecf525fee5567bb3ea4a25cce9fa344e9061e1f6d6cc7327efa8946804191eac783aee588
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
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.1.16] - 2026-10-18
|
|
34
|
+
|
|
35
|
+
- TAG: [v3.1.16][3.1.16t]
|
|
36
|
+
- COVERAGE: 91.33% -- 5728/6272 lines in 48 files
|
|
37
|
+
- BRANCH COVERAGE: 75.41% -- 2202/2920 branches in 48 files
|
|
38
|
+
- 53.60% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- 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.
|
|
43
|
+
|
|
33
44
|
## [3.1.15] - 2026-10-16
|
|
34
45
|
|
|
35
46
|
- TAG: [v3.1.15][3.1.15t]
|
|
@@ -4145,7 +4156,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
4145
4156
|
- Selecting will run the selected workflow via `act`
|
|
4146
4157
|
- This may move to its own gem in the future.
|
|
4147
4158
|
|
|
4148
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.
|
|
4159
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.16...HEAD
|
|
4160
|
+
[3.1.16]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.15...v3.1.16
|
|
4161
|
+
[3.1.16t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.16
|
|
4149
4162
|
[3.1.15]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.14...v3.1.15
|
|
4150
4163
|
[3.1.15t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.15
|
|
4151
4164
|
[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.
|
|
1087
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.272-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
|
-
|
|
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?
|
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.1.
|
|
8
|
+
VERSION = "3.1.16"
|
|
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.
|
|
4
|
+
version: 3.1.16
|
|
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.
|
|
427
|
-
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.
|
|
426
|
+
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.16
|
|
427
|
+
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.16/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.
|
|
429
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.16
|
|
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
|