All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning, and yes, platform and engine support are part of the public API. Please file a bug if you notice a violation of semantic versioning.
- The shared
:yardtask now installsyard-fenceandyard-timekeeperintegrations explicitly so documentation prep and post-processing only run duringrake yard
- Loading YARD during unrelated rake tasks no longer triggers documentation plugin side effects that rewrite or clear
docs/
2.0.0 - 2026-02-25
- TAG: v2.0.0
- COVERAGE: 96.06% -- 2683/2793 lines in 20 files
- BRANCH COVERAGE: 79.16% -- 1113/1406 branches in 20 files
- 80.25% documented
- New
kettle-gh-releaseexecutable for standalone GitHub release creation- Extracted from
kettle-releasestep 18 - Useful when RubyGems release succeeded but GitHub release failed
- Supports explicit version via
version=<VERSION>argument - Auto-detects version from
lib/**/version.rbif not specified - Requires
GITHUB_TOKENwithrepo:public_repo(classic) orcontents:writescope
- Extracted from
- Added
.kettle-dev.ymlconfiguration file for per-file merge options- Hybrid format:
defaultsfor shared merge options,patternsfor glob fallbacks,filesfor per-file config - Nested directory structure under
filesallows individual file configuration - Supports all
Prism::Merge::SmartMergeroptions:preference,add_template_only_nodes,freeze_token,max_recursion_depth - Added
TemplateHelpers.kettle_config,.config_for,.find_file_configmethods - Added spec coverage in
template_helpers_config_spec.rb
- Hybrid format:
- Updated documentation on hostile takeover of RubyGems
- BREAKING: Replaced
template_manifest.ymlwith.kettle-dev.yml- New hybrid format supports both glob patterns and per-file configuration
TemplateHelpers.load_manifestnow reads from.kettle-dev.ymlpatterns sectionTemplateHelpers.strategy_forchecks explicit file configs before falling back to patterns
- BREAKING: Simplified
SourceMergerto fully rely on prism-merge for AST merging- Reduced from ~610 lines to ~175 lines (71% reduction)
- Removed custom newline normalization - prism-merge preserves original formatting
- Removed custom comment deduplication logic - prism-merge handles this natively
- All strategies (
:skip,:replace,:append,:merge) now use prism-merge consistently - Freeze blocks (
kettle-dev:freeze/kettle-dev:unfreeze) handled by prism-merge'sfreeze_tokenoption
- Removed all
.exampletemplate files from the kettle-dev root and subdirectories (27 files). Template files now live exclusively in kettle-jem'stemplate/directory. Only.env.local.exampleis retained as a dev resource for all destination gems. - Removed unused methods from
SourceMerger:normalize_source- replaced by prism-mergenormalize_newlines- prism-merge preserves original formattingshebang?,magic_comment?,ruby_magic_comment_key?- no longer needed- Comment extraction/deduplication:
extract_magic_comments,extract_file_leading_comments,create_comment_tuples,deduplicate_comment_sequences,deduplicate_sequences_pass1,deduplicate_singles_pass2,extract_nodes_with_comments,count_blank_lines_before,build_source_from_nodes - Unused comment restoration:
restore_custom_leading_comments,deduplicate_leading_comment_block,extract_comment_lines,normalize_comment,leading_comment_block
- Removed unused constants:
RUBY_MAGIC_COMMENT_KEYS,MAGIC_COMMENT_REGEXES
- Fixed
PrismAppraisalsvarious comment chunk spacing- extract_block_header:
- skips the blank spacer immediately above an
appraiseblock - treats any following blank line as the stop boundary once comment lines have been collected
- prevents preamble comments from being pulled into the first block’s header
- skips the blank spacer immediately above an
- restores expected ordering:
- magic comments and their blank line stay at the top
- block headers remain adjacent to their blocks
- preserves blank lines between comment chunks
- extract_block_header:
- Fixed
SourceMergerfreeze block location preservation- Freeze blocks now stay in their original location in the file structure
- Skip normalization for files with existing freeze blocks to prevent movement
- Only include contiguous comments immediately before freeze markers (no arbitrary 3-line lookback)
- Don't add freeze reminder to files that already have freeze/unfreeze blocks
- Prevents unrelated comments from being incorrectly captured in freeze block ranges
- Added comprehensive test coverage for multiple freeze blocks at different nesting levels
- Fixed
TemplateTaskto not override template summary/description with empty strings from destination gemspec- Only carries over summary/description when they contain actual content (non-empty)
- Allows token replacements to work correctly (e.g.,
kettle-dev summary→my-gem summary) - Prevents empty destination fields from erasing meaningful template values
- Fixed
SourceMergermagic comment ordering and freeze block protection- Magic comments now preserve original order
- No blank lines inserted between consecutive magic comments
- Freeze reminder block properly separated from magic comments (not merged)
- Leverages Prism's built-in
parse_result.magic_commentsAPI for accurate detection - Detects
kettle-dev:freeze/unfreezepairs using Prism, then reclassifies as file-level comments to keep blocks intact - Removed obsolete
is_magic_comment?method in favor of Prism's native detection
- Fixed
PrismGemspecandPrismGemfileto use pure Prism AST traversal instead of regex fallbacks- Removed regex-based
extract_gemspec_emojithat parsedspec.summary =andspec.description =with regex - Now traverses Prism AST to find Gem::Specification block, extracts summary/description nodes, and gets literal values
- Removed regex-based source line detection in
PrismGemfile.merge_gem_calls - Now uses
PrismUtils.statement_keyto find source statements via AST instead ofln =~ /^\s*source\s+/ - Aligns with project goal: move away from regex parsing toward proper AST manipulation with Prism
- All functionality preserved, tested, and working correctly
- Removed regex-based
- Fixed
PrismGemspec.replace_gemspec_fieldsblock parameter extraction to use Prism AST- CRITICAL: Was using regex fallback that incorrectly captured entire block body as parameter name
- Removed buggy regex fallback in favor of pure Prism AST traversal
- Now properly extracts block parameter from Prism::BlockParametersNode → Prism::ParametersNode → Prism::RequiredParameterNode
- Fixed
PrismGemspec.replace_gemspec_fieldsinsert offset calculation for emoji-containing gemspecs- CRITICAL: Was using character length (
String#length) instead of byte length (String#bytesize) to calculate insert offset - When gemspecs contain multi-byte UTF-8 characters (emojis like 🍲), character length != byte length
- This caused fields to be inserted at wrong byte positions, resulting in truncated strings and massive corruption
- Changed
body_src.rstrip.lengthtobody_src.rstrip.bytesizefor correct byte-offset calculations - Prevents gemspec templating from producing corrupted output with truncated dependency lines
- Added comprehensive debug logging to trace byte offset calculations and edit operations
- CRITICAL: Was using character length (
- Fixed
SourceMergervariable assignment duplication during merge operationsnode_signaturenow identifies variable/constant assignments by name only, not full source- Previously used full source text as signature, causing duplicates when assignment bodies differed
- Added specific handlers for: LocalVariableWriteNode, InstanceVariableWriteNode, ClassVariableWriteNode, ConstantWriteNode, GlobalVariableWriteNode
- Also added handlers for ClassNode and ModuleNode to match by name
- Example:
gem_version = ...assignments with different bodies now correctly merge instead of duplicating - Prevents
bin/kettle-dev-setupfrom creating duplicate variable assignments in gemspecs and other files - Added comprehensive specs for variable assignment deduplication and idempotency
- Fixed
SourceMergerconditional block duplication during merge operationsnode_signaturenow identifies conditional nodes (if/unless/case) by their predicate only- Previously used full source text, causing duplicate blocks when template updates conditional bodies
- Example: if ENV["FOO"] blocks with different bodies now correctly merge instead of duplicating
- Prevents
bin/kettle-dev-setupfrom creating duplicate if/else blocks in gemfiles - Added comprehensive specs for conditional merging behavior and idempotency
- Fixed
PrismGemspec.replace_gemspec_fieldsto use byte-aware string operations- CRITICAL: Was using character-based
String#[]=with Prism's byte offsets - This caused catastrophic corruption when emojis or multi-byte UTF-8 characters were present
- Symptoms: gemspec blocks duplicated/fragmented, statements escaped outside blocks
- Now uses
bytesliceand byte-aware concatenation for all edit operations - Prevents gemspec templating from producing mangled output with duplicated Gem::Specification blocks
- CRITICAL: Was using character-based
- Fixed
PrismGemspec.replace_gemspec_fieldsto correctly handle multi-byte UTF-8 characters (e.g., emojis)- Prism uses byte offsets, not character offsets, when parsing Ruby code
- Changed string slicing from
String#[]toString#byteslicefor all offset-based operations - Added validation to use
String#bytesizeinstead ofString#lengthfor offset bounds checking - Prevents
TypeError: no implicit conversion of nil into Stringwhen gemspecs contain emojis - Ensures gemspec field carryover works correctly with emoji in summary/description fields
- Enhanced error reporting to show backtraces when debug mode is enabled
1.2.5 - 2025-11-28
- TAG: v1.2.5
- COVERAGE: 93.53% -- 4726/5053 lines in 31 files
- BRANCH COVERAGE: 76.62% -- 1924/2511 branches in 31 files
- 69.89% documented
- Comprehensive newline normalization in templated Ruby files:
- Magic comments (frozen_string_literal, encoding, etc.) always followed by single blank line
- No more than one consecutive blank line anywhere in file
- Single newline at end of file (no trailing blank lines)
- Freeze reminder block now includes blank line before and empty comment line after for better visual separation
- Updated
FREEZE_REMINDERconstant to include blank line before and empty comment line after
- Fixed
reminder_present?to correctly detect freeze reminder when it has leading blank line
1.2.4 - 2025-11-28
- TAG: v1.2.4
- COVERAGE: 93.53% -- 4701/5026 lines in 31 files
- BRANCH COVERAGE: 76.61% -- 1913/2497 branches in 31 files
- 69.78% documented
- Fixed comment deduplication in
restore_custom_leading_commentsto prevent accumulation across multiple template runs- Comments from destination are now deduplicated before being merged back into result
- Fixes issue where
:replacestrategy (used bykettle-dev-setup --force) would accumulate duplicate comments - Ensures truly idempotent behavior when running templating multiple times on the same file
- Example:
frozen_string_literalcomments no longer multiply from 1→4→5→6 on repeated runs
1.2.3 - 2025-11-28vari
- TAG: v1.2.3
- COVERAGE: 93.43% -- 4681/5010 lines in 31 files
- BRANCH COVERAGE: 76.63% -- 1912/2495 branches in 31 files
- 70.55% documented
- Fixed Gemfile parsing to properly deduplicate comments across multiple template runs
- Implemented two-pass comment deduplication: sequences first, then individual lines
- Magic comments (frozen_string_literal, encoding, etc.) are now properly deduplicated by content, not line position
- File-level comments are deduplicated while preserving leading comments attached to statements
- Ensures idempotent behavior when running templating multiple times on the same file
- Prevents accumulation of duplicate frozen_string_literal comments and comment blocks
1.2.2 - 2025-11-27
- TAG: v1.2.2
- COVERAGE: 93.28% -- 4596/4927 lines in 31 files
- BRANCH COVERAGE: 76.45% -- 1883/2463 branches in 31 files
- 70.00% documented
- Prism AST-based manipulation of ruby during templating
- Gemfiles
- gemspecs
- .simplecov
- Stop rescuing Exception in certain scenarios (just StandardError)
- Refactored logging logic and documentation
- Prevent self-referential gemfile injection
- in Gemfiles, gemspecs, and Appraisals
- Improve reliability of coverage and documentation stats
- in the changelog version heading
- fails hard when unable to generate stats, unless
--no-strictprovided
- TAG: v1.2.0
- COVERAGE: 94.38% -- 4066/4308 lines in 26 files
- BRANCH COVERAGE: 78.81% -- 1674/2124 branches in 26 files
- 69.14% documented
- Source merging switched from Regex-based string manipulation to Prism AST-based manipulation
- Comments are preserved in the resulting file
1.1.60 - 2025-11-23
- TAG: v1.1.60
- COVERAGE: 94.38% -- 4066/4308 lines in 26 files
- BRANCH COVERAGE: 78.86% -- 1675/2124 branches in 26 files
- 79.89% documented
- Add KETTLE_DEV_DEBUG to direnv defaults
- Documentation of the explicit policy violations of RubyGems.org leadership toward open source projects they funded
- Prevent double test runs by ensuring only one of test/coverage/spec are in default task
- Add debugging when more than one registered
1.1.59 - 2025-11-13
- TAG: v1.1.59
- COVERAGE: 94.38% -- 4066/4308 lines in 26 files
- BRANCH COVERAGE: 78.77% -- 1673/2124 branches in 26 files
- 79.89% documented
- Improved default devcontainer with common dependencies of most Ruby projects
- token replacement of {TARGET|GEM|NAME}
1.1.58 - 2025-11-13
- TAG: v1.1.58
- COVERAGE: 94.41% -- 4067/4308 lines in 26 files
- BRANCH COVERAGE: 78.77% -- 1673/2124 branches in 26 files
- 79.89% documented
- Ignore more .idea plugin artifacts
- bin/rake yard no longer overrides the .yardignore for checksums
1.1.57 - 2025-11-13
- TAG: v1.1.57
- COVERAGE: 94.36% -- 4065/4308 lines in 26 files
- BRANCH COVERAGE: 78.81% -- 1674/2124 branches in 26 files
- 79.89% documented
- New Rake task:
appraisal:reset— deletes all Appraisal lockfiles (gemfiles/*.gemfile.lock). - Improved .env.local.example template
- .yardignore more comprehensively ignores directories that are not relevant to documentation
1.1.56 - 2025-11-11
- TAG: v1.1.56
- COVERAGE: 94.38% -- 4066/4308 lines in 26 files
- BRANCH COVERAGE: 78.77% -- 1673/2124 branches in 26 files
- 79.89% documented
- Appraisals template merge with existing header
- Don't set opencollective in FUNDING.yml when osc is disabled
- handling of open source collective ENV variables in .envrc templates
- Don't invent an open collective handle when open collective is not enabled
1.1.55 - 2025-11-11
- TAG: v1.1.55
- COVERAGE: 94.41% -- 4039/4278 lines in 26 files
- BRANCH COVERAGE: 78.88% -- 1662/2107 branches in 26 files
- 79.89% documented
- GitLab Pipelines for Ruby 2.7, 3.0, 3.0
1.1.54 - 2025-11-11
- TAG: v1.1.54
- COVERAGE: 94.39% -- 4038/4278 lines in 26 files
- BRANCH COVERAGE: 78.88% -- 1662/2107 branches in 26 files
- 79.89% documented
- .idea/.gitignore is now part of template
1.1.53 - 2025-11-10
- TAG: v1.1.53
- COVERAGE: 94.41% -- 4039/4278 lines in 26 files
- BRANCH COVERAGE: 78.93% -- 1663/2107 branches in 26 files
- 79.89% documented
- Template .yardopts now includes yard-yaml plugin (for CITATION.cff)
- Template now includes a default
.yardoptsfile- Excludes .gem, pkg/.gem and .yardoc from documentation generation
1.1.52 - 2025-11-08
- TAG: v1.1.52
- COVERAGE: 94.37% -- 4037/4278 lines in 26 files
- BRANCH COVERAGE: 78.93% -- 1663/2107 branches in 26 files
- 79.89% documented
- Update documentation
- Upgrade to yard-fence v0.8.0
1.1.51 - 2025-11-07
- TAG: v1.1.51
- COVERAGE: 94.41% -- 4039/4278 lines in 26 files
- BRANCH COVERAGE: 78.88% -- 1662/2107 branches in 26 files
- 79.89% documented
- unused file removed from template
- functionality was replaced by yard-fence gem
1.1.50 - 2025-11-07
- TAG: v1.1.50
- COVERAGE: 94.41% -- 4039/4278 lines in 26 files
- BRANCH COVERAGE: 78.88% -- 1662/2107 branches in 26 files
- 79.89% documented
- invalid documentation (bad find/replace outcomes during templating)
1.1.49 - 2025-11-07
- TAG: v1.1.49
- COVERAGE: 94.39% -- 4038/4278 lines in 26 files
- BRANCH COVERAGE: 78.93% -- 1663/2107 branches in 26 files
- 79.89% documented
- yard-fence for handling braces in fenced code blocks in yard docs
- Improved documentation
1.1.48 - 2025-11-06
- TAG: v1.1.48
- COVERAGE: 94.39% -- 4038/4278 lines in 26 files
- BRANCH COVERAGE: 78.93% -- 1663/2107 branches in 26 files
- 79.89% documented
- Typo in markdown link
- Handling of pre-existing gemfile
1.1.47 - 2025-11-06
- TAG: v1.1.47
- COVERAGE: 95.68% -- 4054/4237 lines in 26 files
- BRANCH COVERAGE: 80.45% -- 1675/2082 branches in 26 files
- 79.89% documented
- Handle custom dependencies in Gemfiles gracefully
- Intelligent templating of Appraisals
- Typos in funding links
1.1.46 - 2025-11-04
- TAG: v1.1.46
- COVERAGE: 96.25% -- 3958/4112 lines in 26 files
- BRANCH COVERAGE: 80.95% -- 1636/2021 branches in 26 files
- 79.68% documented
- Validate RBS Types within style workflow
- typos in README.md
1.1.45 - 2025-10-31
- TAG: v1.1.45
- COVERAGE: 96.33% -- 3961/4112 lines in 26 files
- BRANCH COVERAGE: 81.00% -- 1637/2021 branches in 26 files
- 79.68% documented
- floss-funding related documentation improvements
1.1.44 - 2025-10-31
- TAG: v1.1.44
- COVERAGE: 96.04% -- 3949/4112 lines in 26 files
- BRANCH COVERAGE: 80.85% -- 1634/2021 branches in 26 files
- 79.68% documented
exe/*fromspec.files, because it is redundant withspec.bindir&spec.executables- prepare-commit-msg.example: no longer needed
- prepare-commit-msg git hook: incompatibility between direnv and mise by removing
direnv exec
1.1.43 - 2025-10-30
- TAG: v1.1.43
- COVERAGE: 96.06% -- 3950/4112 lines in 26 files
- BRANCH COVERAGE: 80.85% -- 1634/2021 branches in 26 files
- 79.68% documented
- typos in CONTRIBUTING.md used for templating
1.1.42 - 2025-10-29
- TAG: v1.1.42
- COVERAGE: 96.04% -- 3949/4112 lines in 26 files
- BRANCH COVERAGE: 80.85% -- 1634/2021 branches in 26 files
- 79.68% documented
- Exclude
gemfiles/modular/injected.gemfilefrom the install/template process, as it is not relevant.
1.1.41 - 2025-10-28
- TAG: v1.1.41
- COVERAGE: 96.06% -- 3950/4112 lines in 26 files
- BRANCH COVERAGE: 80.85% -- 1634/2021 branches in 26 files
- 79.68% documented
- Improved formatting of errors
1.1.40 - 2025-10-28
- TAG: v1.1.40
- COVERAGE: 96.04% -- 3949/4112 lines in 26 files
- BRANCH COVERAGE: 80.85% -- 1634/2021 branches in 26 files
- 79.68% documented
- Improved copy for this gem and templated gems
1.1.39 - 2025-10-27
- TAG: v1.1.39
- COVERAGE: 96.04% -- 3949/4112 lines in 26 files
- BRANCH COVERAGE: 80.85% -- 1634/2021 branches in 26 files
- 79.68% documented
- CONTRIBUTING.md.example tailored for the templated gem
- Minor typos
1.1.38 - 2025-10-21
- TAG: v1.1.38
- COVERAGE: 96.04% -- 3949/4112 lines in 26 files
- BRANCH COVERAGE: 80.80% -- 1633/2021 branches in 26 files
- 79.68% documented
- legacy ruby 3.1 pinned to bundler 2.6.9
- Corrected typo: truffleruby-24.1 (targets Ruby 3.3 compatibility)
1.1.37 - 2025-10-21
- TAG: v1.1.37
- COVERAGE: 96.04% -- 3949/4112 lines in 26 files
- BRANCH COVERAGE: 80.80% -- 1633/2021 branches in 26 files
- 79.68% documented
- kettle-release: improved --help
- improved documentation of kettle-release
- improved documentation of spec setup with kettle-test
- upgrade to kettle-test v1.0.6
1.1.36 - 2025-10-20
- TAG: v1.1.36
- COVERAGE: 96.04% -- 3949/4112 lines in 26 files
- BRANCH COVERAGE: 80.85% -- 1634/2021 branches in 26 files
- 79.68% documented
- More documentation of RC situation
- alphabetize dependencies
1.1.35 - 2025-10-20
- TAG: v1.1.35
- COVERAGE: 96.04% -- 3949/4112 lines in 26 files
- BRANCH COVERAGE: 80.85% -- 1634/2021 branches in 26 files
- 79.68% documented
- more documentation of the RC.O situation
- upgraded kettle-test to v1.0.5
- direct dependency on rspec-pending_for (now provided, and configured, by kettle-test)
1.1.34 - 2025-10-20
- TAG: v1.1.34
- COVERAGE: 96.10% -- 3938/4098 lines in 26 files
- BRANCH COVERAGE: 80.92% -- 1624/2007 branches in 26 files
- 79.68% documented
- kettle-release: Make step 17 only push the checksum commit; bin/gem_checksums creates the commit internally.
- kettle-release: Ensure a final push of tags occurs after checksums and optional GitHub release; supports an 'all' remote aggregator when configured.
- fixed rake task compatibility with BUNDLE_PATH (i.e. vendored bundle)
- appraisal tasks
- bench tasks
- reek tasks
1.1.33 - 2025-10-13
- TAG: v1.1.33
- COVERAGE: 20.83% -- 245/1176 lines in 9 files
- BRANCH COVERAGE: 7.31% -- 43/588 branches in 9 files
- 79.57% documented
- handling for no open source collective, specified by:
ENV["FUNDING_ORG"]set to "false", orENV["OPENCOLLECTIVE_HANDLE"]set to "false"
- added codeberg gem source
- removed redundant github gem source
- added addressable to optional modular gemfile template, as it is required for kettle-pre-release
- handling of env.ACT conditions in workflows
1.1.32 - 2025-10-07
- TAG: v1.1.32
- COVERAGE: 96.39% -- 3929/4076 lines in 26 files
- BRANCH COVERAGE: 81.07% -- 1619/1997 branches in 26 files
- 79.12% documented
- A top-level note on gem server switch in README.md & template
- Switch to cooperative gem server
1.1.31 - 2025-09-21
- TAG: v1.1.31
- COVERAGE: 96.39% -- 3929/4076 lines in 26 files
- BRANCH COVERAGE: 81.07% -- 1619/1997 branches in 26 files
- 79.12% documented
- order of checksums and release / tag reversed
- remove all possibility of gem rebuild (part of reproducible builds) including checksums in the rebuilt gem
1.1.30 - 2025-09-21
- TAG: v1.1.30
- COVERAGE: 96.27% -- 3926/4078 lines in 26 files
- BRANCH COVERAGE: 80.97% -- 1617/1997 branches in 26 files
- 79.12% documented
- kettle-changelog: handle legacy tag-in-release-heading style
- convert to tag-in-list style
1.1.29 - 2025-09-21
- TAG: v1.1.29
- COVERAGE: 96.19% -- 3861/4014 lines in 26 files
- BRANCH COVERAGE: 80.74% -- 1589/1968 branches in 26 files
- 79.12% documented
- Testing release
1.1.28 - 2025-09-21
- TAG: v1.1.28
- COVERAGE: 96.19% -- 3861/4014 lines in 26 files
- BRANCH COVERAGE: 80.89% -- 1592/1968 branches in 26 files
- 79.12% documented
- kettle-release: restore compatability with MFA input
1.1.27 - 2025-09-20
- TAG: v1.1.27
- COVERAGE: 96.33% -- 3860/4007 lines in 26 files
- BRANCH COVERAGE: 81.09% -- 1591/1962 branches in 26 files
- 79.12% documented
- Use obfuscated URLs, and avatars from Open Collective in ReadmeBackers
- improved handling of flaky truffleruby builds in workflow templates
- fixed handling of kettle-release when checksums are present and unchanged causing the gem_checksums script to fail
1.1.25 - 2025-09-18
- TAG: v1.1.25
- COVERAGE: 96.87% -- 3708/3828 lines in 26 files
- BRANCH COVERAGE: 81.69% -- 1526/1868 branches in 26 files
- 78.33% documented
- kettle-readme-backers fails gracefully when README_UPDATER_TOKEN is missing from org secrets
1.1.24 - 2025-09-17
- TAG: v1.1.24
- COVERAGE: 96.85% -- 3694/3814 lines in 26 files
- BRANCH COVERAGE: 81.81% -- 1520/1858 branches in 26 files
- 78.21% documented
- Replace template tokens with real minimum ruby versions for runtime and development
- consolidated specs
- All .example files are now included in the gem package
- Leaky state in specs
1.1.23 - 2025-09-16
- TAG: v1.1.23
- COVERAGE: 96.71% -- 3673/3798 lines in 26 files
- BRANCH COVERAGE: 81.57% -- 1509/1850 branches in 26 files
- 77.97% documented
- GemSpecReader, ReadmeBackers now use shared OpenCollectiveConfig
- fixes broken opencollective config handling in GemSPecReader
1.1.22 - 2025-09-16
- TAG: v1.1.22
- COVERAGE: 96.83% -- 3661/3781 lines in 25 files
- BRANCH COVERAGE: 81.70% -- 1505/1842 branches in 25 files
- 77.01% documented
- Revert "🔒️ Use pull_request_target in workflows"
- It's not relevant to my projects (either this gem or the ones templated)
1.1.21 - 2025-09-16
- TAG: v1.1.21
- COVERAGE: 96.83% -- 3661/3781 lines in 25 files
- BRANCH COVERAGE: 81.65% -- 1504/1842 branches in 25 files
- 77.01% documented
- improved templating
- improved documentation
- kettle-readme-backers: read correct config file
- .opencollective.yml in project root
1.1.20 - 2025-09-15
- TAG: v1.1.20
- COVERAGE: 96.80% -- 3660/3781 lines in 25 files
- BRANCH COVERAGE: 81.65% -- 1504/1842 branches in 25 files
- 77.01% documented
- Allow reformating of CHANGELOG.md without version bump
--include=GLOBincludes files not otherwise included in default template- more test coverage
- Add .licenserc.yaml to gem package
- Handling of GFM fenced code blocks in CHANGELOG.md
- Handling of nested list items in CHANGELOG.md
- Handling of blank lines around all headings in CHANGELOG.md
1.1.19 - 2025-09-14
- TAG: v1.1.19
- COVERAGE: 96.58% -- 3531/3656 lines in 25 files
- BRANCH COVERAGE: 81.11% -- 1443/1779 branches in 25 files
- 76.88% documented
- documentation of vcr on Ruby 2.4
- Apache SkyWalking Eyes dependency license check
- Added to template
- fix duplicate headings in CHANGELOG.md Unreleased section
1.1.18 - 2025-09-12
- TAG: v1.1.18
- COVERAGE: 96.24% -- 3477/3613 lines in 25 files
- BRANCH COVERAGE: 81.01% -- 1425/1759 branches in 25 files
- 76.88% documented
- remove patreon link from README template
1.1.17 - 2025-09-11
- TAG: v1.1.17
- COVERAGE: 96.29% -- 3479/3613 lines in 25 files
- BRANCH COVERAGE: 81.01% -- 1425/1759 branches in 25 files
- 76.88% documented
- improved documentation
- better organized readme
- badges are more clear & new badge for Ruby Friends Squad on Daily.dev
- update template to version_gem v1.1.9
- right-size funding commit message append width
- remove patreon link from README
1.1.16 - 2025-09-10
- TAG: v1.1.16
- COVERAGE: 96.24% -- 3477/3613 lines in 25 files
- BRANCH COVERAGE: 81.01% -- 1425/1759 branches in 25 files
- 76.88% documented
- handling of alternate format of Unreleased section in CHANGELOG.md
1.1.15 - 2025-09-10
- TAG: v1.1.15
- COVERAGE: 96.29% -- 3479/3613 lines in 25 files
- BRANCH COVERAGE: 80.96% -- 1424/1759 branches in 25 files
- 76.88% documented
- fix appraisals for Ruby v2.7 to use correct x_std_libs
1.1.14 - 2025-09-10
- TAG: v1.1.14
- COVERAGE: 96.24% -- 3477/3613 lines in 25 files
- BRANCH COVERAGE: 80.96% -- 1424/1759 branches in 25 files
- 76.88% documented
- use current x_std_libs modular gemfile for all appraisals that are pinned to current ruby
- fix appraisals for Ruby v2 to use correct version of erb
1.1.13 - 2025-09-09
- TAG: v1.1.13
- COVERAGE: 96.29% -- 3479/3613 lines in 25 files
- BRANCH COVERAGE: 80.96% -- 1424/1759 branches in 25 files
- 76.88% documented
- include .rubocop_rspec.yml during install / template task's file copy
- kettle-dev-setup now honors
--forceoption
1.1.12 - 2025-09-09
- TAG: v1.1.12
- COVERAGE: 94.84% -- 3422/3608 lines in 25 files
- BRANCH COVERAGE: 78.97% -- 1386/1755 branches in 25 files
- 76.88% documented
- improve Gemfile updates during kettle-dev-setup
- git origin-based funding_org derivation during setup
1.1.11 - 2025-09-08
- TAG: v1.1.11
- COVERAGE: 96.56% -- 3396/3517 lines in 24 files
- BRANCH COVERAGE: 81.33% -- 1385/1703 branches in 24 files
- 77.06% documented
- move kettle-dev-setup logic into Kettle::Dev::SetupCLI
- gem dependency detection in kettle-dev-setup to prevent duplication
1.1.10 - 2025-09-08
- TAG: v1.1.10
- COVERAGE: 97.14% -- 3256/3352 lines in 23 files
- BRANCH COVERAGE: 81.91% -- 1345/1642 branches in 23 files
- 76.65% documented
- Improve documentation
- Fix an internal link in README.md
- template task no longer overwrites CHANGELOG.md completely
- attempts to retain existing release notes content
- Fix a typo in the README.md
- fix typo in the path to x_std_libs.gemfile
1.1.9 - 2025-09-07
- TAG: v1.1.9
- COVERAGE: 97.11% -- 3255/3352 lines in 23 files
- BRANCH COVERAGE: 81.91% -- 1345/1642 branches in 23 files
- 76.65% documented
- badge for current runtime heads in example readme
- Add gemfiles/modular/x_std_libs.gemfile & injected.gemfile to template
- example version of gemfiles/modular/runtime_heads.gemfile
- necessary to avoid deps on recording gems in the template
1.1.8 - 2025-09-07
- TAG: v1.1.8
- COVERAGE: 97.16% -- 3246/3341 lines in 23 files
- BRANCH COVERAGE: 81.95% -- 1344/1640 branches in 23 files
- 76.97% documented
- add .aiignore to the template
- add .rubocop_rspec.yml to the template
- gemfiles/modular/x_std_libs pattern to template, including:
- erb
- mutex_m
- stringio
- gemfiles/modular/debug.gemfile
- gemfiles/modular/runtime_heads.gemfile
- .github/workflows/dep-heads.yml
- (performance) filter and prioritize example files in the
.githubdirectory - added codecov config to the template
- Kettle::Dev.default_registered?
- run specs as part of the test task
1.1.7 - 2025-09-06
- TAG: v1.1.7
- COVERAGE: 97.12% -- 3237/3333 lines in 23 files
- BRANCH COVERAGE: 81.95% -- 1344/1640 branches in 23 files
- 76.97% documented
- rake task -
appraisal:install- initial setup for projects that didn't previously use Appraisal
- .git-hooks/commit-msg allows commit if gitmoji-regex is unavailable
- simplified
*Taskclasses'task_abortmethods to just raise Kettle::Dev::Error- Allows caller to decide how to handle.
- addressable, rake runtime dependencies
- moved to optional, or development dependencies
- Fix local CI via act for templated workflows (skip JRuby in nektos/act locally)
1.1.6 - 2025-09-05
- TAG: v1.1.6
- COVERAGE: 97.06% -- 3241/3339 lines in 23 files
- BRANCH COVERAGE: 81.83% -- 1347/1646 branches in 23 files
- 76.97% documented
- bin/rake test works for minitest
1.1.5 - 2025-09-04
- TAG: v1.1.5
- COVERAGE: 33.87% -- 1125/3322 lines in 22 files
- BRANCH COVERAGE: 22.04% -- 361/1638 branches in 22 files
- 76.83% documented
- kettle-pre-release: run re-release checks on a library
- validate URLs of image assets in Markdown files
- honor ENV["FUNDING_FORGE"] set to "false" as intentional disabling of funding-related logic.
- Add CLI Option --only passthrough from kettle-dev-setup to Installation Task
- Comprehensive documentation of all exe/ scripts in README.md
- add gitlab pipeline result to ci:act
- highlight SHA discrepancies in ci:act task header info
- how to set up forge tokens for ci:act, and other tools, instructions for README.md
- expanded use of adapter patterns (Exit, Git, and Input)
- refactored and improved structure of code, more resilient
- kettle-release: do not abort immediately on CI failure; continue checking all workflows, summarize results, and prompt to (c)ontinue or (q)uit (reuses ci:act-style summary)
- defensive NameError handling in ChangelogCLI.abort method
- replace token
{OPENCOLLECTIVE|ORG_NAME}with funding org name - prefer .example version of .git-hooks
- kettle-commit-msg now runs via rubygems (not bundler) so it will work via a system gem
- fixed logic for handling derivation of forge and funding URLs
- allow commits to succeed if dependencies are missing or broken
- RBS types documentation for GemSpecReader
1.1.4 - 2025-09-02
- TAG: v1.1.4
- COVERAGE: 67.64% -- 554/819 lines in 9 files
- BRANCH COVERAGE: 53.25% -- 221/415 branches in 9 files
- 76.22% documented
- documentation of rake tasks from this gem no longer includes standard gem tasks
- kettle-dev-setup: package bin/setup so setup can copy it
- kettle_dev_install task: set executable flag for .git-hooks script when installing
1.1.3 - 2025-09-02
- TAG: v1.1.3
- COVERAGE: 97.14% -- 2857/2941 lines in 22 files
- BRANCH COVERAGE: 82.29% -- 1194/1451 branches in 22 files
- 76.22% documented
- URL for migrating repo to CodeBerg:
- Stop double defining DEBUGGING constant
1.1.2 - 2025-09-02
- TAG: v1.1.2
- COVERAGE: 97.14% -- 2858/2942 lines in 22 files
- BRANCH COVERAGE: 82.29% -- 1194/1451 branches in 22 files
- 76.76% documented
- .gitlab-ci.yml documentation (in example)
- kettle-dvcs script for setting up DVCS, and checking status of remotes
- kettle-dvcs --status: prefix "ahead by N" with ✅️ when N==0, and 🔴 when N>0
- kettle-dvcs --status: also prints a Local status section comparing local HEAD to origin/, and keeps origin visible via that section
- Document kettle-dvcs CLI in README (usage, options, examples)
- RBS types for Kettle::Dev::DvcsCLI and inline YARD docs on CLI
- Specs for DvcsCLI covering remote normalization, fetch outcomes, and README updates
- major spec refactoring
- (linting) rspec-pending_for 0.0.17+ (example gemspec)
1.1.1 - 2025-09-02
- TAG: v1.1.1
- COVERAGE: 97.04% -- 2655/2736 lines in 21 files
- BRANCH COVERAGE: 82.21% -- 1109/1349 branches in 21 files
- 76.81% documented
- .simplecov.example - keeps it generic
- improved documentation on automatic release script
- .gitlab-ci.yml documentation
- reduce extra leading whitespace in info table column 2
1.1.0 - 2025-09-02
- TAG: v1.1.0
- COVERAGE: 97.03% -- 2649/2730 lines in 21 files
- BRANCH COVERAGE: 82.16% -- 1105/1345 branches in 21 files
- 76.81% documented
- exe/kettle-dev-setup - bootstrap templating in any RubyGem
- all runtime deps
- dependencies haven't really changed; will be injected into the gemspec of the including gem
- almost a breaking change; but this gem re-templates other gems
- so non-breaking via re-templating.
1.0.27 - 2025-09-01
- TAG: v1.0.27
- COVERAGE: 97.77% -- 2629/2689 lines in 22 files
- BRANCH COVERAGE: 82.40% -- 1100/1335 branches in 22 files
- 76.47% documented
- Use semver version dependency (~> 1.0) on kettle-dev when templating
- dependency on version_gem (backwards compatible change)
1.0.26 - 2025-09-01
- TAG: v1.0.26
- COVERAGE: 97.81% -- 2630/2689 lines in 22 files
- BRANCH COVERAGE: 82.40% -- 1100/1335 branches in 22 files
- 75.00% documented
- .env.local.example is now included in the packaged gem
- making the copy by install / template tasks possible
1.0.25 - 2025-08-31
- TAG: v1.0.25
- COVERAGE: 97.81% -- 2630/2689 lines in 22 files
- BRANCH COVERAGE: 82.40% -- 1100/1335 branches in 22 files
- 75.00% documented
- test that .env.local.example is copied by install / template tasks
- update Appraisals.example template's instructions for updating appraisals
1.0.24 - 2025-08-31
- TAG: v1.0.24
- COVERAGE: 97.51% -- 2625/2692 lines in 22 files
- BRANCH COVERAGE: 81.97% -- 1096/1337 branches in 22 files
- 75.00% documented
- improved documentation
- more badges in README (gem & template)
- integration test for kettle-changelog using CHANGELOG.md.
- integration test for kettle-changelog using KEEP_A_CHANGELOG.md.
- add output to error handling related to release creation on GitHub
- refactored Kettle::Dev::Tasks::CITask.abort => task_abort
- Avoids method name clash with ExitAdapter
- follows the pattern of other Kettle::Dev::Tasks modules
- move --help handling for kettle-changelog to kettle-changelog itself
- typos in README for gem & template
- kettle-changelog: more robust in retention of version chunks, and markdown link refs, that are not relevant to the chunk being added
- rearrange footer links in changelog by order, newest first, oldest last
Kettle::Dev::Tasks::CITask.actreturns properly when running non-interactively- replace Underscores with Dashes in Gem Names for [🚎yard-head] link
1.0.23 - 2025-08-30
- TAG: v1.0.23
- COVERAGE: 97.75% -- 2428/2484 lines in 21 files
- BRANCH COVERAGE: 81.76% -- 1013/1239 branches in 21 files
- 76.00% documented
- Carryover important fields from the original gemspec during templating
- refactor gemspec parsing
- normalize template gemspec data
- include FUNDING.md in the released gem package
- typo of required_ruby_version
1.0.22 - 2025-08-30
- TAG: v1.0.22
- COVERAGE: 97.82% -- 2375/2428 lines in 20 files
- BRANCH COVERAGE: 81.34% -- 972/1195 branches in 20 files
- 76.23% documented
- improved documentation
- example version of heads workflow
- give heads two attempts to succeed
1.0.21 - 2025-08-30
- TAG: v1.0.21
- COVERAGE: 97.82% -- 2375/2428 lines in 20 files
- BRANCH COVERAGE: 81.34% -- 972/1195 branches in 20 files
- 76.23% documented
- FUNDING.md in support of a funding footer on release notes
- truffle workflow: Repeat attempts for bundle install and appraisal bundle before failure
- global token replacement during kettle:dev:install
- kettle-dev => kettle-dev
- {RUBOCOP|LTS|CONSTRAINT} => dynamic
- {RUBOCOP|RUBY|GEM} => dynamic
- default to rubocop-ruby1_8 if no minimum ruby specified
- template supports local development of RuboCop-LTS suite of gems
- improved documentation
- dependabot: ignore rubocop-lts for updates
- template configures RSpec to run tests in random order
1.0.20 - 2025-08-29
- TAG: v1.0.20
- COVERAGE: 14.01% -- 96/685 lines in 8 files
- BRANCH COVERAGE: 0.30% -- 1/338 branches in 8 files
- 76.23% documented
- Use example version of ancient.yml workflow since local version has been customized
- Use example version of jruby.yml workflow since local version has been customized
1.0.19 - 2025-08-29
- TAG: v1.0.19
- COVERAGE: 97.84% -- 2350/2402 lines in 20 files
- BRANCH COVERAGE: 81.46% -- 962/1181 branches in 20 files
- 76.23% documented
- replacement logic handles a dashed gem-name which maps onto a nested path structure
1.0.18 - 2025-08-29
- TAG: v1.0.18
- COVERAGE: 71.70% -- 456/636 lines in 9 files
- BRANCH COVERAGE: 51.17% -- 153/299 branches in 9 files
- 76.23% documented
- kettle:dev:install can overwrite gemspec with example gemspec
- documentation for the start_step CLI option for kettle-release
- kettle:dev:install and kettle:dev:template support
only=option with glob filtering:- comma-separated glob patterns matched against destination paths relative to project root
- non-matching files are excluded from templating.
- kettle:dev:install remove "Works with MRI Ruby*" lines with no badges left
- kettle:dev:install prefix badge cell replacement with a single space
1.0.17 - 2025-08-29
- TAG: v1.0.17
- COVERAGE: 98.14% -- 2271/2314 lines in 20 files
- BRANCH COVERAGE: 81.42% -- 916/1125 branches in 20 files
- 76.23% documented
- kettle-changelog added to exe files so packaged with released gem
1.0.16 - 2025-08-29
- TAG: v1.0.16
- COVERAGE: 98.14% -- 2271/2314 lines in 20 files
- BRANCH COVERAGE: 81.42% -- 916/1125 branches in 20 files
- 76.23% documented
- default rake task must be defined before it can be enhanced
1.0.15 - 2025-08-29
- TAG: v1.0.15
- COVERAGE: 98.17% -- 2259/2301 lines in 20 files
- BRANCH COVERAGE: 81.00% -- 908/1121 branches in 20 files
- 76.03% documented
- kettle-release: early validation of identical set of copyright years in README.md and CHANGELOG.md, adds current year if missing, aborts on mismatch
- kettle-release: update KLOC in README.md
- kettle-release: update Rakefile.example with version and date
- kettle-release: print package name and version released as final line
- use git adapter to wrap more git commands to make tests easier to build
- stop testing Ruby 2.4 on CI due to a strange issue with VCR.
- still testing Ruby 2.3
- include gemfiles/modular/*gemfile.example with packaged gem
- CI workflow result polling logic revised:
- includes a delay
- scopes queries to specific commit SHA
- prevents false failures from previous runs
1.0.14 - 2025-08-28
- TAG: v1.0.14
- COVERAGE: 97.70% -- 2125/2175 lines in 20 files
- BRANCH COVERAGE: 78.77% -- 842/1069 branches in 20 files
- 76.03% documented
- kettle-release: Push tags to additional remotes after release
- Improve .gitlab-ci.yml pipeline
- Removed README badges for unsupported old Ruby versions
- Minor inconsistencies in template files
- git added as a dependency to optional.gemfile instead of the example template
1.0.13 - 2025-08-28
- TAG: v1.0.13
- COVERAGE: 41.94% -- 65/155 lines in 6 files
- BRANCH COVERAGE: 1.92% -- 1/52 branches in 6 files
- 76.03% documented
- kettle-release: Create GitHub release from tag & changelog entry
1.0.12 - 2025-08-28
- TAG: v1.0.12
- COVERAGE: 97.80% -- 1957/2001 lines in 19 files
- BRANCH COVERAGE: 79.98% -- 763/954 branches in 19 files
- 78.70% documented
- CIMonitor to consolidate workflow / pipeline monitoring logic for GH/GL across kettle-release and rake tasks, with handling for:
- minutes exhausted
- blocked
- not configured
- normal failures
- pending
- queued
- running
- success
- Ability to restart kettle-release from any failed step, so manual fixed can be applied.
- Example (after intermittent failure of CI):
bundle exec kettle-release start_step=10
- Example (after intermittent failure of CI):
- added optional.gemfile.example, and handling for it in templating
- kettle-changelog: ensure a blank line at end of file
- add sleep(0.2) to ci:act to prevent race condition with stdout flushing
- kettle-release: ensure SKIP_GEM_SIGNING works as expected with values of "true" or "false"
- ensure it doesn't abort the process in CI
1.0.11 - 2025-08-28
- TAG: v1.0.11
- COVERAGE: 97.90% -- 1959/2001 lines in 19 files
- BRANCH COVERAGE: 79.98% -- 763/954 branches in 19 files
- 78.70% documented
- Add more .example templates
- .github/workflows/coverage.yml.example
- .gitlab-ci.yml.example
- Appraisals.example
- Kettle::Dev::InputAdapter: Input indirection layer for safe interactive prompts in tests; provides gets and readline; documented with YARD and typed with RBS.
- install task README improvements
- extracts emoji grapheme from H1 to apply to gemspec's summary and description
- removes badges for unsupported rubies, and major version MRI row if all badges removed
- new exe script: kettle-changelog - transitions a changelog from unreleased to next release
- Make 'git' gem dependency optional; fall back to raw
gitcommands when the gem is not present (rescues LoadError). See Kettle::Dev::GitAdapter. - upgraded to stone_checksums v1.0.2
- exe scripts now print their name and version as they start up
- dependency on git gem
- git gem is still supported if present and not bypassed by new ENV variable
KETTLE_DEV_DISABLE_GIT_GEM - no longer a direct dependency
- git gem is still supported if present and not bypassed by new ENV variable
- Upgrade stone_checksums for release compatibility with bundler v2.7+
- Retains compatibility with older bundler < v2.7
- Ship all example templates with gem
- install task README preservation
- preserves H1 line, and specific H2 headed sections
- preserve table alignment
1.0.10 - 2025-08-24
- TAG: v1.0.10
- COVERAGE: 97.68% -- 1685/1725 lines in 17 files
- BRANCH COVERAGE: 77.54% -- 618/797 branches in 17 files
- 95.35% documented
- runs git add --all before git commit, to ensure all files are committed.
- This gem is now loaded via Ruby's standard
autoloadfeature. - Bundler is always expected, and most things probably won't work without it.
- exe/ scripts and rake tasks logic is all now moved into classes for testability, and is nearly fully covered by tests.
- New Kettle::Dev::GitAdapter class is an adapter pattern wrapper for git commands
- New Kettle::Dev::ExitAdapter class is an adapter pattern wrapper for Kernel.exit and Kernel.abort within this codebase.
- attempts to make exe/* scripts work without bundler. Bundler is required.
Kettle::Dev::ReleaseCLI#detect_versionhandles gems with multiple VERSION constantskettle:dev:templatetask was fixed to copy.examplefiles with the destination filename lacking the.exampleextension, except for.env.local.example
1.0.9 - 2025-08-24
- TAG: v1.0.9
- COVERAGE: 100.00% -- 130/130 lines in 7 files
- BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
- 95.35% documented
- kettle-release: Add a sanity check for the latest released version of the gem being released, and display it during the confirmation with user that CHANGELOG.md and version.rb have been updated, so they can compare the value in version.rb with the value of the latest released version.
- If the value in version.rb is less than the latest released version's major or minor, then check for the latest released version that matches the major + minor of what is in version.rb.
- This way a stable branch intended to release patch updates to older versions is able to work use the script.
- kettle-release: optional pre-push local CI run using
act, controlled by env varK_RELEASE_LOCAL_CI("true" to run, "ask" to prompt) andK_RELEASE_LOCAL_CI_WORKFLOWto choose a workflow; defaults tolocked_deps.ymlwhen present; on failure, soft-resets the release prep commit and aborts. - template task: now copies
certs/pboling.peminto the host project when available.
1.0.8 - 2025-08-24
- TAG: v1.0.8
- COVERAGE: 100.00% -- 130/130 lines in 7 files
- BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
- 95.35% documented
- Can't add checksums to the gem package, because it changes the checksum (duh!)
1.0.7 - 2025-08-24
- TAG: v1.0.7
- COVERAGE: 100.00% -- 130/130 lines in 7 files
- BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
- 95.35% documented
- Reproducible builds, with consistent checksums, by not using SOURCE_DATE_EPOCH.
- Since bundler v2.7.0 builds are reproducible by default.
1.0.6 - 2025-08-24
- TAG: v1.0.6
- COVERAGE: 100.00% -- 130/130 lines in 7 files
- BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
- 95.35% documented
- kettle-release: ensure SOURCE_DATE_EPOCH is applied within the same shell for both build and release by prefixing the commands with the env var (e.g.,
SOURCE_DATE_EPOCH=$epoch bundle exec rake buildand... rake release); prevents losing the variable across shell boundaries and improves reproducible checksums.
1.0.5 - 2025-08-24
- TAG: v1.0.5
- COVERAGE: 100.00% -- 130/130 lines in 7 files
- BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
- 95.35% documented
- kettle-release: will run regardless of how it is invoked (i.e. works as binstub)
1.0.4 - 2025-08-24
- TAG: v1.0.4
- COVERAGE: 100.00% -- 130/130 lines in 7 files
- BRANCH COVERAGE: 96.00% -- 48/50 branches in 7 files
- 95.35% documented
- kettle-release: checks all remotes for a GitHub remote and syncs origin/trunk with it; prompts to rebase or --no-ff merge when histories diverge; pushes to both origin and the GitHub remote on merge; uses the GitHub remote for GitHub Actions CI checks, and also checks GitLab CI when a GitLab remote and .gitlab-ci.yml are present.
- kettle-release: push logic improved — if a remote named
allexists, push the current branch to it (assumed to cover multiple push URLs). Otherwise push the current branch tooriginand to any GitHub, GitLab, and Codeberg remotes (whatever their names are).
- kettle-release now validates SHA256 checksums of the built gem against the recorded checksums and aborts on mismatch; helps ensure reproducible artifacts (honoring SOURCE_DATE_EPOCH).
- kettle-release now enforces CI checks and aborts if CI cannot be verified; supports GitHub Actions and GitLab pipelines, including releases from trunk/main.
- kettle-release no longer requires bundler/setup, preventing silent exits when invoked from a dependent project; adds robust output flushing.
1.0.3 - 2025-08-24
- TAG: v1.0.3
- COVERAGE: 100.00% -- 98/98 lines in 7 files
- BRANCH COVERAGE: 100.00% -- 30/30 branches in 7 files
- 94.59% documented
- template task now copies .git-hooks files necessary for git hooks to work
- kettle-release now uses the host project's root, instead of this gem's installed root.
- Added .git-hooks files necessary for git hooks to work
1.0.2 - 2025-08-24
- TAG: v1.0.2
- COVERAGE: 100.00% -- 98/98 lines in 7 files
- BRANCH COVERAGE: 100.00% -- 30/30 branches in 7 files
- 94.59% documented
- Added files necessary for kettle:dev:template task to work
- .github/workflows/opencollective.yml working!
1.0.1 - 2025-08-24
- TAG: v1.0.1
- COVERAGE: 100.00% -- 98/98 lines in 7 files
- BRANCH COVERAGE: 100.00% -- 30/30 branches in 7 files
- 94.59% documented
- These were documented but not yet released:
kettle-releaseruby script for safely, securely, releasing a gem.- This may move to its own gem in the future.
kettle-readme-backersruby script for integrating Open Source Collective backers into a README.md file.- This may move to its own gem in the future.
1.0.0 - 2025-08-24
- TAG: v1.0.0
- COVERAGE: 100.00% -- 98/98 lines in 7 files
- BRANCH COVERAGE: 100.00% -- 30/30 branches in 7 files
- 94.59% documented
- initial release, with auto-config support for:
- bundler-audit
- rake
- require_bench
- appraisal2
- gitmoji-regex (& git-hooks to enforce gitmoji commit-style)
- via kettle-test
- Note: rake tasks for kettle-test are added in this gem (kettle-dev) because test rake tasks are a development concern
- rspec
- although rspec is the focus, most tools work with minitest as well
- rspec-block_is_expected
- rspec-stubbed_env
- silent_stream
- timecop-rspec
kettle:dev:installrake task for installing githooks, and various instructions for optimal configurationkettle:dev:templaterake task for copying most of this gem's files (excepting bin/, docs/, exe/, sig/, lib/, specs/) to another gem, as a template.ci:actrake task CLI menu / scoreboard for a project's GHA workflows- Selecting will run the selected workflow via
act - This may move to its own gem in the future.
- Selecting will run the selected workflow via