kettle-dev 2.2.3 → 2.2.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 +5 -4
- data/CHANGELOG.md +43 -1
- data/README.md +2 -2
- data/lib/kettle/dev/gha_sha_pins_cli.rb +82 -17
- data/lib/kettle/dev/version.rb +1 -1
- data/sig/kettle/dev.rbs +0 -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: ba33ed9512e4bc65a82886c163c0c01c3b8c59895326fb64c64b01c97fbbbf77
|
|
4
|
+
data.tar.gz: 9c14bb68844fd3c46315215b6e60a9f35b3ebd9c416a8fad96552e361e061f30
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fd4cb6930f617bcbc033d1366a69a0f11911b6293145e37a30d149ecb7a3b54fc2c2cda287294105ca4a5d1b9598765318a9291e5999bafefe6a066be27b1ecb
|
|
7
|
+
data.tar.gz: 9cf023ac4edeb2d13bb063e62f5fb73b61405e3e7d12e63b5350de1dab920ff5fa8a9bb3425f76648e4fa8bc1254392d1fb0a7b7dbfb13603cf8dc77415ad2d3
|
checksums.yaml.gz.sig
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
�
|
|
1
|
+
�p!��pOH�����Kh�&Y+��-YH2p�����1˚ܴ�k1
|
|
2
|
+
~
|
|
3
|
+
.!�;b�\Q��z[��o�m� �/�Q����?��a�����P�.�z��<t�y�z�{� 1�#z~#��{�B��
|
|
4
|
+
韗Cs�������6�{�H�U��L�F�����ϕ
|
|
5
|
+
�3����t���/c�q~�Z�ƈ�)�t��hN;�
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,44 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [2.2.5] - 2026-06-13
|
|
34
|
+
|
|
35
|
+
- TAG: [v2.2.5][2.2.5t]
|
|
36
|
+
- COVERAGE: 92.29% -- 3818/4137 lines in 28 files
|
|
37
|
+
- BRANCH COVERAGE: 73.49% -- 1516/2063 branches in 28 files
|
|
38
|
+
- 67.00% documented
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- `kettle-gha-sha-pins --upgrade major` now supports major-line action tags
|
|
43
|
+
such as `v2`, while patch and minor upgrade targeting remain limited to full
|
|
44
|
+
`x.y.z` SemVer tags.
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
|
|
48
|
+
- `kettle-gha-sha-pins` persistent cache writes no longer crash for actions
|
|
49
|
+
whose releases and tags only include major-line versions such as `v2`.
|
|
50
|
+
|
|
51
|
+
## [2.2.4] - 2026-06-12
|
|
52
|
+
|
|
53
|
+
- TAG: [v2.2.4][2.2.4t]
|
|
54
|
+
- COVERAGE: 92.18% -- 3806/4129 lines in 28 files
|
|
55
|
+
- BRANCH COVERAGE: 73.26% -- 1507/2057 branches in 28 files
|
|
56
|
+
- 67.00% documented
|
|
57
|
+
|
|
58
|
+
### Changed
|
|
59
|
+
|
|
60
|
+
- Retemplated generated project files with the current `kettle-jem` template,
|
|
61
|
+
refreshing development dependency floors, binstubs, README metadata, and RBS
|
|
62
|
+
validation workflow output.
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- `kettle-gha-sha-pins --upgrade` no longer downgrades action pins when the
|
|
67
|
+
current SHA matches a newer version-like tag that is a prerelease or lacks a
|
|
68
|
+
GitHub Release, including transferred action repositories that require GitHub
|
|
69
|
+
API redirects.
|
|
70
|
+
|
|
33
71
|
## [2.2.3] - 2026-06-09
|
|
34
72
|
|
|
35
73
|
- TAG: [v2.2.3][2.2.3t]
|
|
@@ -2022,7 +2060,11 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
2022
2060
|
- Selecting will run the selected workflow via `act`
|
|
2023
2061
|
- This may move to its own gem in the future.
|
|
2024
2062
|
|
|
2025
|
-
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.
|
|
2063
|
+
[Unreleased]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.5...HEAD
|
|
2064
|
+
[2.2.5]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.4...v2.2.5
|
|
2065
|
+
[2.2.5t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.2.5
|
|
2066
|
+
[2.2.4]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.3...v2.2.4
|
|
2067
|
+
[2.2.4t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.2.4
|
|
2026
2068
|
[2.2.3]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.2...v2.2.3
|
|
2027
2069
|
[2.2.3t]: https://github.com/kettle-dev/kettle-dev/releases/tag/v2.2.3
|
|
2028
2070
|
[2.2.2]: https://github.com/kettle-dev/kettle-dev/compare/v2.2.1...v2.2.2
|
data/README.md
CHANGED
|
@@ -854,7 +854,7 @@ Thanks for RTFM. ☺️
|
|
|
854
854
|
[📌gitmoji]: https://gitmoji.dev
|
|
855
855
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
856
856
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
857
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-4.
|
|
857
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-4.137-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
858
858
|
[🔐security]: https://github.com/kettle-dev/kettle-dev/blob/main/SECURITY.md
|
|
859
859
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
860
860
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -882,7 +882,7 @@ Thanks for RTFM. ☺️
|
|
|
882
882
|
| Package | kettle-dev |
|
|
883
883
|
| Description | 🍲 Kettle::Dev is a meta tool from kettle-rb to streamline development and testing. Acts as a shim dependency, pulling in many other dependencies, to give you OOTB productivity with a RubyGem, or Ruby app project. Configures a complete set of Rake tasks, for all the libraries is brings in, so they arrive ready to go. Fund overlooked open source projects - bottom of stack, dev/test dependencies: floss-funding.dev |
|
|
884
884
|
| Homepage | https://github.com/kettle-dev/kettle-dev |
|
|
885
|
-
| Source | https://github.com/kettle-dev/kettle-dev/tree/v2.2.
|
|
885
|
+
| Source | https://github.com/kettle-dev/kettle-dev/tree/v2.2.4 |
|
|
886
886
|
| License | `AGPL-3.0-only` |
|
|
887
887
|
| Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/kettle-dev, https://opencollective.com/kettle-rb, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/kettle-dev, https://www.buymeacoffee.com/pboling |
|
|
888
888
|
<!-- kettle-jem:metadata:end -->
|
|
@@ -478,7 +478,7 @@ module Kettle
|
|
|
478
478
|
|
|
479
479
|
def parse_release_version(value)
|
|
480
480
|
normalized = value.to_s.sub(/\A[vV]/, "")
|
|
481
|
-
return nil unless normalized.match?(/\A
|
|
481
|
+
return nil unless normalized.match?(/\A(?:\d+|\d+\.\d+\.\d+(?:[-.]?[0-9A-Za-z.-]+)?)\z/)
|
|
482
482
|
|
|
483
483
|
Gem::Version.new(normalized)
|
|
484
484
|
rescue ArgumentError
|
|
@@ -504,10 +504,13 @@ module Kettle
|
|
|
504
504
|
def choose_upgrade_target(current_version, versions, level)
|
|
505
505
|
current = parse_release_version(current_version)
|
|
506
506
|
return nil if current.nil?
|
|
507
|
+
return nil if level != "major" && major_line_version?(current_version)
|
|
507
508
|
|
|
508
509
|
candidates = versions.select do |entry|
|
|
509
510
|
next false unless entry[:version_obj].is_a?(Gem::Version)
|
|
510
511
|
next false unless entry[:version_obj] > current
|
|
512
|
+
next false if entry[:version_obj].prerelease? && !current.prerelease?
|
|
513
|
+
next false if level != "major" && major_line_version?(entry[:version])
|
|
511
514
|
|
|
512
515
|
case level
|
|
513
516
|
when "patch"
|
|
@@ -522,12 +525,20 @@ module Kettle
|
|
|
522
525
|
candidates.max_by { |entry| entry[:version_obj] }
|
|
523
526
|
end
|
|
524
527
|
|
|
528
|
+
def major_line_version?(value)
|
|
529
|
+
value.to_s.match?(/\A\d+\z/)
|
|
530
|
+
end
|
|
531
|
+
|
|
525
532
|
def latest_outdated_target(current_version, versions)
|
|
526
533
|
current = parse_release_version(current_version)
|
|
527
534
|
return nil if current.nil?
|
|
528
535
|
|
|
529
536
|
versions
|
|
530
|
-
.select
|
|
537
|
+
.select do |entry|
|
|
538
|
+
entry[:version_obj].is_a?(Gem::Version) &&
|
|
539
|
+
entry[:version_obj] > current &&
|
|
540
|
+
(!entry[:version_obj].prerelease? || current.prerelease?)
|
|
541
|
+
end
|
|
531
542
|
.max_by { |entry| entry[:version_obj] }
|
|
532
543
|
end
|
|
533
544
|
|
|
@@ -902,7 +913,7 @@ module Kettle
|
|
|
902
913
|
|
|
903
914
|
# Persistent cache of GitHub Action release versions and target SHAs.
|
|
904
915
|
class PersistentActionCache
|
|
905
|
-
VERSION =
|
|
916
|
+
VERSION = 2
|
|
906
917
|
|
|
907
918
|
def self.default_path
|
|
908
919
|
state_home = ENV["XDG_STATE_HOME"]
|
|
@@ -1008,6 +1019,7 @@ module Kettle
|
|
|
1008
1019
|
JSON.parse(File.read(@path))
|
|
1009
1020
|
end
|
|
1010
1021
|
return empty_data unless parsed.is_a?(Hash)
|
|
1022
|
+
return empty_data unless parsed["version"].to_i == VERSION
|
|
1011
1023
|
|
|
1012
1024
|
parsed["version"] ||= VERSION
|
|
1013
1025
|
parsed["actions"] = {} unless parsed["actions"].is_a?(Hash)
|
|
@@ -1045,11 +1057,13 @@ module Kettle
|
|
|
1045
1057
|
|
|
1046
1058
|
deserialized.merge(cached_at: entry["cached_at"].to_s)
|
|
1047
1059
|
end
|
|
1060
|
+
return {} if entries.empty?
|
|
1048
1061
|
|
|
1062
|
+
full_semver_entries = entries.reject { |entry| major_line_version?(entry[:version]) }
|
|
1049
1063
|
{
|
|
1050
|
-
"patch" =>
|
|
1064
|
+
"patch" => full_semver_entries.group_by { |entry| entry[:version_obj].segments[0, 2].join(".") }
|
|
1051
1065
|
.transform_values { |group| serialize_target(group.max_by { |entry| entry[:version_obj] }) },
|
|
1052
|
-
"minor" =>
|
|
1066
|
+
"minor" => full_semver_entries.group_by { |entry| entry[:version_obj].segments[0].to_s }
|
|
1053
1067
|
.transform_values { |group| serialize_target(group.max_by { |entry| entry[:version_obj] }) },
|
|
1054
1068
|
"major" => {"*" => serialize_target(entries.max_by { |entry| entry[:version_obj] })}
|
|
1055
1069
|
}
|
|
@@ -1070,6 +1084,10 @@ module Kettle
|
|
|
1070
1084
|
nil
|
|
1071
1085
|
end
|
|
1072
1086
|
|
|
1087
|
+
def major_line_version?(value)
|
|
1088
|
+
value.to_s.match?(/\A\d+\z/)
|
|
1089
|
+
end
|
|
1090
|
+
|
|
1073
1091
|
def fresh_entry?(entry)
|
|
1074
1092
|
cached_at = Time.iso8601(entry["cached_at"].to_s)
|
|
1075
1093
|
cached_at >= @clock.call - @ttl_seconds
|
|
@@ -1113,7 +1131,6 @@ module Kettle
|
|
|
1113
1131
|
tag_shas = tag_ref_shas(repo_ref)
|
|
1114
1132
|
releases = data.filter_map do |release|
|
|
1115
1133
|
next unless release.is_a?(Hash)
|
|
1116
|
-
next if release["prerelease"] == true
|
|
1117
1134
|
|
|
1118
1135
|
tag = release["tag_name"].to_s
|
|
1119
1136
|
parsed = parse_release_version_text(tag)
|
|
@@ -1126,6 +1143,21 @@ module Kettle
|
|
|
1126
1143
|
sha: tag_shas[tag]
|
|
1127
1144
|
}
|
|
1128
1145
|
end
|
|
1146
|
+
released_tags = releases.each_with_object({}) { |release, memo| memo[release[:tag]] = true }
|
|
1147
|
+
tag_versions = tag_shas.filter_map do |tag, sha|
|
|
1148
|
+
next if released_tags[tag]
|
|
1149
|
+
|
|
1150
|
+
parsed = parse_release_version_text(tag)
|
|
1151
|
+
next unless parsed
|
|
1152
|
+
|
|
1153
|
+
{
|
|
1154
|
+
tag: tag,
|
|
1155
|
+
version_obj: parsed,
|
|
1156
|
+
version: parsed.to_s,
|
|
1157
|
+
sha: sha
|
|
1158
|
+
}
|
|
1159
|
+
end
|
|
1160
|
+
releases.concat(tag_versions)
|
|
1129
1161
|
|
|
1130
1162
|
releases.sort_by! { |release| release[:version_obj] }
|
|
1131
1163
|
releases.reverse!
|
|
@@ -1171,7 +1203,7 @@ module Kettle
|
|
|
1171
1203
|
|
|
1172
1204
|
def parse_release_version_text(value)
|
|
1173
1205
|
normalized = value.to_s.sub(/\A[vV]/, "")
|
|
1174
|
-
return nil unless normalized.match?(/\A
|
|
1206
|
+
return nil unless normalized.match?(/\A(?:\d+|\d+\.\d+\.\d+(?:[-.]?[0-9A-Za-z.-]+)?)\z/)
|
|
1175
1207
|
|
|
1176
1208
|
Gem::Version.new(normalized)
|
|
1177
1209
|
rescue ArgumentError
|
|
@@ -1190,20 +1222,53 @@ module Kettle
|
|
|
1190
1222
|
object = entry["object"]
|
|
1191
1223
|
next unless object.is_a?(Hash)
|
|
1192
1224
|
|
|
1193
|
-
|
|
1225
|
+
sha = object["sha"].to_s[0, 40]
|
|
1226
|
+
case object["type"]
|
|
1227
|
+
when "commit"
|
|
1228
|
+
memo[tag] = sha
|
|
1229
|
+
when "tag"
|
|
1230
|
+
dereferenced_sha = annotated_tag_commit_sha(repo_ref, sha)
|
|
1231
|
+
memo[tag] = dereferenced_sha if dereferenced_sha
|
|
1232
|
+
end
|
|
1194
1233
|
end
|
|
1195
1234
|
end
|
|
1196
1235
|
|
|
1197
|
-
def
|
|
1236
|
+
def annotated_tag_commit_sha(repo_ref, tag_sha)
|
|
1237
|
+
return nil if tag_sha.to_s.empty?
|
|
1238
|
+
|
|
1239
|
+
data = request_json("/repos/#{repo_ref}/git/tags/#{tag_sha}")
|
|
1240
|
+
return nil unless data.is_a?(Hash)
|
|
1241
|
+
|
|
1242
|
+
object = data["object"]
|
|
1243
|
+
return nil unless object.is_a?(Hash)
|
|
1244
|
+
return nil unless object["type"] == "commit"
|
|
1245
|
+
|
|
1246
|
+
object["sha"].to_s[0, 40]
|
|
1247
|
+
end
|
|
1248
|
+
|
|
1249
|
+
def request_json(path, redirects: 3)
|
|
1198
1250
|
uri = URI.join(@api_base + "/", path)
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1251
|
+
|
|
1252
|
+
response = nil
|
|
1253
|
+
loop do
|
|
1254
|
+
request = Net::HTTP::Get.new(uri)
|
|
1255
|
+
request["Accept"] = "application/vnd.github+json"
|
|
1256
|
+
request["User-Agent"] = @user_agent
|
|
1257
|
+
request["X-GitHub-Api-Version"] = "2022-11-28"
|
|
1258
|
+
request["Authorization"] = "Bearer #{@token}" if @token && !@token.empty?
|
|
1259
|
+
|
|
1260
|
+
response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
|
|
1261
|
+
http.request(request)
|
|
1262
|
+
end
|
|
1263
|
+
|
|
1264
|
+
break unless response.code.to_i.between?(300, 399)
|
|
1265
|
+
redirects -= 1
|
|
1266
|
+
return nil if redirects.negative?
|
|
1267
|
+
|
|
1268
|
+
location = response["location"].to_s
|
|
1269
|
+
return nil if location.empty?
|
|
1270
|
+
|
|
1271
|
+
uri = URI.join(uri.to_s, location)
|
|
1207
1272
|
end
|
|
1208
1273
|
|
|
1209
1274
|
return nil unless response.code.to_i == 200
|
data/lib/kettle/dev/version.rb
CHANGED
data/sig/kettle/dev.rbs
CHANGED
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: 2.2.
|
|
4
|
+
version: 2.2.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -134,7 +134,7 @@ dependencies:
|
|
|
134
134
|
version: '3.1'
|
|
135
135
|
- - ">="
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: 3.1.
|
|
137
|
+
version: 3.1.2
|
|
138
138
|
type: :development
|
|
139
139
|
prerelease: false
|
|
140
140
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -144,7 +144,7 @@ dependencies:
|
|
|
144
144
|
version: '3.1'
|
|
145
145
|
- - ">="
|
|
146
146
|
- !ruby/object:Gem::Version
|
|
147
|
-
version: 3.1.
|
|
147
|
+
version: 3.1.2
|
|
148
148
|
- !ruby/object:Gem::Dependency
|
|
149
149
|
name: turbo_tests2
|
|
150
150
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -338,10 +338,10 @@ licenses:
|
|
|
338
338
|
- AGPL-3.0-only
|
|
339
339
|
metadata:
|
|
340
340
|
homepage_uri: https://kettle-dev.galtzo.com
|
|
341
|
-
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.2.
|
|
342
|
-
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.2.
|
|
341
|
+
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.2.5
|
|
342
|
+
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.2.5/CHANGELOG.md
|
|
343
343
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
|
|
344
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.2.
|
|
344
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.2.5
|
|
345
345
|
funding_uri: https://github.com/sponsors/pboling
|
|
346
346
|
wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
|
|
347
347
|
news_uri: https://www.railsbling.com/tags/kettle-dev
|
metadata.gz.sig
CHANGED
|
Binary file
|