kettle-dev 2.2.12 → 2.2.14
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 +258 -203
- data/CONTRIBUTING.md +2 -2
- data/FUNDING.md +1 -5
- data/README.md +44 -26
- data/exe/kettle-changelog +35 -1
- data/exe/kettle-release +9 -7
- data/lib/kettle/dev/changelog_cli.rb +12 -10
- data/lib/kettle/dev/changelog_entry_adder.rb +115 -0
- data/lib/kettle/dev/gha_sha_pins_cli.rb +76 -45
- data/lib/kettle/dev/release_cli.rb +4 -4
- data/lib/kettle/dev/version.rb +1 -1
- data/lib/kettle/dev.rb +1 -0
- data.tar.gz.sig +0 -0
- metadata +11 -10
- metadata.gz.sig +0 -0
|
@@ -32,6 +32,9 @@ module Kettle
|
|
|
32
32
|
COMMENT_REASON = "update_version_comment"
|
|
33
33
|
DEFAULT_UPGRADE_LEVEL = "patch"
|
|
34
34
|
DEFAULT_CACHE_TTL_SECONDS = 24 * 60 * 60
|
|
35
|
+
DEFAULT_HTTP_OPEN_TIMEOUT_SECONDS = 5
|
|
36
|
+
DEFAULT_HTTP_READ_TIMEOUT_SECONDS = 10
|
|
37
|
+
DEFAULT_HTTP_REFRESH_TIMEOUT_SECONDS = 20
|
|
35
38
|
VALID_UPGRADE_LEVELS = %w[major minor patch].freeze
|
|
36
39
|
VERSION_COMMENT_SUFFIX_RE = /\A\s+#\s*v?(?<version>\d+(?:\.\d+\.\d+(?:[-.]?[0-9A-Za-z.-]+)?)?)/
|
|
37
40
|
VERSION_COMMENT_REPLACEMENT_RE = /\A(?<prefix>\s+#\s*)v?\d+(?:\.\d+\.\d+(?:[-.]?[0-9A-Za-z.-]+)?)?/
|
|
@@ -1100,12 +1103,15 @@ module Kettle
|
|
|
1100
1103
|
|
|
1101
1104
|
# Lightweight GitHub API client for commit and release SHA resolution.
|
|
1102
1105
|
class GitHubClient
|
|
1103
|
-
def initialize(token:, api_base:, user_agent:, persistent_cache: nil, refresh_cache: false)
|
|
1106
|
+
def initialize(token:, api_base:, user_agent:, persistent_cache: nil, refresh_cache: false, open_timeout: DEFAULT_HTTP_OPEN_TIMEOUT_SECONDS, read_timeout: DEFAULT_HTTP_READ_TIMEOUT_SECONDS, refresh_timeout: DEFAULT_HTTP_REFRESH_TIMEOUT_SECONDS)
|
|
1104
1107
|
@token = token
|
|
1105
1108
|
@api_base = api_base
|
|
1106
1109
|
@user_agent = user_agent
|
|
1107
1110
|
@persistent_cache = persistent_cache
|
|
1108
1111
|
@refresh_cache = refresh_cache
|
|
1112
|
+
@open_timeout = open_timeout
|
|
1113
|
+
@read_timeout = read_timeout
|
|
1114
|
+
@refresh_timeout = refresh_timeout
|
|
1109
1115
|
@commit_cache = {}
|
|
1110
1116
|
@release_cache = {}
|
|
1111
1117
|
end
|
|
@@ -1114,58 +1120,31 @@ module Kettle
|
|
|
1114
1120
|
return [] if repo_ref.to_s.empty?
|
|
1115
1121
|
return @release_cache[repo_ref] if @release_cache.key?(repo_ref)
|
|
1116
1122
|
|
|
1123
|
+
stale = nil
|
|
1117
1124
|
unless @refresh_cache
|
|
1118
1125
|
cached = @persistent_cache&.versions_for_repo(repo_ref, fresh: true)
|
|
1119
1126
|
if cached
|
|
1120
1127
|
@release_cache[repo_ref] = cached
|
|
1121
1128
|
return cached
|
|
1122
1129
|
end
|
|
1130
|
+
stale = @persistent_cache&.versions_for_repo(repo_ref, fresh: false)
|
|
1123
1131
|
end
|
|
1124
1132
|
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
return
|
|
1133
|
+
releases = nil
|
|
1134
|
+
Timeout.timeout(@refresh_timeout) do
|
|
1135
|
+
data = request_json("/repos/#{repo_ref}/releases?per_page=100")
|
|
1136
|
+
return cached_versions(repo_ref, stale) unless data.is_a?(Array)
|
|
1129
1137
|
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
tag_shas = tag_ref_shas(repo_ref)
|
|
1134
|
-
releases = data.filter_map do |release|
|
|
1135
|
-
next unless release.is_a?(Hash)
|
|
1136
|
-
|
|
1137
|
-
tag = release["tag_name"].to_s
|
|
1138
|
-
parsed = parse_release_version_text(tag)
|
|
1139
|
-
next unless parsed
|
|
1138
|
+
tag_shas = tag_ref_shas(repo_ref)
|
|
1139
|
+
return cached_versions(repo_ref, stale) unless tag_shas
|
|
1140
1140
|
|
|
1141
|
-
|
|
1142
|
-
tag: tag,
|
|
1143
|
-
version_obj: parsed,
|
|
1144
|
-
version: parsed.to_s,
|
|
1145
|
-
sha: tag_shas[tag]
|
|
1146
|
-
}
|
|
1141
|
+
releases = build_release_versions(data, tag_shas)
|
|
1147
1142
|
end
|
|
1148
|
-
released_tags = releases.each_with_object({}) { |release, memo| memo[release[:tag]] = true }
|
|
1149
|
-
tag_versions = tag_shas.filter_map do |tag, sha|
|
|
1150
|
-
next if released_tags[tag]
|
|
1151
|
-
|
|
1152
|
-
parsed = parse_release_version_text(tag)
|
|
1153
|
-
next unless parsed
|
|
1154
|
-
|
|
1155
|
-
{
|
|
1156
|
-
tag: tag,
|
|
1157
|
-
version_obj: parsed,
|
|
1158
|
-
version: parsed.to_s,
|
|
1159
|
-
sha: sha
|
|
1160
|
-
}
|
|
1161
|
-
end
|
|
1162
|
-
releases.concat(tag_versions)
|
|
1163
|
-
|
|
1164
|
-
releases.sort_by! { |release| release[:version_obj] }
|
|
1165
|
-
releases.reverse!
|
|
1166
1143
|
@persistent_cache&.write_versions(repo_ref, releases)
|
|
1167
1144
|
@release_cache[repo_ref] = releases
|
|
1168
1145
|
releases
|
|
1146
|
+
rescue Timeout::Error
|
|
1147
|
+
cached_versions(repo_ref, stale)
|
|
1169
1148
|
end
|
|
1170
1149
|
|
|
1171
1150
|
def commit_sha(repo_ref, ref)
|
|
@@ -1203,6 +1182,48 @@ module Kettle
|
|
|
1203
1182
|
|
|
1204
1183
|
private
|
|
1205
1184
|
|
|
1185
|
+
def cached_versions(repo_ref, stale)
|
|
1186
|
+
versions = stale || []
|
|
1187
|
+
@release_cache[repo_ref] = versions
|
|
1188
|
+
versions
|
|
1189
|
+
end
|
|
1190
|
+
|
|
1191
|
+
def build_release_versions(data, tag_shas)
|
|
1192
|
+
releases = data.filter_map do |release|
|
|
1193
|
+
next unless release.is_a?(Hash)
|
|
1194
|
+
|
|
1195
|
+
tag = release["tag_name"].to_s
|
|
1196
|
+
parsed = parse_release_version_text(tag)
|
|
1197
|
+
next unless parsed
|
|
1198
|
+
|
|
1199
|
+
{
|
|
1200
|
+
tag: tag,
|
|
1201
|
+
version_obj: parsed,
|
|
1202
|
+
version: parsed.to_s,
|
|
1203
|
+
sha: tag_shas[tag]
|
|
1204
|
+
}
|
|
1205
|
+
end
|
|
1206
|
+
released_tags = releases.each_with_object({}) { |release, memo| memo[release[:tag]] = true }
|
|
1207
|
+
tag_versions = tag_shas.filter_map do |tag, sha|
|
|
1208
|
+
next if released_tags[tag]
|
|
1209
|
+
|
|
1210
|
+
parsed = parse_release_version_text(tag)
|
|
1211
|
+
next unless parsed
|
|
1212
|
+
|
|
1213
|
+
{
|
|
1214
|
+
tag: tag,
|
|
1215
|
+
version_obj: parsed,
|
|
1216
|
+
version: parsed.to_s,
|
|
1217
|
+
sha: sha
|
|
1218
|
+
}
|
|
1219
|
+
end
|
|
1220
|
+
releases.concat(tag_versions)
|
|
1221
|
+
|
|
1222
|
+
releases.sort_by! { |release| release[:version_obj] }
|
|
1223
|
+
releases.reverse!
|
|
1224
|
+
releases
|
|
1225
|
+
end
|
|
1226
|
+
|
|
1206
1227
|
def parse_release_version_text(value)
|
|
1207
1228
|
normalized = value.to_s.sub(/\A[vV]/, "")
|
|
1208
1229
|
return nil unless normalized.match?(/\A(?:\d+|\d+\.\d+\.\d+(?:[-.]?[0-9A-Za-z.-]+)?)\z/)
|
|
@@ -1214,13 +1235,15 @@ module Kettle
|
|
|
1214
1235
|
|
|
1215
1236
|
def tag_ref_shas(repo_ref)
|
|
1216
1237
|
data = request_json("/repos/#{repo_ref}/git/matching-refs/tags/")
|
|
1217
|
-
return
|
|
1238
|
+
return nil unless data.is_a?(Array)
|
|
1218
1239
|
|
|
1219
1240
|
data.each_with_object({}) do |entry, memo|
|
|
1220
1241
|
ref = entry["ref"].to_s
|
|
1221
1242
|
next unless ref.start_with?("refs/tags/")
|
|
1222
1243
|
|
|
1223
1244
|
tag = ref.sub(%r{\Arefs/tags/}, "")
|
|
1245
|
+
next unless parse_release_version_text(tag)
|
|
1246
|
+
|
|
1224
1247
|
object = entry["object"]
|
|
1225
1248
|
next unless object.is_a?(Hash)
|
|
1226
1249
|
|
|
@@ -1229,8 +1252,7 @@ module Kettle
|
|
|
1229
1252
|
when "commit"
|
|
1230
1253
|
memo[tag] = sha
|
|
1231
1254
|
when "tag"
|
|
1232
|
-
|
|
1233
|
-
memo[tag] = dereferenced_sha if dereferenced_sha
|
|
1255
|
+
memo[tag] = nil
|
|
1234
1256
|
end
|
|
1235
1257
|
end
|
|
1236
1258
|
end
|
|
@@ -1259,9 +1281,7 @@ module Kettle
|
|
|
1259
1281
|
request["X-GitHub-Api-Version"] = "2022-11-28"
|
|
1260
1282
|
request["Authorization"] = "Bearer #{@token}" if @token && !@token.empty?
|
|
1261
1283
|
|
|
1262
|
-
response =
|
|
1263
|
-
http.request(request)
|
|
1264
|
-
end
|
|
1284
|
+
response = http_request(uri, request)
|
|
1265
1285
|
|
|
1266
1286
|
break unless response.code.to_i.between?(300, 399)
|
|
1267
1287
|
redirects -= 1
|
|
@@ -1280,6 +1300,17 @@ module Kettle
|
|
|
1280
1300
|
rescue JSON::ParserError
|
|
1281
1301
|
nil
|
|
1282
1302
|
end
|
|
1303
|
+
rescue IOError, SystemCallError, Net::OpenTimeout, Net::ReadTimeout
|
|
1304
|
+
nil
|
|
1305
|
+
end
|
|
1306
|
+
|
|
1307
|
+
def http_request(uri, request)
|
|
1308
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
1309
|
+
http.use_ssl = uri.scheme == "https"
|
|
1310
|
+
http.open_timeout = @open_timeout
|
|
1311
|
+
http.read_timeout = @read_timeout
|
|
1312
|
+
http.ssl_timeout = @open_timeout if http.respond_to?(:ssl_timeout=)
|
|
1313
|
+
http.start { |connection| connection.request(request) }
|
|
1283
1314
|
end
|
|
1284
1315
|
|
|
1285
1316
|
def uri_encode(value)
|
|
@@ -70,17 +70,17 @@ module Kettle
|
|
|
70
70
|
|
|
71
71
|
public
|
|
72
72
|
|
|
73
|
-
def initialize(start_step:
|
|
73
|
+
def initialize(start_step: 0, local_ci: false, version: nil)
|
|
74
74
|
@root = Kettle::Dev::CIHelpers.project_root
|
|
75
75
|
@git = Kettle::Dev::GitAdapter.new
|
|
76
|
-
@start_step = (start_step ||
|
|
77
|
-
@start_step =
|
|
76
|
+
@start_step = (start_step || 0).to_i
|
|
77
|
+
@start_step = 0 if @start_step < 0
|
|
78
78
|
@local_ci = !!local_ci
|
|
79
79
|
@version_override = Kettle::Dev::Versioning.normalize_explicit_version(version)
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
def run
|
|
83
|
-
run_pre_release_checks! if @start_step <=
|
|
83
|
+
run_pre_release_checks! if @start_step <= 0
|
|
84
84
|
|
|
85
85
|
# 1. Ensure Bundler version ✓
|
|
86
86
|
ensure_bundler_2_7_plus!
|
data/lib/kettle/dev/version.rb
CHANGED
data/lib/kettle/dev.rb
CHANGED
|
@@ -29,6 +29,7 @@ module Kettle
|
|
|
29
29
|
autoload :EmojiRegex, "kettle/emoji_regex"
|
|
30
30
|
module Dev
|
|
31
31
|
autoload :ChangelogCLI, "kettle/dev/changelog_cli"
|
|
32
|
+
autoload :ChangelogEntryAdder, "kettle/dev/changelog_entry_adder"
|
|
32
33
|
autoload :BumpCLI, "kettle/dev/bump_cli"
|
|
33
34
|
autoload :CIHelpers, "kettle/dev/ci_helpers"
|
|
34
35
|
autoload :CIMonitor, "kettle/dev/ci_monitor"
|
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.14
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -66,7 +66,7 @@ dependencies:
|
|
|
66
66
|
version: '1.1'
|
|
67
67
|
- - ">="
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: 1.1.
|
|
69
|
+
version: 1.1.12
|
|
70
70
|
type: :runtime
|
|
71
71
|
prerelease: false
|
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -76,7 +76,7 @@ dependencies:
|
|
|
76
76
|
version: '1.1'
|
|
77
77
|
- - ">="
|
|
78
78
|
- !ruby/object:Gem::Version
|
|
79
|
-
version: 1.1.
|
|
79
|
+
version: 1.1.12
|
|
80
80
|
- !ruby/object:Gem::Dependency
|
|
81
81
|
name: bundler-audit
|
|
82
82
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -154,7 +154,7 @@ dependencies:
|
|
|
154
154
|
version: '3.1'
|
|
155
155
|
- - ">="
|
|
156
156
|
- !ruby/object:Gem::Version
|
|
157
|
-
version: 3.1.
|
|
157
|
+
version: 3.1.4
|
|
158
158
|
type: :development
|
|
159
159
|
prerelease: false
|
|
160
160
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -164,7 +164,7 @@ dependencies:
|
|
|
164
164
|
version: '3.1'
|
|
165
165
|
- - ">="
|
|
166
166
|
- !ruby/object:Gem::Version
|
|
167
|
-
version: 3.1.
|
|
167
|
+
version: 3.1.4
|
|
168
168
|
- !ruby/object:Gem::Dependency
|
|
169
169
|
name: ruby-progressbar
|
|
170
170
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -208,7 +208,7 @@ dependencies:
|
|
|
208
208
|
version: '2.0'
|
|
209
209
|
- - ">="
|
|
210
210
|
- !ruby/object:Gem::Version
|
|
211
|
-
version: 2.0.
|
|
211
|
+
version: 2.0.2
|
|
212
212
|
type: :development
|
|
213
213
|
prerelease: false
|
|
214
214
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -218,7 +218,7 @@ dependencies:
|
|
|
218
218
|
version: '2.0'
|
|
219
219
|
- - ">="
|
|
220
220
|
- !ruby/object:Gem::Version
|
|
221
|
-
version: 2.0.
|
|
221
|
+
version: 2.0.2
|
|
222
222
|
description: "\U0001F372 Kettle::Dev is a meta tool from kettle-rb to streamline development
|
|
223
223
|
and testing. Acts as a shim dependency, pulling in many other dependencies, to give
|
|
224
224
|
you OOTB productivity with a RubyGem, or Ruby app project. Configures a complete
|
|
@@ -276,6 +276,7 @@ files:
|
|
|
276
276
|
- lib/kettle/dev.rb
|
|
277
277
|
- lib/kettle/dev/bump_cli.rb
|
|
278
278
|
- lib/kettle/dev/changelog_cli.rb
|
|
279
|
+
- lib/kettle/dev/changelog_entry_adder.rb
|
|
279
280
|
- lib/kettle/dev/ci_helpers.rb
|
|
280
281
|
- lib/kettle/dev/ci_monitor.rb
|
|
281
282
|
- lib/kettle/dev/commit_msg.rb
|
|
@@ -338,10 +339,10 @@ licenses:
|
|
|
338
339
|
- AGPL-3.0-only
|
|
339
340
|
metadata:
|
|
340
341
|
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.
|
|
342
|
+
source_code_uri: https://github.com/kettle-dev/kettle-dev/tree/v2.2.14
|
|
343
|
+
changelog_uri: https://github.com/kettle-dev/kettle-dev/blob/v2.2.14/CHANGELOG.md
|
|
343
344
|
bug_tracker_uri: https://github.com/kettle-dev/kettle-dev/issues
|
|
344
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.2.
|
|
345
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.2.14
|
|
345
346
|
funding_uri: https://github.com/sponsors/pboling
|
|
346
347
|
wiki_uri: https://github.com/kettle-dev/kettle-dev/wiki
|
|
347
348
|
news_uri: https://www.railsbling.com/tags/kettle-dev
|
metadata.gz.sig
CHANGED
|
Binary file
|