kettle-drift 1.0.1 → 1.0.3

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: 66e6c1d163f35fa238c1b39db2f70408d852a138882b743b4406b9d42e312ae8
4
- data.tar.gz: b966b2faa94714d091e640002b8acb610dfaca2e6603d947ca2d594a8f04acc4
3
+ metadata.gz: 171f3d96366f6eb057944d6fa940079eac933869b234d5e1bb8bec6c1b09fac9
4
+ data.tar.gz: 65388c91364e6ef13b69a0b2d6bc2c566e5ff2eb99621c20a5146008d3151396
5
5
  SHA512:
6
- metadata.gz: 11fdc0183e706bc250d45b09bf8741d7ed342a5d12dc57e5fb14c02e855c8a8ab567dff6a2fc69531c422fdc9d0e75dfd3af16a291b774caa6d3bf681794e849
7
- data.tar.gz: b494c1ccdbb84fc6e38b888d48e362703ad6a426c849cc83ad0ff4990b0f3004b46331550fcefa399d27754c219a5ccbc859906526f64b83084d7ef497be9d53
6
+ metadata.gz: 88cc5600a997ba2cebe1e4738082cf1189e9e04f9bca89d679e34b87a64d6835d7a8d84430a66cfb1005b0657e6972b9bbc90233f5a959ef8c4aa4980d1d7e05
7
+ data.tar.gz: 2cb819c00f00dac811e965580f38e5edee1902ec850b517c153d410a0bce23b5ed42d8e165df0d7abea882567a2d85e2150ff0cfd72e1ec76ef84c6bcac06846
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,31 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [1.0.3] - 2026-06-10
34
+
35
+ - TAG: [v1.0.3][1.0.3t]
36
+ - COVERAGE: 83.89% -- 427/509 lines in 13 files
37
+ - BRANCH COVERAGE: 65.84% -- 133/202 branches in 13 files
38
+ - 33.01% documented
39
+
40
+ ### Fixed
41
+
42
+ - Updated generated project metadata links to use the migrated `kettle-dev`
43
+ GitHub organization.
44
+ - Restored `docs/CNAME` so the generated documentation site keeps its custom domain.
45
+
46
+ ## [1.0.2] - 2026-06-03
47
+
48
+ - TAG: [v1.0.2][1.0.2t]
49
+ - COVERAGE: 83.98% -- 430/512 lines in 13 files
50
+ - BRANCH COVERAGE: 65.84% -- 133/202 branches in 13 files
51
+ - 33.01% documented
52
+
53
+ ### Fixed
54
+
55
+ - Suppressed warning/report output when current duplicate drift exactly matches
56
+ the checked-in lockfile baseline.
57
+
33
58
  ## [1.0.1] - 2026-05-28
34
59
 
35
60
  - TAG: [v1.0.1][1.0.1t]
@@ -55,7 +80,11 @@ Please file a bug if you notice a violation of semantic versioning.
55
80
 
56
81
  - Initial release
57
82
 
58
- [Unreleased]: https://github.com/kettle-rb/kettle-drift/compare/v1.0.1...HEAD
83
+ [Unreleased]: https://github.com/kettle-dev/kettle-drift/compare/v1.0.3...HEAD
84
+ [1.0.3]: https://github.com/kettle-dev/kettle-drift/compare/v1.0.2...v1.0.3
85
+ [1.0.3t]: https://github.com/kettle-dev/kettle-drift/releases/tag/v1.0.3
86
+ [1.0.2]: https://github.com/kettle-rb/kettle-drift/compare/v1.0.1...v1.0.2
87
+ [1.0.2t]: https://github.com/kettle-rb/kettle-drift/releases/tag/v1.0.2
59
88
  [1.0.1]: https://github.com/kettle-rb/kettle-drift/compare/v1.0.0...v1.0.1
60
89
  [1.0.1t]: https://github.com/kettle-rb/kettle-drift/releases/tag/v1.0.1
61
90
  [1.0.0]: https://github.com/kettle-rb/kettle-drift/compare/bd038cd14dc083203b58f8fee359e63d6feeaaca...v1.0.0
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-drift'
15
+ value: 'https://github.com/kettle-dev/kettle-drift'
16
16
  description: "kettle-drift"
17
- repository-code: 'https://github.com/kettle-rb/kettle-drift'
17
+ repository-code: 'https://github.com/kettle-dev/kettle-drift'
18
18
  abstract: >-
19
19
  kettle-drift
20
20
  license: See license file
data/CONTRIBUTING.md CHANGED
@@ -102,13 +102,29 @@ Git hooks and commit message helpers (exe/kettle-commit-msg)
102
102
  - GIT_HOOK_FOOTER_SENTINEL: Required when footer append is enabled — a unique first-line sentinel to prevent duplicates
103
103
  - GIT_HOOK_FOOTER_APPEND_DEBUG: Extra debug output in the footer template (true/false)
104
104
 
105
+ Git diff driver setup
106
+ - Local setup writes repository `.gitattributes` entries and local Git `diff.smorg-*` command config so this checkout uses StructuredMerge semantic diffs.
107
+ - Global setup registers `diff.smorg-*` commands once in the user Git config; use it when you work across several StructuredMerge-enabled repositories.
108
+ - Include-file setup writes `.git/smorg/config` and includes it from local Git config, keeping command registrations out of the repository files.
109
+ - Git hosting forges generally ignore external diff drivers, so pull request views may still show raw textual diffs even when local `git diff` uses semantic drivers.
110
+
111
+ ```console
112
+ K_JEM_TEMPLATING=true bundle exec kettle-jem install
113
+ ```
114
+
115
+ Troubleshooting Git diffs
116
+ - Use `git diff --no-ext-diff` to compare against Git's built-in diff output.
117
+ - Use `git diff --no-textconv` when a textconv projection obscures the raw file bytes you need to inspect.
118
+ - If Git reports a missing `smorg-*` executable, rerun `bundle install` and the setup command above, then check `git config --local --get-regexp '^diff\.smorg-'`.
119
+ - To remove managed local entries, run `K_JEM_TEMPLATING=true bundle exec kettle-jem install --undo`; remove global command registrations with `git config --global --unset-all diff.smorg-ruby.command`.
120
+
105
121
  For a quick starting point, this repository’s `mise.toml` defines the shared defaults, and `.env.local` can override them locally. Copy `.env.local.example` to `.env.local`, use `KEY=value` lines, and either activate `mise` in your shell or run commands through `mise exec -C /path/to/project -- ...`.
