kettle-dev 1.2.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +159 -3
  4. data/CITATION.cff +2 -2
  5. data/CONTRIBUTING.md +11 -17
  6. data/README.md +390 -319
  7. data/exe/kettle-dev-setup +12 -63
  8. data/exe/kettle-gh-release +82 -0
  9. data/lib/kettle/dev/gem_spec_reader.rb +2 -2
  10. data/lib/kettle/dev/open_collective_config.rb +12 -0
  11. data/lib/kettle/dev/rakelib/yard.rake +15 -0
  12. data/lib/kettle/dev/tasks/ci_task.rb +4 -4
  13. data/lib/kettle/dev/version.rb +1 -1
  14. data/lib/kettle/dev.rb +4 -12
  15. data/sig/kettle/dev/source_merger.rbs +40 -56
  16. data.tar.gz.sig +0 -0
  17. metadata +15 -144
  18. metadata.gz.sig +0 -0
  19. data/.aiignore.example +0 -19
  20. data/.devcontainer/apt-install/devcontainer-feature.json +0 -9
  21. data/.devcontainer/apt-install/install.sh +0 -11
  22. data/.devcontainer/devcontainer.json +0 -28
  23. data/.env.local.example +0 -31
  24. data/.envrc +0 -47
  25. data/.envrc.example +0 -51
  26. data/.envrc.no-osc.example +0 -51
  27. data/.git-hooks/commit-msg +0 -54
  28. data/.git-hooks/commit-subjects-goalie.txt +0 -8
  29. data/.git-hooks/footer-template.erb.txt +0 -16
  30. data/.git-hooks/prepare-commit-msg +0 -8
  31. data/.github/.codecov.yml.example +0 -14
  32. data/.github/FUNDING.yml +0 -13
  33. data/.github/FUNDING.yml.no-osc.example +0 -13
  34. data/.github/dependabot.yml +0 -13
  35. data/.github/workflows/ancient.yml +0 -83
  36. data/.github/workflows/ancient.yml.example +0 -81
  37. data/.github/workflows/auto-assign.yml +0 -21
  38. data/.github/workflows/codeql-analysis.yml +0 -70
  39. data/.github/workflows/coverage.yml +0 -127
  40. data/.github/workflows/coverage.yml.example +0 -127
  41. data/.github/workflows/current.yml +0 -116
  42. data/.github/workflows/current.yml.example +0 -115
  43. data/.github/workflows/dep-heads.yml +0 -117
  44. data/.github/workflows/dependency-review.yml +0 -20
  45. data/.github/workflows/discord-notifier.yml.example +0 -39
  46. data/.github/workflows/heads.yml +0 -117
  47. data/.github/workflows/heads.yml.example +0 -116
  48. data/.github/workflows/jruby.yml +0 -82
  49. data/.github/workflows/jruby.yml.example +0 -72
  50. data/.github/workflows/legacy.yml +0 -76
  51. data/.github/workflows/license-eye.yml +0 -40
  52. data/.github/workflows/locked_deps.yml +0 -85
  53. data/.github/workflows/opencollective.yml +0 -40
  54. data/.github/workflows/style.yml +0 -67
  55. data/.github/workflows/supported.yml +0 -75
  56. data/.github/workflows/truffle.yml +0 -99
  57. data/.github/workflows/unlocked_deps.yml +0 -84
  58. data/.github/workflows/unsupported.yml +0 -76
  59. data/.gitignore +0 -50
  60. data/.gitlab-ci.yml.example +0 -134
  61. data/.idea/.gitignore +0 -45
  62. data/.junie/guidelines-rbs.md +0 -49
  63. data/.junie/guidelines.md +0 -141
  64. data/.junie/guidelines.md.example +0 -140
  65. data/.licenserc.yaml +0 -7
  66. data/.opencollective.yml +0 -3
  67. data/.opencollective.yml.example +0 -3
  68. data/.qlty/qlty.toml +0 -79
  69. data/.rspec +0 -9
  70. data/.rubocop.yml +0 -13
  71. data/.rubocop_rspec.yml +0 -33
  72. data/.simplecov +0 -16
  73. data/.simplecov.example +0 -11
  74. data/.tool-versions +0 -1
  75. data/.yardignore +0 -13
  76. data/.yardopts +0 -14
  77. data/Appraisal.root.gemfile +0 -10
  78. data/Appraisals +0 -151
  79. data/Appraisals.example +0 -102
  80. data/CHANGELOG.md.example +0 -47
  81. data/CONTRIBUTING.md.example +0 -227
  82. data/FUNDING.md.no-osc.example +0 -63
  83. data/Gemfile +0 -40
  84. data/Gemfile.example +0 -34
  85. data/README.md.example +0 -570
  86. data/README.md.no-osc.example +0 -536
  87. data/Rakefile.example +0 -68
  88. data/gemfiles/modular/coverage.gemfile +0 -6
  89. data/gemfiles/modular/debug.gemfile +0 -13
  90. data/gemfiles/modular/documentation.gemfile +0 -14
  91. data/gemfiles/modular/erb/r2/v3.0.gemfile +0 -1
  92. data/gemfiles/modular/erb/r2.3/default.gemfile +0 -6
  93. data/gemfiles/modular/erb/r2.6/v2.2.gemfile +0 -3
  94. data/gemfiles/modular/erb/r3/v5.0.gemfile +0 -1
  95. data/gemfiles/modular/erb/r3.1/v4.0.gemfile +0 -2
  96. data/gemfiles/modular/erb/vHEAD.gemfile +0 -2
  97. data/gemfiles/modular/injected.gemfile +0 -60
  98. data/gemfiles/modular/mutex_m/r2/v0.3.gemfile +0 -2
  99. data/gemfiles/modular/mutex_m/r2.4/v0.1.gemfile +0 -3
  100. data/gemfiles/modular/mutex_m/r3/v0.3.gemfile +0 -2
  101. data/gemfiles/modular/mutex_m/vHEAD.gemfile +0 -2
  102. data/gemfiles/modular/optional.gemfile +0 -8
  103. data/gemfiles/modular/optional.gemfile.example +0 -5
  104. data/gemfiles/modular/runtime_heads.gemfile +0 -10
  105. data/gemfiles/modular/runtime_heads.gemfile.example +0 -8
  106. data/gemfiles/modular/stringio/r2/v3.0.gemfile +0 -5
  107. data/gemfiles/modular/stringio/r2.4/v0.0.2.gemfile +0 -4
  108. data/gemfiles/modular/stringio/r3/v3.0.gemfile +0 -5
  109. data/gemfiles/modular/stringio/vHEAD.gemfile +0 -2
  110. data/gemfiles/modular/style.gemfile +0 -25
  111. data/gemfiles/modular/style.gemfile.example +0 -25
  112. data/gemfiles/modular/templating.gemfile +0 -3
  113. data/gemfiles/modular/x_std_libs/r2/libs.gemfile +0 -3
  114. data/gemfiles/modular/x_std_libs/r2.3/libs.gemfile +0 -3
  115. data/gemfiles/modular/x_std_libs/r2.4/libs.gemfile +0 -3
  116. data/gemfiles/modular/x_std_libs/r2.6/libs.gemfile +0 -3
  117. data/gemfiles/modular/x_std_libs/r3/libs.gemfile +0 -3
  118. data/gemfiles/modular/x_std_libs/r3.1/libs.gemfile +0 -3
  119. data/gemfiles/modular/x_std_libs/vHEAD.gemfile +0 -3
  120. data/gemfiles/modular/x_std_libs.gemfile +0 -2
  121. data/kettle-dev.gemspec.example +0 -154
  122. data/lib/kettle/dev/modular_gemfiles.rb +0 -119
  123. data/lib/kettle/dev/prism_appraisals.rb +0 -351
  124. data/lib/kettle/dev/prism_gemfile.rb +0 -177
  125. data/lib/kettle/dev/prism_gemspec.rb +0 -284
  126. data/lib/kettle/dev/prism_utils.rb +0 -201
  127. data/lib/kettle/dev/rakelib/install.rake +0 -10
  128. data/lib/kettle/dev/rakelib/template.rake +0 -10
  129. data/lib/kettle/dev/setup_cli.rb +0 -403
  130. data/lib/kettle/dev/source_merger.rb +0 -655
  131. data/lib/kettle/dev/tasks/install_task.rb +0 -553
  132. data/lib/kettle/dev/tasks/template_task.rb +0 -975
  133. data/lib/kettle/dev/template_helpers.rb +0 -685
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 73ca5267629934af0b0f044598295a93c287cbace6c0ac2f5e2d1a701a72ca89
4
- data.tar.gz: 1743ac37975a516f979d135d52c62b8a9fa28171d6df1a82fb58cce4d1676ea1
3
+ metadata.gz: 1c27526850f356cd31b634aa7a0ea70c4f96664c2979629ecfdabcf128f6b437
4
+ data.tar.gz: dca1af6fba35002062780e10688a42181eeb577804d48f3a367399fcf8da3262
5
5
  SHA512:
