kettle-dev 1.0.20 → 1.0.21

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 27364558d14319ac0482a0d2f97a1946aaa6ca70ad3273e64422493aca9e703e
4
- data.tar.gz: b86afd89d439255f0a225355769eb8fc38ebf9b027d7bd119e54375d9519a9ff
3
+ metadata.gz: c207c08e4e9933149728224c355077d0023be3794639f3e9eae9132207fb403b
4
+ data.tar.gz: 82c963e4d47084fdce04e9951e46b77109d782c2d206cb46b39f0f8965509a6e
5
5
  SHA512:
6
- metadata.gz: e621a371e84f22c1823b04223ead659ad8349589181b03ea479ec20f32c167f6f0cfeaa6e6f7370ee0a64924e4ea8310eb1ed654305b984dab4a5daed8788840
7
- data.tar.gz: f661ff83118812ceba44e04fc5292dae3150e36afc50ddef2b937d67a5fb2c8cb13d47883a3061c9be06065148c293459f1238c4b5bf9c9c9dfa9869118aa7f3
6
+ metadata.gz: 422cd88655f41ceff9b98af93024ae86d107f0311238bd79630c88e576b4fc8b0e4023bd4804ec58a334e43a0c89dd21a1fc6ac4e410786298d7ed688ee28317
7
+ data.tar.gz: 36ee1bd93cc0c8422b292bbd616b277cba903feb5194cdca82167f3e4e40cce086860f76f7a5c8bb748e36e329851abbe843ebcb047cc6aed7e0ae073e80b829
checksums.yaml.gz.sig CHANGED
Binary file
data/.envrc CHANGED
@@ -34,6 +34,9 @@ export DEBUG=false # do not allow byebug statements (override in .env.local)
34
34
  export FLOSS_CFG_FUND_DEBUG=false # extra logging to help diagnose issues (override in .env.local)
35
35
  export FLOSS_CFG_FUND_LOGFILE=tmp/log/debug.log
36
36
 
37
+ # Concurrently developing the rubocop-lts suite?
38
+ export RUBOCOP_LTS_LOCAL=false
39
+
37
40
  # .env would override anything in this file, if `dotenv` is uncommented below.
38
41
  # .env is a DOCKER standard, and if we use it, it would be in deployed, or DOCKER, environments,
39
42
  # and that is why we generally want to leave it commented out.
@@ -5,6 +5,8 @@ updates:
5
5
  schedule:
6
6
  interval: "weekly"
7
7
  open-pull-requests-limit: 5
8
+ ignore:
9
+ - dependency-name: "rubocop-lts"
8
10
  - package-ecosystem: "github-actions"
9
11
  directory: "/"
10
12
  schedule:
@@ -1,5 +1,8 @@
1
1
  name: MRI 2.3, 2.4, 2.5 (EOL)
2
2
 
3
+ permissions:
4
+ contents: read
5
+
3
6
  on:
4
7
  push:
5
8
  branches:
@@ -71,7 +74,7 @@ jobs:
71
74
 
72
75
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
73
76
  # We need to do this first to get appraisal installed.
74
- # NOTE: This does not use the main Gemfile at all.
77
+ # NOTE: This does not use the primary Gemfile at all.
75
78
  - name: Install Root Appraisal
76
79
  run: bundle
77
80
  - name: Appraisal for ${{ matrix.appraisal }}
@@ -1,5 +1,8 @@
1
1
  name: MRI 2.3, 2.4, 2.5 (EOL)
2
2
 
3
+ permissions:
4
+ contents: read
5
+
3
6
  on:
4
7
  push:
5
8
  branches:
@@ -69,7 +72,7 @@ jobs:
69
72
 
70
73
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
71
74
  # We need to do this first to get appraisal installed.
72
- # NOTE: This does not use the main Gemfile at all.
75
+ # NOTE: This does not use the primary Gemfile at all.
73
76
  - name: Install Root Appraisal
74
77
  run: bundle
75
78
  - name: Appraisal for ${{ matrix.appraisal }}
@@ -68,7 +68,7 @@ jobs:
68
68
 
69
69
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
70
70
  # We need to do this first to get appraisal installed.
71
- # NOTE: This does not use the main Gemfile at all.
71
+ # NOTE: This does not use the primary Gemfile at all.
72
72
  - name: Install Root Appraisal
73
73
  run: bundle
74
74
  - name: Appraisal for ${{ matrix.appraisal }}
@@ -67,7 +67,7 @@ jobs:
67
67
 
68
68
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
69
69
  # We need to do this first to get appraisal installed.
70
- # NOTE: This does not use the main Gemfile at all.
70
+ # NOTE: This does not use the primary Gemfile at all.
71
71
  - name: Install Root Appraisal
72
72
  run: bundle
73
73
  - name: Appraisal for ${{ matrix.appraisal }}
@@ -1,6 +1,9 @@
1
1
  # Targets the evergreen latest release of ruby, truffleruby, and jruby
2
2
  name: Current
3
3
 
4
+ permissions:
5
+ contents: read
6
+
4
7
  env:
5
8
  K_SOUP_COV_DO: false
6
9
 
@@ -17,9 +20,6 @@ on:
17
20
  # Allow manually triggering the workflow.
18
21
  workflow_dispatch:
19
22
 
20
- permissions:
21
- contents: read
22
-
23
23
  # Cancels all previous workflow runs for the same branch that have not yet completed.
24
24
  concurrency:
25
25
  # The concurrency group contains the workflow name and the branch name.
@@ -77,7 +77,7 @@ jobs:
77
77
 
78
78
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
79
79
  # We need to do this first to get appraisal installed.
80
- # NOTE: This does not use the main Gemfile at all.
80
+ # NOTE: This does not use the primary Gemfile at all.
81
81
  - name: Install Root Appraisal
82
82
  run: bundle
83
83
  - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}
@@ -1,5 +1,8 @@
1
1
  name: Heads
2
2
 
3
+ permissions:
4
+ contents: read
5
+
3
6
  env:
4
7
  K_SOUP_COV_DO: false
5
8
 
@@ -16,9 +19,6 @@ on:
16
19
  # Allow manually triggering the workflow.
17
20
  workflow_dispatch:
18
21
 
19
- permissions:
20
- contents: read
21
-
22
22
  # Cancels all previous workflow runs for the same branch that have not yet completed.
23
23
  concurrency:
24
24
  # The concurrency group contains the workflow name and the branch name.
@@ -76,7 +76,7 @@ jobs:
76
76
 
77
77
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
78
78
  # We need to do this first to get appraisal installed.
