kettle-dev 2.0.5 → 2.0.6
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 +37 -1
- data/CONTRIBUTING.md +17 -1
- data/README.md +124 -323
- data/exe/kettle-changelog +2 -0
- data/exe/kettle-dev-setup +4 -4
- data/lib/kettle/dev/changelog_cli.rb +1 -12
- data/lib/kettle/dev/version.rb +1 -1
- data/lib/kettle/dev/versioning.rb +18 -3
- data.tar.gz.sig +0 -0
- metadata +4 -4
- 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: b24de5e23880095309ef51620dd87613c13465a73b0203112e2637db237d1de8
|
|
4
|
+
data.tar.gz: 89cdad7e0b115974c4c80fe2caad474ccc30d15eff044aceca9f1e6c2ea85dd2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fe49fa0aa98430895ae852970aec9d22a0c59f21e1c558f34fa0f86867e9dfdd52aac2eccfdfa4c4cad71dc832d6abd001975e72896f00a68341302a1e8e68d9
|
|
7
|
+
data.tar.gz: bf796cfa87ce767b0d1420c03c822083fa1d5a09690963edc43b3c06593ded4b2fe722f1c59174b19265a5bf2b16e4a2709e0c450ad41fbe95d630f50895eb33
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,40 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [2.0.6] - 2026-05-31
|
|
34
|
+
|
|
35
|
+
- TAG: [v2.0.6][2.0.6t]
|
|
36
|
+
- COVERAGE: 93.14% -- 2961/3179 lines in 25 files
|
|
37
|
+
- BRANCH COVERAGE: 76.95% -- 1205/1566 branches in 25 files
|
|
38
|
+
- 75.93% documented
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- `kettle-changelog` now supports monorepo version files, allowing release
|
|
43
|
+
preparation for gems whose version constants live below subproject roots.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- Refreshed generated `kettle-jem` template output, including
|
|
48
|
+
`.structuredmerge` configuration, Git diff driver setup, RuboCop-LTS RSpec
|
|
49
|
+
style dependencies, and release task wiring.
|
|
50
|
+
|
|
51
|
+
- Updated the user-maintained README usage sections to describe the current
|
|
52
|
+
kettle-dev task, changelog, release, and kettle-jem setup boundaries.
|
|
53
|
+
- Corrected the deprecated `kettle-dev-setup` documentation and shim output to
|
|
54
|
+
point at the real `kettle-jem setup` command.
|
|
55
|
+
- Refreshed the README with current kettle-jem logo templating, including
|
|
56
|
+
128px HTML logo output and the Ruby Toolbox language-logo link.
|
|
57
|
+
- Moved the generated related-org and Ruby README logos from the H1 to the
|
|
58
|
+
Synopsis heading with the current kettle-jem width defaults.
|
|
59
|
+
- Added the generated README note that identifies kettle-jem and
|
|
60
|
+
StructuredMerge as the templating and merge-contract tooling.
|
|
61
|
+
|
|
62
|
+
### Fixed
|
|
63
|
+
|
|
64
|
+
- Regenerated the spec helper so `kettle-dev` is required only after coverage
|
|
65
|
+
bootstrap setup.
|
|
66
|
+
|
|
33
67
|
## [2.0.5] - 2026-05-28
|
|
34
68
|
|
|
35
69
|
- TAG: [v2.0.5][2.0.5t]
|
|
@@ -1812,7 +1846,9 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
1812
1846
|
- Selecting will run the selected workflow via `act`
|
|
1813
1847
|
- This may move to its own gem in the future.
|
|
1814
1848
|
|
|
1815
|
-
[Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v2.0.
|
|
1849
|
+
[Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v2.0.6...HEAD
|
|
1850
|
+
[2.0.6]: https://github.com/kettle-rb/kettle-dev/compare/v2.0.5...v2.0.6
|
|
1851
|
+
[2.0.6t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v2.0.6
|
|
1816
1852
|
[2.0.5]: https://github.com/kettle-rb/kettle-dev/compare/v2.0.4...v2.0.5
|
|
1817
1853
|
[2.0.5t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v2.0.5
|
|
1818
1854
|
[2.0.4]: https://github.com/kettle-rb/kettle-dev/compare/v2.0.3...v2.0.4
|
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 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 --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: 2.4`.
|
|
127
|
+
in `.structuredmerge/kettle-jem.yml`; this project was templated with `ruby.test_minimum: 2.4`.
|
|
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
|
|
data/README.md
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
[🖼️galtzo-floss-i]: https://logos.galtzo.com/assets/images/galtzo-floss/avatar-192px.svg
|
|
4
|
-
[🖼️galtzo-floss]: https://discord.gg/3qme4XHNKN
|
|
5
|
-
[🖼️ruby-lang-i]: https://logos.galtzo.com/assets/images/ruby-lang/avatar-192px.svg
|
|
6
|
-
[🖼️ruby-lang]: https://www.ruby-lang.org/
|
|
7
|
-
[🖼️kettle-rb-i]: https://logos.galtzo.com/assets/images/kettle-rb/avatar-192px.svg
|
|
8
|
-
[🖼️kettle-rb]: https://github.com/kettle-rb
|
|
1
|
+
<a href="https://github.com/kettle-rb"><img alt="kettle-rb Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-rb/avatar-128px.svg" width="14%" align="right"/></a>
|
|
9
2
|
|
|
10
3
|
# 🍲 Kettle::Dev
|
|
11
4
|
|
|
12
|
-
[![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]
|
|
13
6
|
|
|
14
|
-
`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].
|
|
15
8
|
|
|
16
9
|
---
|
|
17
10
|
|
|
@@ -26,187 +19,70 @@ I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-ta
|
|
|
26
19
|
|
|
27
20
|
</details>
|
|
28
21
|
|
|
29
|
-
## 🌻 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>
|
|
30
23
|
|
|
31
|
-
|
|
24
|
+
Kettle::Dev is the development, CI, changelog, and release harness used by
|
|
25
|
+
kettle-rb gems. It installs rake tasks when loaded from a project's `Rakefile`,
|
|
26
|
+
and it ships command-line tools for changelog preparation, release automation,
|
|
27
|
+
multi-forge git remotes, commit-message hooks, and Open Collective README
|
|
28
|
+
updates.
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
#
|
|
30
|
+
Add it to a gem's development dependencies, then load the rake integration:
|
|
31
|
+
|
|
32
|
+
```ruby
|
|
33
|
+
# Gemfile
|
|
34
|
+
group :development, :test do
|
|
35
|
+
gem "kettle-dev", require: false
|
|
36
|
+
end
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
```ruby
|
|
40
|
+
# Rakefile
|
|
41
|
+
require "kettle/dev"
|
|
42
|
+
```
|
|
40
43
|
|
|
41
|
-
|
|
44
|
+
For RSpec projects, use the matching test harness from
|
|
45
|
+
[kettle-test](https://github.com/kettle-rb/kettle-test):
|
|
42
46
|
|
|
43
47
|
```ruby
|
|
44
48
|
require "kettle/test/rspec"
|
|
45
49
|
```
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
If you need to top-up an old setup to get the latest goodies, just re-template:
|
|
51
|
+
Project setup and template refreshes are now owned by
|
|
52
|
+
[kettle-jem](https://github.com/kettle-rb/kettle-jem), not kettle-dev:
|
|
50
53
|
|
|
51
54
|
```console
|
|
52
|
-
|
|
55
|
+
gem install kettle-jem
|
|
56
|
+
kettle-jem setup
|
|
53
57
|
```
|
|
54
58
|
|
|
55
|
-
|
|
59
|
+
Once a project is wired, the normal local development loop is:
|
|
56
60
|
|
|
57
|
-
|
|
61
|
+
```console
|
|
62
|
+
bin/rake
|
|
63
|
+
bin/rake rubocop_gradual:autocorrect
|
|
64
|
+
bin/rake yard
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
And the maintainer release flow is:
|
|
58
68
|
|
|
59
69
|
```console
|
|
70
|
+
bin/kettle-pre-release
|
|
60
71
|
bin/kettle-changelog
|
|
61
72
|
bin/kettle-release
|
|
62
73
|
```
|
|
63
74
|
|
|
64
|
-
###
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
| [json-merge][json-merge] | [![Version][json-merge-gem-i]][json-merge-gem] <br/> [![CI][json-merge-ci-i]][json-merge-ci] | JSON | [tree-sitter-json][ts-json] (via tree_haver) | Smart merge for JSON files |
|
|
76
|
-
| [jsonc-merge][jsonc-merge] | [![Version][jsonc-merge-gem-i]][jsonc-merge-gem] <br/> [![CI][jsonc-merge-ci-i]][jsonc-merge-ci] | JSONC | [tree-sitter-jsonc][ts-jsonc] (via tree_haver) | ⚠️ Proof of concept; Smart merge for JSON with Comments |
|
|
77
|
-
| [markdown-merge][markdown-merge] | [![Version][markdown-merge-gem-i]][markdown-merge-gem] <br/> [![CI][markdown-merge-ci-i]][markdown-merge-ci] | Markdown | [Commonmarker][commonmarker] / [Markly][markly] (via tree_haver), [Parslet][parslet] | **Foundation**: Shared base for Markdown mergers with inner code block merging |
|
|
78
|
-
| [markly-merge][markly-merge] | [![Version][markly-merge-gem-i]][markly-merge-gem] <br/> [![CI][markly-merge-ci-i]][markly-merge-ci] | Markdown | [Markly][markly] (via tree_haver) | Smart merge for Markdown (CommonMark via cmark-gfm C) |
|
|
79
|
-
| [prism-merge][prism-merge] | [![Version][prism-merge-gem-i]][prism-merge-gem] <br/> [![CI][prism-merge-ci-i]][prism-merge-ci] | Ruby | [Prism][prism] (`prism` std lib gem) | Smart merge for Ruby source files |
|
|
80
|
-
| [psych-merge][psych-merge] | [![Version][psych-merge-gem-i]][psych-merge-gem] <br/> [![CI][psych-merge-ci-i]][psych-merge-ci] | YAML | [Psych][psych] (`psych` std lib gem) | Smart merge for YAML files |
|
|
81
|
-
| [rbs-merge][rbs-merge] | [![Version][rbs-merge-gem-i]][rbs-merge-gem] <br/> [![CI][rbs-merge-ci-i]][rbs-merge-ci] | RBS | [tree-sitter-rbs][ts-rbs] (via tree_haver), [RBS][rbs] (`rbs` std lib gem) | Smart merge for Ruby type signatures |
|
|
82
|
-
| [toml-merge][toml-merge] | [![Version][toml-merge-gem-i]][toml-merge-gem] <br/> [![CI][toml-merge-ci-i]][toml-merge-ci] | TOML | [Parslet + toml][toml], [Citrus + toml-rb][toml-rb], [tree-sitter-toml][ts-toml] (all via tree_haver) | Smart merge for TOML files |
|
|
83
|
-
|
|
84
|
-
#### Backend Platform Compatibility
|
|
85
|
-
|
|
86
|
-
tree_haver supports multiple parsing backends, but not all backends work on all Ruby platforms:
|
|
87
|
-
|
|
88
|
-
| Platform 👉️<br> TreeHaver Backend 👇️ | MRI | JRuby | TruffleRuby | Notes |
|
|
89
|
-
|-------------------------------------------------|:---:|:-----:|:-----------:|----------------------------------------------------------------------------|
|
|
90
|
-
| **MRI** ([ruby_tree_sitter][ruby_tree_sitter]) | ✅ | ❌ | ❌ | C extension, MRI only |
|
|
91
|
-
| **Rust** ([tree_stump][tree_stump]) | ✅ | ❌ | ❌ | Rust extension via magnus/rb-sys, MRI only |
|
|
92
|
-
| **FFI** ([ffi][ffi]) | ✅ | ✅ | ❌ | TruffleRuby's FFI doesn't support `STRUCT_BY_VALUE` |
|
|
93
|
-
| **Java** ([jtreesitter][jtreesitter]) | ❌ | ✅ | ❌ | JRuby only, requires grammar JARs |
|
|
94
|
-
| **Prism** ([prism][prism]) | ✅ | ✅ | ✅ | Ruby parsing, stdlib in Ruby 3.4+ |
|
|
95
|
-
| **Psych** ([psych][psych]) | ✅ | ✅ | ✅ | YAML parsing, stdlib |
|
|
96
|
-
| **Citrus** ([citrus][citrus]) | ✅ | ✅ | ✅ | Pure Ruby PEG parser, no native dependencies |
|
|
97
|
-
| **Parslet** ([parslet][parslet]) | ✅ | ✅ | ✅ | Pure Ruby PEG parser, no native dependencies |
|
|
98
|
-
| **Commonmarker** ([commonmarker][commonmarker]) | ✅ | ❌ | ❓ | Rust extension for Markdown (via [commonmarker-merge][commonmarker-merge]) |
|
|
99
|
-
| **Markly** ([markly][markly]) | ✅ | ❌ | ❓ | C extension for Markdown (via [markly-merge][markly-merge]) |
|
|
100
|
-
|
|
101
|
-
**Legend**: ✅ = Works, ❌ = Does not work, ❓ = Untested
|
|
102
|
-
|
|
103
|
-
**Why some backends don't work on certain platforms**:
|
|
104
|
-
|
|
105
|
-
- **JRuby**: Runs on the JVM; cannot load native C/Rust extensions (`.so` files)
|
|
106
|
-
- **TruffleRuby**: Has C API emulation via Sulong/LLVM, but it doesn't expose all MRI internals that native extensions require (e.g., `RBasic.flags`, `rb_gc_writebarrier`)
|
|
107
|
-
- **FFI on TruffleRuby**: TruffleRuby's FFI implementation doesn't support returning structs by value, which tree-sitter's C API requires
|
|
108
|
-
|
|
109
|
-
**Example implementations** for the gem templating use case:
|
|
110
|
-
|
|
111
|
-
| Gem | Purpose | Description |
|
|
112
|
-
|--------------------------|-----------------|-----------------------------------------------|
|
|
113
|
-
| [kettle-dev][kettle-dev] | Gem Development | Development tooling, CI automation, and release workflows |
|
|
114
|
-
| [kettle-jem][kettle-jem] | Gem Templating | Gem template library with smart merge support |
|
|
115
|
-
|
|
116
|
-
[tree_haver]: https://github.com/kettle-rb/tree_haver
|
|
117
|
-
[ast-merge]: https://github.com/kettle-rb/ast-merge
|
|
118
|
-
[prism-merge]: https://github.com/kettle-rb/prism-merge
|
|
119
|
-
[psych-merge]: https://github.com/kettle-rb/psych-merge
|
|
120
|
-
[json-merge]: https://github.com/kettle-rb/json-merge
|
|
121
|
-
[jsonc-merge]: https://github.com/kettle-rb/jsonc-merge
|
|
122
|
-
[bash-merge]: https://github.com/kettle-rb/bash-merge
|
|
123
|
-
[rbs-merge]: https://github.com/kettle-rb/rbs-merge
|
|
124
|
-
[dotenv-merge]: https://github.com/kettle-rb/dotenv-merge
|
|
125
|
-
[toml-merge]: https://github.com/kettle-rb/toml-merge
|
|
126
|
-
[markdown-merge]: https://github.com/kettle-rb/markdown-merge
|
|
127
|
-
[markly-merge]: https://github.com/kettle-rb/markly-merge
|
|
128
|
-
[commonmarker-merge]: https://github.com/kettle-rb/commonmarker-merge
|
|
129
|
-
[kettle-dev]: https://github.com/kettle-rb/kettle-dev
|
|
130
|
-
[kettle-jem]: https://github.com/kettle-rb/kettle-jem
|
|
131
|
-
[tree_haver-gem]: https://bestgems.org/gems/tree_haver
|
|
132
|
-
[ast-merge-gem]: https://bestgems.org/gems/ast-merge
|
|
133
|
-
[prism-merge-gem]: https://bestgems.org/gems/prism-merge
|
|
134
|
-
[psych-merge-gem]: https://bestgems.org/gems/psych-merge
|
|
135
|
-
[json-merge-gem]: https://bestgems.org/gems/json-merge
|
|
136
|
-
[jsonc-merge-gem]: https://bestgems.org/gems/jsonc-merge
|
|
137
|
-
[bash-merge-gem]: https://bestgems.org/gems/bash-merge
|
|
138
|
-
[rbs-merge-gem]: https://bestgems.org/gems/rbs-merge
|
|
139
|
-
[dotenv-merge-gem]: https://bestgems.org/gems/dotenv-merge
|
|
140
|
-
[toml-merge-gem]: https://bestgems.org/gems/toml-merge
|
|
141
|
-
[markdown-merge-gem]: https://bestgems.org/gems/markdown-merge
|
|
142
|
-
[markly-merge-gem]: https://bestgems.org/gems/markly-merge
|
|
143
|
-
[commonmarker-merge-gem]: https://bestgems.org/gems/commonmarker-merge
|
|
144
|
-
[kettle-dev-gem]: https://bestgems.org/gems/kettle-dev
|
|
145
|
-
[kettle-jem-gem]: https://bestgems.org/gems/kettle-jem
|
|
146
|
-
[tree_haver-gem-i]: https://img.shields.io/gem/v/tree_haver.svg
|
|
147
|
-
[ast-merge-gem-i]: https://img.shields.io/gem/v/ast-merge.svg
|
|
148
|
-
[prism-merge-gem-i]: https://img.shields.io/gem/v/prism-merge.svg
|
|
149
|
-
[psych-merge-gem-i]: https://img.shields.io/gem/v/psych-merge.svg
|
|
150
|
-
[json-merge-gem-i]: https://img.shields.io/gem/v/json-merge.svg
|
|
151
|
-
[jsonc-merge-gem-i]: https://img.shields.io/gem/v/jsonc-merge.svg
|
|
152
|
-
[bash-merge-gem-i]: https://img.shields.io/gem/v/bash-merge.svg
|
|
153
|
-
[rbs-merge-gem-i]: https://img.shields.io/gem/v/rbs-merge.svg
|
|
154
|
-
[dotenv-merge-gem-i]: https://img.shields.io/gem/v/dotenv-merge.svg
|
|
155
|
-
[toml-merge-gem-i]: https://img.shields.io/gem/v/toml-merge.svg
|
|
156
|
-
[markdown-merge-gem-i]: https://img.shields.io/gem/v/markdown-merge.svg
|
|
157
|
-
[markly-merge-gem-i]: https://img.shields.io/gem/v/markly-merge.svg
|
|
158
|
-
[commonmarker-merge-gem-i]: https://img.shields.io/gem/v/commonmarker-merge.svg
|
|
159
|
-
[kettle-dev-gem-i]: https://img.shields.io/gem/v/kettle-dev.svg
|
|
160
|
-
[kettle-jem-gem-i]: https://img.shields.io/gem/v/kettle-jem.svg
|
|
161
|
-
[tree_haver-ci-i]: https://github.com/kettle-rb/tree_haver/actions/workflows/current.yml/badge.svg
|
|
162
|
-
[ast-merge-ci-i]: https://github.com/kettle-rb/ast-merge/actions/workflows/current.yml/badge.svg
|
|
163
|
-
[prism-merge-ci-i]: https://github.com/kettle-rb/prism-merge/actions/workflows/current.yml/badge.svg
|
|
164
|
-
[psych-merge-ci-i]: https://github.com/kettle-rb/psych-merge/actions/workflows/current.yml/badge.svg
|
|
165
|
-
[json-merge-ci-i]: https://github.com/kettle-rb/json-merge/actions/workflows/current.yml/badge.svg
|
|
166
|
-
[jsonc-merge-ci-i]: https://github.com/kettle-rb/jsonc-merge/actions/workflows/current.yml/badge.svg
|
|
167
|
-
[bash-merge-ci-i]: https://github.com/kettle-rb/bash-merge/actions/workflows/current.yml/badge.svg
|
|
168
|
-
[rbs-merge-ci-i]: https://github.com/kettle-rb/rbs-merge/actions/workflows/current.yml/badge.svg
|
|
169
|
-
[dotenv-merge-ci-i]: https://github.com/kettle-rb/dotenv-merge/actions/workflows/current.yml/badge.svg
|
|
170
|
-
[toml-merge-ci-i]: https://github.com/kettle-rb/toml-merge/actions/workflows/current.yml/badge.svg
|
|
171
|
-
[markdown-merge-ci-i]: https://github.com/kettle-rb/markdown-merge/actions/workflows/current.yml/badge.svg
|
|
172
|
-
[markly-merge-ci-i]: https://github.com/kettle-rb/markly-merge/actions/workflows/current.yml/badge.svg
|
|
173
|
-
[commonmarker-merge-ci-i]: https://github.com/kettle-rb/commonmarker-merge/actions/workflows/current.yml/badge.svg
|
|
174
|
-
[kettle-dev-ci-i]: https://github.com/kettle-rb/kettle-dev/actions/workflows/current.yml/badge.svg
|
|
175
|
-
[kettle-jem-ci-i]: https://github.com/kettle-rb/kettle-jem/actions/workflows/current.yml/badge.svg
|
|
176
|
-
[tree_haver-ci]: https://github.com/kettle-rb/tree_haver/actions/workflows/current.yml
|
|
177
|
-
[ast-merge-ci]: https://github.com/kettle-rb/ast-merge/actions/workflows/current.yml
|
|
178
|
-
[prism-merge-ci]: https://github.com/kettle-rb/prism-merge/actions/workflows/current.yml
|
|
179
|
-
[psych-merge-ci]: https://github.com/kettle-rb/psych-merge/actions/workflows/current.yml
|
|
180
|
-
[json-merge-ci]: https://github.com/kettle-rb/json-merge/actions/workflows/current.yml
|
|
181
|
-
[jsonc-merge-ci]: https://github.com/kettle-rb/jsonc-merge/actions/workflows/current.yml
|
|
182
|
-
[bash-merge-ci]: https://github.com/kettle-rb/bash-merge/actions/workflows/current.yml
|
|
183
|
-
[rbs-merge-ci]: https://github.com/kettle-rb/rbs-merge/actions/workflows/current.yml
|
|
184
|
-
[dotenv-merge-ci]: https://github.com/kettle-rb/dotenv-merge/actions/workflows/current.yml
|
|
185
|
-
[toml-merge-ci]: https://github.com/kettle-rb/toml-merge/actions/workflows/current.yml
|
|
186
|
-
[markdown-merge-ci]: https://github.com/kettle-rb/markdown-merge/actions/workflows/current.yml
|
|
187
|
-
[markly-merge-ci]: https://github.com/kettle-rb/markly-merge/actions/workflows/current.yml
|
|
188
|
-
[commonmarker-merge-ci]: https://github.com/kettle-rb/commonmarker-merge/actions/workflows/current.yml
|
|
189
|
-
[kettle-dev-ci]: https://github.com/kettle-rb/kettle-dev/actions/workflows/current.yml
|
|
190
|
-
[kettle-jem-ci]: https://github.com/kettle-rb/kettle-jem/actions/workflows/current.yml
|
|
191
|
-
[prism]: https://github.com/ruby/prism
|
|
192
|
-
[psych]: https://github.com/ruby/psych
|
|
193
|
-
[ffi]: https://github.com/ffi/ffi
|
|
194
|
-
[ts-json]: https://github.com/tree-sitter/tree-sitter-json
|
|
195
|
-
[ts-jsonc]: https://gitlab.com/WhyNotHugo/tree-sitter-jsonc
|
|
196
|
-
[ts-bash]: https://github.com/tree-sitter/tree-sitter-bash
|
|
197
|
-
[ts-rbs]: https://github.com/joker1007/tree-sitter-rbs
|
|
198
|
-
[ts-toml]: https://github.com/tree-sitter-grammars/tree-sitter-toml
|
|
199
|
-
[dotenv]: https://github.com/bkeepers/dotenv
|
|
200
|
-
[rbs]: https://github.com/ruby/rbs
|
|
201
|
-
[toml-rb]: https://github.com/emancu/toml-rb
|
|
202
|
-
[toml]: https://github.com/jm/toml
|
|
203
|
-
[markly]: https://github.com/ioquatix/markly
|
|
204
|
-
[commonmarker]: https://github.com/gjtorikian/commonmarker
|
|
205
|
-
[ruby_tree_sitter]: https://github.com/Faveod/ruby-tree-sitter
|
|
206
|
-
[tree_stump]: https://github.com/joker1007/tree_stump
|
|
207
|
-
[jtreesitter]: https://central.sonatype.com/artifact/io.github.tree-sitter/jtreesitter
|
|
208
|
-
[citrus]: https://github.com/mjackson/citrus
|
|
209
|
-
[parslet]: https://github.com/kschiess/parslet
|
|
75
|
+
### What kettle-dev provides
|
|
76
|
+
|
|
77
|
+
- Rake task loading from `require "kettle/dev"`.
|
|
78
|
+
- RuboCop Gradual, Reek, YARD, appraisal, local CI, benchmark, and coverage task wiring.
|
|
79
|
+
- `kettle-changelog` for moving Unreleased changelog notes into a versioned release section with coverage and documentation stats.
|
|
80
|
+
- `kettle-release` for the canonical kettle-rb release flow.
|
|
81
|
+
- `kettle-pre-release` for release readiness checks.
|
|
82
|
+
- `kettle-dvcs` for normalizing GitHub, GitLab, Codeberg, and aggregate remotes.
|
|
83
|
+
- `kettle-commit-msg` for shared commit-message hook behavior.
|
|
84
|
+
- `kettle-readme-backers` for Open Collective README sections.
|
|
85
|
+
- `kettle-dev-setup` as a deprecated compatibility executable that exits with instructions to use kettle-jem.
|
|
210
86
|
|
|
211
87
|
## 💡 Info you can shake a stick at
|
|
212
88
|
|
|
@@ -292,19 +168,22 @@ gem install kettle-dev
|
|
|
292
168
|
|
|
293
169
|
## ⚙️ Configuration
|
|
294
170
|
|
|
295
|
-
|
|
171
|
+
Kettle-dev has two integration surfaces:
|
|
296
172
|
|
|
297
|
-
- Executable scripts
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
173
|
+
- Executable scripts in `exe/`, or binstubs generated from them, can run when
|
|
174
|
+
`kettle-dev` is installed and loadable.
|
|
175
|
+
- Rake tasks are registered by adding `kettle-dev` to the project's development
|
|
176
|
+
dependencies and requiring `kettle/dev` from the project's `Rakefile`.
|
|
177
|
+
|
|
178
|
+
```ruby
|
|
179
|
+
group :development, :test do
|
|
180
|
+
gem "kettle-dev", require: false
|
|
181
|
+
end
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
```ruby
|
|
185
|
+
require "kettle/dev"
|
|
186
|
+
```
|
|
308
187
|
|
|
309
188
|
### RSpec
|
|
310
189
|
|
|
@@ -337,78 +216,33 @@ Add to your `Rakefile`:
|
|
|
337
216
|
require "kettle/dev"
|
|
338
217
|
```
|
|
339
218
|
|
|
340
|
-
|
|
219
|
+
This loads the kettle-dev rake task set. Current project setup and template
|
|
220
|
+
refreshes should be run through kettle-jem:
|
|
341
221
|
|
|
342
222
|
```console
|
|
343
|
-
kettle-
|
|
344
|
-
|
|
345
|
-
kettle-dev-setup --allowed=true --force
|
|
223
|
+
gem install kettle-jem
|
|
224
|
+
kettle-jem setup
|
|
346
225
|
```
|
|
347
226
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
For your protection:
|
|
227
|
+
`kettle-dev-setup` is still shipped for compatibility, but it now exits with a
|
|
228
|
+
message explaining that setup and templating moved to kettle-jem.
|
|
351
229
|
|
|
352
|
-
|
|
353
|
-
After bootstrapping, to update the template to the latest version from a new release of this gem, run:
|
|
354
|
-
|
|
355
|
-
<!-- end list -->
|
|
230
|
+
Useful registered tasks include:
|
|
356
231
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
232
|
+
- `rubocop_gradual:autocorrect` and `rubocop_gradual:check`
|
|
233
|
+
- `reek` and `reek:update`
|
|
234
|
+
- `yard`
|
|
235
|
+
- `appraisal:install`, `appraisal:generate`, `appraisal:update`, and `appraisal:reset`
|
|
236
|
+
- `ci:act`
|
|
237
|
+
- `bench`
|
|
238
|
+
- `kettle:jem:template` and `kettle:jem:selftest`, when kettle-jem's task integration is available
|
|
360
239
|
|
|
361
|
-
|
|
362
|
-
It may have some prompts, which can mostly be avoided by running with options:
|
|
240
|
+
Install binstubs when a project wants local `bin/kettle-*` commands:
|
|
363
241
|
|
|
364
242
|
```console
|
|
365
|
-
|
|
366
|
-
bundle exec rake kettle:dev:install allowed=true force=true
|
|
243
|
+
bundle binstubs kettle-dev --path bin
|
|
367
244
|
```
|
|
368
245
|
|
|
369
|
-
Hopefully, all the files that get overwritten are tracked in git\!
|
|
370
|
-
I wrote this for myself, and it fits my patterns of development.
|
|
371
|
-
|
|
372
|
-
The install task will write a report at the end with:
|
|
373
|
-
|
|
374
|
-
1. A file list summary of the changes made.
|
|
375
|
-
2. Next steps for using the tools.
|
|
376
|
-
3. A warning about .env.local (DO NOT COMMIT IT, as it will likely have secrets added)
|
|
377
|
-
That’s it. Once installed, kettle-dev:
|
|
378
|
-
|
|
379
|
-
<!-- end list -->
|
|
380
|
-
|
|
381
|
-
- Registers RuboCop-LTS tasks and wires your default Rake task to run the gradual linter.
|
|
382
|
-
- Locally: default task prefers `rubocop_gradual:autocorrect`.
|
|
383
|
-
- On CI (`CI=true`): default task prefers `rubocop_gradual:check`.
|
|
384
|
-
- Integrates optional coverage tasks via kettle-soup-cover (enabled locally when present).
|
|
385
|
-
- Adds gem-shipped Rake tasks from `lib/kettle/dev/rakelib`, including:
|
|
386
|
-
- `ci:act` — interactive selector for running GitHub Actions workflows via `act`.
|
|
387
|
-
- `kettle:dev:install` — copies this repo’s .github automation, offers to install .git-hooks templates, and overwrites many files in your project.
|
|
388
|
-
- Grapheme syncing: detects the grapheme (e.g., emoji) immediately following the first `#` H1 in README.md and ensures the same grapheme, followed by a single space, prefixes both `spec.summary` and `spec.description` in your gemspec. If the H1 has none, you’ll be prompted to enter one; tests use an input adapter, so runs never hang in CI.
|
|
389
|
-
- option: force: When truthy (1, true, y, yes), treat all y/N prompts as Yes. Useful for non-interactive runs or to accept defaults quickly. Example: `bundle exec rake kettle:dev:install force=true`
|
|
390
|
-
- option: allowed: When truthy (1, true, y, yes), resume task after you have reviewed `.envrc`/`.env.local` and run `direnv allow`. If either file is created or updated, the task will abort with instructions unless `allowed=true` is present. Example: `bundle exec rake kettle:dev:install allowed=true`
|
|
391
|
-
- option: only: A comma-separated list of glob patterns to include in templating. Any destination file whose path+filename does not match one of the patterns is excluded. Patterns are matched relative to your project root. Examples: `only="README.md,.github/**"`, `only="docs/**,lib/**/*.rb"`.
|
|
392
|
-
- option: include: A comma-separated list of glob patterns that opt-in additional, non-default files. Currently, `.github/workflows/discord-notifier.yml` is not copied by default and will only be copied when `include` matches it (e.g., `include=".github/workflows/discord-notifier.yml"`).
|
|
393
|
-
- `kettle:jem:template` (provided by [kettle-jem][kettle-jem]) — templates files from this gem into your project (e.g., .github workflows, .devcontainer, .qlty, modular Gemfiles, README/CONTRIBUTING stubs). You can run this independently to refresh templates without the extra install prompts.
|
|
394
|
-
- option: force: When truthy (1, true, y, yes), treat all y/N prompts as Yes. Useful for non-interactive runs or to accept defaults quickly. Example: `bundle exec rake kettle:dev:install force=true`
|
|
395
|
-
- option: allowed: When truthy (1, true, y, yes), resume task after you have reviewed `.envrc`/`.env.local` and run `direnv allow`. If either file is created or updated, the task will abort with instructions unless `allowed=true` is present. Example: `bundle exec rake kettle:jem:template allowed=true`
|
|
396
|
-
- option: only: Same as for install; limits which destination files are written based on glob patterns relative to the project root.
|
|
397
|
-
- option: include: Same as for install; opts into optional files (e.g., `.github/workflows/discord-notifier.yml`).
|
|
398
|
-
Recommended one-time setup in your project:
|
|
399
|
-
- Install binstubs so kettle-dev executables are available under `./bin`:
|
|
400
|
-
- `bundle binstubs kettle-dev --path bin`
|
|
401
|
-
- Use direnv (recommended) so `./bin` is on PATH automatically:
|
|
402
|
-
- `brew install direnv`
|
|
403
|
-
- In your project’s `.envrc` add:
|
|
404
|
-
- `# Run any command in this library's bin/ without the bin/ prefix!`
|
|
405
|
-
- `PATH_add bin`
|
|
406
|
-
- Configure shared git hooks path (optional, recommended):
|
|
407
|
-
- `git config --global core.hooksPath .git-hooks`
|
|
408
|
-
- Install project automation and sample hooks/templates:
|
|
409
|
-
- `bundle exec rake kettle:dev:install` and follow prompts (copies .github and installs .git-hooks templates locally or globally).
|
|
410
|
-
See the next section for environment variables that tweak behavior.
|
|
411
|
-
|
|
412
246
|
### Environment Variables
|
|
413
247
|
|
|
414
248
|
Below are the primary environment variables recognized by kettle-dev (and its integrated tools). Unless otherwise noted, set boolean values to the string "true" to enable.
|
|
@@ -454,66 +288,39 @@ For a quick starting point, this repository’s `.envrc` shows sane defaults, an
|
|
|
454
288
|
|
|
455
289
|
## 🔧 Basic Usage
|
|
456
290
|
|
|
457
|
-
Common
|
|
458
|
-
|
|
459
|
-
-
|
|
460
|
-
|
|
461
|
-
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
-
|
|
478
|
-
|
|
479
|
-
-
|
|
480
|
-
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
- Where to create: [gitlab.com](https://gitlab.com/-/user_settings/personal_access_tokens)
|
|
491
|
-
- Minimum scope: `read_api` (sufficient to read pipelines)
|
|
492
|
-
- Add to environment (.env.local via direnv):
|
|
493
|
-
- `GITLAB_TOKEN=your_token_here` (or `GL_TOKEN=…`)
|
|
494
|
-
- Load environment:
|
|
495
|
-
- Save tokens in `.env.local` (never commit this file), then run: `direnv allow`
|
|
496
|
-
- Verify:
|
|
497
|
-
- Run: bundle exec rake ci:act
|
|
498
|
-
- The header will include Repo/Upstream/HEAD; entries will show “Latest GHA …” and “Latest GL … pipeline” with emoji status. On failure to authenticate or rate-limit, you’ll see a brief error/result code.
|
|
499
|
-
Project automation bootstrap
|
|
500
|
-
- `bundle exec rake kettle:dev:install` — copies the library’s `.github` folder into your project and offers to install `.git-hooks` templates locally or globally.
|
|
501
|
-
- `bundle exec rake kettle:jem:template` — runs only the templating step used by install; useful to re-apply updates to templates (.github workflows, .devcontainer, .qlty, modular Gemfiles, README, and friends) without the `install` task’s extra prompts.
|
|
502
|
-
- Also copies maintainer certificate `certs/pboling.pem` into your project when present (used for signed gem builds).
|
|
503
|
-
- README carry-over during templating: when your project’s README.md is replaced by the template, selected sections from your existing README are preserved and merged into the new one. Specifically, the task carries over the following sections (matched case-insensitively):
|
|
504
|
-
- "Synopsis"
|
|
505
|
-
- "Configuration"
|
|
506
|
-
- "Basic Usage"
|
|
507
|
-
- Any section whose heading starts with "Note:" at any heading level (for example: "\# NOTE: …", "\#\# Note: …", or "\#\#\# note: …").
|
|
508
|
-
- Headings are recognized at any level using Markdown hashes (\#, \#\#, \#\#\#, …).
|
|
509
|
-
- Notes about task options:
|
|
510
|
-
- Non-interactive confirmations: append `force=true` to accept all y/N prompts as Yes, e.g., `bundle exec rake kettle:jem:template force=true`.
|
|
511
|
-
- direnv review flow: if `.envrc` or `.env.local` is created or updated, the task stops and asks you to run `direnv allow`. After you review and allow, resume with `allowed=true`:
|
|
512
|
-
- `bundle exec rake kettle:jem:template allowed=true`
|
|
513
|
-
- `bundle exec rake kettle:dev:install allowed=true`
|
|
514
|
-
- After that, set up binstubs and direnv for convenience:
|
|
515
|
-
- `bundle binstubs kettle-dev --path bin`
|
|
516
|
-
- Add to `.envrc`: `PATH_add bin` (so `bin/` tools run without the prefix)
|
|
291
|
+
Common local workflows:
|
|
292
|
+
|
|
293
|
+
- `bundle exec rake` runs the curated default task set. Locally this favors
|
|
294
|
+
autocorrection where supported; with `CI=true` it favors check-only behavior.
|
|
295
|
+
- `bin/rspec` or `bundle exec rspec` runs specs.
|
|
296
|
+
- `K_SOUP_COV_MIN_HARD=false bin/rspec spec/path/to/file_spec.rb` is useful for
|
|
297
|
+
focused spec runs that should not fail whole-suite coverage thresholds.
|
|
298
|
+
- `bundle exec rake rubocop_gradual:autocorrect` applies gradual RuboCop fixes.
|
|
299
|
+
- `bundle exec rake rubocop_gradual:check` is the CI-friendly RuboCop Gradual task.
|
|
300
|
+
- `bundle exec rake reek` and `bundle exec rake reek:update` run or refresh Reek.
|
|
301
|
+
- `bundle exec rake yard` builds API documentation.
|
|
302
|
+
- `bundle exec rake appraisal:install` performs first-time Appraisal setup.
|
|
303
|
+
- `bundle exec rake appraisal:generate` regenerates Appraisal gemfiles.
|
|
304
|
+
- `bundle exec rake appraisal:update` updates Appraisal locks and applies gradual RuboCop autocorrect.
|
|
305
|
+
- `bundle exec rake appraisal:reset` removes Appraisal lockfiles below `gemfiles/`.
|
|
306
|
+
|
|
307
|
+
GitHub Actions local runner helper:
|
|
308
|
+
|
|
309
|
+
- `bundle exec rake ci:act` opens an interactive workflow selector using
|
|
310
|
+
`.github/workflows` and live CI status when tokens are available.
|
|
311
|
+
- `bundle exec rake ci:act[loc]` selects by short code.
|
|
312
|
+
- `bundle exec rake ci:act[locked_deps.yml]` selects by workflow filename.
|
|
313
|
+
- Set `GITHUB_TOKEN` or `GH_TOKEN` for GitHub Actions API status.
|
|
314
|
+
- Set `GITLAB_TOKEN` or `GL_TOKEN` for GitLab pipeline status.
|
|
315
|
+
|
|
316
|
+
Project automation and template refreshes:
|
|
317
|
+
|
|
318
|
+
- Use `kettle-jem setup` for first-time setup and `kettle-jem install` for
|
|
319
|
+
full template refreshes.
|
|
320
|
+
- When kettle-jem's rake integration is installed, run `bundle exec rake kettle:jem:template`
|
|
321
|
+
to refresh template-managed files.
|
|
322
|
+
- `kettle-dev-setup` is deprecated and intentionally exits with a migration
|
|
323
|
+
message pointing to kettle-jem.
|
|
517
324
|
|
|
518
325
|
### kettle-dvcs (normalize multi-forge remotes)
|
|
519
326
|
|
|
@@ -633,7 +440,7 @@ What it does:
|
|
|
633
440
|
- Purpose: Append a standardized footer and optionally enforce branch naming rules when configured.
|
|
634
441
|
- Usage:
|
|
635
442
|
- Git invokes this with the path to the commit message file: `kettle-commit-msg .git/COMMIT_EDITMSG`
|
|
636
|
-
- Install
|
|
443
|
+
- Install hook templates through kettle-jem setup/templating, then point git at the resulting hook path.
|
|
637
444
|
- Behavior:
|
|
638
445
|
- When `GIT_HOOK_BRANCH_VALIDATE=jira`, validates the current branch matches the pattern: `^(hotfix|bug|feature|candy)/[0-9]{8,}-…`.
|
|
639
446
|
- If it matches and the commit message lacks the numeric ID, appends `[<type>][<id>]`.
|
|
@@ -648,23 +455,17 @@ What it does:
|
|
|
648
455
|
### Project bootstrap installer
|
|
649
456
|
|
|
650
457
|
- Script: `exe/kettle-dev-setup` (run as `kettle-dev-setup`)
|
|
651
|
-
-
|
|
458
|
+
- Status: Deprecated compatibility shim.
|
|
459
|
+
- Purpose: Direct users to kettle-jem, which now owns setup and templating.
|
|
652
460
|
- Usage:
|
|
653
|
-
- `kettle-dev-setup
|
|
654
|
-
- Options (mapped through to `rake kettle:dev:install`):
|
|
655
|
-
- `--allowed=VAL` Pass `allowed=VAL` to acknowledge prior direnv allow, etc.
|
|
656
|
-
- `--force` Pass `force=true` to accept prompts non-interactively.
|
|
657
|
-
- `--hook_templates=VAL` Pass `hook_templates=VAL` to control git hook templating.
|
|
658
|
-
- `--only=VAL` Pass `only=VAL` to restrict install scope.
|
|
659
|
-
- `--include=VAL` Pass `include=VAL` to include optional files by glob (see notes below).
|
|
660
|
-
- `-h`, `--help` Show help.
|
|
461
|
+
- `kettle-dev-setup`
|
|
661
462
|
- Behavior:
|
|
662
|
-
-
|
|
663
|
-
-
|
|
664
|
-
-
|
|
665
|
-
|
|
666
|
-
-
|
|
667
|
-
-
|
|
463
|
+
- Prints migration instructions.
|
|
464
|
+
- Exits non-zero.
|
|
465
|
+
- Does not modify the destination repository.
|
|
466
|
+
- Replacement:
|
|
467
|
+
- `gem install kettle-jem`
|
|
468
|
+
- `kettle-jem setup`
|
|
668
469
|
|
|
669
470
|
### Open Collective README updater
|
|
670
471
|
|
|
@@ -822,6 +623,8 @@ To say "thanks!" ☝️ Join the Discord or 👇️ send money.
|
|
|
822
623
|
|
|
823
624
|
### Please give the project a star ⭐ ♥.
|
|
824
625
|
|
|
626
|
+
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.
|
|
627
|
+
|
|
825
628
|
Thanks for RTFM. ☺️
|
|
826
629
|
|
|
827
630
|
[⛳liberapay-img]: https://img.shields.io/liberapay/goal/pboling.svg?logo=liberapay&color=a51611&style=flat
|
|
@@ -924,8 +727,6 @@ Thanks for RTFM. ☺️
|
|
|
924
727
|
[🏀codecovi]: https://codecov.io/gh/kettle-rb/kettle-dev/graph/badge.svg
|
|
925
728
|
[🏀coveralls]: https://coveralls.io/github/kettle-rb/kettle-dev?branch=main
|
|
926
729
|
[🏀coveralls-img]: https://coveralls.io/repos/github/kettle-rb/kettle-dev/badge.svg?branch=main
|
|
927
|
-
[🖐codeQL]: https://github.com/kettle-rb/kettle-dev/security/code-scanning
|
|
928
|
-
[🖐codeQL-img]: https://github.com/kettle-rb/kettle-dev/actions/workflows/codeql-analysis.yml/badge.svg
|
|
929
730
|
[🚎ruby-2.4-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/ruby-2.4.yml
|
|
930
731
|
[🚎ruby-2.5-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/ruby-2.5.yml
|
|
931
732
|
[🚎ruby-2.6-wf]: https://github.com/kettle-rb/kettle-dev/actions/workflows/ruby-2.6.yml
|
|
@@ -1010,7 +811,7 @@ Thanks for RTFM. ☺️
|
|
|
1010
811
|
[📌gitmoji]: https://gitmoji.dev
|
|
1011
812
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
1012
813
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
1013
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-3.
|
|
814
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-3.179-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
1014
815
|
[🔐security]: https://github.com/kettle-rb/kettle-dev/blob/main/SECURITY.md
|
|
1015
816
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
1016
817
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
@@ -1038,7 +839,7 @@ Thanks for RTFM. ☺️
|
|
|
1038
839
|
| Package | kettle-dev |
|
|
1039
840
|
| Description | 🍲 Kettle::Dev is a meta tool from kettle-rb to streamline development and testing. Acts as a shim dependency, pulling in many other dependencies, to give you OOTB productivity with a RubyGem, or Ruby app project. Configures a complete set of Rake tasks, for all the libraries is brings in, so they arrive ready to go. Fund overlooked open source projects - bottom of stack, dev/test dependencies: floss-funding.dev |
|
|
1040
841
|
| Homepage | https://github.com/kettle-rb/kettle-dev |
|
|
1041
|
-
| Source | https://github.com/kettle-rb/kettle-dev/tree/v2.0.
|
|
842
|
+
| Source | https://github.com/kettle-rb/kettle-dev/tree/v2.0.6 |
|
|
1042
843
|
| License | `AGPL-3.0-only` |
|
|
1043
844
|
| 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-dev, https://www.buymeacoffee.com/pboling |
|
|
1044
845
|
<!-- kettle-jem:metadata:end -->
|
data/exe/kettle-changelog
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
# kettle-changelog: Generate a CHANGELOG.md entry for the current VERSION.
|
|
7
7
|
# - Reads VERSION from lib/**/version.rb (must be unique across files)
|
|
8
|
+
# - Set K_CHANGELOG_VERSION_FILE to use a specific version.rb for monorepo roots
|
|
8
9
|
# - Moves entries from the "Unreleased" section into a new versioned section
|
|
9
10
|
# - Prepends 4 heading lines:
|
|
10
11
|
# - TAG
|
|
@@ -67,6 +68,7 @@ begin
|
|
|
67
68
|
Environment:
|
|
68
69
|
K_CHANGELOG_STRICT=false Disable strict mode (equivalent to --no-strict flag)
|
|
69
70
|
K_CHANGELOG_COVERAGE_HARD=false Disable coverage threshold hard-failure
|
|
71
|
+
K_CHANGELOG_VERSION_FILE=path Read VERSION from this file instead of lib/**/version.rb
|
|
70
72
|
|
|
71
73
|
Prerequisites:
|
|
72
74
|
- coverage/coverage.json present (run: bundle exec kettle-test with K_SOUP_COV_FORMATTERS=json to generate)
|
data/exe/kettle-dev-setup
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
|
|
4
4
|
# vim: set syntax=ruby
|
|
5
5
|
|
|
6
|
-
# kettle-dev-setup has been replaced by kettle-jem
|
|
6
|
+
# kettle-dev-setup has been replaced by kettle-jem setup.
|
|
7
7
|
# All setup and templating functionality has moved to the kettle-jem gem.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
warn <<~MSG
|
|
10
10
|
kettle-dev-setup has been removed.
|
|
11
11
|
Setup and templating functionality has moved to the kettle-jem gem.
|
|
12
12
|
|
|
13
|
-
Please install kettle-jem and use kettle-jem
|
|
13
|
+
Please install kettle-jem and use kettle-jem setup instead:
|
|
14
14
|
gem install kettle-jem
|
|
15
|
-
kettle-jem
|
|
15
|
+
kettle-jem setup
|
|
16
16
|
MSG
|
|
17
17
|
exit 1
|
|
@@ -299,18 +299,7 @@ module Kettle
|
|
|
299
299
|
end
|
|
300
300
|
|
|
301
301
|
def detect_version
|
|
302
|
-
|
|
303
|
-
abort("Could not find version.rb under lib/**.") if candidates.empty?
|
|
304
|
-
versions = candidates.map do |path|
|
|
305
|
-
content = File.read(path)
|
|
306
|
-
m = content.match(/VERSION\s*=\s*(["'])([^"']+)\1/)
|
|
307
|
-
next unless m
|
|
308
|
-
|
|
309
|
-
m[2]
|
|
310
|
-
end.compact
|
|
311
|
-
abort("VERSION constant not found in #{@root}/lib/**/version.rb") if versions.none?
|
|
312
|
-
abort("Multiple VERSION constants found to be out of sync (#{versions.inspect}) in #{@root}/lib/**/version.rb") unless versions.uniq.length == 1
|
|
313
|
-
versions.first
|
|
302
|
+
Kettle::Dev::Versioning.detect_version(@root)
|
|
314
303
|
end
|
|
315
304
|
|
|
316
305
|
def extract_unreleased(content)
|
data/lib/kettle/dev/version.rb
CHANGED
|
@@ -6,12 +6,13 @@ module Kettle
|
|
|
6
6
|
module Versioning
|
|
7
7
|
module_function
|
|
8
8
|
|
|
9
|
-
# Detects a unique VERSION constant declared under lib/**/version.rb
|
|
9
|
+
# Detects a unique VERSION constant declared under lib/**/version.rb,
|
|
10
|
+
# or in K_CHANGELOG_VERSION_FILE when a monorepo/root changelog needs
|
|
11
|
+
# to point at a representative package version file.
|
|
10
12
|
# @param root [String] project root
|
|
11
13
|
# @return [String] version string
|
|
12
14
|
def detect_version(root)
|
|
13
|
-
candidates =
|
|
14
|
-
abort!("Could not find version.rb under lib/**.") if candidates.empty?
|
|
15
|
+
candidates = version_file_candidates(root)
|
|
15
16
|
versions = candidates.map do |path|
|
|
16
17
|
content = File.read(path)
|
|
17
18
|
m = content.match(/VERSION\s*=\s*(["'])([^"']+)\1/)
|
|
@@ -24,6 +25,20 @@ module Kettle
|
|
|
24
25
|
versions.first
|
|
25
26
|
end
|
|
26
27
|
|
|
28
|
+
def version_file_candidates(root)
|
|
29
|
+
override = ENV.fetch("K_CHANGELOG_VERSION_FILE", "").to_s.strip
|
|
30
|
+
unless override.empty?
|
|
31
|
+
path = File.expand_path(override, root)
|
|
32
|
+
abort!("K_CHANGELOG_VERSION_FILE does not exist: #{override}") unless File.file?(path)
|
|
33
|
+
|
|
34
|
+
return [path]
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
candidates = Dir[File.join(root, "lib", "**", "version.rb")]
|
|
38
|
+
abort!("Could not find version.rb under lib/**.") if candidates.empty?
|
|
39
|
+
candidates
|
|
40
|
+
end
|
|
41
|
+
|
|
27
42
|
# Classify the bump type from prev -> cur.
|
|
28
43
|
# EPIC is a MAJOR > 1000.
|
|
29
44
|
# @param prev [String] previous released version
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kettle-dev
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Peter H. Boling
|
|
@@ -312,10 +312,10 @@ licenses:
|
|
|
312
312
|
- AGPL-3.0-only
|
|
313
313
|
metadata:
|
|
314
314
|
homepage_uri: https://kettle-dev.galtzo.com
|
|
315
|
-
source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v2.0.
|
|
316
|
-
changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v2.0.
|
|
315
|
+
source_code_uri: https://github.com/kettle-rb/kettle-dev/tree/v2.0.6
|
|
316
|
+
changelog_uri: https://github.com/kettle-rb/kettle-dev/blob/v2.0.6/CHANGELOG.md
|
|
317
317
|
bug_tracker_uri: https://github.com/kettle-rb/kettle-dev/issues
|
|
318
|
-
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.0.
|
|
318
|
+
documentation_uri: https://www.rubydoc.info/gems/kettle-dev/2.0.6
|
|
319
319
|
funding_uri: https://github.com/sponsors/pboling
|
|
320
320
|
wiki_uri: https://github.com/kettle-rb/kettle-dev/wiki
|
|
321
321
|
news_uri: https://www.railsbling.com/tags/kettle-dev
|
metadata.gz.sig
CHANGED
|
Binary file
|