kettle-dev 1.1.3 → 1.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 +0 -0
- data/.env.local.example +14 -1
- data/.envrc +2 -2
- data/.git-hooks/commit-msg +22 -16
- data/.git-hooks/prepare-commit-msg.example +19 -0
- data/.github/workflows/coverage.yml +2 -2
- data/.junie/guidelines.md +4 -0
- data/.opencollective.yml.example +3 -0
- data/CHANGELOG.md +43 -1
- data/CONTRIBUTING.md +29 -0
- data/FUNDING.md +2 -2
- data/README.md +148 -38
- data/README.md.example +7 -7
- data/Rakefile.example +1 -5
- data/bin/setup +8 -0
- data/exe/kettle-changelog +7 -2
- data/exe/kettle-commit-msg +20 -5
- data/exe/kettle-dev-setup +2 -1
- data/exe/kettle-dvcs +7 -2
- data/exe/kettle-pre-release +66 -0
- data/exe/kettle-readme-backers +7 -2
- data/exe/kettle-release +9 -2
- data/lib/kettle/dev/changelog_cli.rb +4 -5
- data/lib/kettle/dev/ci_helpers.rb +9 -5
- data/lib/kettle/dev/ci_monitor.rb +229 -8
- data/lib/kettle/dev/gem_spec_reader.rb +105 -39
- data/lib/kettle/dev/git_adapter.rb +6 -3
- data/lib/kettle/dev/git_commit_footer.rb +5 -2
- data/lib/kettle/dev/pre_release_cli.rb +248 -0
- data/lib/kettle/dev/readme_backers.rb +4 -2
- data/lib/kettle/dev/release_cli.rb +27 -17
- data/lib/kettle/dev/tasks/ci_task.rb +112 -22
- data/lib/kettle/dev/tasks/install_task.rb +23 -17
- data/lib/kettle/dev/tasks/template_task.rb +64 -23
- data/lib/kettle/dev/template_helpers.rb +64 -25
- data/lib/kettle/dev/version.rb +1 -1
- data/lib/kettle/dev.rb +5 -0
- data/sig/kettle/dev/ci_monitor.rbs +6 -0
- data/sig/kettle/dev/gem_spec_reader.rbs +8 -5
- data/sig/kettle/dev/pre_release_cli.rbs +20 -0
- data/sig/kettle/dev/template_helpers.rbs +2 -0
- data/sig/kettle/dev.rbs +1 -0
- data.tar.gz.sig +0 -0
- metadata +31 -4
- metadata.gz.sig +0 -0
@@ -12,6 +12,8 @@ module Kettle
|
|
12
12
|
# Values: Hash with keys: :action (Symbol, one of :create, :replace, :skip, :dir_create, :dir_replace), :timestamp (Time)
|
13
13
|
@@template_results = {}
|
14
14
|
|
15
|
+
EXECUTABLE_GIT_HOOKS_RE = %r{[\\/]\.git-hooks[\\/](commit-msg|prepare-commit-msg)\z}
|
16
|
+
|
15
17
|
module_function
|
16
18
|
|
17
19
|
# Root of the host project where Rake was invoked
|
@@ -119,9 +121,11 @@ module Kettle
|
|
119
121
|
end
|
120
122
|
|
121
123
|
if clean.nil?
|
122
|
-
# Fallback to
|
124
|
+
# Fallback to using the GitAdapter to get both status and preview
|
123
125
|
status_output = begin
|
124
|
-
|
126
|
+
ga = Kettle::Dev::GitAdapter.new
|
127
|
+
out, ok = ga.capture(["-C", root.to_s, "status", "--porcelain"]) # adapter can use CLI safely
|
128
|
+
ok ? out.to_s : ""
|
125
129
|
rescue StandardError => e
|
126
130
|
Kettle::Dev.debug_error(e, __method__)
|
127
131
|
""
|
@@ -130,9 +134,11 @@ module Kettle
|
|
130
134
|
preview = status_output.lines.take(10).map(&:rstrip)
|
131
135
|
else
|
132
136
|
return if clean
|
133
|
-
# For messaging, provide a small preview
|
137
|
+
# For messaging, provide a small preview using GitAdapter even when using the adapter
|
134
138
|
status_output = begin
|
135
|
-
|
139
|
+
ga = Kettle::Dev::GitAdapter.new
|
140
|
+
out, ok = ga.capture(["-C", root.to_s, "status", "--porcelain"]) # read-only query
|
141
|
+
ok ? out.to_s : ""
|
136
142
|
rescue StandardError => e
|
137
143
|
Kettle::Dev.debug_error(e, __method__)
|
138
144
|
""
|
@@ -221,6 +227,15 @@ module Kettle
|
|
221
227
|
# If replacement fails unexpectedly, proceed with content as-is
|
222
228
|
end
|
223
229
|
write_file(dest_path, content)
|
230
|
+
begin
|
231
|
+
# Ensure executable bit for git hook scripts when writing under .git-hooks
|
232
|
+
if EXECUTABLE_GIT_HOOKS_RE =~ dest_path.to_s
|
233
|
+
File.chmod(0o755, dest_path) if File.exist?(dest_path)
|
234
|
+
end
|
235
|
+
rescue StandardError => e
|
236
|
+
Kettle::Dev.debug_error(e, __method__)
|
237
|
+
# ignore permission issues
|
238
|
+
end
|
224
239
|
record_template_result(dest_path, dest_exists ? :replace : :create)
|
225
240
|
puts "Wrote #{dest_path}"
|
226
241
|
end
|
@@ -316,6 +331,16 @@ module Kettle
|
|
316
331
|
end
|
317
332
|
end
|
318
333
|
FileUtils.cp(path, target)
|
334
|
+
begin
|
335
|
+
# Ensure executable bit for git hook scripts when copying under .git-hooks
|
336
|
+
if target.end_with?("/.git-hooks/commit-msg", "/.git-hooks/prepare-commit-msg") ||
|
337
|
+
EXECUTABLE_GIT_HOOKS_RE =~ target
|
338
|
+
File.chmod(0o755, target)
|
339
|
+
end
|
340
|
+
rescue StandardError => e
|
341
|
+
Kettle::Dev.debug_error(e, __method__)
|
342
|
+
# ignore permission issues
|
343
|
+
end
|
319
344
|
end
|
320
345
|
end
|
321
346
|
puts "Updated #{dest_dir}"
|
@@ -354,6 +379,16 @@ module Kettle
|
|
354
379
|
end
|
355
380
|
end
|
356
381
|
FileUtils.cp(path, target)
|
382
|
+
begin
|
383
|
+
# Ensure executable bit for git hook scripts when copying under .git-hooks
|
384
|
+
if target.end_with?("/.git-hooks/commit-msg", "/.git-hooks/prepare-commit-msg") ||
|
385
|
+
EXECUTABLE_GIT_HOOKS_RE =~ target
|
386
|
+
File.chmod(0o755, target)
|
387
|
+
end
|
388
|
+
rescue StandardError => e
|
389
|
+
Kettle::Dev.debug_error(e, __method__)
|
390
|
+
# ignore permission issues
|
391
|
+
end
|
357
392
|
end
|
358
393
|
end
|
359
394
|
puts "Created #{dest_dir}"
|
@@ -368,30 +403,34 @@ module Kettle
|
|
368
403
|
# @param namespace [String]
|
369
404
|
# @param namespace_shield [String]
|
370
405
|
# @param gem_shield [String]
|
406
|
+
# @param funding_org [String, nil]
|
371
407
|
# @return [String]
|
372
|
-
def apply_common_replacements(content, org:, gem_name:, namespace:, namespace_shield:, gem_shield:)
|
373
|
-
|
374
|
-
|
375
|
-
if gem_name && !gem_name.empty?
|
376
|
-
# Special-case: yard-head link uses the gem name as a subdomain and must be dashes-only.
|
377
|
-
# Apply this BEFORE other generic replacements so it isn't altered incorrectly.
|
378
|
-
begin
|
379
|
-
dashed = gem_name.tr("_", "-")
|
380
|
-
c = c.gsub("[🚎yard-head]: https://kettle-dev.galtzo.com", "[🚎yard-head]: https://#{dashed}.galtzo.com")
|
381
|
-
rescue StandardError
|
382
|
-
# ignore
|
383
|
-
end
|
408
|
+
def apply_common_replacements(content, org:, gem_name:, namespace:, namespace_shield:, gem_shield:, funding_org: nil)
|
409
|
+
raise Error, "Org could not be derived" unless org && !org.empty?
|
410
|
+
raise Error, "Gem name could not be derived" unless gem_name && !gem_name.empty?
|
384
411
|
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
412
|
+
funding_org ||= org
|
413
|
+
c = content.dup
|
414
|
+
c = c.gsub("kettle-rb", org.to_s)
|
415
|
+
c = c.gsub("{OPENCOLLECTIVE|ORG_NAME}", funding_org)
|
416
|
+
# Special-case: yard-head link uses the gem name as a subdomain and must be dashes-only.
|
417
|
+
# Apply this BEFORE other generic replacements so it isn't altered incorrectly.
|
418
|
+
begin
|
419
|
+
dashed = gem_name.tr("_", "-")
|
420
|
+
c = c.gsub("[🚎yard-head]: https://kettle-dev.galtzo.com", "[🚎yard-head]: https://#{dashed}.galtzo.com")
|
421
|
+
rescue StandardError => e
|
422
|
+
Kettle::Dev.debug_error(e, __method__)
|
423
|
+
# ignore
|
393
424
|
end
|
394
|
-
|
425
|
+
|
426
|
+
# Replace occurrences of the template gem name in text, including inside
|
427
|
+
# markdown reference labels like [🖼️kettle-dev] and identifiers like kettle-dev-i
|
428
|
+
c = c.gsub("kettle-dev", gem_name)
|
429
|
+
c = c.gsub(/\bKettle::Dev\b/u, namespace) unless namespace.empty?
|
430
|
+
c = c.gsub("Kettle%3A%3ADev", namespace_shield) unless namespace_shield.empty?
|
431
|
+
c = c.gsub("kettle--dev", gem_shield)
|
432
|
+
# Replace require and path structures with gem_name, modifying - to / if needed
|
433
|
+
c.gsub("kettle/dev", gem_name.tr("-", "/"))
|
395
434
|
end
|
396
435
|
|
397
436
|
# Parse gemspec metadata and derive useful strings
|
data/lib/kettle/dev/version.rb
CHANGED
data/lib/kettle/dev.rb
CHANGED
@@ -23,6 +23,7 @@ module Kettle
|
|
23
23
|
autoload :InputAdapter, "kettle/dev/input_adapter"
|
24
24
|
autoload :ReadmeBackers, "kettle/dev/readme_backers"
|
25
25
|
autoload :ReleaseCLI, "kettle/dev/release_cli"
|
26
|
+
autoload :PreReleaseCLI, "kettle/dev/pre_release_cli"
|
26
27
|
autoload :TemplateHelpers, "kettle/dev/template_helpers"
|
27
28
|
autoload :Version, "kettle/dev/version"
|
28
29
|
autoload :Versioning, "kettle/dev/versioning"
|
@@ -54,6 +55,10 @@ module Kettle
|
|
54
55
|
# auto-install tasks when invoked via the rake executable.
|
55
56
|
# @return [String]
|
56
57
|
RUNNING_AS = File.basename($PROGRAM_NAME)
|
58
|
+
# A case-insensitive regular expression that matches common truthy ENV values.
|
59
|
+
# Accepts 1, true, y, yes (any case).
|
60
|
+
# @return [Regexp]
|
61
|
+
ENV_TRUE_RE = /\A(1|true|y|yes)\z/i
|
57
62
|
|
58
63
|
@defaults = []
|
59
64
|
|
@@ -1,8 +1,14 @@
|
|
1
1
|
module Kettle
|
2
2
|
module Dev
|
3
3
|
module CIMonitor
|
4
|
+
def self.status_emoji: (String? status, String? conclusion) -> String
|
4
5
|
def self.monitor_all!: (?restart_hint: String) -> void
|
5
6
|
def self.monitor_gitlab!: (?restart_hint: String) -> bool
|
7
|
+
def self.collect_all: () -> { github: Array[untyped], gitlab: untyped? }
|
8
|
+
def self.summarize_results: ({ github: Array[untyped], gitlab: untyped? }) -> bool
|
9
|
+
def self.monitor_and_prompt_for_release!: (?restart_hint: String) -> void
|
10
|
+
def self.collect_github: () -> Array[untyped]?
|
11
|
+
def self.collect_gitlab: () -> { status: String, url: String? }?
|
6
12
|
end
|
7
13
|
end
|
8
14
|
end
|
@@ -1,13 +1,15 @@
|
|
1
1
|
module Kettle
|
2
2
|
module Dev
|
3
3
|
class GemSpecReader
|
4
|
+
DEFAULT_MINIMUM_RUBY: Gem::Version
|
5
|
+
|
4
6
|
def self.load: (String root) -> {
|
5
7
|
gemspec_path: String?,
|
6
8
|
gem_name: String,
|
7
|
-
min_ruby:
|
9
|
+
min_ruby: Gem::Version,
|
8
10
|
homepage: String,
|
9
|
-
gh_org: String
|
10
|
-
forge_org: String
|
11
|
+
gh_org: String,
|
12
|
+
forge_org: String,
|
11
13
|
funding_org: String?,
|
12
14
|
gh_repo: String?,
|
13
15
|
namespace: String,
|
@@ -18,13 +20,14 @@ module Kettle
|
|
18
20
|
email: Array[String],
|
19
21
|
summary: String,
|
20
22
|
description: String,
|
21
|
-
license: String,
|
22
23
|
licenses: Array[String],
|
23
|
-
required_ruby_version:
|
24
|
+
required_ruby_version: Gem::Requirement?,
|
24
25
|
require_paths: Array[String],
|
25
26
|
bindir: String,
|
26
27
|
executables: Array[String],
|
27
28
|
}
|
29
|
+
|
30
|
+
def self.derive_forge_and_origin_repo: (String? homepage_val) -> { forge_org: String?, origin_repo: String? }
|
28
31
|
end
|
29
32
|
end
|
30
33
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Kettle
|
2
|
+
module Dev
|
3
|
+
class PreReleaseCLI
|
4
|
+
module HTTP
|
5
|
+
def self.parse_http_uri: (String url_str) -> ::URI
|
6
|
+
def self.head_ok?: (String url_str, ?limit: Integer, ?timeout: Integer) -> bool
|
7
|
+
end
|
8
|
+
|
9
|
+
module Markdown
|
10
|
+
def self.extract_image_urls_from_text: (String text) -> Array[String]
|
11
|
+
def self.extract_image_urls_from_files: (?String glob_pattern) -> Array[String]
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize: (?check_num: Integer) -> void
|
15
|
+
def run: () -> void
|
16
|
+
def check_markdown_uri_normalization!: () -> void
|
17
|
+
def check_markdown_images_http!: () -> void
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
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: 1.1.
|
4
|
+
version: 1.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter H. Boling
|
@@ -51,6 +51,26 @@ dependencies:
|
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '13.0'
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: addressable
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '2.8'
|
61
|
+
- - "<"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '3'
|
64
|
+
type: :runtime
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '2.8'
|
71
|
+
- - "<"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '3'
|
54
74
|
- !ruby/object:Gem::Dependency
|
55
75
|
name: bundler-audit
|
56
76
|
requirement: !ruby/object:Gem::Requirement
|
@@ -199,6 +219,7 @@ executables:
|
|
199
219
|
- kettle-commit-msg
|
200
220
|
- kettle-dev-setup
|
201
221
|
- kettle-dvcs
|
222
|
+
- kettle-pre-release
|
202
223
|
- kettle-readme-backers
|
203
224
|
- kettle-release
|
204
225
|
extensions: []
|
@@ -221,6 +242,7 @@ files:
|
|
221
242
|
- ".git-hooks/commit-subjects-goalie.txt"
|
222
243
|
- ".git-hooks/footer-template.erb.txt"
|
223
244
|
- ".git-hooks/prepare-commit-msg"
|
245
|
+
- ".git-hooks/prepare-commit-msg.example"
|
224
246
|
- ".github/FUNDING.yml"
|
225
247
|
- ".github/dependabot.yml"
|
226
248
|
- ".github/workflows/ancient.yml"
|
@@ -249,6 +271,7 @@ files:
|
|
249
271
|
- ".junie/guidelines-rbs.md"
|
250
272
|
- ".junie/guidelines.md"
|
251
273
|
- ".opencollective.yml"
|
274
|
+
- ".opencollective.yml.example"
|
252
275
|
- ".qlty/qlty.toml"
|
253
276
|
- ".rspec"
|
254
277
|
- ".rubocop.yml"
|
@@ -275,10 +298,12 @@ files:
|
|
275
298
|
- RUBOCOP.md
|
276
299
|
- Rakefile.example
|
277
300
|
- SECURITY.md
|
301
|
+
- bin/setup
|
278
302
|
- exe/kettle-changelog
|
279
303
|
- exe/kettle-commit-msg
|
280
304
|
- exe/kettle-dev-setup
|
281
305
|
- exe/kettle-dvcs
|
306
|
+
- exe/kettle-pre-release
|
282
307
|
- exe/kettle-readme-backers
|
283
308
|
- exe/kettle-release
|
284
309
|
- gemfiles/modular/coverage.gemfile
|
@@ -301,6 +326,7 @@ files:
|
|
301
326
|
- lib/kettle/dev/git_adapter.rb
|
302
327
|
- lib/kettle/dev/git_commit_footer.rb
|
303
328
|
- lib/kettle/dev/input_adapter.rb
|
329
|
+
- lib/kettle/dev/pre_release_cli.rb
|
304
330
|
- lib/kettle/dev/rakelib/appraisal.rake
|
305
331
|
- lib/kettle/dev/rakelib/bench.rake
|
306
332
|
- lib/kettle/dev/rakelib/bundle_audit.rake
|
@@ -333,6 +359,7 @@ files:
|
|
333
359
|
- sig/kettle/dev/git_adapter.rbs
|
334
360
|
- sig/kettle/dev/git_commit_footer.rbs
|
335
361
|
- sig/kettle/dev/input_adapter.rbs
|
362
|
+
- sig/kettle/dev/pre_release_cli.rbs
|
336
363
|
- sig/kettle/dev/readme_backers.rbs
|
337
364
|
- sig/kettle/dev/release_cli.rbs
|
338
365
|
- sig/kettle/dev/tasks.rbs
|
@@ -347,10 +374,10 @@ licenses:
|
|
347
374
|
- MIT
|
348
375
|
metadata:
|
349
376
|
homepage_uri: https://kettle-dev.galtzo.com/
|
350
|
-
source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.
|
351
|
-
changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.
|
377
|
+
source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.1.5
|
378
|
+
changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.1.5/CHANGELOG.md
|
352
379
|
bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
|
353
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.
|
380
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.1.5
|
354
381
|
funding_uri: https://github.com/sponsors/pboling
|
355
382
|
wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
|
356
383
|
news_uri: https://www.railsbling.com/tags/kettle-dev
|
metadata.gz.sig
CHANGED
Binary file
|