79
- # NOTE: This does not use the main Gemfile at all.
79
+ # NOTE: This does not use the primary Gemfile at all.
80
80
  - name: Install Root Appraisal
81
81
  run: bundle
82
82
  - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}
@@ -1,5 +1,8 @@
1
1
  name: JRuby
2
2
 
3
+ permissions:
4
+ contents: read
5
+
3
6
  env:
4
7
  K_SOUP_COV_DO: false
5
8
 
@@ -16,9 +19,6 @@ on:
16
19
  # Allow manually triggering the workflow.
17
20
  workflow_dispatch:
18
21
 
19
- permissions:
20
- contents: read
21
-
22
22
  # Cancels all previous workflow runs for the same branch that have not yet completed.
23
23
  concurrency:
24
24
  # The concurrency group contains the workflow name and the branch name.
@@ -68,7 +68,7 @@ jobs:
68
68
 
69
69
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
70
70
  # We need to do this first to get appraisal installed.
71
- # NOTE: This does not use the main Gemfile at all.
71
+ # NOTE: This does not use the primary Gemfile at all.
72
72
  - name: Install Root Appraisal
73
73
  run: bundle
74
74
  - name: Appraisal for ${{ matrix.appraisal }}
@@ -1,5 +1,8 @@
1
1
  name: JRuby
2
2
 
3
+ permissions:
4
+ contents: read
5
+
3
6
  env:
4
7
  K_SOUP_COV_DO: false
5
8
 
@@ -16,9 +19,6 @@ on:
16
19
  # Allow manually triggering the workflow.
17
20
  workflow_dispatch:
18
21
 
19
- permissions:
20
- contents: read
21
-
22
22
  # Cancels all previous workflow runs for the same branch that have not yet completed.
23
23
  concurrency:
24
24
  # The concurrency group contains the workflow name and the branch name.
@@ -58,7 +58,7 @@ jobs:
58
58
 
59
59
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
60
60
  # We need to do this first to get appraisal installed.
61
- # NOTE: This does not use the main Gemfile at all.
61
+ # NOTE: This does not use the primary Gemfile at all.
62
62
  - name: Install Root Appraisal
63
63
  run: bundle
64
64
  - name: Appraisal for ${{ matrix.appraisal }}
@@ -1,4 +1,7 @@
1
- name: MRI 3.0 (EOL)
1
+ name: MRI 3.0, 3.1 (EOL)
2
+
3
+ permissions:
4
+ contents: read
2
5
 
3
6
  env:
4
7
  K_SOUP_COV_DO: false
@@ -16,9 +19,6 @@ on:
16
19
  # Allow manually triggering the workflow.
17
20
  workflow_dispatch:
18
21
 
19
- permissions:
20
- contents: read
21
-
22
22
  # Cancels all previous workflow runs for the same branch that have not yet completed.
23
23
  concurrency:
24
24
  # The concurrency group contains the workflow name and the branch name.
@@ -45,6 +45,14 @@ jobs:
45
45
  rubygems: '3.5.23'
46
46
  bundler: '2.5.23'
47
47
 
48
+ # Ruby 3.1
49
+ - ruby: "ruby-3.1"
50
+ appraisal: "ruby-3-1"
51
+ exec_cmd: "rake test"
52
+ gemfile: "Appraisal.root"
53
+ rubygems: latest
54
+ bundler: latest
55
+
48
56
  steps:
49
57
  - name: Checkout
50
58
  uses: actions/checkout@v5
@@ -59,7 +67,7 @@ jobs:
59
67
 
60
68
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
61
69
  # We need to do this first to get appraisal installed.
62
- # NOTE: This does not use the main Gemfile at all.
70
+ # NOTE: This does not use the primary Gemfile at all.
63
71
  - name: Install Root Appraisal
64
72
  run: bundle
65
73
  - name: Appraisal for ${{ matrix.appraisal }}
@@ -56,7 +56,7 @@ jobs:
56
56
 
57
57
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
58
58
  # We need to do this first to get appraisal installed.
59
- # NOTE: This does not use the main Gemfile at all.
59
+ # NOTE: This does not use the primary Gemfile at all.
60
60
  - name: Install Root Appraisal
61
61
  run: bundle
62
62
  - name: Appraisal for ${{ matrix.appraisal }}
@@ -1,5 +1,8 @@
1
1
  name: MRI Non-EOL
2
2
 
3
+ permissions:
4
+ contents: read
5
+
3
6
  env:
4
7
  K_SOUP_COV_DO: false
5
8
 
@@ -16,9 +19,6 @@ on:
16
19
  # Allow manually triggering the workflow.
17
20
  workflow_dispatch:
18
21
 
19
- permissions:
20
- contents: read
21
-
22
22
  # Cancels all previous workflow runs for the same branch that have not yet completed.
23
23
  concurrency:
24
24
  # The concurrency group contains the workflow name and the branch name.
@@ -36,14 +36,6 @@ jobs:
36
36
  strategy:
37
37
  matrix:
38
38
  include:
39
- # Ruby 3.1
40
- - ruby: "ruby-3.1"
41
- appraisal: "ruby-3-1"
42
- exec_cmd: "rake test"
43
- gemfile: "Appraisal.root"
44
- rubygems: latest
45
- bundler: latest
46
-
47
39
  # Ruby 3.2
48
40
  - ruby: "ruby-3.2"
49
41
  appraisal: "ruby-3-2"
@@ -74,7 +66,7 @@ jobs:
74
66
 
75
67
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
76
68
  # We need to do this first to get appraisal installed.
77
- # NOTE: This does not use the main Gemfile at all.
69
+ # NOTE: This does not use the primary Gemfile at all.
78
70
  - name: Install Root Appraisal
79
71
  run: bundle
80
72
  - name: Appraisal for ${{ matrix.ruby }} ${{ matrix.appraisal }}
@@ -59,10 +59,35 @@ jobs:
59
59
 
60
60
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
61
61
  # We need to do this first to get appraisal installed.
62
- # NOTE: This does not use the main Gemfile at all.
62
+ # NOTE: This does not use the primary Gemfile at all.
63
63
  - name: Install Root Appraisal
64
64
  run: bundle