106
122
 
107
123
  ## Appraisals
108
124
 
109
125
  From time to time the [appraisal2][🚎appraisal2] gemfiles in `gemfiles/` will need to be updated.
110
126
  Generated appraisal and CI workflow floors are controlled by `ruby.test_minimum`
111
- in `.kettle-jem.yml`; this project was templated with `ruby.test_minimum: 3.2.0`.
127
+ in `.structuredmerge/kettle-jem.yml`; this project was templated with `ruby.test_minimum: 3.2.0`.
112
128
  That value describes the lowest Ruby version expected to run the test/development
113
129
  toolchain, and it may be higher than the gemspec runtime floor.
114
130
 
@@ -182,7 +198,7 @@ Your picture could be here!
182
198
 
183
199
  Made with [contributors-img][🖐contrib-rocks].
184
200
 
185
- Also see GitLab Contributors: [https://gitlab.com/kettle-rb/kettle-drift/-/graphs/main][🚎contributors-gl]
201
+ Also see GitLab Contributors: [https://gitlab.com/kettle-dev/kettle-drift/-/graphs/main][🚎contributors-gl]
186
202
 
187
203
  ## For Maintainers
188
204
 
@@ -233,15 +249,15 @@ NOTE: To build without signing the gem set `SKIP_GEM_SIGNING` to any value in th
233
249
  14. Run `bundle exec rake release` which will create a git tag for the version,
234
250
  push git commits and tags, and push the `.gem` file to the gem host configured in the gemspec.
235
251
 
236
- [📜src-gl]: https://gitlab.com/kettle-rb/kettle-drift
237
- [📜src-cb]: https://codeberg.org/kettle-rb/kettle-drift
238
- [📜src-gh]: https://github.com/kettle-rb/kettle-drift
239
- [🧪build]: https://github.com/kettle-rb/kettle-drift/actions
240
- [🤝conduct]: https://github.com/kettle-rb/kettle-drift/blob/main/CODE_OF_CONDUCT.md
252
+ [📜src-gl]: https://gitlab.com/kettle-dev/kettle-drift
253
+ [📜src-cb]: https://codeberg.org/kettle-dev/kettle-drift
254
+ [📜src-gh]: https://github.com/kettle-dev/kettle-drift
255
+ [🧪build]: https://github.com/kettle-dev/kettle-drift/actions
256
+ [🤝conduct]: https://github.com/kettle-dev/kettle-drift/blob/main/CODE_OF_CONDUCT.md
241
257
  [🖐contrib-rocks]: https://contrib.rocks
242
- [🖐contributors]: https://github.com/kettle-rb/kettle-drift/graphs/contributors
243
- [🚎contributors-gl]: https://gitlab.com/kettle-rb/kettle-drift/-/graphs/main
244
- [🖐contributors-img]: https://contrib.rocks/image?repo=kettle-rb/kettle-drift
258
+ [🖐contributors]: https://github.com/kettle-dev/kettle-drift/graphs/contributors
259
+ [🚎contributors-gl]: https://gitlab.com/kettle-dev/kettle-drift/-/graphs/main
260
+ [🖐contributors-img]: https://contrib.rocks/image?repo=kettle-dev/kettle-drift
245
261
  [💎gem-coop]: https://gem.coop
246
262
  [🔒️rubygems-security-guide]: https://guides.rubygems.org/security/#building-gems
247
263
  [🔒️rubygems-checksums-pr]: https://github.com/rubygems/rubygems/pull/6022
data/FUNDING.md CHANGED
@@ -10,10 +10,10 @@ Many paths lead to being a sponsor or a backer of this project. Are you on such
10
10
 
11
11
  [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
12
12
  [⛳liberapay]: https://liberapay.com/pboling/donate
13
- [🖇osc-backers]: https://opencollective.com/kettle-rb#backer
14
- [🖇osc-backers-i]: https://opencollective.com/kettle-rb/backers/badge.svg?style=flat
15
- [🖇osc-sponsors]: https://opencollective.com/kettle-rb#sponsor
16
- [🖇osc-sponsors-i]: https://opencollective.com/kettle-rb/sponsors/badge.svg?style=flat
13
+ [🖇osc-backers]: https://opencollective.com/kettle-dev#backer
14
+ [🖇osc-backers-i]: https://opencollective.com/kettle-dev/backers/badge.svg?style=flat
15
+ [🖇osc-sponsors]: https://opencollective.com/kettle-dev#sponsor
16
+ [🖇osc-sponsors-i]: https://opencollective.com/kettle-dev/sponsors/badge.svg?style=flat
17
17
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
18
18
  [🖇sponsor]: https://github.com/sponsors/pboling
19
19
  [🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
@@ -46,7 +46,7 @@ To join the community or get help 👇️ Join the Discord.
46
46
 
47
47
  To say "thanks!" ☝️ Join the Discord or 👇️ send money.
48
48
 
49
- [![Sponsor kettle-rb/kettle-drift 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] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
49
+ [![Sponsor kettle-dev/kettle-drift 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] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
50
50
 
51
51
  # Another Way to Support Open Source Software
52
52
 
@@ -59,13 +59,13 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
59
59
  **[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
60
60
 
61
61
  [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
62
- [🖇osc-all-img]: https://img.shields.io/opencollective/all/kettle-rb
63
- [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/kettle-rb
64
- [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/kettle-rb
65
- [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/kettle-rb?style=for-the-badge
66
- [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/kettle-rb?style=for-the-badge
67
- [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/kettle-rb?style=for-the-badge
68
- [🖇osc]: https://opencollective.com/kettle-rb
62
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/kettle-dev
63
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/kettle-dev
64
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/kettle-dev
65
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/kettle-dev?style=for-the-badge
66
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/kettle-dev?style=for-the-badge
67
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/kettle-dev?style=for-the-badge
68
+ [🖇osc]: https://opencollective.com/kettle-dev
69
69
  [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
70
70
  [🖇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
71
71
  [🖇paypal-bottom-img]: https://img.shields.io/badge/donate-paypal-a51611.svg?style=for-the-badge&logo=paypal&color=0A0A0A
data/LICENSE.md CHANGED
@@ -9,4 +9,4 @@ If none of the above licenses fit your use case, please [contact us](mailto:flos
9
9
 
10
10
  ## Copyright Notice
11
11
 
12
- Copyright (c) 2026 Peter H. Boling
12
+ - Copyright (c) 2026 Peter H. Boling
data/README.md CHANGED
@@ -1,19 +1,10 @@
1
- [![Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0][🖼️galtzo-floss-i]][🖼️galtzo-floss] [![ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5][🖼️ruby-lang-i]][🖼️ruby-lang] [![kettle-rb Logo by Aboling0, CC BY-SA 4.0][🖼️kettle-rb-i]][🖼️kettle-rb] [![kettle-drift Logo by Aboling0, CC BY-SA 4.0][🖼️kettle-rb-kettle-drift-i]][🖼️kettle-rb-kettle-drift]
2
-
3
- [🖼️galtzo-floss-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg
4
- [🖼️galtzo-floss]: https://discord.gg/3qme4XHNKN
5
- [🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg
6
- [🖼️ruby-lang]: https://www.ruby-lang.org/
7
- [🖼️kettle-rb-i]: https://logos.galtzo.com/assets/images/kettle-rb/avatar-128px.svg
8
- [🖼️kettle-rb]: https://github.com/kettle-rb
9
- [🖼️kettle-rb-kettle-drift-i]: https://logos.galtzo.com/assets/images/kettle-rb/kettle-drift/avatar-128px.svg
10
- [🖼️kettle-rb-kettle-drift]: https://github.com/kettle-rb/kettle-drift
1
+ <a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="12%" align="right"/></a> <a href="https://github.com/kettle-dev/kettle-drift"><img alt="kettle-drift Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/kettle-drift/avatar-128px.svg" width="12%" align="right"/></a>
11
2
 
12
3
  # 🍲 Kettle::Drift
13
4
 
14
- [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: AGPL-3.0-only][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![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 Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![CodeQL][🖐codeQL-img]][🖐codeQL]
5
+ [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: AGPL-3.0-only][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![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 Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf]
15
6
 
16
- `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][🖼️galtzo-floss], as I may have missed the [discord notification][🖼️galtzo-floss].
7
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].
17
8
 
18
9
  ---
19
10
 
@@ -28,7 +19,7 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
28
19
 
29
20
  </details>
30
21
 
31
- ## 🌻 Synopsis
22
+ ## 🌻 Synopsis <a href="https://discord.gg/3qme4XHNKN"><img alt="Galtzo FLOSS Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="8%" align="right"/></a> <a href="https://ruby-toolbox.com"><img alt="ruby-lang Logo, Yukihiro Matsumoto, Ruby Visual Identity Team, CC BY-SA 2.5" src="https://logos.galtzo.com/assets/images/ruby-lang/avatar-128px.svg" width="8%" align="right"/></a>
32
23
 
33
24
  `kettle-drift` tracks repeated adjacent-line chunks that usually signal
34
25
  template drift or copy/paste corruption. When it is injected into a project by
@@ -71,14 +62,14 @@ not practical for the current toolchain.
71
62
 
72
63
  | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
73
64
  |-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
74
- | 🧪 [kettle-rb/kettle-drift on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
75
- | 🧊 [kettle-rb/kettle-drift on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
76
- | 🐙 [kettle-rb/kettle-drift on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
65
+ | 🧪 [kettle-dev/kettle-drift on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
66
+ | 🧊 [kettle-dev/kettle-drift on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
67
+ | 🐙 [kettle-dev/kettle-drift on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
77
68
  | 🎮️ [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] |
78
69
 
79
70
  </details>
80
71
 
81
- [gh-discussions]: https://github.com/kettle-rb/kettle-drift/discussions
72
+ [gh-discussions]: https://github.com/kettle-dev/kettle-drift/discussions
82
73
 
83
74
  ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/kettle-drift)](https://tidelift.com/subscription/pkg/rubygems-kettle-drift?utm_source=rubygems-kettle-drift&utm_medium=referral&utm_campaign=readme)
84
75
 
@@ -206,16 +197,16 @@ chat rooms and mailing lists agrees to follow the [![Contributor Covenant 2.1][
206
197
 
207
198
  Made with [contributors-img][🖐contrib-rocks].
208
199
 
209
- Also see GitLab Contributors: [https://gitlab.com/kettle-rb/kettle-drift/-/graphs/main][🚎contributors-gl]
200
+ Also see GitLab Contributors: [https://gitlab.com/kettle-dev/kettle-drift/-/graphs/main][🚎contributors-gl]
210
201
 
211
202
  <details>
212
203
  <summary>⭐️ Star History</summary>
213
204
 
214
- <a href="https://star-history.com/kettle-rb/kettle-drift&Date">
205
+ <a href="https://star-history.com/kettle-dev/kettle-drift&Date">
215
206
  <picture>
216
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kettle-rb/kettle-drift&type=Date&theme=dark" />
217
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kettle-rb/kettle-drift&type=Date" />
218
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kettle-rb/kettle-drift&type=Date" />
207
+ <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=kettle-dev/kettle-drift&type=Date&theme=dark" />
208
+ <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kettle-dev/kettle-drift&type=Date" />
209
+ <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kettle-dev/kettle-drift&type=Date" />
219
210
  </picture>
220
211
  </a>
221
212
 
@@ -280,26 +271,28 @@ To join the community or get help 👇️ Join the Discord.
280
271
 
281
272
  To say "thanks!" ☝️ Join the Discord or 👇️ send money.
282
273
 
283
- [![Sponsor kettle-rb/kettle-drift 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] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
274
+ [![Sponsor kettle-dev/kettle-drift 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] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
284
275
 
285
276
  ### Please give the project a star ⭐ ♥.
286
277
 
278
+ Many parts of this project are actively managed by a [kettle-jem](https://github.com/structuredmerge/structuredmerge-ruby/tree/main/gems/kettle-jem) smart template utilizing [StructuredMerge.org](https://structuredmerge.org) merge contracts.
279
+
287
280
  Thanks for RTFM. ☺️
288
281
 
289
282
  [⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
290
283
  [⛳liberapay-bottom-img]: https://img.shields.io/liberapay/goal/pboling.svg?style=for-the-badge&logo=liberapay&color=a51611
291
284
  [⛳liberapay]: https://liberapay.com/pboling/donate
292
- [🖇osc-all-img]: https://img.shields.io/opencollective/all/kettle-rb
293
- [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/kettle-rb
294
- [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/kettle-rb
295
- [🖇osc-backers]: https://opencollective.com/kettle-rb#backer
296
- [🖇osc-backers-i]: https://opencollective.com/kettle-rb/backers/badge.svg?style=flat
297
- [🖇osc-sponsors]: https://opencollective.com/kettle-rb#sponsor
298
- [🖇osc-sponsors-i]: https://opencollective.com/kettle-rb/sponsors/badge.svg?style=flat
299
- [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/kettle-rb?style=for-the-badge
300
- [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/kettle-rb?style=for-the-badge
301
- [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/kettle-rb?style=for-the-badge
302
- [🖇osc]: https://opencollective.com/kettle-rb
285
+ [🖇osc-all-img]: https://img.shields.io/opencollective/all/kettle-dev
286
+ [🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/kettle-dev
287
+ [🖇osc-backers-img]: https://img.shields.io/opencollective/backers/kettle-dev
288
+ [🖇osc-backers]: https://opencollective.com/kettle-dev#backer
289
+ [🖇osc-backers-i]: https://opencollective.com/kettle-dev/backers/badge.svg?style=flat
290
+ [🖇osc-sponsors]: https://opencollective.com/kettle-dev#sponsor
291
+ [🖇osc-sponsors-i]: https://opencollective.com/kettle-dev/sponsors/badge.svg?style=flat
292
+ [🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/kettle-dev?style=for-the-badge
293
+ [🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/kettle-dev?style=for-the-badge
294
+ [🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/kettle-dev?style=for-the-badge
295
+ [🖇osc]: https://opencollective.com/kettle-dev
303
296
  [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
304
297
  [🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
305
298
  [🖇sponsor]: https://github.com/sponsors/pboling
@@ -323,12 +316,12 @@ Thanks for RTFM. ☺️
323
316
  [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
324
317
 
325
318
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
326
- [⛳️gem-namespace]: https://github.com/kettle-rb/kettle-drift
319
+ [⛳️gem-namespace]: https://github.com/kettle-dev/kettle-drift
327
320
  [⛳️namespace-img]: https://img.shields.io/badge/namespace-Kettle::Drift-3C2D2D.svg?style=square&logo=ruby&logoColor=white
328
321
  [⛳️gem-name]: https://bestgems.org/gems/kettle-drift
329
322
  [⛳️name-img]: https://img.shields.io/badge/name-kettle--drift-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
330
- [⛳️tag-img]: https://img.shields.io/github/tag/kettle-rb/kettle-drift.svg
331
- [⛳️tag]: https://github.com/kettle-rb/kettle-drift/releases
323
+ [⛳️tag-img]: https://img.shields.io/github/tag/kettle-dev/kettle-drift.svg
324
+ [⛳️tag]: https://github.com/kettle-dev/kettle-drift/releases
332
325
  [🚂maint-blog]: http://www.railsbling.com/tags/kettle-drift
333
326
  [🚂maint-blog-img]: https://img.shields.io/badge/blog-railsbling-0093D0.svg?style=for-the-badge&logo=rubyonrails&logoColor=orange
334
327
  [🚂maint-contact]: http://www.railsbling.com/contact
@@ -363,54 +356,52 @@ Thanks for RTFM. ☺️
363
356
  [💁🏼‍♂️peterboling]: http://www.peterboling.com
364
357
  [🚂railsbling]: http://www.railsbling.com
365
358
  [📜src-gl-img]: https://img.shields.io/badge/GitLab-FBA326?style=for-the-badge&logo=Gitlab&logoColor=orange
366
- [📜src-gl]: https://gitlab.com/kettle-rb/kettle-drift
359
+ [📜src-gl]: https://gitlab.com/kettle-dev/kettle-drift
367
360
  [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
368
- [📜src-cb]: https://codeberg.org/kettle-rb/kettle-drift
361
+ [📜src-cb]: https://codeberg.org/kettle-dev/kettle-drift
369
362
  [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
370
- [📜src-gh]: https://github.com/kettle-rb/kettle-drift
363
+ [📜src-gh]: https://github.com/kettle-dev/kettle-drift
371
364
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
372
365
  [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
373
- [📜gl-wiki]: https://gitlab.com/kettle-rb/kettle-drift/-/wikis/home
374
- [📜gh-wiki]: https://github.com/kettle-rb/kettle-drift/wiki
366
+ [📜gl-wiki]: https://gitlab.com/kettle-dev/kettle-drift/-/wikis/home
367
+ [📜gh-wiki]: https://github.com/kettle-dev/kettle-drift/wiki
375
368
  [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
376
369
  [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
377
370
  [👽dl-rank]: https://bestgems.org/gems/kettle-drift
378
371
  [👽dl-ranki]: https://img.shields.io/gem/rd/kettle-drift.svg
379
372
  [👽version]: https://bestgems.org/gems/kettle-drift
380
373
  [👽versioni]: https://img.shields.io/gem/v/kettle-drift.svg
381
- [🏀qlty-mnt]: https://qlty.sh/gh/kettle-rb/projects/kettle-drift
382
- [🏀qlty-mnti]: https://qlty.sh/gh/kettle-rb/projects/kettle-drift/maintainability.svg
383
- [🏀qlty-cov]: https://qlty.sh/gh/kettle-rb/projects/kettle-drift/metrics/code?sort=coverageRating
384
- [🏀qlty-covi]: https://qlty.sh/gh/kettle-rb/projects/kettle-drift/coverage.svg
385
- [🏀codecov]: https://codecov.io/gh/kettle-rb/kettle-drift
386
- [🏀codecovi]: https://codecov.io/gh/kettle-rb/kettle-drift/graph/badge.svg
387
- [🏀coveralls]: https://coveralls.io/github/kettle-rb/kettle-drift?branch=main
388
- [🏀coveralls-img]: https://coveralls.io/repos/github/kettle-rb/kettle-drift/badge.svg?branch=main
389
- [🖐codeQL]: https://github.com/kettle-rb/kettle-drift/security/code-scanning
390
- [🖐codeQL-img]: https://github.com/kettle-rb/kettle-drift/actions/workflows/codeql-analysis.yml/badge.svg
391
- [🚎ruby-3.2-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/ruby-3.2.yml
392
- [🚎ruby-3.3-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/ruby-3.3.yml
393
- [🚎ruby-3.4-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/ruby-3.4.yml
394
- [🚎truby-24.2-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/truffleruby-24.2.yml
395
- [🚎truby-25.0-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/truffleruby-25.0.yml
396
- [🚎2-cov-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/coverage.yml
397
- [🚎2-cov-wfi]: https://github.com/kettle-rb/kettle-drift/actions/workflows/coverage.yml/badge.svg
398
- [🚎3-hd-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/heads.yml
399
- [🚎3-hd-wfi]: https://github.com/kettle-rb/kettle-drift/actions/workflows/heads.yml/badge.svg
400
- [🚎5-st-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/style.yml
401
- [🚎5-st-wfi]: https://github.com/kettle-rb/kettle-drift/actions/workflows/style.yml/badge.svg
402
- [🚎9-t-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/truffle.yml
403
- [🚎9-t-wfi]: https://github.com/kettle-rb/kettle-drift/actions/workflows/truffle.yml/badge.svg
404
- [🚎10-j-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/jruby.yml
405
- [🚎10-j-wfi]: https://github.com/kettle-rb/kettle-drift/actions/workflows/jruby.yml/badge.svg
406
- [🚎11-c-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/current.yml
407
- [🚎11-c-wfi]: https://github.com/kettle-rb/kettle-drift/actions/workflows/current.yml/badge.svg
408
- [🚎12-crh-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/dep-heads.yml
409
- [🚎12-crh-wfi]: https://github.com/kettle-rb/kettle-drift/actions/workflows/dep-heads.yml/badge.svg
410
- [🚎13-🔒️-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/locked_deps.yml
411
- [🚎13-🔒️-wfi]: https://github.com/kettle-rb/kettle-drift/actions/workflows/locked_deps.yml/badge.svg
412
- [🚎14-🔓️-wf]: https://github.com/kettle-rb/kettle-drift/actions/workflows/unlocked_deps.yml
413
- [🚎14-🔓️-wfi]: https://github.com/kettle-rb/kettle-drift/actions/workflows/unlocked_deps.yml/badge.svg
374
+ [🏀qlty-mnt]: https://qlty.sh/gh/kettle-dev/projects/kettle-drift
375
+ [🏀qlty-mnti]: https://qlty.sh/gh/kettle-dev/projects/kettle-drift/maintainability.svg
376
+ [🏀qlty-cov]: https://qlty.sh/gh/kettle-dev/projects/kettle-drift/metrics/code?sort=coverageRating
377
+ [🏀qlty-covi]: https://qlty.sh/gh/kettle-dev/projects/kettle-drift/coverage.svg
378
+ [🏀codecov]: https://codecov.io/gh/kettle-dev/kettle-drift
379
+ [🏀codecovi]: https://codecov.io/gh/kettle-dev/kettle-drift/graph/badge.svg
380
+ [🏀coveralls]: https://coveralls.io/github/kettle-dev/kettle-drift?branch=main
381
+ [🏀coveralls-img]: https://coveralls.io/repos/github/kettle-dev/kettle-drift/badge.svg?branch=main
382
+ [🚎ruby-3.2-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/ruby-3.2.yml
383
+ [🚎ruby-3.3-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/ruby-3.3.yml
384
+ [🚎ruby-3.4-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/ruby-3.4.yml
385
+ [🚎truby-24.2-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/truffleruby-24.2.yml
386
+ [🚎truby-25.0-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/truffleruby-25.0.yml
387
+ [🚎2-cov-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/coverage.yml
388
+ [🚎2-cov-wfi]: https://github.com/kettle-dev/kettle-drift/actions/workflows/coverage.yml/badge.svg
389
+ [🚎3-hd-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/heads.yml
390
+ [🚎3-hd-wfi]: https://github.com/kettle-dev/kettle-drift/actions/workflows/heads.yml/badge.svg
391
+ [🚎5-st-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/style.yml
392
+ [🚎5-st-wfi]: https://github.com/kettle-dev/kettle-drift/actions/workflows/style.yml/badge.svg
393
+ [🚎9-t-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/truffle.yml
394
+ [🚎9-t-wfi]: https://github.com/kettle-dev/kettle-drift/actions/workflows/truffle.yml/badge.svg
395
+ [🚎10-j-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/jruby.yml
396
+ [🚎10-j-wfi]: https://github.com/kettle-dev/kettle-drift/actions/workflows/jruby.yml/badge.svg
397
+ [🚎11-c-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/current.yml
398
+ [🚎11-c-wfi]: https://github.com/kettle-dev/kettle-drift/actions/workflows/current.yml/badge.svg
399
+ [🚎12-crh-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/dep-heads.yml
400
+ [🚎12-crh-wfi]: https://github.com/kettle-dev/kettle-drift/actions/workflows/dep-heads.yml/badge.svg
401
+ [🚎13-🔒️-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/locked_deps.yml
402
+ [🚎13-🔒️-wfi]: https://github.com/kettle-dev/kettle-drift/actions/workflows/locked_deps.yml/badge.svg
403
+ [🚎14-🔓️-wf]: https://github.com/kettle-dev/kettle-drift/actions/workflows/unlocked_deps.yml
404
+ [🚎14-🔓️-wfi]: https://github.com/kettle-dev/kettle-drift/actions/workflows/unlocked_deps.yml/badge.svg
414
405
  [💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
415
406
  [💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
416
407
  [💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
@@ -422,48 +413,48 @@ Thanks for RTFM. ☺️
422
413
  [💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
423
414
  [💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
424
415
  [💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
425
- [🤝gh-issues]: https://github.com/kettle-rb/kettle-drift/issues
426
- [🤝gh-pulls]: https://github.com/kettle-rb/kettle-drift/pulls
427
- [🤝gl-issues]: https://gitlab.com/kettle-rb/kettle-drift/-/issues
428
- [🤝gl-pulls]: https://gitlab.com/kettle-rb/kettle-drift/-/merge_requests
429
- [🤝cb-issues]: https://codeberg.org/kettle-rb/kettle-drift/issues
430
- [🤝cb-pulls]: https://codeberg.org/kettle-rb/kettle-drift/pulls
416
+ [🤝gh-issues]: https://github.com/kettle-dev/kettle-drift/issues
417
+ [🤝gh-pulls]: https://github.com/kettle-dev/kettle-drift/pulls
418
+ [🤝gl-issues]: https://gitlab.com/kettle-dev/kettle-drift/-/issues
419
+ [🤝gl-pulls]: https://gitlab.com/kettle-dev/kettle-drift/-/merge_requests
420
+ [🤝cb-issues]: https://codeberg.org/kettle-dev/kettle-drift/issues
421
+ [🤝cb-pulls]: https://codeberg.org/kettle-dev/kettle-drift/pulls
431
422
  [🤝cb-donate]: https://donate.codeberg.org/
432
- [🤝contributing]: https://github.com/kettle-rb/kettle-drift/blob/main/CONTRIBUTING.md
433
- [🏀codecov-g]: https://codecov.io/gh/kettle-rb/kettle-drift/graph/badge.svg
423
+ [🤝contributing]: https://github.com/kettle-dev/kettle-drift/blob/main/CONTRIBUTING.md
424
+ [🏀codecov-g]: https://codecov.io/gh/kettle-dev/kettle-drift/graph/badge.svg
434
425
  [🖐contrib-rocks]: https://contrib.rocks
435
- [🖐contributors]: https://github.com/kettle-rb/kettle-drift/graphs/contributors
436
- [🖐contributors-img]: https://contrib.rocks/image?repo=kettle-rb/kettle-drift
437
- [🚎contributors-gl]: https://gitlab.com/kettle-rb/kettle-drift/-/graphs/main
438
- [🪇conduct]: https://github.com/kettle-rb/kettle-drift/blob/main/CODE_OF_CONDUCT.md
426
+ [🖐contributors]: https://github.com/kettle-dev/kettle-drift/graphs/contributors
427
+ [🖐contributors-img]: https://contrib.rocks/image?repo=kettle-dev/kettle-drift
428
+ [🚎contributors-gl]: https://gitlab.com/kettle-dev/kettle-drift/-/graphs/main
429
+ [🪇conduct]: https://github.com/kettle-dev/kettle-drift/blob/main/CODE_OF_CONDUCT.md
439
430
  [🪇conduct-img]: https://img.shields.io/badge/Contributor_Covenant-2.1-259D6C.svg
440
431
  [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
441
432
  [📌semver]: https://semver.org/spec/v2.0.0.html
442
433
  [📌semver-img]: https://img.shields.io/badge/semver-2.0.0-259D6C.svg?style=flat
443
434
  [📌semver-breaking]: https://github.com/semver/semver/issues/716#issuecomment-869336139
444
435
  [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
445
- [📌changelog]: https://github.com/kettle-rb/kettle-drift/blob/main/CHANGELOG.md
436
+ [📌changelog]: https://github.com/kettle-dev/kettle-drift/blob/main/CHANGELOG.md
446
437
  [📗keep-changelog]: https://keepachangelog.com/en/1.0.0/
447
438
  [📗keep-changelog-img]: https://img.shields.io/badge/keep--a--changelog-1.0.0-34495e.svg?style=flat
448
439
  [📌gitmoji]: https://gitmoji.dev
449
440
  [📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
450
441
  [🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
451
- [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.510-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
452
- [🔐security]: https://github.com/kettle-rb/kettle-drift/blob/main/SECURITY.md
442
+ [🧮kloc-img]: https://img.shields.io/badge/KLOC-0.509-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
443
+ [🔐security]: https://github.com/kettle-dev/kettle-drift/blob/main/SECURITY.md
453
444
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
454
445
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
455
446
  [📄license]: LICENSE.md
456
447
  [📄license-ref]: AGPL-3.0-only.md
457
448
  [📄license-img]: https://img.shields.io/badge/License-AGPL--3.0--only-259D6C.svg
458
449
  [📄license-compat]: https://www.apache.org/legal/resolved.html#category-x
459
- [📄license-compat-img]: https://img.shields.io/badge/Apache_Incompatible:_Category_X-✗-C0392B.svg?style=flat&logo=Apache
450
+ [📄license-compat-img]: https://img.shields.io/badge/Apache_Incompatible:_Category_X-%E2%9C%97-C0392B.svg?style=flat&logo=Apache
460
451
 
461
452
  [📄ilo-declaration]: https://www.ilo.org/declaration/lang--en/index.htm
462
453
  [📄ilo-declaration-img]: https://img.shields.io/badge/ILO_Fundamental_Principles-✓-259D6C.svg?style=flat
463
454
  [🚎yard-current]: http://rubydoc.info/gems/kettle-drift
464
455
  [🚎yard-head]: https://kettle-drift.galtzo.com
465
456
  [💎stone_checksums]: https://github.com/galtzo-floss/stone_checksums
466
- [💎SHA_checksums]: https://gitlab.com/kettle-rb/kettle-drift/-/tree/main/checksums
457
+ [💎SHA_checksums]: https://gitlab.com/kettle-dev/kettle-drift/-/tree/main/checksums
467
458
  [💎rlts]: https://github.com/rubocop-lts/rubocop-lts
468
459
  [💎rlts-img]: https://img.shields.io/badge/code_style_&_linting-rubocop--lts-34495e.svg?plastic&logo=ruby&logoColor=white
469
460
  [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
@@ -474,9 +465,9 @@ Thanks for RTFM. ☺️
474
465
  | Field | Value |
475
466
  |---|---|
476
467
  | Package | kettle-drift |
477
- | Description | 🔮 Kettle::Drift tracks repeated adjacent-line chunks that usually signal template drift or copy/paste corruption. |
478
- | Homepage | https://github.com/kettle-rb/kettle-drift |
479
- | Source | https://github.com/kettle-rb/kettle-drift/tree/v1.0.0 |
468
+ | Description | 🍲 Kettle::Drift tracks repeated adjacent-line chunks that usually signal template drift or copy/paste corruption. |
469
+ | Homepage | https://github.com/kettle-dev/kettle-drift |
470
+ | Source | https://github.com/kettle-dev/kettle-drift/tree/v1.0.2 |
480
471
  | License | `AGPL-3.0-only` |
481
- | Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/kettle-rb, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/kettle-drift, https://www.buymeacoffee.com/pboling |
472
+ | Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/kettle-dev, https://opencollective.com/kettle-rb, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/kettle-drift, https://www.buymeacoffee.com/pboling |
482
473
  <!-- kettle-jem:metadata:end -->
data/SECURITY.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Version | Supported |
6
6
  |----------|-----------|
7
- | 1.latest | ✅ |
7
+ | 1.0.latest | ✅ |
8
8
 
9
9
  ## Security contact information
10
10
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "optparse"
4
- require "set"
5
4
 
6
5
  module Kettle
7
6
  module Drift
@@ -17,11 +16,11 @@ module Kettle
17
16
  min_chars: options.fetch(:min_chars),
18
17
  json_path: options[:json_path],
19
18
  lock_path: options[:lock_path],
20
- mode: options.fetch(:mode),
19
+ mode: options.fetch(:mode)
21
20
  )
22
21
 
23
- if outcome.clean?
24
- puts "[kettle-drift] ✅ No duplicate drift detected (min_chars=#{options[:min_chars]}, files=#{outcome.files.size}, baseline=#{outcome.baseline_set.size})"
22
+ if outcome.clean? || outcome.diff.state == :no_changes
23
+ puts "[kettle-drift] ✅ No new duplicate drift detected (min_chars=#{options[:min_chars]}, files=#{outcome.files.size}, baseline=#{outcome.baseline_set.size})"
25
24
  else
26
25
  puts "[kettle-drift] ⚠️ #{outcome.warning_count} drift warning(s) across #{outcome.results.size} unique chunk(s) (files=#{outcome.files.size}, baseline=#{outcome.baseline_set.size})"
27
26
  puts "[kettle-drift] 📄 Report: #{Kettle::Drift.display_path(outcome.json_path)}" if outcome.json_path
@@ -37,7 +36,7 @@ module Kettle
37
36
  min_chars: Kettle::Drift::DuplicateLineValidator::DEFAULT_MIN_CHARS,
38
37
  lock_path: Kettle::Drift::DEFAULT_LOCKFILE,
39
38
  mode: :update,
40
- project_root: Dir.pwd,
39
+ project_root: Dir.pwd
41
40
  }
42
41
 
43
42
  parser = OptionParser.new do |opts|
@@ -17,7 +17,7 @@ module Kettle
17
17
  left: unchanged_entries.size + new_entries.size,
18
18
  fixed: fixed_entries.size,
19
19
  new: new_entries.size,
20
- unchanged: unchanged_entries.size,
20
+ unchanged: unchanged_entries.size
21
21
  }
22
22
  end
23
23
 
@@ -2,7 +2,6 @@
2
2
 
3
3
  require "json"
4
4
  require "fileutils"
5
- require "set"
6
5
 
7
6
  module Kettle
8
7
  module Drift
@@ -49,7 +48,7 @@ module Kettle
49
48
  "### Deprecated",
50
49
  "### Removed",
51
50
  "### Fixed",
52
- "### Security",
51
+ "### Security"
53
52
  ]).freeze
54
53
 
55
54
  def scan(files:, min_chars: DEFAULT_MIN_CHARS)
@@ -82,7 +81,7 @@ module Kettle
82
81
  duplicates[chunk_content] ||= []
83
82
  duplicates[chunk_content] << {
84
83
  file: path,
85
- lines: start_lines,
84
+ lines: start_lines
86
85
  }
87
86
  end
88
87
  end
@@ -140,7 +139,7 @@ module Kettle
140
139
 
141
140
  template_files = Dir.glob(
142
141
  File.join(template_dir, "**", "*"),
143
- File::FNM_DOTMATCH,
142
+ File::FNM_DOTMATCH
144
143
  ).select { |f| File.file?(f) }
145
144
 
146
145
  Set.new(scan(files: template_files, min_chars: min_chars).keys)
@@ -217,7 +216,7 @@ module Kettle
217
216
  return content if content.valid_encoding?
218
217
 
219
218
  content.scrub
220
- rescue StandardError
219
+ rescue
221
220
  nil
222
221
  end
223
222
 
@@ -34,7 +34,7 @@ module Kettle
34
34
  state: state,
35
35
  new_entries: added,
36
36
  fixed_entries: fixed,
37
- unchanged_entries: unchanged,
37
+ unchanged_entries: unchanged
38
38
  )
39
39
  end
40
40
 
@@ -46,7 +46,7 @@ module Kettle
46
46
  {
47
47
  chunk: chunk,
48
48
  file: entry.fetch(:file),
49
- lines: entry.fetch(:lines),
49
+ lines: entry.fetch(:lines)
50
50
  }
51
51
  end
52
52
  end
@@ -31,7 +31,7 @@ namespace :kettle do
31
31
  min_chars: min_chars,
32
32
  json_path: ENV["JSON"],
33
33
  lock_path: lock_path,
34
- mode: mode,
34
+ mode: mode
35
35
  )
36
36
 
37
37
  if outcome.clean?
@@ -50,7 +50,7 @@ module Kettle
50
50
 
51
51
  {
52
52
  "file" => relative_path(file, project_root: project_root),
53
- "lines" => lines.map { |line| Integer(line) },
53
+ "lines" => lines.map { |line| Integer(line) }
54
54
  }
55
55
  end
56
56
 
@@ -66,7 +66,7 @@ module Kettle
66
66
 
67
67
  {
68
68
  file: file,
69
- lines: lines.map { |line| Integer(line) },
69
+ lines: lines.map { |line| Integer(line) }
70
70
  }
71
71
  end
72
72
 
@@ -3,7 +3,7 @@
3
3
  module Kettle
4
4
  module Drift
5
5
  module Version
6
- VERSION = "1.0.1"
6
+ VERSION = "1.0.3"
7
7
  end
8
8
  VERSION = Version::VERSION # Traditional Constant Location
9
9
  end
data/lib/kettle/drift.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "set"
4
3
  require "version_gem"
5
4
  require_relative "drift/version"
6
5
 
@@ -113,8 +112,15 @@ module Kettle
113
112
  results = Kettle::Drift::DuplicateLineValidator.subtract_baseline(results, baseline_set: baseline_set)
114
113
  warning_count = Kettle::Drift::DuplicateLineValidator.warning_count(results)
115
114
 
115
+ process_result = Kettle::Drift::Process.new(
116
+ project_root: expanded_project_root,
117
+ lock_path: expanded_lock_path,
118
+ mode: mode,
119
+ results: results,
120
+ printer_class: printer_class
121
+ ).run
116
122
  expanded_json_path = nil
117
- unless results.empty?
123
+ if write_json_report?(results, process_result.diff)
118
124
  expanded_json_path = if json_path
119
125
  File.expand_path(json_path, expanded_project_root)
120
126
  else
@@ -123,14 +129,6 @@ module Kettle
123
129
  Kettle::Drift::DuplicateLineValidator.write_json(results, expanded_json_path)
124
130
  end
125
131
 
126
- process_result = Kettle::Drift::Process.new(
127
- project_root: expanded_project_root,
128
- lock_path: expanded_lock_path,
129
- mode: mode,
130
- results: results,
131
- printer_class: printer_class,
132
- ).run
133
-
134
132
  Kettle::Drift::Outcome.new(
135
133
  project_root: expanded_project_root,
136
134
  files: selected_files,
@@ -142,9 +140,13 @@ module Kettle
142
140
  lock_path: expanded_lock_path,
143
141
  mode: mode,
144
142
  diff: process_result.diff,
145
- exit_code: process_result.exit_code,
143
+ exit_code: process_result.exit_code
146
144
  )
147
145
  end
146
+
147
+ def write_json_report?(results, diff)
148
+ !results.empty? && diff.state != :no_changes
149
+ end
148
150
  end
149
151
  end
150
152
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kettle-drift
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '1.1'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 1.1.9
49
+ version: 1.1.11
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
@@ -56,27 +56,27 @@ dependencies:
56
56
  version: '1.1'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 1.1.9
59
+ version: 1.1.11
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: kettle-dev
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: '2.0'
66
+ version: '2.2'
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 2.0.4
69
+ version: 2.2.3
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '2.0'
76
+ version: '2.2'
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 2.0.4
79
+ version: 2.2.3
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: bundler-audit
82
82
  requirement: !ruby/object:Gem::Requirement
@@ -131,20 +131,20 @@ dependencies:
131
131
  requirements:
132
132
  - - "~>"
133
133
  - !ruby/object:Gem::Version
134
- version: '3.0'
134
+ version: '3.1'
135
135
  - - ">="
136
136
  - !ruby/object:Gem::Version
137
- version: 3.0.6
137
+ version: 3.1.1
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '3.0'
144
+ version: '3.1'
145
145
  - - ">="
146
146
  - !ruby/object:Gem::Version
147
- version: 3.0.6
147
+ version: 3.1.1
148
148
  - !ruby/object:Gem::Dependency
149
149
  name: kettle-test
150
150
  requirement: !ruby/object:Gem::Requirement
@@ -154,7 +154,7 @@ dependencies:
154
154
  version: '2.0'
155
155
  - - ">="
156
156
  - !ruby/object:Gem::Version
157
- version: 2.0.1
157
+ version: 2.0.5
158
158
  type: :development
159
159
  prerelease: false
160
160
  version_requirements: !ruby/object:Gem::Requirement
@@ -164,7 +164,27 @@ dependencies:
164
164
  version: '2.0'
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
- version: 2.0.1
167
+ version: 2.0.5
168
+ - !ruby/object:Gem::Dependency
169
+ name: turbo_tests2
170
+ requirement: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - "~>"
173
+ - !ruby/object:Gem::Version
174
+ version: '3.1'
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: 3.1.2
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - "~>"
183
+ - !ruby/object:Gem::Version
184
+ version: '3.1'
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: 3.1.2
168
188
  - !ruby/object:Gem::Dependency
169
189
  name: ruby-progressbar
170
190
  requirement: !ruby/object:Gem::Requirement
@@ -208,7 +228,7 @@ dependencies:
208
228
  version: '2.0'
209
229
  - - ">="
210
230
  - !ruby/object:Gem::Version
211
- version: 2.0.0
231
+ version: 2.0.1
212
232
  type: :development
213
233
  prerelease: false
214
234
  version_requirements: !ruby/object:Gem::Requirement
@@ -218,7 +238,7 @@ dependencies:
218
238
  version: '2.0'
219
239
  - - ">="
220
240
  - !ruby/object:Gem::Version
221
- version: 2.0.0
241
+ version: 2.0.1
222
242
  description: "\U0001F372 Kettle::Drift tracks repeated adjacent-line chunks that usually
223
243
  signal template drift or copy/paste corruption."
224
244
  email:
@@ -264,17 +284,17 @@ files:
264
284
  - lib/kettle/drift/version.rb
265
285
  - sig/kettle/drift.rbs
266
286
  - sig/kettle/drift/version.rbs
267
- homepage: https://github.com/kettle-rb/kettle-drift
287
+ homepage: https://github.com/kettle-dev/kettle-drift
268
288
  licenses:
269
289
  - AGPL-3.0-only
270
290
  metadata:
271
291
  homepage_uri: https://structuredmerge.org
272
- source_code_uri: https://github.com/kettle-rb/kettle-drift/tree/v1.0.1
273
- changelog_uri: https://github.com/kettle-rb/kettle-drift/blob/v1.0.1/CHANGELOG.md
274
- bug_tracker_uri: https://github.com/kettle-rb/kettle-drift/issues
275
- documentation_uri: https://www.rubydoc.info/gems/kettle-drift/1.0.1
292
+ source_code_uri: https://github.com/kettle-dev/kettle-drift/tree/v1.0.3
293
+ changelog_uri: https://github.com/kettle-dev/kettle-drift/blob/v1.0.3/CHANGELOG.md
294
+ bug_tracker_uri: https://github.com/kettle-dev/kettle-drift/issues
295
+ documentation_uri: https://www.rubydoc.info/gems/kettle-drift/1.0.3
276
296
  funding_uri: https://github.com/sponsors/pboling
277
- wiki_uri: https://github.com/kettle-rb/kettle-drift/wiki
297
+ wiki_uri: https://github.com/kettle-dev/kettle-drift/wiki
278
298
  news_uri: https://www.railsbling.com/tags/kettle-drift
279
299
  discord_uri: https://discord.gg/3qme4XHNKN
280
300
  rubygems_mfa_required: 'true'
metadata.gz.sig CHANGED
Binary file