6
- metadata.gz: afd0cdb05a6f08db4665b634cf38d4f959d08ea73ff526f1757d9168d3aab0a6a6d81ba90a5f20905f8888bd88bbbe55c1c53d15f0d1898202448dac0f204bd3
7
- data.tar.gz: 92a005b6bb76771bffe3e0e3e3762bc6e11699286119dc009cb61e4c72278666552e07cf0a547c215c586caf7abeea7305767fce2d008342758b5d8fe80cc676
6
+ metadata.gz: 16221f6055e6d28aa959d11a8b57c047218565538b55b6066a0656b5b8c45273c78f7ee1521369c247b9c8b296a485da22e4fa99c92ed276a67e39997281a14e
7
+ data.tar.gz: 71f4a045813776fba247aa28b728aaef9b4bfcc9013a806fdd9f5b49d99551aae505b34e8278c591e3a9c1d65bfb9581718460c10cf9a2354f17839fe0e6e191
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,158 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [2.0.0] - 2026-02-25
34
+
35
+ - TAG: [v2.0.0][2.0.0t]
36
+ - COVERAGE: 96.06% -- 2683/2793 lines in 20 files
37
+ - BRANCH COVERAGE: 79.16% -- 1113/1406 branches in 20 files
38
+ - 80.25% documented
39
+
40
+ ### Added
41
+
42
+ - New `kettle-gh-release` executable for standalone GitHub release creation
43
+ - Extracted from `kettle-release` step 18
44
+ - Useful when RubyGems release succeeded but GitHub release failed
45
+ - Supports explicit version via `version=<VERSION>` argument
46
+ - Auto-detects version from `lib/**/version.rb` if not specified
47
+ - Requires `GITHUB_TOKEN` with `repo:public_repo` (classic) or `contents:write` scope
48
+ - Added `.kettle-dev.yml` configuration file for per-file merge options
49
+ - Hybrid format: `defaults` for shared merge options, `patterns` for glob fallbacks, `files` for per-file config
50
+ - Nested directory structure under `files` allows individual file configuration
51
+ - Supports all `Prism::Merge::SmartMerger` options: `preference`, `add_template_only_nodes`, `freeze_token`, `max_recursion_depth`
52
+ - Added `TemplateHelpers.kettle_config`, `.config_for`, `.find_file_config` methods
53
+ - Added spec coverage in `template_helpers_config_spec.rb`
54
+
55
+ ### Changed
56
+
57
+ - Updated documentation on hostile takeover of RubyGems
58
+ - https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo
59
+ - **BREAKING**: Replaced `template_manifest.yml` with `.kettle-dev.yml`
60
+ - New hybrid format supports both glob patterns and per-file configuration
61
+ - `TemplateHelpers.load_manifest` now reads from `.kettle-dev.yml` patterns section
62
+ - `TemplateHelpers.strategy_for` checks explicit file configs before falling back to patterns
63
+ - **BREAKING**: Simplified `SourceMerger` to fully rely on prism-merge for AST merging
64
+ - Reduced from ~610 lines to ~175 lines (71% reduction)
65
+ - Removed custom newline normalization - prism-merge preserves original formatting
66
+ - Removed custom comment deduplication logic - prism-merge handles this natively
67
+ - All strategies (`:skip`, `:replace`, `:append`, `:merge`) now use prism-merge consistently
68
+ - Freeze blocks (`kettle-dev:freeze` / `kettle-dev:unfreeze`) handled by prism-merge's `freeze_token` option
69
+
70
+ ### Removed
71
+
72
+ - Removed all `.example` template files from the kettle-dev root and subdirectories
73
+ (27 files). Template files now live exclusively in kettle-jem's `template/` directory.
74
+ Only `.env.local.example` is retained as a dev resource for all destination gems.
75
+ - Removed unused methods from `SourceMerger`:
76
+ - `normalize_source` - replaced by prism-merge
77
+ - `normalize_newlines` - prism-merge preserves original formatting
78
+ - `shebang?`, `magic_comment?`, `ruby_magic_comment_key?` - no longer needed
79
+ - Comment extraction/deduplication: `extract_magic_comments`, `extract_file_leading_comments`,
80
+ `create_comment_tuples`, `deduplicate_comment_sequences`, `deduplicate_sequences_pass1`,
81
+ `deduplicate_singles_pass2`, `extract_nodes_with_comments`, `count_blank_lines_before`,
82
+ `build_source_from_nodes`
83
+ - Unused comment restoration: `restore_custom_leading_comments`, `deduplicate_leading_comment_block`,
84
+ `extract_comment_lines`, `normalize_comment`, `leading_comment_block`
85
+ - Removed unused constants: `RUBY_MAGIC_COMMENT_KEYS`, `MAGIC_COMMENT_REGEXES`
86
+
87
+ ### Fixed
88
+
89
+ - Fixed `PrismAppraisals` various comment chunk spacing
90
+ - extract_block_header:
91
+ - skips the blank spacer immediately above an `appraise` block
92
+ - treats any following blank line as the stop boundary once comment lines have been collected
93
+ - prevents preamble comments from being pulled into the first block’s header
94
+ - restores expected ordering:
95
+ - magic comments and their blank line stay at the top
96
+ - block headers remain adjacent to their blocks
97
+ - preserves blank lines between comment chunks
98
+ - Fixed `SourceMerger` freeze block location preservation
99
+ - Freeze blocks now stay in their original location in the file structure
100
+ - Skip normalization for files with existing freeze blocks to prevent movement
101
+ - Only include contiguous comments immediately before freeze markers (no arbitrary 3-line lookback)
102
+ - Don't add freeze reminder to files that already have freeze/unfreeze blocks
103
+ - Prevents unrelated comments from being incorrectly captured in freeze block ranges
104
+ - Added comprehensive test coverage for multiple freeze blocks at different nesting levels
105
+ - Fixed `TemplateTask` to not override template summary/description with empty strings from destination gemspec
106
+ - Only carries over summary/description when they contain actual content (non-empty)
107
+ - Allows token replacements to work correctly (e.g., `kettle-dev summary` → `my-gem summary`)
108
+ - Prevents empty destination fields from erasing meaningful template values
109
+ - Fixed `SourceMerger` magic comment ordering and freeze block protection
110
+ - Magic comments now preserve original order
111
+ - No blank lines inserted between consecutive magic comments
112
+ - Freeze reminder block properly separated from magic comments (not merged)
113
+ - Leverages Prism's built-in `parse_result.magic_comments` API for accurate detection
114
+ - Detects `kettle-dev:freeze/unfreeze` pairs using Prism, then reclassifies as file-level comments to keep blocks intact
115
+ - Removed obsolete `is_magic_comment?` method in favor of Prism's native detection
116
+ - Fixed `PrismGemspec` and `PrismGemfile` to use pure Prism AST traversal instead of regex fallbacks
117
+ - Removed regex-based `extract_gemspec_emoji` that parsed `spec.summary =` and `spec.description =` with regex
118
+ - Now traverses Prism AST to find Gem::Specification block, extracts summary/description nodes, and gets literal values
119
+ - Removed regex-based source line detection in `PrismGemfile.merge_gem_calls`
120
+ - Now uses `PrismUtils.statement_key` to find source statements via AST instead of `ln =~ /^\s*source\s+/`
121
+ - Aligns with project goal: move away from regex parsing toward proper AST manipulation with Prism
122
+ - All functionality preserved, tested, and working correctly
123
+ - Fixed `PrismGemspec.replace_gemspec_fields` block parameter extraction to use Prism AST
124
+ - **CRITICAL**: Was using regex fallback that incorrectly captured entire block body as parameter name
125
+ - Removed buggy regex fallback in favor of pure Prism AST traversal
126
+ - Now properly extracts block parameter from Prism::BlockParametersNode → Prism::ParametersNode → Prism::RequiredParameterNode
127
+ - Fixed `PrismGemspec.replace_gemspec_fields` insert offset calculation for emoji-containing gemspecs
128
+ - **CRITICAL**: Was using character length (`String#length`) instead of byte length (`String#bytesize`) to calculate insert offset
129
+ - When gemspecs contain multi-byte UTF-8 characters (emojis like 🍲), character length != byte length
130
+ - This caused fields to be inserted at wrong byte positions, resulting in truncated strings and massive corruption
131
+ - Changed `body_src.rstrip.length` to `body_src.rstrip.bytesize` for correct byte-offset calculations
132
+ - Prevents gemspec templating from producing corrupted output with truncated dependency lines
133
+ - Added comprehensive debug logging to trace byte offset calculations and edit operations
134
+ - Fixed `SourceMerger` variable assignment duplication during merge operations
135
+ - `node_signature` now identifies variable/constant assignments by name only, not full source
136
+ - Previously used full source text as signature, causing duplicates when assignment bodies differed
137
+ - Added specific handlers for: LocalVariableWriteNode, InstanceVariableWriteNode, ClassVariableWriteNode, ConstantWriteNode, GlobalVariableWriteNode
138
+ - Also added handlers for ClassNode and ModuleNode to match by name
139
+ - Example: `gem_version = ...` assignments with different bodies now correctly merge instead of duplicating
140
+ - Prevents `bin/kettle-dev-setup` from creating duplicate variable assignments in gemspecs and other files
141
+ - Added comprehensive specs for variable assignment deduplication and idempotency
142
+ - Fixed `SourceMerger` conditional block duplication during merge operations
143
+ - `node_signature` now identifies conditional nodes (if/unless/case) by their predicate only
144
+ - Previously used full source text, causing duplicate blocks when template updates conditional bodies
145
+ - Example: if ENV["FOO"] blocks with different bodies now correctly merge instead of duplicating
146
+ - Prevents `bin/kettle-dev-setup` from creating duplicate if/else blocks in gemfiles
147
+ - Added comprehensive specs for conditional merging behavior and idempotency
148
+ - Fixed `PrismGemspec.replace_gemspec_fields` to use byte-aware string operations
149
+ - **CRITICAL**: Was using character-based `String#[]=` with Prism's byte offsets
150
+ - This caused catastrophic corruption when emojis or multi-byte UTF-8 characters were present
151
+ - Symptoms: gemspec blocks duplicated/fragmented, statements escaped outside blocks
152
+ - Now uses `byteslice` and byte-aware concatenation for all edit operations
153
+ - Prevents gemspec templating from producing mangled output with duplicated Gem::Specification blocks
154
+ - Fixed `PrismGemspec.replace_gemspec_fields` to correctly handle multi-byte UTF-8 characters (e.g., emojis)
155
+ - Prism uses byte offsets, not character offsets, when parsing Ruby code
156
+ - Changed string slicing from `String#[]` to `String#byteslice` for all offset-based operations
157
+ - Added validation to use `String#bytesize` instead of `String#length` for offset bounds checking
158
+ - Prevents `TypeError: no implicit conversion of nil into String` when gemspecs contain emojis
159
+ - Ensures gemspec field carryover works correctly with emoji in summary/description fields
160
+ - Enhanced error reporting to show backtraces when debug mode is enabled
161
+
162
+ ## [1.2.5] - 2025-11-28
163
+
164
+ - TAG: [v1.2.5][1.2.5t]
165
+ - COVERAGE: 93.53% -- 4726/5053 lines in 31 files
166
+ - BRANCH COVERAGE: 76.62% -- 1924/2511 branches in 31 files
167
+ - 69.89% documented
168
+
169
+ ### Added
170
+
171
+ - Comprehensive newline normalization in templated Ruby files:
172
+ - Magic comments (frozen_string_literal, encoding, etc.) always followed by single blank line
173
+ - No more than one consecutive blank line anywhere in file
174
+ - Single newline at end of file (no trailing blank lines)
175
+ - Freeze reminder block now includes blank line before and empty comment line after for better visual separation
176
+
177
+ ### Changed
178
+
179
+ - Updated `FREEZE_REMINDER` constant to include blank line before and empty comment line after
180
+
181
+ ### Fixed
182
+
183
+ - Fixed `reminder_present?` to correctly detect freeze reminder when it has leading blank line
184
+
33
185
  ## [1.2.4] - 2025-11-28