65
- - name: Appraisal for ${{ matrix.appraisal }}
65
+
66
+ - name: "[Attempt 1] Install Root Appraisal"
67
+ id: bundleAttempt1
68
+ run: bundle
69
+ # Continue to the next step on failure
70
+ continue-on-error: true
71
+
72
+ # Effectively an automatic retry of the previous step.
73
+ - name: "[Attempt 2] Install Root Appraisal"
74
+ id: bundleAttempt2
75
+ # If bundleAttempt1 failed, try again here; Otherwise skip.
76
+ if: steps.bundleAttempt1.outcome == 'failure'
77
+ run: bundle
78
+
79
+ - name: "[Attempt 1] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
80
+ id: bundleAppraisalAttempt1
81
+ run: bundle exec appraisal ${{ matrix.appraisal }} bundle
82
+ # Continue to the next step on failure
83
+ continue-on-error: true
84
+
85
+ # Effectively an automatic retry of the previous step.
86
+ - name: "[Attempt 2] Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal }}"
87
+ id: bundleAppraisalAttempt2
88
+ # If bundleAttempt1 failed, try again here; Otherwise skip.
89
+ if: steps.bundleAppraisalAttempt1.outcome == 'failure'
66
90
  run: bundle exec appraisal ${{ matrix.appraisal }} bundle
91
+
67
92
  - name: Tests for ${{ matrix.ruby }} via ${{ matrix.exec_cmd }}
68
93
  run: bundle exec appraisal ${{ matrix.appraisal }} bundle exec ${{ matrix.exec_cmd }}
@@ -75,7 +75,7 @@ jobs:
75
75
 
76
76
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
77
77
  # We need to do this first to get appraisal installed.
78
- # NOTE: This does not use the main Gemfile at all.
78
+ # NOTE: This does not use the primary Gemfile at all.
79
79
  - name: Install Root Appraisal
80
80
  run: bundle
81
81
  - name: Appraisal for ${{ matrix.ruby }}@${{ matrix.appraisal_name }}
@@ -1,5 +1,8 @@
1
1
  name: MRI 2.6 & 2.7 (EOL)
2
2
 
3
+ permissions:
4
+ contents: read
5
+
3
6
  env:
4
7
  K_SOUP_COV_DO: false
5
8
 
@@ -16,9 +19,6 @@ on:
16
19
  # Allow manually triggering the workflow.
17
20
  workflow_dispatch:
18
21
 
19
- permissions:
20
- contents: read
21
-
22
22
  # Cancels all previous workflow runs for the same branch that have not yet completed.
23
23
  concurrency:
24
24
  # The concurrency group contains the workflow name and the branch name.
@@ -67,7 +67,7 @@ jobs:
67
67
 
68
68
  # Raw `bundle` will use the BUNDLE_GEMFILE set to matrix.gemfile (i.e. Appraisal.root)
69
69
  # We need to do this first to get appraisal installed.
70
- # NOTE: This does not use the main Gemfile at all.
70
+ # NOTE: This does not use the primary Gemfile at all.
71
71
  - name: Install Root Appraisal
72
72
  run: bundle
73
73
  - name: Appraisal for ${{ matrix.appraisal }}
data/.rspec CHANGED
@@ -1,8 +1,9 @@
1
1
  --format progress
2
2
  --color
3
+ --order random
3
4
  --require spec_helper
4
5
  --warnings
5
6
  --format html
6
7
  --out results/test_results.html
7
8
  --format RspecJunitFormatter
8
- --out results/test_results.xml
9
+ --out results/test_results.xml
data/Appraisals CHANGED
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # HOW TO UPDATE APPRAISALS:
4
- # BUNDLE_GEMFILE=Appraisal.root.gemfile bundle
5
- # BUNDLE_GEMFILE=Appraisal.root.gemfile bundle exec appraisal update
6
- # bundle exec rake rubocop_gradual:autocorrect
3
+ # HOW TO UPDATE APPRAISALS (will run rubocop_gradual's autocorrect afterward):
4
+ # bin/rake appraisals:update
7
5
 
8
6
  # Lock/Unlock Deps Pattern
9
7
  #
@@ -113,14 +111,14 @@ appraise "ruby-3-3" do
113
111
  gem "stringio", "~> 3.0"
114
112
  end
115
113
 
116
- # Only run security audit on latest Ruby version
114
+ # Only run security audit on the latest version of Ruby
117
115
  appraise "audit" do
118
116
  gem "erb"
119
117
  gem "mutex_m", "~> 0.2"
120
118
  gem "stringio", "~> 3.0"
121
119
  end
122
120
 
123
- # Only run coverage on latest Ruby version
121
+ # Only run coverage on the latest version of Ruby
124
122
  appraise "coverage" do
125
123
  gem "erb"
126
124
  gem "mutex_m", "~> 0.2"
@@ -130,7 +128,7 @@ appraise "coverage" do
130
128
  eval_gemfile "modular/recording/r3/recording.gemfile"
131
129
  end
132
130
 
133
- # Only run linter on latest Ruby version (but, in support of oldest supported Ruby version)
131
+ # Only run linter on the latest version of Ruby (but, in support of oldest supported Ruby version)
134
132
  appraise "style" do
135
133
  gem "erb"
136
134
  gem "mutex_m", "~> 0.2"
data/Appraisals.example CHANGED
@@ -82,13 +82,13 @@ appraise "ruby-3-3" do
82
82
  gem "stringio", "~> 3.0"
83
83
  end
84
84
 
85
- # Only run security audit on latest Ruby version
85
+ # Only run security audit on the latest version of Ruby
86
86
  appraise "audit" do
87
87
  gem "mutex_m", "~> 0.2"
88
88
  gem "stringio", "~> 3.0"
89
89
  end
90
90
 
91
- # Only run coverage on latest Ruby version
91
+ # Only run coverage on the latest version of Ruby
92
92
  appraise "coverage" do
93
93
  gem "mutex_m", "~> 0.2"
94
94
  gem "stringio", "~> 3.0"
@@ -96,7 +96,7 @@ appraise "coverage" do
96
96
  eval_gemfile "modular/optional.gemfile"
97
97
  end
98
98
 
99
- # Only run linter on latest Ruby version (but, in support of oldest supported Ruby version)
99
+ # Only run linter on the latest version of Ruby (but, in support of oldest supported Ruby version)
100
100
  appraise "style" do
101
101
  gem "mutex_m", "~> 0.2"
102
102
  gem "stringio", "~> 3.0"
data/CHANGELOG.md CHANGED
@@ -24,6 +24,27 @@ Please file a bug if you notice a violation of semantic versioning.
24
24
  ### Fixed
25
25
  ### Security
26
26
 
