kettle-dev 3.1.3 → 3.1.5
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 +3 -5
- data/CHANGELOG.md +27 -1
- data/README.md +1 -1
- data/lib/kettle/dev/lockfile_reset.rb +6 -0
- data/lib/kettle/dev/paths.rb +65 -0
- data/lib/kettle/dev/release_graph_contract.rb +3 -17
- data/lib/kettle/dev/version.rb +1 -1
- data/lib/kettle/dev.rb +1 -0
- data.tar.gz.sig +0 -0
- metadata +5 -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: 0e99b028eb7b7f955a4d4c6bc4d62b812d9e8a6a6399d0aadf448e525d9680a4
|
|
4
|
+
data.tar.gz: f5432081e590c22460c4876eb1e2e35406bcb1617881eb9814eccd3449e4fb45
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bffb2a5e07b7cb6ea1c225808e4a011c670a6768905052447112e4de5a9e15122fb9f0d3a1f65ed1a3cc80d290271e1844133cd4b64cb2c050b01d7d2f200552
|
|
7
|
+
data.tar.gz: 666f1974ea5d780e5b845039dc7923c769869faa50075074986cf165d9773e72848cfd2c200ced47a376ce08f15c01e317294e31a0811895880a25567d033059
|
checksums.yaml.gz.sig
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
pb�����4#Ӿ�hzS�e�t$1��J(�t��oЗl�h��Bñ�o�]d�
|
|
5
|
-
�P�Y,&���D���=�֑p���&qkQ:��>�7���'�P�6��$}��T$��(㋖�{0q����lO�
|
|
1
|
+
zi� �s�I?G3�i�J��u���T����>�r�¥4
|
|
2
|
+
�/h�JU(�Fk��Zڧ9��h]�q
|
|
3
|
+
;�7q<����9����i�(��w�})�`t�h/O���ao�|;J��[��=#�T|]�("_#�:���(pj���g#��3S��M��Wpr�-�|�d����ED��cW� C��b8{}���J��ZBc7t��.a(�j��2�嬱�l䶼����������Y�K/�V½��yx����f)���������ͮ4����z�3l��9�$k7�f�;}�W6|p�k?�r�W��^�z�U�
|
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.5] - 2026-09-28
|
|
34
|
+
|
|
35
|
+
- TAG: [v3.1.5][3.1.5t]
|
|
36
|
+
- COVERAGE: 91.43% -- 6170/6748 lines in 49 files
|
|
37
|
+
- BRANCH COVERAGE: 75.89% -- 2348/3094 branches in 49 files
|
|
38
|
+
- 51.34% documented
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Recheck registry gem availability after release lockfile resolution instead of reusing stale negative probes.
|
|
43
|
+
|
|
44
|
+
## [3.1.4] - 2026-09-28
|
|
45
|
+
|
|
46
|
+
- TAG: [v3.1.4][3.1.4t]
|
|
47
|
+
- COVERAGE: 91.89% -- 6197/6744 lines in 49 files
|
|
48
|
+
- BRANCH COVERAGE: 76.24% -- 2359/3094 branches in 49 files
|
|
49
|
+
- 51.34% documented
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- Centralize canonical path and component-aware containment checks for Kettle tools.
|
|
54
|
+
|
|
33
55
|
## [3.1.3] - 2026-09-27
|
|
34
56
|
|
|
35
57
|
- TAG: [v3.1.3][3.1.3t]
|
|
@@ -3916,7 +3938,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
3916
3938
|
- Selecting will run the selected workflow via `act`
|
|
3917
3939
|
- This may move to its own gem in the future.
|
|
3918
3940
|
|
|
3919
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.
|
|
3941
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.5...HEAD
|
|
3942
|
+
[3.1.5]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.4...v3.1.5
|
|
3943
|
+
[3.1.5t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.5
|
|
3944
|
+
[3.1.4]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.3...v3.1.4
|
|
3945
|
+
[3.1.4t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.4
|
|
3920
3946
|
[3.1.3]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.2...v3.1.3
|
|
3921
3947
|
[3.1.3t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v3.1.3
|
|
3922
3948
|
[3.1.2]: https://github.com/kettle-dev/kettle-dev/compare/v3.1.1...v3.1.2
|
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.748-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
|
|
@@ -124,6 +124,7 @@ module Kettle
|
|
|
124
124
|
|
|
125
125
|
def reset(target, skip_changelog_dependency: false)
|
|
126
126
|
BundlerEnvGuard.warn_unexpected_env!
|
|
127
|
+
clear_gem_source_version_availability_cache!
|
|
127
128
|
paths = lockfile_paths_for(target)
|
|
128
129
|
release_lockfiles = release_lockfiles_target?(target)
|
|
129
130
|
# The selected graph governs both tracked release locks and disposable
|
|
@@ -188,6 +189,7 @@ module Kettle
|
|
|
188
189
|
else
|
|
189
190
|
command_runner.call(command)
|
|
190
191
|
end
|
|
192
|
+
clear_gem_source_version_availability_cache!
|
|
191
193
|
end
|
|
192
194
|
end
|
|
193
195
|
|
|
@@ -790,6 +792,10 @@ module Kettle
|
|
|
790
792
|
@gem_source_version_available[cache_key] = GemSourceProbe.new(source_url: source_url).available?(name, version)
|
|
791
793
|
end
|
|
792
794
|
|
|
795
|
+
def clear_gem_source_version_availability_cache!
|
|
796
|
+
@gem_source_version_available = {}
|
|
797
|
+
end
|
|
798
|
+
|
|
793
799
|
def source_urls_for_lockfiles(paths)
|
|
794
800
|
paths.flat_map { |path| registry_source_urls(path) }.uniq
|
|
795
801
|
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Kettle
|
|
4
|
+
module Dev
|
|
5
|
+
# Filesystem path operations shared by Kettle tools.
|
|
6
|
+
module Paths
|
|
7
|
+
module_function
|
|
8
|
+
|
|
9
|
+
# Expands a path and resolves its longest existing ancestor. This keeps
|
|
10
|
+
# comparisons useful for generated paths that do not exist yet.
|
|
11
|
+
def canonical(path, base: nil)
|
|
12
|
+
expanded = File.expand_path(path, base)
|
|
13
|
+
existing = expanded
|
|
14
|
+
suffix = []
|
|
15
|
+
until File.exist?(existing) || File.symlink?(existing)
|
|
16
|
+
parent = File.dirname(existing)
|
|
17
|
+
return expanded if parent == existing
|
|
18
|
+
|
|
19
|
+
suffix.unshift(File.basename(existing))
|
|
20
|
+
existing = parent
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
suffix.reduce(File.realpath(existing)) { |resolved, component| File.join(resolved, component) }
|
|
24
|
+
rescue Errno::EACCES, Errno::ENOENT
|
|
25
|
+
expanded
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Uses filesystem identity for existing paths, so symlink aliases and
|
|
29
|
+
# platform-specific aliases are compared by the operating system.
|
|
30
|
+
def same?(left, right, base: nil)
|
|
31
|
+
left_path = canonical(left, base: base)
|
|
32
|
+
right_path = canonical(right, base: base)
|
|
33
|
+
return true if left_path == right_path
|
|
34
|
+
|
|
35
|
+
return File.identical?(left_path, right_path) if File.exist?(left_path) && File.exist?(right_path)
|
|
36
|
+
|
|
37
|
+
comparable_parts(left_path) == comparable_parts(right_path)
|
|
38
|
+
rescue Errno::EACCES, Errno::ENOENT, Errno::ENOTDIR, NotImplementedError
|
|
39
|
+
comparable_parts(left_path || left) == comparable_parts(right_path || right)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Tests containment by path components, not by a string prefix.
|
|
43
|
+
def within?(path, root, base: nil)
|
|
44
|
+
candidate = canonical(path, base: base)
|
|
45
|
+
boundary = canonical(root, base: base)
|
|
46
|
+
return true if same?(candidate, boundary)
|
|
47
|
+
|
|
48
|
+
candidate_parts = comparable_parts(candidate)
|
|
49
|
+
boundary_parts = comparable_parts(boundary)
|
|
50
|
+
candidate_parts[0, boundary_parts.length] == boundary_parts
|
|
51
|
+
rescue Errno::EACCES, Errno::ENOENT, Errno::ENOTDIR
|
|
52
|
+
false
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def path_parts(path)
|
|
56
|
+
path.tr("\\", "/").split("/").reject(&:empty?)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def comparable_parts(path)
|
|
60
|
+
parts = path_parts(path)
|
|
61
|
+
Gem.win_platform? ? parts.map(&:downcase) : parts
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -30,7 +30,7 @@ module Kettle
|
|
|
30
30
|
|
|
31
31
|
def initialize(name:, root:, ci_root:, local_path_roots: [], selector_env: {})
|
|
32
32
|
@name = String(name)
|
|
33
|
-
@root =
|
|
33
|
+
@root = Paths.canonical(root)
|
|
34
34
|
@ci_root = canonical_path(ci_root)
|
|
35
35
|
@local_path_roots = Array(local_path_roots).map { |path| canonical_path(path) }.uniq.freeze
|
|
36
36
|
@selector_env = selector_env.to_h.map { |key, value| [String(key), String(value)] }.to_h.freeze
|
|
@@ -86,25 +86,11 @@ module Kettle
|
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def canonical_path(path)
|
|
89
|
-
|
|
90
|
-
candidate = expanded
|
|
91
|
-
suffix = []
|
|
92
|
-
|
|
93
|
-
until File.exist?(candidate) || File.symlink?(candidate)
|
|
94
|
-
parent = File.dirname(candidate)
|
|
95
|
-
return expanded if parent == candidate
|
|
96
|
-
|
|
97
|
-
suffix.unshift(File.basename(candidate))
|
|
98
|
-
candidate = parent
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
suffix.reduce(File.realpath(candidate)) { |base, component| File.join(base, component) }
|
|
102
|
-
rescue Errno::ENOENT
|
|
103
|
-
expanded
|
|
89
|
+
Paths.canonical(path, base: @root)
|
|
104
90
|
end
|
|
105
91
|
|
|
106
92
|
def path_within_root?(path, root)
|
|
107
|
-
|
|
93
|
+
Paths.within?(path, root)
|
|
108
94
|
end
|
|
109
95
|
end
|
|
110
96
|
end
|
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.5"
|
|
9
9
|
end
|
|
10
10
|
# Current gem version exposed at the traditional constant location.
|
|
11
11
|
VERSION = Version::VERSION # Traditional Constant Location
|
data/lib/kettle/dev.rb
CHANGED
|
@@ -47,6 +47,7 @@ module Kettle
|
|
|
47
47
|
autoload :MarkdownReferenceValidator, "kettle/dev/markdown_reference_validator"
|
|
48
48
|
autoload :ReadmeBackers, "kettle/dev/readme_backers"
|
|
49
49
|
autoload :OpenCollectiveConfig, "kettle/dev/open_collective_config"
|
|
50
|
+
autoload :Paths, "kettle/dev/paths"
|
|
50
51
|
autoload :ReleaseNotifier, "kettle/dev/release_notifier"
|
|
51
52
|
autoload :ReleaseCLI, "kettle/dev/release_cli"
|
|
52
53
|
autoload :ReleaseGraphContract, "kettle/dev/release_graph_contract"
|
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.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -390,6 +390,7 @@ files:
|
|
|
390
390
|
- lib/kettle/dev/lockfile_reset.rb
|
|
391
391
|
- lib/kettle/dev/markdown_reference_validator.rb
|
|
392
392
|
- lib/kettle/dev/open_collective_config.rb
|
|
393
|
+
- lib/kettle/dev/paths.rb
|
|
393
394
|
- lib/kettle/dev/pre_release_cli.rb
|
|
394
395
|
- lib/kettle/dev/rakelib/appraisal.rake
|
|
395
396
|
- lib/kettle/dev/rakelib/bench.rake
|
|
@@ -421,10 +422,10 @@ licenses:
|
|
|
421
422
|
- AGPL-3.0-only
|
|
422
423
|
metadata:
|
|
423
424
|
homepage_uri: https://kettle-dev.galtzo.com
|
|
424
|
-
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.
|
|
425
|
-
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.
|
|
425
|
+
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v3.1.5
|
|
426
|
+
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v3.1.5/CHANGELOG.md
|
|
426
427
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
|
|
427
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.
|
|
428
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/3.1.5
|
|
428
429
|
funding_uri: https://github.com/sponsors/pboling
|
|
429
430
|
wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
|
|
430
431
|
news_uri: https://www.railsbling.com/tags/kettle-dev
|
metadata.gz.sig
CHANGED
|
Binary file
|