kettle-dev 1.1.6 → 1.1.8

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.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/.aiignore.example +19 -0
  4. data/.git-hooks/commit-msg +2 -1
  5. data/.github/workflows/current.yml +5 -0
  6. data/.github/workflows/dep-heads.yml +105 -0
  7. data/.github/workflows/heads.yml +7 -2
  8. data/.github/workflows/heads.yml.example +7 -2
  9. data/.github/workflows/jruby.yml +5 -0
  10. data/.github/workflows/jruby.yml.example +5 -0
  11. data/.gitlab-ci.yml.example +66 -4
  12. data/.junie/guidelines.md +1 -1
  13. data/.rubocop.yml +3 -9
  14. data/Appraisals +21 -41
  15. data/Appraisals.example +20 -22
  16. data/CHANGELOG.md +45 -2
  17. data/Gemfile +5 -9
  18. data/Gemfile.example +5 -9
  19. data/README.md +4 -2
  20. data/README.md.example +1 -1
  21. data/Rakefile.example +1 -1
  22. data/gemfiles/modular/debug.gemfile +13 -0
  23. data/gemfiles/modular/erb/r2/v3.0.gemfile +1 -0
  24. data/gemfiles/modular/erb/r2.3/default.gemfile +6 -0
  25. data/gemfiles/modular/erb/r2.6/v2.2.gemfile +3 -0
  26. data/gemfiles/modular/erb/r3/v5.0.gemfile +1 -0
  27. data/gemfiles/modular/erb/r3.1/v4.0.gemfile +2 -0
  28. data/gemfiles/modular/erb/vHEAD.gemfile +2 -0
  29. data/gemfiles/modular/mutex_m/r2/v0.3.gemfile +2 -0
  30. data/gemfiles/modular/mutex_m/r2.4/v0.1.gemfile +3 -0
  31. data/gemfiles/modular/mutex_m/r3/v0.3.gemfile +2 -0
  32. data/gemfiles/modular/mutex_m/vHEAD.gemfile +2 -0
  33. data/gemfiles/modular/optional.gemfile +4 -1
  34. data/gemfiles/modular/runtime_heads.gemfile +10 -0
  35. data/gemfiles/modular/stringio/r2/v3.0.gemfile +5 -0
  36. data/gemfiles/modular/stringio/r2.4/v0.0.2.gemfile +4 -0
  37. data/gemfiles/modular/stringio/r3/v3.0.gemfile +5 -0
  38. data/gemfiles/modular/stringio/vHEAD.gemfile +2 -0
  39. data/gemfiles/modular/x_std_libs/r2/libs.gemfile +3 -0
  40. data/gemfiles/modular/x_std_libs/r2.3/libs.gemfile +3 -0
  41. data/gemfiles/modular/x_std_libs/r2.4/libs.gemfile +3 -0
  42. data/gemfiles/modular/x_std_libs/r2.6/libs.gemfile +3 -0
  43. data/gemfiles/modular/x_std_libs/r3/libs.gemfile +3 -0
  44. data/gemfiles/modular/x_std_libs/r3.1/libs.gemfile +3 -0
  45. data/gemfiles/modular/x_std_libs/vHEAD.gemfile +3 -0
  46. data/gemfiles/modular/x_std_libs.gemfile +2 -0
  47. data/lib/kettle/dev/rakelib/appraisal.rake +27 -0
  48. data/lib/kettle/dev/rakelib/spec_test.rake +35 -16
  49. data/lib/kettle/dev/tasks/ci_task.rb +1 -5
  50. data/lib/kettle/dev/tasks/install_task.rb +4 -6
  51. data/lib/kettle/dev/tasks/template_task.rb +35 -11
  52. data/lib/kettle/dev/version.rb +1 -1
  53. data/lib/kettle/dev.rb +4 -0
  54. data.tar.gz.sig +0 -0
  55. metadata +31 -25
  56. metadata.gz.sig +4 -2
data/Appraisals.example CHANGED
@@ -24,79 +24,77 @@ appraise "unlocked_deps" do
24
24
  eval_gemfile "modular/documentation.gemfile"
25
25
  eval_gemfile "modular/style.gemfile"
26
26
  eval_gemfile "modular/optional.gemfile"
27
+ eval_gemfile "modular/x_std_libs.gemfile"
27
28
  end
28
29
 
29
30
  # Used for head (nightly) releases of ruby, truffleruby, and jruby.