34
186
 
35
187
  - TAG: [v1.2.4][1.2.4t]
@@ -45,7 +197,7 @@ Please file a bug if you notice a violation of semantic versioning.
45
197
  - Ensures truly idempotent behavior when running templating multiple times on the same file
46
198
  - Example: `frozen_string_literal` comments no longer multiply from 1→4→5→6 on repeated runs
47
199
 
48
- ## [1.2.3] - 2025-11-28
200
+ ## [1.2.3] - 2025-11-28vari
49
201
 
50
202
  - TAG: [v1.2.3][1.2.3t]
51
203
  - COVERAGE: 93.43% -- 4681/5010 lines in 31 files
@@ -1138,7 +1290,7 @@ Please file a bug if you notice a violation of semantic versioning.
1138
1290
  - <!-- RELEASE-NOTES-FOOTER-END -->
1139
1291
  - truffle workflow: Repeat attempts for bundle install and appraisal bundle before failure
1140
1292
  - global token replacement during kettle:dev:install
1141
- - {KETTLE|DEV|GEM} => kettle-dev
1293
+ - kettle-dev => kettle-dev
1142
1294
  - {RUBOCOP|LTS|CONSTRAINT} => dynamic
1143
1295
  - {RUBOCOP|RUBY|GEM} => dynamic
