kettle-dev 3.0.32 → 3.0.34
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 +29 -1
- data/README.md +1 -1
- data/lib/kettle/dev/lockfile_reset.rb +57 -14
- data/lib/kettle/dev/release_cli.rb +14 -1
- data/lib/kettle/dev/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +6 -6
- 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: cf4388ae02268bbe6676ece5cee25b5548277a6e60432554c460f189ca02d2f0
|
|
4
|
+
data.tar.gz: 80841fd013dbd2868b22e36b185c18c0a7f90ed3698f5cb3a2d666c46a80b41b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 713c1d308268ce8cde18124db06ad5efed08d53fc945af0c723843de08d840b6db23f946941de187b2adcf61e482e206e307fda8bbd52b562c3aaed1fd61ee91
|
|
7
|
+
data.tar.gz: 8e94e9a97e3ae52b955fd098db642ab23639fb6e0d67b2abed14fe8684248430c50618b8f8d6f3d0a57bb1934954e1f41fe7b17711fac151bdca9928b98a0795
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,30 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [3.0.34] - 2026-09-09
|
|
34
|
+
|
|
35
|
+
- TAG: [v3.0.34][3.0.34t]
|
|
36
|
+
- COVERAGE: 91.95% -- 6101/6635 lines in 47 files
|
|
37
|
+
- BRANCH COVERAGE: 76.43% -- 2332/3051 branches in 47 files
|
|
38
|
+
- 50.23% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Detect and reset release lockfiles whose BUNDLED WITH version lacks a matching Bundler checksum.
|
|
43
|
+
|
|
44
|
+
- Declare the intentional version_gem runtime-heads dependency overlap for templating self-tests.
|
|
45
|
+
|
|
46
|
+
## [3.0.33] - 2026-09-07
|
|
47
|
+
|
|
48
|
+
- TAG: [v3.0.33][3.0.33t]
|
|
49
|
+
- COVERAGE: 91.76% -- 6068/6613 lines in 47 files
|
|
50
|
+
- BRANCH COVERAGE: 76.11% -- 2310/3035 branches in 47 files
|
|
51
|
+
- 50.35% documented
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- Isolate the published-gem availability probe from locally activated gems so release validation resolves the registry dependency graph.
|
|
56
|
+
|
|
33
57
|
## [3.0.32] - 2026-09-07
|
|
34
58
|
|
|
35
59
|
- TAG: [v3.0.32][3.0.32t]
|
|
@@ -3823,7 +3847,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
3823
3847
|
- Selecting will run the selected workflow via `act`
|
|
3824
3848
|
- This may move to its own gem in the future.
|
|
3825
3849
|
|
|
3826
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.
|
|
3850
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.34...HEAD
|
|
3851
|
+
[3.0.34]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.33...v3.0.34
|
|
3852
|
+
[3.0.34t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.34
|
|
3853
|
+
[3.0.33]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.32...v3.0.33
|
|
3854
|
+
[3.0.33t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.33
|
|
3827
3855
|
[3.0.32]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.31...v3.0.32
|
|
3828
3856
|
[3.0.32t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.0.32
|
|
3829
3857
|
[3.0.31]: https://github.com/kettle-dev/kettle-dev/compare/v3.0.30...v3.0.31
|
data/README.md
CHANGED
|
@@ -1066,7 +1066,7 @@ Thanks for RTFM. ☺️
|
|
|
1066
1066
|
[📌gitmoji]: https://gitmoji.dev
|
|
1067
1067
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1068
1068
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1069
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.
|
|
1069
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-6.635-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1070
1070
|
[🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
|
|
1071
1071
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1072
1072
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -194,6 +194,29 @@ module Kettle
|
|
|
194
194
|
env["GEM_HOME"] = isolated_gem_home
|
|
195
195
|
env["GEM_PATH"] = isolated_gem_path || isolated_gem_home
|
|
196
196
|
end
|
|
197
|
+
command_prefix = bundler_command_prefix(env)
|
|
198
|
+
command = +"#{command_prefix} bundle lock"
|
|
199
|
+
# Bundler accepts each platform option once followed by a list. Repeating
|
|
200
|
+
# either option silently keeps only the final occurrence with Bundler 4.
|
|
201
|
+
command << " --remove-platform #{removed_platforms.sort.map { |platform| Shellwords.escape(platform) }.join(" ")}" unless removed_platforms.empty?
|
|
202
|
+
command << " --add-platform #{platforms.map { |platform| Shellwords.escape(platform) }.join(" ")}" unless platforms.empty?
|
|
203
|
+
command << " --update"
|
|
204
|
+
command << " #{update_gems.map { |gem_name| Shellwords.escape(gem_name) }.join(" ")}" unless update_gems.empty?
|
|
205
|
+
command << " --add-checksums" unless update_bundler
|
|
206
|
+
return command unless update_bundler
|
|
207
|
+
|
|
208
|
+
# `bundle lock --bundler` accepts a requirement and retains a locked
|
|
209
|
+
# prerelease that satisfies it. `bundle update --bundler=VERSION`
|
|
210
|
+
# records the exact Bundler that is executing the reset instead.
|
|
211
|
+
# Finish with `bundle lock --add-checksums`, since `bundle update`
|
|
212
|
+
# does not support that option.
|
|
213
|
+
bundler_version = Shellwords.escape(Bundler::VERSION)
|
|
214
|
+
command << " && #{command_prefix} bundle update --bundler=#{bundler_version}"
|
|
215
|
+
command << " && #{command_prefix} bundle lock --add-checksums"
|
|
216
|
+
command
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def bundler_command_prefix(env)
|
|
197
220
|
command = +"env"
|
|
198
221
|
UNBUNDLED_ENV_KEYS.each do |key|
|
|
199
222
|
command << " -u #{key}"
|
|
@@ -201,19 +224,6 @@ module Kettle
|
|
|
201
224
|
env.each do |key, value|
|
|
202
225
|
command << " #{key}=#{Shellwords.escape(value)}"
|
|
203
226
|
end
|
|
204
|
-
command << " bundle lock"
|
|
205
|
-
# Bundler accepts each platform option once followed by a list. Repeating
|
|
206
|
-
# either option silently keeps only the final occurrence with Bundler 4.
|
|
207
|
-
command << " --remove-platform #{removed_platforms.sort.map { |platform| Shellwords.escape(platform) }.join(" ")}" unless removed_platforms.empty?
|
|
208
|
-
command << " --add-platform #{platforms.map { |platform| Shellwords.escape(platform) }.join(" ")}" unless platforms.empty?
|
|
209
|
-
command << " --update"
|
|
210
|
-
command << " #{update_gems.map { |gem_name| Shellwords.escape(gem_name) }.join(" ")}" unless update_gems.empty?
|
|
211
|
-
# Bundler preserves BUNDLED WITH during a normal lockfile update.
|
|
212
|
-
# Release lockfiles must record the Bundler that performed the final
|
|
213
|
-
# reset, or the next release command can dirty them after the prep
|
|
214
|
-
# commit by reconciling to a newer installed Bundler.
|
|
215
|
-
command << " --bundler" if update_bundler
|
|
216
|
-
command << " --add-checksums"
|
|
217
227
|
command
|
|
218
228
|
end
|
|
219
229
|
|
|
@@ -254,7 +264,10 @@ module Kettle
|
|
|
254
264
|
end
|
|
255
265
|
|
|
256
266
|
def normalization_needed?(path)
|
|
257
|
-
has_local_path_remote?(path) ||
|
|
267
|
+
has_local_path_remote?(path) ||
|
|
268
|
+
!empty_registry_checksums(path).empty? ||
|
|
269
|
+
!unreleased_workspace_registry_specs(path).empty? ||
|
|
270
|
+
bundled_with_checksum_mismatch?(path)
|
|
258
271
|
end
|
|
259
272
|
|
|
260
273
|
def diagnostics(path)
|
|
@@ -268,6 +281,9 @@ module Kettle
|
|
|
268
281
|
unreleased_workspace_registry_specs(path).each do |name, version, line_number|
|
|
269
282
|
diagnostics << "#{display_path(path)} locks local workspace gem #{name} #{version} as a registry gem, but that version is not resolvable from the configured gem source at line #{line_number}"
|
|
270
283
|
end
|
|
284
|
+
if bundled_with_checksum_mismatch?(path)
|
|
285
|
+
diagnostics.push("#{display_path(path)} BUNDLED WITH #{bundled_with_version(path)} has no matching Bundler checksum")
|
|
286
|
+
end
|
|
271
287
|
diagnostics
|
|
272
288
|
end
|
|
273
289
|
|
|
@@ -459,6 +475,33 @@ module Kettle
|
|
|
459
475
|
end
|
|
460
476
|
end
|
|
461
477
|
|
|
478
|
+
# A release reset updates both `BUNDLED WITH` and CHECKSUMS. When a
|
|
479
|
+
# nested tool leaked its Bundler into a member lockfile, a later cleanup
|
|
480
|
+
# can otherwise replace only the checksum entry and leave an impossible
|
|
481
|
+
# lockfile behind. Only flag a mismatch when the lockfile already tracks
|
|
482
|
+
# Bundler in CHECKSUMS, preserving older lockfiles that lack that entry.
|
|
483
|
+
def bundled_with_checksum_mismatch?(path)
|
|
484
|
+
version = bundled_with_version(path)
|
|
485
|
+
return false if version.empty?
|
|
486
|
+
|
|
487
|
+
checksums = self.class.checksum_entries_from_source(File.read(path))
|
|
488
|
+
return false unless checksums&.keys&.any? { |name, _checksum_version| name == "bundler" }
|
|
489
|
+
|
|
490
|
+
!checksums.key?(["bundler", version])
|
|
491
|
+
end
|
|
492
|
+
|
|
493
|
+
def bundled_with_version(path)
|
|
494
|
+
lines = File.readlines(path)
|
|
495
|
+
marker = lines.index { |line| line.strip == "BUNDLED WITH" }
|
|
496
|
+
return "" unless marker
|
|
497
|
+
|
|
498
|
+
lines[marker.succ..-1].each do |line|
|
|
499
|
+
version = line.strip
|
|
500
|
+
return version unless version.empty?
|
|
501
|
+
end
|
|
502
|
+
""
|
|
503
|
+
end
|
|
504
|
+
|
|
462
505
|
def path_source_gems(path)
|
|
463
506
|
lockfile_parser(path).specs.each_with_object(Set.new) do |spec, gems|
|
|
464
507
|
source = spec.source
|
|
@@ -6,6 +6,7 @@ require "open3"
|
|
|
6
6
|
require "shellwords"
|
|
7
7
|
require "time"
|
|
8
8
|
require "fileutils"
|
|
9
|
+
require "tmpdir"
|
|
9
10
|
require "net/http"
|
|
10
11
|
require "openssl"
|
|
11
12
|
require "json"
|
|
@@ -2035,7 +2036,13 @@ module Kettle
|
|
|
2035
2036
|
stderr_str = nil
|
|
2036
2037
|
status = nil
|
|
2037
2038
|
with_unbundled_release_probe_env do
|
|
2038
|
-
|
|
2039
|
+
with_release_availability_probe_gem_home do |gem_home|
|
|
2040
|
+
stdout_str, stderr_str, status = Open3.capture3(
|
|
2041
|
+
self.class.send(:command_env).merge("GEM_HOME" => gem_home, "GEM_PATH" => gem_home),
|
|
2042
|
+
Gem.ruby,
|
|
2043
|
+
script_path
|
|
2044
|
+
)
|
|
2045
|
+
end
|
|
2039
2046
|
end
|
|
2040
2047
|
$stdout.print(stdout_str) unless stdout_str.to_s.empty?
|
|
2041
2048
|
if status.success?
|
|
@@ -2074,6 +2081,12 @@ module Kettle
|
|
|
2074
2081
|
10
|
|
2075
2082
|
end
|
|
2076
2083
|
|
|
2084
|
+
def with_release_availability_probe_gem_home
|
|
2085
|
+
dir = File.join(@root, "tmp", "kettle-release")
|
|
2086
|
+
FileUtils.mkdir_p(dir)
|
|
2087
|
+
Dir.mktmpdir("probe-gem-home-", dir) { |gem_home| yield gem_home }
|
|
2088
|
+
end
|
|
2089
|
+
|
|
2077
2090
|
def with_unbundled_release_probe_env(&block)
|
|
2078
2091
|
if defined?(Bundler)
|
|
2079
2092
|
Bundler.with_unbundled_env(&block)
|
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.34"
|
|
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.34
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -100,7 +100,7 @@ dependencies:
|
|
|
100
100
|
version: '0.1'
|
|
101
101
|
- - ">="
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: 0.1.
|
|
103
|
+
version: 0.1.12
|
|
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.
|
|
113
|
+
version: 0.1.12
|
|
114
114
|
- !ruby/object:Gem::Dependency
|
|
115
115
|
name: kettle-test
|
|
116
116
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -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.34
|
|
404
|
+
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.0.34/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.34
|
|
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
|