27
+ ## [1.0.21] - 2025-08-30
28
+ - TAG: [v1.0.21][1.0.21t]
29
+ - COVERAGE: 97.82% -- 2375/2428 lines in 20 files
30
+ - BRANCH COVERAGE: 81.34% -- 972/1195 branches in 20 files
31
+ - 76.23% documented
32
+ ### Added
33
+ - FUNDING.md in support of a funding footer on release notes
34
+ - <!-- RELEASE-NOTES-FOOTER-START -->
35
+ - <!-- RELEASE-NOTES-FOOTER-END -->
36
+ - truffle workflow: Repeat attempts for bundle install and appraisal bundle before failure
37
+ - global token replacement during kettle:dev:install
38
+ - {KETTLE|DEV|GEM} => kettle-dev
39
+ - {RUBOCOP|LTS|CONSTRAINT} => dynamic
40
+ - {RUBOCOP|RUBY|GEM} => dynamic
41
+ - default to rubocop-ruby1_8 if no minimum ruby specified
42
+ - template supports local development of RuboCop-LTS suite of gems
43
+ - improved documentation
44
+ ### Changed
45
+ - dependabot: ignore rubocop-lts for updates
46
+ - template configures RSpec to run tests in random order
47
+
27
48
  ## [1.0.20] - 2025-08-29
28
49
  - TAG: [v1.0.20][1.0.20t]
29
50
  - COVERAGE: 14.01% -- 96/685 lines in 8 files
@@ -307,7 +328,7 @@ Please file a bug if you notice a violation of semantic versioning.
307
328
  - Selecting will run the selected workflow via `act`
308
329
  - This may move to its own gem in the future.
309
330
 