1144
1296
  - default to rubocop-ruby1_8 if no minimum ruby specified
@@ -1522,7 +1674,11 @@ Please file a bug if you notice a violation of semantic versioning.
1522
1674
  - Selecting will run the selected workflow via `act`
1523
1675
  - This may move to its own gem in the future.
1524
1676
 
1525
- [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v1.2.4...HEAD
1677
+ [Unreleased]: https://github.com/kettle-rb/kettle-dev/compare/v2.0.0...HEAD
1678
+ [2.0.0]: https://github.com/kettle-rb/kettle-dev/compare/v1.2.5...v2.0.0
1679
+ [2.0.0t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v2.0.0
1680
+ [1.2.5]: https://github.com/kettle-rb/kettle-dev/compare/v1.2.4...v1.2.5
1681
+ [1.2.5t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.2.5
1526
1682
  [1.2.4]: https://github.com/kettle-rb/kettle-dev/compare/v1.2.3...v1.2.4
1527
1683
  [1.2.4t]: https://github.com/kettle-rb/kettle-dev/releases/tag/v1.2.4
1528
1684
  [1.2.3]: https://github.com/kettle-rb/kettle-dev/compare/v1.2.2...v1.2.3
data/CITATION.cff CHANGED
@@ -7,8 +7,8 @@ type: software
7
7
  authors:
8
8
  - given-names: Peter Hurn
9
9
  family-names: Boling
10
- email: peter@railsbling.com
11
- affiliation: railsbling.com
10
+ email: floss@galtzo.com
11
+ affiliation: galtzo.com
12
12
  orcid: 'https://orcid.org/0009-0008-8519-441X'
13
13
  identifiers:
14
14
  - type: url
data/CONTRIBUTING.md CHANGED
@@ -24,9 +24,10 @@ Follow these instructions:
24
24
 
25
25
  ## Executables vs Rake tasks
26
26
 
27
- Executables shipped by kettle-dev can be used with or without generating the binstubs.
28
- They will work when kettle-dev is installed globally (i.e., `gem install kettle-dev`) and do not require that kettle-dev be in your bundle.
27
+ Executables shipped by dependencies, such as kettle-dev, and stone_checksums, are available
28
+ after running `bin/setup`. These include:
29
29
 
30
+ - gem_checksums
30
31
  - kettle-changelog
31
32
  - kettle-commit-msg
32
33
  - kettle-dev-setup
@@ -35,20 +36,10 @@ They will work when kettle-dev is installed globally (i.e., `gem install kettle-
35
36
  - kettle-readme-backers
36
37
  - kettle-release
37
38
 
38
- However, the rake tasks provided by kettle-dev do require kettle-dev to be added as a development dependency and loaded in your Rakefile.
39
- See the full list of rake tasks in head of Rakefile
39
+ There are many Rake tasks available as well. You can see them by running:
40
40
 
41
- **Gemfile**
42
- ```ruby
43
- group :development do
44
- gem "kettle-dev", require: false
45
- end
46
- ```
47
-
48
- **Rakefile**
49
- ```ruby
50
- # Rakefile
51
- require "kettle/dev"
41
+ ```shell
42
+ bin/rake -T
52
43
  ```
53
44
 
54
45
  ## Environment Variables for Local Development
@@ -77,7 +68,9 @@ GitHub API and CI helpers
77
68
  Releasing and signing
78
69
  - SKIP_GEM_SIGNING: If set, skip gem signing during build/release
79
70
  - GEM_CERT_USER: Username for selecting your public cert in `certs/<USER>.pem` (defaults to $USER)
80
- - SOURCE_DATE_EPOCH: Reproducible build timestamp. `kettle-release` will set this automatically for the session.
71
+ - SOURCE_DATE_EPOCH: Reproducible build timestamp.
72
+ - `kettle-release` will set this automatically for the session.
73
+ - Not needed on bundler >= 2.7.0, as reproducible builds have become the default.
81
74
 
82
75
  Git hooks and commit message helpers (exe/kettle-commit-msg)
83
76
  - GIT_HOOK_BRANCH_VALIDATE: Branch name validation mode (e.g., `jira`) or `false` to disable
@@ -148,7 +141,7 @@ For more detailed information about using RuboCop in this project, please see th
148
141
  Never add `# rubocop:disable ...` / `# rubocop:enable ...` comments to code or specs (except when following the few existing `rubocop:disable` patterns for a rule already being disabled elsewhere in the code). Instead:
149
142
 
150
143
  - Prefer configuration-based exclusions when a rule should not apply to certain paths or files (e.g., via `.rubocop.yml`).
151
- - When a violation is temporary and you plan to fix it later, record it in `.rubocop_gradual.lock` using the gradual workflow:
144
+ - When a violation is temporary, and you plan to fix it later, record it in `.rubocop_gradual.lock` using the gradual workflow:
152
145
  - `bundle exec rake rubocop_gradual:autocorrect` (preferred)
153
146
  - `bundle exec rake rubocop_gradual:force_update` (only when you cannot fix the violations immediately)
154
147
 
@@ -183,6 +176,7 @@ NOTE: To build without signing the gem set `SKIP_GEM_SIGNING` to any value in th
183
176
  1. Update version.rb to contain the correct version-to-be-released.
184
177
  2. Run `bundle exec kettle-changelog`.
185
178
  3. Run `bundle exec kettle-release`.
179
+ 4. Stay awake and monitor the release process for any errors, and answer any prompts.
186
180
 
187
181
  #### Manual process
188
182