30
31
  # Split into discrete appraisals if one of them needs a dependency locked discretely.
31
32
  appraise "head" do
32
- gem "mutex_m", ">= 0.2"
33
- gem "stringio", ">= 3.0"
34
33
  gem "benchmark", "~> 0.4", ">= 0.4.1"
34
+ eval_gemfile "modular/x_std_libs.gemfile"
35
35
  end
36
36
 
37
37
  # Used for current releases of ruby, truffleruby, and jruby.
38
38
  # Split into discrete appraisals if one of them needs a dependency locked discretely.
39
39
  appraise "current" do
40
- gem "mutex_m", ">= 0.2"
41
- gem "stringio", ">= 3.0"
40
+ eval_gemfile "modular/x_std_libs.gemfile"
41
+ end
42
+
43
+ # Test current Rubies against head versions of runtime dependencies
44
+ appraise "dep-heads" do
45
+ eval_gemfile "modular/runtime_heads.gemfile"
42
46
  end
43
47
 
44
48
  appraise "ruby-2-3" do
49
+ eval_gemfile "modular/x_std_libs/r2.3/libs.gemfile"
45
50
  end
46
51
 
47
52
  appraise "ruby-2-4" do
53
+ eval_gemfile "modular/x_std_libs/r2.4/libs.gemfile"
48
54
  end
49
55
 
50
56
  appraise "ruby-2-5" do
57
+ eval_gemfile "modular/x_std_libs/r2.6/libs.gemfile"
51
58
  end
52
59
 
53
60
  appraise "ruby-2-6" do
54
- gem "mutex_m", "~> 0.2"
55
- gem "stringio", "~> 3.0"
61
+ eval_gemfile "modular/x_std_libs/r2.6/libs.gemfile"
56
62
  end
57
63
 
58
64
  appraise "ruby-2-7" do
59
- gem "mutex_m", "~> 0.2"
60
- gem "stringio", "~> 3.0"
65
+ eval_gemfile "modular/x_std_libs/r3.1/libs.gemfile"
61
66
  end
62
67
 
63
68
  appraise "ruby-3-0" do
64
- gem "mutex_m", "~> 0.2"
65
- gem "stringio", "~> 3.0"
69
+ eval_gemfile "modular/x_std_libs/r3.1/libs.gemfile"
66
70
  end
67
71
 
68
72
  appraise "ruby-3-1" do
69
- gem "mutex_m", "~> 0.2"
70
- gem "stringio", "~> 3.0"
73
+ eval_gemfile "modular/x_std_libs/r3.1/libs.gemfile"
71
74
  end
72
75
 
73
76
  appraise "ruby-3-2" do
74
- gem "mutex_m", "~> 0.2"
75
- gem "stringio", "~> 3.0"
77
+ eval_gemfile "modular/x_std_libs/3/libs.gemfile"
76
78
  end
77
79
 
78
80
  appraise "ruby-3-3" do
79
- gem "mutex_m", "~> 0.2"
80
- gem "stringio", "~> 3.0"
81
+ eval_gemfile "modular/x_std_libs/r3/libs.gemfile"
81
82
  end
82
83
 
83
84
  # Only run security audit on the latest version of Ruby
84
85
  appraise "audit" do
85
- gem "mutex_m", "~> 0.2"
86
- gem "stringio", "~> 3.0"
86
+ eval_gemfile "modular/x_std_libs/r3/libs.gemfile"
87
87
  end
88
88
 
89
89
  # Only run coverage on the latest version of Ruby
90
90
  appraise "coverage" do
91
- gem "mutex_m", "~> 0.2"
92
- gem "stringio", "~> 3.0"
93
91
  eval_gemfile "modular/coverage.gemfile"
94
92
  eval_gemfile "modular/optional.gemfile"
93
+ eval_gemfile "modular/x_std_libs/r3/libs.gemfile"
95
94
  end
96
95
 
97
96
  # Only run linter on the latest version of Ruby (but, in support of oldest supported Ruby version)
98
97
  appraise "style" do
99
- gem "mutex_m", "~> 0.2"
100
- gem "stringio", "~> 3.0"
101
98
  eval_gemfile "modular/style.gemfile"
99
+ eval_gemfile "modular/x_std_libs/r3/libs.gemfile"
102
100
  end
data/CHANGELOG.md CHANGED
@@ -24,6 +24,45 @@ Please file a bug if you notice a violation of semantic versioning.
24
24
  ### Fixed
