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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +30 -1
- data/CITATION.cff +2 -2
- data/CONTRIBUTING.md +26 -10
- data/FUNDING.md +12 -12
- data/LICENSE.md +1 -1
- data/README.md +87 -96
- data/SECURITY.md +1 -1
- data/lib/kettle/drift/cli.rb +4 -5
- data/lib/kettle/drift/diff.rb +1 -1
- data/lib/kettle/drift/duplicate_line_validator.rb +4 -5
- data/lib/kettle/drift/process/calculate_diff.rb +2 -2
- data/lib/kettle/drift/rakelib/drift.rake +1 -1
- data/lib/kettle/drift/serializer.rb +2 -2
- data/lib/kettle/drift/version.rb +1 -1
- data/lib/kettle/drift.rb +13 -11
- data.tar.gz.sig +0 -0
- metadata +41 -21
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 171f3d96366f6eb057944d6fa940079eac933869b234d5e1bb8bec6c1b09fac9
|
|
4
|
+
data.tar.gz: 65388c91364e6ef13b69a0b2d6bc2c566e5ff2eb99621c20a5146008d3151396
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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-
|
|
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-
|
|
15
|
+
value: 'https://github.com/kettle-dev/kettle-drift'
|
|
16
16
|
description: "kettle-drift"
|
|
17
|
-
repository-code: 'https://github.com/kettle-
|
|
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-
|
|
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-
|
|
237
|
-
[📜src-cb]: https://codeberg.org/kettle-
|
|
238
|
-
[📜src-gh]: https://github.com/kettle-
|
|
239
|
-
[🧪build]: https://github.com/kettle-
|
|
240
|
-
[🤝conduct]: https://github.com/kettle-
|
|
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-
|
|
243
|
-
[🚎contributors-gl]: https://gitlab.com/kettle-
|
|
244
|
-
[🖐contributors-img]: https://contrib.rocks/image?repo=kettle-
|
|
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-
|
|
14
|
-
[🖇osc-backers-i]: https://opencollective.com/kettle-
|
|
15
|
-
[🖇osc-sponsors]: https://opencollective.com/kettle-
|
|
16
|
-
[🖇osc-sponsors-i]: https://opencollective.com/kettle-
|
|
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-
|
|
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-
|
|
63
|
-
[🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/kettle-
|
|
64
|
-
[🖇osc-backers-img]: https://img.shields.io/opencollective/backers/kettle-
|
|
65
|
-
[🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/kettle-
|
|
66
|
-
[🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/kettle-
|
|
67
|
-
[🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/kettle-
|
|
68
|
-
[🖇osc]: https://opencollective.com/kettle-
|
|
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
data/README.md
CHANGED
|
@@ -1,19 +1,10 @@
|
|
|
1
|
-
|
|
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]
|
|
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][
|
|
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-
|
|
75
|
-
| 🧊 [kettle-
|
|
76
|
-
| 🐙 [kettle-
|
|
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-
|
|
72
|
+
[gh-discussions]: https://github.com/kettle-dev/kettle-drift/discussions
|
|
82
73
|
|
|
83
74
|
### Enterprise Support [](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-
|
|
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-
|
|
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-
|
|
217
|
-
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=kettle-
|
|
218
|
-
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=kettle-
|
|
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-
|
|
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-
|
|
293
|
-
[🖇osc-sponsors-img]: https://img.shields.io/opencollective/sponsors/kettle-
|
|
294
|
-
[🖇osc-backers-img]: https://img.shields.io/opencollective/backers/kettle-
|
|
295
|
-
[🖇osc-backers]: https://opencollective.com/kettle-
|
|
296
|
-
[🖇osc-backers-i]: https://opencollective.com/kettle-
|
|
297
|
-
[🖇osc-sponsors]: https://opencollective.com/kettle-
|
|
298
|
-
[🖇osc-sponsors-i]: https://opencollective.com/kettle-
|
|
299
|
-
[🖇osc-all-bottom-img]: https://img.shields.io/opencollective/all/kettle-
|
|
300
|
-
[🖇osc-sponsors-bottom-img]: https://img.shields.io/opencollective/sponsors/kettle-
|
|
301
|
-
[🖇osc-backers-bottom-img]: https://img.shields.io/opencollective/backers/kettle-
|
|
302
|
-
[🖇osc]: https://opencollective.com/kettle-
|
|
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-
|
|
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-
|
|
331
|
-
[⛳️tag]: https://github.com/kettle-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
374
|
-
[📜gh-wiki]: https://github.com/kettle-
|
|
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-
|
|
382
|
-
[🏀qlty-mnti]: https://qlty.sh/gh/kettle-
|
|
383
|
-
[🏀qlty-cov]: https://qlty.sh/gh/kettle-
|
|
384
|
-
[🏀qlty-covi]: https://qlty.sh/gh/kettle-
|
|
385
|
-
[🏀codecov]: https://codecov.io/gh/kettle-
|
|
386
|
-
[🏀codecovi]: https://codecov.io/gh/kettle-
|
|
387
|
-
[🏀coveralls]: https://coveralls.io/github/kettle-
|
|
388
|
-
[🏀coveralls-img]: https://coveralls.io/repos/github/kettle-
|
|
389
|
-
[
|
|
390
|
-
[
|
|
391
|
-
[🚎ruby-3.
|
|
392
|
-
[🚎
|
|
393
|
-
[🚎
|
|
394
|
-
[🚎
|
|
395
|
-
[🚎
|
|
396
|
-
[🚎
|
|
397
|
-
[🚎
|
|
398
|
-
[🚎
|
|
399
|
-
[🚎
|
|
400
|
-
[🚎
|
|
401
|
-
[🚎
|
|
402
|
-
[🚎
|
|
403
|
-
[🚎
|
|
404
|
-
[🚎
|
|
405
|
-
[🚎
|
|
406
|
-
[🚎
|
|
407
|
-
[🚎
|
|
408
|
-
[🚎
|
|
409
|
-
[🚎
|
|
410
|
-
[🚎
|
|
411
|
-
[🚎
|
|
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-
|
|
426
|
-
[🤝gh-pulls]: https://github.com/kettle-
|
|
427
|
-
[🤝gl-issues]: https://gitlab.com/kettle-
|
|
428
|
-
[🤝gl-pulls]: https://gitlab.com/kettle-
|
|
429
|
-
[🤝cb-issues]: https://codeberg.org/kettle-
|
|
430
|
-
[🤝cb-pulls]: https://codeberg.org/kettle-
|
|
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-
|
|
433
|
-
[🏀codecov-g]: https://codecov.io/gh/kettle-
|
|
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-
|
|
436
|
-
[🖐contributors-img]: https://contrib.rocks/image?repo=kettle-
|
|
437
|
-
[🚎contributors-gl]: https://gitlab.com/kettle-
|
|
438
|
-
[🪇conduct]: https://github.com/kettle-
|
|
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-
|
|
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.
|
|
452
|
-
[🔐security]: https://github.com/kettle-
|
|
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
|
|
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-
|
|
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 |
|
|
478
|
-
| Homepage | https://github.com/kettle-
|
|
479
|
-
| Source | https://github.com/kettle-
|
|
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
data/lib/kettle/drift/cli.rb
CHANGED
|
@@ -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|
|
data/lib/kettle/drift/diff.rb
CHANGED
|
@@ -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
|
|
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
|
|
@@ -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
|
|
data/lib/kettle/drift/version.rb
CHANGED
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
66
|
+
version: '2.2'
|
|
67
67
|
- - ">="
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: 2.
|
|
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.
|
|
76
|
+
version: '2.2'
|
|
77
77
|
- - ">="
|
|
78
78
|
- !ruby/object:Gem::Version
|
|
79
|
-
version: 2.
|
|
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.
|
|
134
|
+
version: '3.1'
|
|
135
135
|
- - ">="
|
|
136
136
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: 3.
|
|
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.
|
|
144
|
+
version: '3.1'
|
|
145
145
|
- - ">="
|
|
146
146
|
- !ruby/object:Gem::Version
|
|
147
|
-
version: 3.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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-
|
|
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-
|
|
273
|
-
changelog_uri: https://github.com/kettle-
|
|
274
|
-
bug_tracker_uri: https://github.com/kettle-
|
|
275
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-drift/1.0.
|
|
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-
|
|
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
|