310
- [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.20...HEAD
331
+ [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.21...HEAD
311
332
  [1.0.0]: https://github.com/kettle-rb/kettle-dev/compare/a427c302df09cfe4253a7c8d400333f9a4c1a208...v1.0.0
312
333
  [1.0.0t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.0
313
334
  [1.0.1]: https://gitlab.com/kettle-rb/kettle-dev/-/compare/v1.0.0...v1.0.1
@@ -350,3 +371,5 @@ Please file a bug if you notice a violation of semantic versioning.
350
371
  [1.0.19t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.19
351
372
  [1.0.20]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.19...v1.0.20
352
373
  [1.0.20t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.20
374
+ [1.0.21]: https://github.com/kettle-rb/kettle-dev/compare/v1.0.20...v1.0.21
375
+ [1.0.21t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.0.21
data/CITATION.cff CHANGED
@@ -12,9 +12,9 @@ authors:
12
12
  orcid: 'https://orcid.org/0009-0008-8519-441X'
13
13
  identifiers:
14
14
  - type: url
15
- value: 'https://github.com/kettle-rb/kettle-dev/'
15
+ value: 'https://github.com/kettle-rb/kettle-dev'
16
16
  description: kettle-dev
17
- repository-code: 'https://github.com/kettle-rb/kettle-dev/'
17
+ repository-code: 'https://github.com/kettle-rb/kettle-dev'
18
18
  abstract: >-
19
19
  kettle-dev
20
20
  license: See license file
data/CONTRIBUTING.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Contributing
2
2
 
3
- Bug reports and pull requests are welcome on GitHub, CodeBerg, or [GitLab][🚎src-main].
3
+ Bug reports and pull requests are welcome on [CodeBerg][📜src-cb], [GitLab][📜src-gl], or [GitHub][📜src-gh].
4
4
  This project should be a safe, welcoming space for collaboration, so contributors agree to adhere to
5
5
  the [code of conduct][🤝conduct].
6
6
 
7
7
  To submit a patch, please fork the project, create a patch with tests, and send a pull request.
8
8
 
9
- Remember to [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog].
9
+ Remember to [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] if you make changes.
10
10
 
11
11
  ## Help out!
12
12
 
@@ -60,14 +60,14 @@ For a quick starting point, this repository’s `.envrc` shows sane defaults, an
60
60
 
61
61
  ## Appraisals
62
62
 
63
- From time to time the Appraisal2 gemfiles in `gemfiles/` will need to be updated.
63
+ From time to time the [appraisal2][🚎appraisal2] gemfiles in `gemfiles/` will need to be updated.
64
64
  They are created and updated with the commands:
65
65
 
66
66
  ```console
67
67
  bin/rake appraisal:update
68
68
  ```
69
69
 
70
- When adding an appraisal to CI check the [runner tool cache][🏃‍♂️runner-tool-cache] to see which runner to use.
70
+ When adding an appraisal to CI, check the [runner tool cache][🏃‍♂️runner-tool-cache] to see which runner to use.
71
71
 
72
72
  ## The Reek List
73
73
 
@@ -134,13 +134,13 @@ Also see GitLab Contributors: [https://gitlab.com/kettle-rb/kettle-dev/-/graphs/
134
134
 
135
135
  ### One-time, Per-maintainer, Setup
136
136
 
137
- **IMPORTANT**: If you want to sign the build you create,
138
- your public key for signing gems will need to be picked up by the line in the
137
+ **IMPORTANT**: To sign a build,
138
+ a public key for signing gems will need to be picked up by the line in the
139
139
  `gemspec` defining the `spec.cert_chain` (check the relevant ENV variables there).
140
- All releases to RubyGems.org will be signed.
140
+ All releases to RubyGems.org are signed releases.
141
141
  See: [RubyGems Security Guide][🔒️rubygems-security-guide]
142
142
 
143
- NOTE: To build without signing the gem you must set `SKIP_GEM_SIGNING` to some value in your environment.
143
+ NOTE: To build without signing the gem set `SKIP_GEM_SIGNING` to any value in the environment.
144
144
 
145
145
  ### To release a new version:
146
146
 
@@ -175,7 +175,9 @@ Run `bundle exec kettle-release`.
175
175
  13. Run `bundle exec rake release` which will create a git tag for the version,
176
176
  push git commits and tags, and push the `.gem` file to [rubygems.org][💎rubygems]
177
177
 
178
- [🚎src-main]: https://gitlab.com/kettle-rb/kettle-dev
178
+ [📜src-gl]: https://gitlab.com/kettle-rb/kettle-dev/
179
+ [📜src-cb]: https://codeberg.org/kettle-rb/kettle-dev
180
+ [📜src-gh]: https://github.com/kettle-rb/kettle-dev
179
181
  [🧪build]: https://github.com/kettle-rb/kettle-dev/actions
180
182
  [🤝conduct]: https://gitlab.com/kettle-rb/kettle-dev/-/blob/main/CODE_OF_CONDUCT.md
181
183
  [🖐contrib-rocks]: https://contrib.rocks
@@ -191,4 +193,5 @@ Run `bundle exec kettle-release`.
191
193
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-FFDD67.svg?style=flat
192
194
  [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
193
195
  [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
196
+ [🚎appraisal2]: https://github.com/appraisal-rb/appraisal2
194
197
  [🏃‍♂️runner-tool-cache]: https://github.com/ruby/ruby-builder/releases/tag/toolcache
data/README.md CHANGED
@@ -50,19 +50,19 @@ and concordant releases of JRuby, and TruffleRuby.
50
50
 
51
51
  ## 💡 Info you can shake a stick at
52
52
 
53
- | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
54
- |-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
55
- | Works with JRuby | ![JRuby 9.1 Compat][💎jruby-9.1i] ![JRuby 9.2 Compat][💎jruby-9.2i] ![JRuby 9.3 Compat][💎jruby-9.3i] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
56
- | Works with Truffle Ruby | ![Truffle Ruby 22.3 Compat][💎truby-22.3i] ![Truffle Ruby 23.0 Compat][💎truby-23.0i] <br/> [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] |
57
- | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
58
- | Works with MRI Ruby 2 | [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎1-an-wf] [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎1-an-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
59
- | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
60
- | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![Wiki][📜wiki-img]][📜wiki] |
61
- | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
62
- | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
63
- | Support | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
64
- | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
65
- | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
53
+ | Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
54
+ |-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
55
+ | Works with JRuby | ![JRuby 9.1 Compat][💎jruby-9.1i] ![JRuby 9.2 Compat][💎jruby-9.2i] ![JRuby 9.3 Compat][💎jruby-9.3i] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎10-j-wf] [![JRuby 10.0 Compat][💎jruby-c-i]][🚎11-c-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf] |
56
+ | Works with Truffle Ruby | ![Truffle Ruby 22.3 Compat][💎truby-22.3i] ![Truffle Ruby 23.0 Compat][💎truby-23.0i] <br/> [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎9-t-wf] [![Truffle Ruby 24.1 Compat][💎truby-c-i]][🚎11-c-wf] |
57
+ | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎4-lg-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎6-s-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎6-s-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎6-s-wf] [![Ruby 3.4 Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf] |
58
+ | Works with MRI Ruby 2 | [![Ruby 2.3 Compat][💎ruby-2.3i]][🚎1-an-wf] [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎1-an-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎1-an-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎7-us-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎7-us-wf] |
59
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
60
+ | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![Wiki][📜wiki-img]][📜wiki] |
61
+ | Compliance | [![License: MIT][📄license-img]][📄license-ref] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
62
+ | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
63
+ | Support | [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
64
+ | Maintainer 🎖️ | [![Follow Me on LinkedIn][💖🖇linkedin-img]][💖🖇linkedin] [![Follow Me on Ruby.Social][💖🐘ruby-mast-img]][💖🐘ruby-mast] [![Follow Me on Bluesky][💖🦋bluesky-img]][💖🦋bluesky] [![Contact Maintainer][🚂maint-contact-img]][🚂maint-contact] [![My technical writing][💖💁🏼‍♂️devto-img]][💖💁🏼‍♂️devto] |
65
+ | `...` 💖 | [![Find Me on WellFound:][💖✌️wellfound-img]][💖✌️wellfound] [![Find Me on CrunchBase][💖💲crunchbase-img]][💖💲crunchbase] [![My LinkTree][💖🌳linktree-img]][💖🌳linktree] [![More About Me][💖💁🏼‍♂️aboutme-img]][💖💁🏼‍♂️aboutme] [🧊][💖🧊berg] [🐙][💖🐙hub] [🛖][💖🛖hut] [🧪][💖🧪lab] |
66
66
 
67
67
  ### Compatibility
68
68
 
@@ -77,12 +77,12 @@ Compatible with Ruby 2.3+, and concordant releases of JRuby, and TruffleRuby.
77
77
  <details>
78
78
  <summary>Find this repo on other forges (Coming soon!)</summary>
79
79
 
80
- | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
81
- |-------------------------------------------------|-------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
82
- | 🧪 [kettle-rb/kettle-dev on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
83
- | 🧊 [kettle-rb/kettle-dev on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
84
- | 🐙 [kettle-rb/kettle-dev on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | ➖ | 💯 Full Matrix | [💚][gh-discussions] |
85
- | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
80
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
81
+ |-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
82
+ | 🧪 [kettle-rb/kettle-dev on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
83
+ | 🧊 [kettle-rb/kettle-dev on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
84
+ | 🐙 [kettle-rb/kettle-dev on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | ➖ | 💯 Full Matrix | [💚][gh-discussions] |
85
+ | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
86
86
 
87
87
  </details>
88
88
 
@@ -101,7 +101,7 @@ Compatible with Ruby 2.3+, and concordant releases of JRuby, and TruffleRuby.
101
101
 
102
102
  Alternatively:
103
103
 
104
- - [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
104
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
105
105
  - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
106
106
  - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
107
107
 
@@ -542,35 +542,35 @@ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright
542
542
 
543
543
  ## 🤑 A request for help
544
544
 
545
- Maintainers have teeth, and need to pay their dentists.
546
- After getting laid off in an RIF in March, and filled with many dozens of rejections,
547
- I'm now spending ~80 hours a week building open source tools.
545
+ Maintainers have teeth and need to pay their dentists.
546
+ After getting laid off in an RIF in March and filled with many dozens of rejections,
547
+ I'm now spending ~60+ hours a week building open source tools.
548
548
  I'm hoping to be able to pay for my kids' health insurance this month,
549
549
  so if you value the work I am doing, I need your support.
550
550
  Please consider sponsoring me or the project.
551
551
 
552
- [![Sponsor kettle-rb/kettle-dev on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay-img] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal-img]
552
+ To join the community or get help 👇️ Join the Discord.
553
553
 
554
- To say "thanks for maintaining such a great tool" 👇️ Join the Discord or ☝️ send money.
554
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
555
555
 
556
- To join the community or get help 👇️ Join the Discord.
556
+ To say "thanks for maintaining such a great tool" ☝️ Join the Discord or 👇️ send money.
557
557
 
558
- [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
558
+ [![Sponsor kettle-rb/kettle-dev on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay-img] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal-img]
559
559
 
560
560
  ### Please give the project a star ⭐ ♥.
561
561
 
562
562
  Thanks for RTFM. ☺️
563
563
 
564
- [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611
564
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
565
565
  [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
566
566
  [⛳liberapay]: https://liberapay.com/pboling/donate
567
567
  [🖇osc-all-img]: https://img.shields.io/opencollective/all/kettle-rb
568
568
  [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/kettle-rb
569
569
  [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/kettle-rb
570
570
  [🖇osc-backers]: https://opencollective.com/kettle-rb#backer
571
- [🖇osc-backers-i]: https://opencollective.com/kettle-rb/backers/badge.svg
571
+ [🖇osc-backers-i]: https://opencollective.com/kettle-rb/backers/badge.svg?style=flat
572
572
  [🖇osc-sponsors]: https://opencollective.com/kettle-rb#sponsor
573
- [🖇osc-sponsors-i]: https://opencollective.com/kettle-rb/sponsors/badge.svg
573
+ [🖇osc-sponsors-i]: https://opencollective.com/kettle-rb/sponsors/badge.svg?style=flat
574
574
  [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/kettle-rb?style=for-the-badge
575
575
  [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/kettle-rb?style=for-the-badge
576
576
  [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/kettle-rb?style=for-the-badge
@@ -578,11 +578,11 @@ Thanks for RTFM. ☺️
578
578
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
579
579
  [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
580
580
  [🖇sponsor]: https://github.com/sponsors/pboling
581
- [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg
581
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
582
582
  [🖇polar]: https://polar.sh/pboling
583
- [🖇kofi-img]: https://img.shields.io/badge/ko--fi-✓-a51611.svg
583
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-✓-a51611.svg?style=flat
584
584
  [🖇kofi]: https://ko-fi.com/O5O86SNP4
585
- [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg
585
+ [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
586
586
  [🖇patreon]: https://patreon.com/galtzo
587
587
  [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-a51611.svg?style=flat
588
588
  [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
@@ -593,7 +593,7 @@ Thanks for RTFM. ☺️
593
593
  [🖇floss-funding.dev]: https://floss-funding.dev
594
594
  [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
595
595
  [✉️discord-invite]: https://discord.gg/3qme4XHNKN
596
- [✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
596
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
597
597
 
598
598
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
599
599
  [⛳️gem-namespace]: https://github.com/kettle-rb/kettle-dev
@@ -735,7 +735,7 @@ Thanks for RTFM. ☺️
735
735
  [📌gitmoji]:https://gitmoji.dev
736
736
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
737
737
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
738
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.685-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
738
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-2.428-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
739
739
  [🔐security]: SECURITY.md
740
740
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
741
741
  [📄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
@@ -52,12 +52,12 @@ Compatible with Ruby 2.3+, and concordant releases of JRuby, and TruffleRuby.
52
52
  <details>
53
53
  <summary>Find this repo on other forges (Coming soon!)</summary>
54
54
 
55
- | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
56
- |-------------------------------------------------|-------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
57
- | 🧪 [kettle-rb/kettle-dev on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
58
- | 🧊 [kettle-rb/kettle-dev on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
59
- | 🐙 [kettle-rb/kettle-dev on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | ➖ | 💯 Full Matrix | [💚][gh-discussions] |
60
- | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
55
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
56
+ |-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
57
+ | 🧪 [kettle-rb/kettle-dev on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜wiki] | 🏀 Tiny Matrix | ➖ |
58
+ | 🧊 [kettle-rb/kettle-dev on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
59
+ | 🐙 [kettle-rb/kettle-dev on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | ➖ | 💯 Full Matrix | [💚][gh-discussions] |
60
+ | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
61
61
 
62
62
  </details>
63
63
 
@@ -76,7 +76,7 @@ Compatible with Ruby 2.3+, and concordant releases of JRuby, and TruffleRuby.
76
76
 
77
77
  Alternatively:
78
78
 
79
- - [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
79
+ - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
80
80
  - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
81
81
  - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
82
82
 
@@ -303,35 +303,35 @@ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright
303
303
 
304
304
  ## 🤑 A request for help
305
305
 
306
- Maintainers have teeth, and need to pay their dentists.
307
- After getting laid off in an RIF in March, and filled with many dozens of rejections,
308
- I'm now spending ~80 hours a week building open source tools.
306
+ Maintainers have teeth and need to pay their dentists.
307
+ After getting laid off in an RIF in March and filled with many dozens of rejections,
308
+ I'm now spending ~60+ hours a week building open source tools.
309
309
  I'm hoping to be able to pay for my kids' health insurance this month,
310
310
  so if you value the work I am doing, I need your support.
311
311
  Please consider sponsoring me or the project.
312
312
 
313
- [![Sponsor kettle-rb/kettle-dev on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay-img] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal-img]
313
+ To join the community or get help 👇️ Join the Discord.
314
314
 
315
- To say "thanks for maintaining such a great tool" 👇️ Join the Discord or ☝️ send money.
315
+ [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
316
316
 
317
- To join the community or get help 👇️ Join the Discord.
317
+ To say "thanks for maintaining such a great tool" ☝️ Join the Discord or 👇️ send money.
318
318
 
319
- [![Live Chat on Discord][✉️discord-invite-img]][✉️discord-invite]
319
+ [![Sponsor kettle-rb/kettle-dev on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay-img] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal-img]
320
320
 
321
321
  ### Please give the project a star ⭐ ♥.
322
322
 
323
323
  Thanks for RTFM. ☺️
324
324
 
325
- [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611
325
+ [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
326
326
  [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
327
327
  [⛳liberapay]: https://liberapay.com/pboling/donate
328
328
  [🖇osc-all-img]: https://img.shields.io/opencollective/all/kettle-rb
329
329
  [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/kettle-rb
330
330
  [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/kettle-rb
331
331
  [🖇osc-backers]: https://opencollective.com/kettle-rb#backer
332
- [🖇osc-backers-i]: https://opencollective.com/kettle-rb/backers/badge.svg
332
+ [🖇osc-backers-i]: https://opencollective.com/kettle-rb/backers/badge.svg?style=flat
333
333
  [🖇osc-sponsors]: https://opencollective.com/kettle-rb#sponsor
334
- [🖇osc-sponsors-i]: https://opencollective.com/kettle-rb/sponsors/badge.svg
334
+ [🖇osc-sponsors-i]: https://opencollective.com/kettle-rb/sponsors/badge.svg?style=flat
335
335
  [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/kettle-rb?style=for-the-badge
336
336
  [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/kettle-rb?style=for-the-badge
337
337
  [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/kettle-rb?style=for-the-badge
@@ -339,11 +339,11 @@ Thanks for RTFM. ☺️
339
339
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
340
340
  [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
341
341
  [🖇sponsor]: https://github.com/sponsors/pboling
342
- [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg
342
+ [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
343
343
  [🖇polar]: https://polar.sh/pboling
344
- [🖇kofi-img]: https://img.shields.io/badge/ko--fi-✓-a51611.svg
344
+ [🖇kofi-img]: https://img.shields.io/badge/ko--fi-✓-a51611.svg?style=flat
345
345
  [🖇kofi]: https://ko-fi.com/O5O86SNP4
346
- [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg
346
+ [🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
347
347
  [🖇patreon]: https://patreon.com/galtzo
348
348
  [🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-✓-a51611.svg?style=flat
349
349
  [🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
@@ -354,7 +354,7 @@ Thanks for RTFM. ☺️
354
354
  [🖇floss-funding.dev]: https://floss-funding.dev
355
355
  [🖇floss-funding-gem]: https://github.com/galtzo-floss/floss_funding
356
356
  [✉️discord-invite]: https://discord.gg/3qme4XHNKN
357
- [✉️discord-invite-img]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
357
+ [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge
358
358
 
359
359
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
360
360
  [⛳️gem-namespace]: https://github.com/kettle-rb/kettle-dev
@@ -501,7 +501,7 @@ Thanks for RTFM. ☺️
501
501
  [📌gitmoji]:https://gitmoji.dev
502
502
  [📌gitmoji-img]:https://img.shields.io/badge/gitmoji_commits-%20😜%20😍-34495e.svg?style=flat-square
503
503
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
504
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.685-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
504
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-2.428-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
505
505
  [🔐security]: SECURITY.md
506
506
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
507
507
  [📄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.0.20 - 2025-08-29
3
+ # kettle-dev Rakefile v1.0.21 - 2025-08-30
4
4
  # Ruby 2.3 (Safe Navigation) or higher required
5
5
  #
6
6
  # MIT License (see License.txt)
@@ -5,12 +5,21 @@
5
5
 
6
6
  gem "reek", "~> 6.5"
7
7
  # gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
8
- gem "rubocop-lts", "~> 10.1", ">= 10.1.1" # Linting that targets compatibility with each specific minor version of Ruby
9
- gem "rubocop-ruby2_3", "~> 2.0", ">= 2.0.5"
10
8
  gem "rubocop-packaging", "~> 0.6", ">= 0.6.0"
11
- gem "rubocop-rspec", "~> 3.6"
12
9
  gem "standard", ">= 1.50"
13
10
  gem "rubocop-on-rbs", "~> 1.8" # ruby >= 3.1.0
14
11
 
15
12
  # Std Lib extractions
16
13
  gem "benchmark", "~> 0.4", ">= 0.4.1" # Removed from Std Lib in Ruby 3.5
14
+
15
+ if ENV.fetch("RUBOCOP_LTS_LOCAL", "false").casecmp("true").zero?
16
+ home = ENV["HOME"]
17
+ gem "rubocop-lts", path: "#{home}/src/rubocop-lts/rubocop-lts"
18
+ gem "rubocop-lts-rspec", path: "#{home}/src/rubocop-lts/rubocop-lts-rspec"
19
+ gem "rubocop-ruby2_3", path: "#{home}/src/rubocop-lts/rubocop-ruby2_3"
20
+ gem "standard-rubocop-lts", path: "#{home}/src/rubocop-lts/standard-rubocop-lts"
21
+ else
22
+ gem "rubocop-lts", "~> 10.0"
23
+ gem "rubocop-ruby2_3", "~> 2.0"
24
+ gem "rubocop-rspec", "~> 3.6"
25
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # We run rubocop on the latest version of Ruby,
4
+ # but in support of the oldest supported version of Ruby
5
+
6
+ gem "reek", "~> 6.5"
7
+ # gem "rubocop", "~> 1.73", ">= 1.73.2" # constrained by standard
8
+ gem "rubocop-packaging", "~> 0.6", ">= 0.6.0"
9
+ gem "standard", ">= 1.50"
10
+ gem "rubocop-on-rbs", "~> 1.8" # ruby >= 3.1.0
11
+
12
+ # Std Lib extractions
13
+ gem "benchmark", "~> 0.4", ">= 0.4.1" # Removed from Std Lib in Ruby 3.5
14
+
15
+ if ENV.fetch("RUBOCOP_LTS_LOCAL", "false").casecmp("true").zero?
16
+ home = ENV["HOME"]
17
+ gem "rubocop-lts", path: "#{home}/src/rubocop-lts/rubocop-lts"
18
+ gem "rubocop-lts-rspec", path: "#{home}/src/rubocop-lts/rubocop-lts-rspec"
19
+ gem "{RUBOCOP|RUBY|GEM}", path: "#{home}/src/rubocop-lts/{RUBOCOP|RUBY|GEM}"
20
+ gem "standard-rubocop-lts", path: "#{home}/src/rubocop-lts/standard-rubocop-lts"
21
+ else
22
+ gem "rubocop-lts", "{RUBOCOP|LTS|CONSTRAINT}"
23
+ gem "{RUBOCOP|RUBY|GEM}"
24
+ gem "rubocop-rspec", "~> 3.6"
25
+ end
@@ -115,5 +115,5 @@ Gem::Specification.new do |spec|
115
115
  # and preferably a modular one (see gemfiles/modular/*.gemfile).
116
116
 
117
117
  # Dev, Test, & Release Tasks
118
- spec.add_development_dependency("kettle-dev", "~> 1.0.17") # ruby >= 2.3.0
118
+ spec.add_development_dependency("{KETTLE|DEV|GEM}", "~> 1.0.17") # ruby >= 2.3.0
119
119
  end
@@ -945,6 +945,9 @@ module Kettle
945
945
  body << "\n\n"
946
946
  body << compare_ref if compare_ref
947
947
  body << tag_ref if tag_ref
948
+ # Append funding footer from FUNDING.md if present
949
+ footer = extract_release_notes_footer
950
+ body << "\n" << footer if footer && !footer.strip.empty?
948
951
 
949
952
  tag = "v#{version}"
950
953
  puts "Creating GitHub release #{owner}/#{repo} #{tag}..."
@@ -985,6 +988,24 @@ module Kettle
985
988
  [nil, nil, nil]
986
989
  end
987
990
 
991
+ def extract_release_notes_footer
992
+ path = File.join(@root, "FUNDING.md")
993
+ return unless File.file?(path)
994
+ content = File.read(path)
995
+ start_tag = "<!-- RELEASE-NOTES-FOOTER-START -->"
996
+ end_tag = "<!-- RELEASE-NOTES-FOOTER-END -->"
997
+ s = content.index(start_tag)
998
+ e = content.index(end_tag)
999
+ return unless s && e && e > s
1000
+ # Extract between tags, excluding the tags themselves
1001
+ block = content[(s + start_tag.length)...e]
1002
+ # Normalize: trim trailing whitespace but keep internal formatting
1003
+ block = block.lstrip # drop leading newline/space
1004
+ block.rstrip
1005
+ rescue StandardError
1006
+ nil
1007
+ end
1008
+
988
1009
  # POST to GitHub Releases API
989
1010
  # Returns [ok(Boolean), message(String)]
990
1011
  def github_create_release(owner:, repo:, token:, tag:, title:, body:)
@@ -103,7 +103,7 @@ module Kettle
103
103
  helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true) do |content|
104
104
  # Adjust rubocop-lts constraint based on min_ruby
105
105
  version_map = [
106
- [Gem::Version.new("1.8"), "~> 0.0"],
106
+ [Gem::Version.new("1.8"), "~> 0.1"],
107
107
  [Gem::Version.new("1.9"), "~> 2.0"],
108
108
  [Gem::Version.new("2.0"), "~> 4.0"],
109
109
  [Gem::Version.new("2.1"), "~> 6.0"],
@@ -120,26 +120,35 @@ module Kettle
120
120
  [Gem::Version.new("3.4"), "~> 28.0"],
121
121
  ]
122
122
  new_constraint = nil
123
+ rubocop_ruby_gem_version = nil
124
+ ruby1_8 = version_map.first
123
125
  begin
124
126
  if min_ruby && !min_ruby.empty?
125
127
  v = Gem::Version.new(min_ruby.split(".")[0, 2].join("."))
126
128
  version_map.reverse_each do |min, req|
127
129
  if v >= min
128
130
  new_constraint = req
131
+ rubocop_ruby_gem_version = min.segments.join("_")
129
132
  break
130
133
  end
131
134
  end
132
135
  end
136
+ if !new_constraint || !rubocop_ruby_gem_version
137
+ # A gem with no declared minimum ruby is effectively >= 1.8.7
138
+ new_constraint = ruby1_8[1]
139
+ rubocop_ruby_gem_version = ruby1_8[0].segments.join("_")
140
+ end
133
141
  rescue StandardError
134
- # leave nil
142
+ # ignore, use default
143
+ ensure
144
+ new_constraint ||= ruby1_8[1]
145
+ rubocop_ruby_gem_version ||= ruby1_8[0].segments.join("_")
135
146
  end
136
- if new_constraint
137
- content.gsub(/^gem\s+"rubocop-lts",\s*"[^"]+".*$/) do |_line|
138
- # Do not preserve whatever tail was there before
139
- %(gem "rubocop-lts", "#{new_constraint}")
140
- end
141
- else
142
- content
147
+ if new_constraint && rubocop_ruby_gem_version
148
+ token = "{RUBOCOP|LTS|CONSTRAINT}"
149
+ content.gsub!(token, new_constraint) if content.include?(token)
150
+ token = "{RUBOCOP|RUBY|GEM}"
151
+ content.gsub!(token, "rubocop-ruby#{rubocop_ruby_gem_version}") if content.include?(token)
143
152
  end
144
153
  end
145
154
  else
@@ -228,6 +237,7 @@ module Kettle
228
237
  CITATION.cff
229
238
  CODE_OF_CONDUCT.md
230
239
  CONTRIBUTING.md
240
+ FUNDING.md
231
241
  Gemfile
232
242
  Rakefile
233
243
  README.md
@@ -425,11 +435,11 @@ module Kettle
425
435
 
426
436
  c
427
437
  end
428
- elsif ["CHANGELOG.md", "CITATION.cff", "CONTRIBUTING.md", ".opencollective.yml", ".junie/guidelines.md"].include?(rel)
438
+ elsif ["CHANGELOG.md", "CITATION.cff", "CONTRIBUTING.md", ".opencollective.yml", "FUNDING.md", ".junie/guidelines.md"].include?(rel)
429
439
  helpers.copy_file_with_prompt(src, dest, allow_create: true, allow_replace: true) do |content|
430
440
  c = helpers.apply_common_replacements(
431
441
  content,
432
- org: ((File.basename(rel) == ".opencollective.yml") ? funding_org : forge_org),
442
+ org: ((File.basename(rel) == ".opencollective.yml" || File.basename(rel) == "FUNDING.md") ? funding_org : forge_org),
433
443
  gem_name: gem_name,
434
444
  namespace: namespace,
435
445
  namespace_shield: namespace_shield,
@@ -190,6 +190,13 @@ module Kettle
190
190
 
191
191
  content = File.read(src_path)
192
192
  content = yield(content) if block_given?
193
+ # Final global replacements that must occur AFTER normal replacements
194
+ begin
195
+ token = "{KETTLE|DEV|GEM}"
196
+ content = content.gsub(token, "kettle-dev") if content.include?(token)
197
+ rescue StandardError
198
+ # If replacement fails unexpectedly, proceed with content as-is
199
+ end
193
200
  write_file(dest_path, content)
194
201
  record_template_result(dest_path, dest_exists ? :replace : :create)
195
202
  puts "Wrote #{dest_path}"
@@ -6,7 +6,7 @@ module Kettle
6
6
  module Version
7
7
  # The gem version.
8
8
  # @return [String]
9
- VERSION = "1.0.20"
9
+ VERSION = "1.0.21"
10
10
  end
11
11
  end
12
12
  end
@@ -14,6 +14,7 @@ module Kettle
14
14
  def collapse_years: (::_ToA[Integer] enum) -> String
15
15
  def reformat_copyright_year_lines!: (String path) -> void
16
16
  def inject_years_into_file!: (String path, ::Set[Integer] years_set) -> void
17
+ def extract_release_notes_footer: () -> String?
17
18
  end
18
19
  end
19
20
  end
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.0.20
4
+ version: 1.0.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -290,6 +290,7 @@ files:
290
290
  - gemfiles/modular/optional.gemfile
291
291
  - gemfiles/modular/optional.gemfile.example
292
292
  - gemfiles/modular/style.gemfile
293
+ - gemfiles/modular/style.gemfile.example
293
294
  - kettle-dev.gemspec.example
294
295
  - lib/kettle-dev.rb
295
296
  - lib/kettle/dev.rb
@@ -344,10 +345,10 @@ licenses:
344
345
  - MIT
345
346
  metadata:
346
347
  homepage_uri: https://kettle-dev.galtzo.com/
347
- source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.0.20
348
- changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.0.20/CHANGELOG.md
348
+ source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v1.0.21
349
+ changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v1.0.21/CHANGELOG.md
349
350
  bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
350
- documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.0.20
351
+ documentation_uri: https://www.rubydoc.info/gems/kettle-dev/1.0.21
351
352
  funding_uri: https://github.com/sponsors/pboling
352
353
  wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
353
354
  news_uri: https://www.railsbling.com/tags/kettle-dev
metadata.gz.sig CHANGED
Binary file