25
25
  ### Security
26
26
 
27
+ ## [1.1.8] - 2025-09-07
28
+ - TAG: [v1.1.8][1.1.8t]
29
+ - COVERAGE: 97.16% -- 3246/3341 lines in 23 files
30
+ - BRANCH COVERAGE: 81.95% -- 1344/1640 branches in 23 files
31
+ - 76.97% documented
32
+ ### Added
33
+ - add .aiignore to the template
34
+ - add .rubocop_rspec.yml to the template
35
+ - gemfiles/modular/x_std_libs pattern to template, including:
36
+ - erb
37
+ - mutex_m
38
+ - stringio
39
+ - gemfiles/modular/debug.gemfile
40
+ - gemfiles/modular/runtime_heads.gemfile
41
+ - .github/workflows/dep-heads.yml
42
+ - (performance) filter and prioritize example files in the `.github` directory
43
+ - added codecov config to the template
44
+ - Kettle::Dev.default_registered?
45
+ ### Fixed
46
+ - run specs as part of the test task
47
+
48
+ ## [1.1.7] - 2025-09-06
49
+ - TAG: [v1.1.7][1.1.7t]
50
+ - COVERAGE: 97.12% -- 3237/3333 lines in 23 files
51
+ - BRANCH COVERAGE: 81.95% -- 1344/1640 branches in 23 files
52
+ - 76.97% documented
53
+ ### Added
54
+ - rake task - `appraisal:install`
55
+ - initial setup for projects that didn't previously use Appraisal
56
+ ### Changed
57
+ - .git-hooks/commit-msg allows commit if gitmoji-regex is unavailable
58
+ - simplified `*Task` classes' `task_abort` methods to just raise Kettle::Dev::Error
59
+ - Allows caller to decide how to handle.
60
+ ### Removed
61
+ - addressable, rake runtime dependencies
62
+ - moved to optional, or development dependencies
63
+ ### Fixed
64
+ - Fix local CI via act for templated workflows (skip JRuby in nektos/act locally)
65
+
27
66
  ## [1.1.6] - 2025-09-05
28
67
  - TAG: [v1.1.6][1.1.6t]
29
68
  - COVERAGE: 97.06% -- 3241/3339 lines in 23 files
@@ -53,7 +92,7 @@ Please file a bug if you notice a violation of semantic versioning.
53
92
  ### Removed
54
93
  - defensive NameError handling in ChangelogCLI.abort method
55
94
  ### Fixed
56
- - replace token {OPENCOLLECTIVE|ORG_NAME} with funding org name
95
+ - replace token `{OPENCOLLECTIVE|ORG_NAME}` with funding org name
57
96
  - prefer .example version of .git-hooks
58
97
  - kettle-commit-msg now runs via rubygems (not bundler) so it will work via a system gem
59
98
  - fixed logic for handling derivation of forge and funding URLs
@@ -504,7 +543,11 @@ Please file a bug if you notice a violation of semantic versioning.
504
543
  - Selecting will run the selected workflow via `act`
505
544
  - This may move to its own gem in the future.
506
545
 
507
- [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.6...HEAD
546
+ [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.8...HEAD
547
+ [1.1.8]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.7...v1.1.8
548
+ [1.1.8t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.8
549
+ [1.1.7]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.6...v1.1.7
550
+ [1.1.7t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.7
508
551
  [1.1.6]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.5...v1.1.6
509
552
  [1.1.6t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.1.6
510
553
  [1.1.5]: https://github.com/kettle-rb/kettle-dev/compare/v1.1.4...v1.1.5
data/Gemfile CHANGED
@@ -12,15 +12,8 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" }
12
12
  # Include dependencies from <gem name>.gemspec
13
13
  gemspec
14
14
 
15
- platform :mri do
16
- # Debugging - Ensure ENV["DEBUG"] == "true" to use debuggers within spec suite
17
- # Use binding.break, binding.b, or debugger in code
18
- gem "debug", ">= 1.0.0" # ruby >= 2.7
19
- gem "gem_bench", "~> 2.0", ">= 2.0.5"
20
-
21
- # Dev Console - Binding.pry - Irb replacement
22
- gem "pry", "~> 0.14" # ruby >= 2.0
23
- end
15
+ # Debugging
16
+ eval_gemfile "gemfiles/modular/debug.gemfile"
24
17
 
25
18
  # Code Coverage
26
19
  eval_gemfile "gemfiles/modular/coverage.gemfile"
@@ -37,5 +30,8 @@ eval_gemfile "gemfiles/modular/documentation.gemfile"
37
30
  # Optional
38
31
  eval_gemfile "gemfiles/modular/optional.gemfile"
39
32
 
33
+ ### Std Lib Extracted Gems
34
+ eval_gemfile "gemfiles/modular/x_std_libs.gemfile"
35
+
40
36
  # Dependencies injected by the kettle-dev-setup script & kettle:dev:install rake task
41
37
  # eval_gemfile "gemfiles/modular/injected.gemfile"
data/Gemfile.example CHANGED
@@ -12,15 +12,8 @@ git_source(:gitlab) { |repo_name| "https://gitlab.com/#{repo_name}" }
12
12
  # Include dependencies from <gem name>.gemspec
13
13
  gemspec
14
14
 
15
- platform :mri do
16
- # Debugging - Ensure ENV["DEBUG"] == "true" to use debuggers within spec suite
17
- # Use binding.break, binding.b, or debugger in code
18
- gem "debug", ">= 1.0.0" # ruby >= 2.7
19
- gem "gem_bench", "~> 2.0", ">= 2.0.5"
20
-
21
- # Dev Console - Binding.pry - Irb replacement
22
- gem "pry", "~> 0.14" # ruby >= 2.0
23
- end
15
+ # Debugging
16
+ eval_gemfile "gemfiles/modular/debug.gemfile"
24
17
 
25
18
  # Code Coverage
26
19
  eval_gemfile "gemfiles/modular/coverage.gemfile"
@@ -33,3 +26,6 @@ eval_gemfile "gemfiles/modular/documentation.gemfile"
33
26
 
34
27
  # Optional
35
28
  eval_gemfile "gemfiles/modular/optional.gemfile"
29
+
30
+ ### Std Lib Extracted Gems
31
+ eval_gemfile "gemfiles/modular/x_std_libs.gemfile"
data/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  # 🍲 Kettle::Dev
11
11
 
12
- [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![CodeCov Test Coverage][🔑codecovi]][🔑codecov] [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls] [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov] [![QLTY Maintainability][🔑qlty-mnti]][🔑qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Supported][🚎6-s-wfi]][🚎6-s-wf] [![CI Legacy][🚎4-lg-wfi]][🚎4-lg-wf] [![CI Unsupported][🚎7-us-wfi]][🚎7-us-wf] [![CI Ancient][🚎1-an-wfi]][🚎1-an-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![CodeQL][🖐codeQL-img]][🖐codeQL]
12
+ [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license-ref] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![Open Source Helpers][👽oss-helpi]][👽oss-help] [![CodeCov Test Coverage][🔑codecovi]][🔑codecov] [![Coveralls Test Coverage][🔑coveralls-img]][🔑coveralls] [![QLTY Test Coverage][🔑qlty-covi]][🔑qlty-cov] [![QLTY Maintainability][🔑qlty-mnti]][🔑qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Supported][🚎6-s-wfi]][🚎6-s-wf] [![CI Legacy][🚎4-lg-wfi]][🚎4-lg-wf] [![CI Unsupported][🚎7-us-wfi]][🚎7-us-wf] [![CI Ancient][🚎1-an-wfi]][🚎1-an-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![CodeQL][🖐codeQL-img]][🖐codeQL]
13
13
 
14
14
  If ☝️ `ci_badges.map(&:color).detect { it != "green"}` [let me know][🖼️galtzo-discord], as I may have missed the [discord notification][🖼️galtzo-discord].
15
15
 
@@ -853,6 +853,8 @@ Thanks for RTFM. ☺️
853
853
  [🚎10-j-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/jruby.yml/badge.svg
854
854
  [🚎11-c-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/current.yml
855
855
  [🚎11-c-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/current.yml/badge.svg
856
+ [🚎12-crh-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/dep-heads.yml
857
+ [🚎12-crh-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/dep-heads.yml/badge.svg
856
858
  [🚎13-🔒️-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/locked_deps.yml
857
859
  [🚎13-🔒️-wfi]: https://github.com/kettle-rb/kettle-dev/actions/workflows/locked_deps.yml/badge.svg
858
860
  [🚎14-🔓️-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/unlocked_deps.yml
@@ -905,7 +907,7 @@ Thanks for RTFM. ☺️
905
907
  [📌gitmoji]:https://gitmoji.dev
906
908
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
907
909
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
908
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.339-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
910
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.341-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
909
911
  [🔐security]: SECURITY.md
910
912
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
911
913
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
data/README.md.example CHANGED
@@ -505,7 +505,7 @@ Thanks for RTFM. ☺️
505
505
  [📌gitmoji]:https://gitmoji.dev
506
506
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
507
507
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
508
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.339-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
508
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-3.341-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
509
509
  [🔐security]: SECURITY.md
510
510
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
511
511
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
data/Rakefile.example CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # kettle-dev Rakefile v1.1.6 - 2025-09-05
3
+ # kettle-dev Rakefile v1.1.8 - 2025-09-07
4
4
  # Ruby 2.3 (Safe Navigation) or higher required
5
5
  #
6
6
  # MIT License (see License.txt)
@@ -0,0 +1,13 @@
1
+ # Ex-Standard Library gems
2
+ gem "irb", "~> 1.15", ">= 1.15.2" # removed from stdlib in 3.5
3
+
4
+ platform :mri do
5
+ # Debugging - Ensure ENV["DEBUG"] == "true" to use debuggers within spec suite
6
+ # Use binding.break, binding.b, or debugger in code
7
+ gem "debug", ">= 1.1" # ruby >= 2.7
8
+
9
+ # Dev Console - Binding.pry - Irb replacement
10
+ # gem "pry", "~> 0.14" # ruby >= 2.0
11
+ end
12
+
13
+ gem "gem_bench", "~> 2.0", ">= 2.0.5"
@@ -0,0 +1 @@
1
+ gem "erb", "~> 3.0" # ruby >= 2.7.0
@@ -0,0 +1,6 @@
1
+ # The cake is a lie.
2
+ # erb v2.2, the oldest release on RubyGems.org, was never compatible with Ruby 2.3.
3
+ # In addition, erb does not follow SemVer, and old rubies get dropped in a patch.
4
+ # This means we have no choice but to use the erb that shipped with Ruby 2.3
5
+ # /opt/hostedtoolcache/Ruby/2.3.8/x64/lib/ruby/gems/2.3.0/gems/erb-2.2.2/lib/erb.rb:670:in `prepare_trim_mode': undefined method `match?' for "-":String (NoMethodError)
6
+ # gem "erb", ">= 2.2" # ruby >= 2.3.0
@@ -0,0 +1,3 @@
1
+ # Ruby >= 2.3.0 (claimed, but not true, minimum support is Ruby 2.4)
2
+ # Last version supporting Ruby <= 2.6
3
+ gem "erb", "~> 2.2.2"
@@ -0,0 +1 @@
1
+ gem "erb", "~> 5.0" # ruby >= 3.2.0
@@ -0,0 +1,2 @@
1
+ # last version compatible with Ruby 3.1
2
+ gem "erb", "~> 4.0" # ruby >= 2.7.0
@@ -0,0 +1,2 @@
1
+ # Ruby >= 3.2 (dependency of kettle-dev)
2
+ gem "erb", github: "ruby/erb", branch: "master"
@@ -0,0 +1,2 @@
1
+ # Ruby >= 2.5
2
+ gem "mutex_m", "~> 0.2"
@@ -0,0 +1,3 @@
1
+ # Ruby >= 0
2
+ # Last version supporting Ruby <= 2.4
3
+ gem "mutex_m", "~> 0.1"
@@ -0,0 +1,2 @@
1
+ # Ruby >= 2.5
2
+ gem "mutex_m", "~> 0.2"
@@ -0,0 +1,2 @@
1
+ # Ruby >= 2.5 (dependency of omniauth)
2
+ gem "mutex_m", github: "ruby/mutex_m", branch: "master"
@@ -2,4 +2,7 @@
2
2
  # git gem is not a direct dependency for two reasons:
3
3
  # 1. it is incompatible with Truffleruby v23
4
4
  # 2. it depends on activesupport, which is too heavy
5
- gem "git", ">= 1.19.1" # ruby >= 2.3
5
+ gem "git", ">= 1.19.1" # ruby >= 2.3
6
+
7
+ # URL parsing with Unicode support (falls back to URI if not available)
8
+ gem "addressable", ">= 2.8", "< 3" # ruby >= 2.2
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Test against HEAD of runtime dependencies so we can proactively file bugs
4
+
5
+ # Ruby >= 2.2
6
+ gem "version_gem", github: "ruby-oauth/version_gem", branch: "main"
7
+
8
+ eval_gemfile("x_std_libs/vHEAD.gemfile")
9
+
10
+ eval_gemfile("recording/vHEAD.gemfile")
@@ -0,0 +1,5 @@
1
+ # !!WARNING!!
2
+ # NOT SEMVER
3
+ # Version 3.0.7 dropped support for Ruby <= 2.7
4
+ # Version 3.0.0 dropped support for Ruby <= 2.4
5
+ gem "stringio", ">= 3.0"
@@ -0,0 +1,4 @@
1
+ # !!WARNING!!
2
+ # NOT SEMVER
3
+ # Last version to support Ruby <= 2.5
4
+ gem "stringio", ">= 0.0.2"
@@ -0,0 +1,5 @@
1
+ # !!WARNING!!
2
+ # NOT SEMVER
3
+ # Version 3.0.7 dropped support for Ruby <= 2.7
4
+ # Version 3.0.0 dropped support for Ruby <= 2.4
5
+ gem "stringio", ">= 3.0"
@@ -0,0 +1,2 @@
1
+ # Ruby >= 2.5 (dependency of omniauth)
2
+ gem "stringio", github: "ruby/stringio", branch: "master"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2/v3.0.gemfile"
2
+ eval_gemfile "../../mutex_m/r2/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r2/v3.0.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2.3/default.gemfile"
2
+ eval_gemfile "../../mutex_m/r2.4/v0.1.gemfile"
3
+ eval_gemfile "../../stringio/r2.4/v0.0.2.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2.6/v2.2.gemfile"
2
+ eval_gemfile "../../mutex_m/r2.4/v0.1.gemfile"
3
+ eval_gemfile "../../stringio/r2.4/v0.0.2.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r2.6/v2.2.gemfile"
2
+ eval_gemfile "../../mutex_m/r2/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r2/v3.0.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r3/v5.0.gemfile"
2
+ eval_gemfile "../../mutex_m/r3/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r3/v3.0.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../../erb/r3.1/v4.0.gemfile"
2
+ eval_gemfile "../../mutex_m/r3/v0.3.gemfile"
3
+ eval_gemfile "../../stringio/r3/v3.0.gemfile"
@@ -0,0 +1,3 @@
1
+ eval_gemfile "../erb/vHEAD.gemfile"
2
+ eval_gemfile "../mutex_m/vHEAD.gemfile"
3
+ eval_gemfile "../stringio/vHEAD.gemfile"
@@ -0,0 +1,2 @@
1
+ ### Std Lib Extracted Gems
2
+ eval_gemfile "x_std_libs/r3/libs.gemfile"
@@ -4,6 +4,33 @@
4
4
  begin
5
5
  require "appraisal/task"
6
6
 
7
+ desc("Install Appraisal gemfiles (initial setup for projects that didn't previously use Appraisal)")
8
+ task("appraisal:install") do
9
+ bundle = Gem.bindir ? File.join(Gem.bindir, "bundle") : "bundle"
10
+
11
+ run_in_unbundled = proc do
12
+ env = {"BUNDLE_GEMFILE" => "Appraisal.root.gemfile"}
13
+
14
+ # 1) bundle install --gemfile Appraisal.root.gemfile
15
+ ok = system(bundle, "install", "--gemfile", "Appraisal.root.gemfile")
16
+ abort("appraisal:install failed: bundle install --gemfile Appraisal.root.gemfile") unless ok
17
+
18
+ # 2) BUNDLE_GEMFILE=Appraisal.root.gemfile bundle exec appraisal install
19
+ ok = system(env, bundle, "exec", "appraisal", "install")
20
+ abort("appraisal:install failed: bundle exec appraisal install") unless ok
21
+
22
+ # 3) bundle exec rake rubocop_gradual:autocorrect
23
+ ok = system(bundle, "exec", "rake", "rubocop_gradual:autocorrect")
24
+ abort("appraisal:update failed: rubocop_gradual:autocorrect") unless ok
25
+ end
26
+
27
+ if defined?(Bundler)
28
+ Bundler.with_unbundled_env(&run_in_unbundled)
29
+ else
30
+ run_in_unbundled.call
31
+ end
32
+ end
33
+
7
34
  desc("Update Appraisal gemfiles and run RuboCop Gradual autocorrect")
8
35
  task("appraisal:update") do
9
36
  bundle = Gem.bindir ? File.join(Gem.bindir, "bundle") : "bundle"
@@ -2,22 +2,8 @@
2
2
 
3
3
  require "fileutils"
4
4
 
5
- # Setup RSpec
6
- begin
7
- require "rspec/core/rake_task"
8
-
9
- RSpec::Core::RakeTask.new(:spec)
10
- # This takes the place of `coverage` task when running as CI=true
11
- Kettle::Dev.register_default("spec") if Kettle::Dev::IS_CI
12
- rescue LoadError
13
- warn("[kettle-dev][spec_test.rake] failed to load rspec/core/rake_task") if Kettle::Dev::DEBUGGING
14
- desc("spec task stub")
15
- task(:spec) do
16
- warn("NOTE: rspec isn't installed, or is disabled for #{RUBY_VERSION} in the current environment")
17
- end
18
- end
19
-
20
- # Setup MiniTest
5
+ # rubocop:disable Rake/DuplicateTask
6
+ # Set up MiniTest
21
7
  begin
22
8
  require "rake/testtask"
23
9
 
@@ -26,6 +12,7 @@ begin
26
12
  t.test_files = FileList["test/**/*test*.rb"]
27
13
  t.verbose = true
28
14
  end
15
+ Kettle::Dev.register_default("test")
29
16
  rescue LoadError
30
17
  warn("[kettle-dev][spec_test.rake] failed to load rake/testtask") if Kettle::Dev::DEBUGGING
31
18
  desc("test task stub")
@@ -33,3 +20,35 @@ rescue LoadError
33
20
  warn("NOTE: minitest isn't installed, or is disabled for #{RUBY_VERSION} in the current environment")
34
21
  end
35
22
  end
23
+
24
+ # Setup RSpec
25
+ begin
26
+ require "rspec/core/rake_task"
27
+
28
+ RSpec::Core::RakeTask.new(:spec)
29
+ # This takes the place of `coverage` task it hasn't been registered yet.
30
+ Kettle::Dev.register_default("spec") unless Kettle::Dev.default_registered?("coverage")
31
+ rescue LoadError
32
+ warn("[kettle-dev][spec_test.rake] failed to load rspec/core/rake_task") if Kettle::Dev::DEBUGGING
33
+ desc("spec task stub")
34
+ task(:spec) do
35
+ warn("NOTE: rspec isn't installed, or is disabled for #{RUBY_VERSION} in the current environment")
36
+ end
37
+ end
38
+
39
+ spec_registered = Kettle::Dev.default_registered?("spec")
40
+ coverage_registered = Kettle::Dev.default_registered?("coverage")
41
+ test_registered = Kettle::Dev.default_registered?("test")
42
+ spec_or_coverage = spec_registered || coverage_registered
43
+
44
+ if spec_or_coverage && !test_registered
45
+ task test: :spec
46
+ elsif test_registered && !spec_or_coverage
47
+ task spec: :test
48
+ elsif test_registered && spec_or_coverage
49
+ # When we have both tasks registered, make spec run as part of the test task
50
+ task test: :spec
51
+ else
52
+ puts "No test task is registered."
53
+ end
54
+ # rubocop:enable Rake/DuplicateTask
@@ -15,11 +15,7 @@ module Kettle
15
15
 
16
16
  # Local abort indirection to enable mocking via ExitAdapter
17
17
  def task_abort(msg)
18
- if defined?(RSpec)
19
- raise Kettle::Dev::Error, msg
20
- else
21
- Kettle::Dev::ExitAdapter.abort(msg)
22
- end
18
+ raise Kettle::Dev::Error, msg
23
19
  end
24
20
 
25
21
  # Runs `act` for a selected workflow. Option can be a short code or workflow basename.
@@ -6,13 +6,11 @@ module Kettle
6
6
  module InstallTask
7
7
  module_function
8
8
 
9
- # Abort wrapper that avoids terminating the entire process during specs
9
+ # Abort wrapper that avoids terminating the current rake task process.
10
+ # Always raise Kettle::Dev::Error so callers can decide whether to handle
11
+ # it without terminating the process (e.g., in tests or non-interactive runs).
10
12
  def task_abort(msg)
11
- if defined?(RSpec)
12
- raise Kettle::Dev::Error, msg
13
- else
14
- Kettle::Dev::ExitAdapter.abort(msg)
15
- end
13
+ raise Kettle::Dev::Error, msg
16
14
  end
17
15
 
18
16
  def run
@@ -10,11 +10,7 @@ module Kettle
10
10
 
11
11
  # Abort wrapper that avoids terminating the entire process during specs
12
12
  def task_abort(msg)
13
- if defined?(RSpec)
14
- raise Kettle::Dev::Error, msg
15
- else
16
- Kettle::Dev::ExitAdapter.abort(msg)
17
- end
13
+ raise Kettle::Dev::Error, msg
18
14
  end
19
15
 
20
16
  # Execute the template operation into the current project.
@@ -45,9 +41,21 @@ module Kettle
45
41
  # 2) .github/**/*.yml with FUNDING.yml customizations
46
42
  source_github_dir = File.join(gem_checkout_root, ".github")
47
43
  if Dir.exist?(source_github_dir)
48
- files = Dir.glob(File.join(source_github_dir, "**", "*.yml")) +
44
+ # Build a unique set of logical .yml paths, preferring the .example variant when present
45
+ candidates = Dir.glob(File.join(source_github_dir, "**", "*.yml")) +
49
46
  Dir.glob(File.join(source_github_dir, "**", "*.yml.example"))
50
- files.uniq.each do |orig_src|
47
+ selected = {}
48
+ candidates.each do |path|
49
+ # Key by the path without the optional .example suffix
50
+ key = path.sub(/\.example\z/, "")
51
+ # Prefer example: overwrite a plain selection with .example, but do not downgrade
52
+ if path.end_with?(".example")
53
+ selected[key] = path
54
+ else
55
+ selected[key] ||= path
56
+ end
57
+ end
58
+ selected.values.each do |orig_src|
51
59
  src = helpers.prefer_example(orig_src)
52
60
  # Destination path should never include the .example suffix.
53
61
  rel = orig_src.sub(/^#{Regexp.escape(gem_checkout_root)}\/?/, "").sub(/\.example\z/, "")
@@ -155,6 +163,20 @@ module Kettle
155
163
  end
156
164
  end
157
165
 
166
+ # 4b) Additional modular gemfiles to include
167
+ ["debug.gemfile", "runtime_heads.gemfile"].each do |fname|
168
+ src = helpers.prefer_example(File.join(gem_checkout_root, "gemfiles/modular", fname))
169
+ dest = File.join(project_root, "gemfiles/modular", fname)
170
+ helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true)
171
+ end
172
+
173
+ # 4c) Copy modular directories with nested/versioned files
174
+ %w[erb mutex_m stringio x_std_libs].each do |dir|
175
+ src_dir = File.join(gem_checkout_root, "gemfiles/modular", dir)
176
+ dest_dir = File.join(project_root, "gemfiles/modular", dir)
177
+ helpers.copy_dir_with_prompt(src_dir, dest_dir)
178
+ end
179
+
158
180
  # 5) spec/spec_helper.rb (no create)
159
181
  dest_spec_helper = File.join(project_root, "spec/spec_helper.rb")
160
182
  if File.file?(dest_spec_helper)
@@ -351,16 +373,20 @@ module Kettle
351
373
  end
352
374
 
353
375
  files_to_copy = %w[
376
+ .aiignore
354
377
  .envrc
355
378
  .gitignore
356
379
  .gitlab-ci.yml
380
+ .junie/guidelines-rbs.md
381
+ .junie/guidelines.md
382
+ .opencollective.yml
357
383
  .rspec
358
384
  .rubocop.yml
385
+ .rubocop_rspec.yml
359
386
  .simplecov
360
387
  .tool-versions
361
388
  .yard_gfm_support.rb
362
389
  .yardopts
363
- .opencollective.yml
364
390
  Appraisal.root.gemfile
365
391
  Appraisals
366
392
  CHANGELOG.md
@@ -369,12 +395,10 @@ module Kettle
369
395
  CONTRIBUTING.md
370
396
  FUNDING.md
371
397
  Gemfile
372
- Rakefile
373
398
  README.md
374
399
  RUBOCOP.md
400
+ Rakefile
375
401
  SECURITY.md
376
- .junie/guidelines.md
377
- .junie/guidelines-rbs.md
378
402
  ]
379
403
 
380
404
  # Snapshot existing README content once (for H1 prefix preservation after write)