Skip to content

Releases: kettle-dev/kettle-dev

v3.1.8

Choose a tag to compare

@pboling pboling released this 07 Oct 04:23
v3.1.8
4942123

3.1.8 - 2026-10-07

  • TAG: v3.1.8
  • COVERAGE: 91.65% -- 6276/6848 lines in 49 files
  • BRANCH COVERAGE: 75.90% -- 2390/3149 branches in 49 files
  • 51.77% documented

Added

  • Kettle::Dev::RubyGemsVersions.fetch accepts a source: keyword so callers can query a RubyGems-compatible private registry such as gem.coop instead of only rubygems.org. The version cache is now namespaced by source host, so a private registry lagging rubygems.org cannot serve stale answers for the other. The default source keeps the historical bare gem-name cache key, so existing caches remain valid.

  • Kettle::Dev::RubyGemsVersions.published_version_numbers(gem_name, source:) returns the version numbers a registry serves for a gem, or nil when the registry could not be consulted. Callers must treat nil as "unknown" rather than "unpublished" so an offline run is not blocked; an empty list, by contrast, means the registry was reached and serves no versions.

  • [kc] lockfile-registry-specs: Kettle::Dev::LockfileReset.registry_gem_specs_from_source returns GEM-section specs as {remote:, name:, version:} so a caller can attribute each pinned version to the registry it was resolved from, which is what makes it possible to detect a locally built and installed gem leaking into a lockfile: bundler resolves against the local gem dir, so an ordinary bundle install can pin a version no registry serves, and the resulting entry is a normal GEM-section line carrying a valid checksum taken from the installed spec, so nothing in the lockfile text distinguishes it and "is this version published?" can only be answered against the remote that section recorded. gem_specs_from_source is now a thin wrapper over it and keeps returning [[name, version]] unchanged.

  • Kettle::Dev::RubyGemsVersions.published_version_numbers accepts a version: keyword and forwards it to fetch as a cache-bust hint, so the on-disk release marker that kettle-release writes after publishing busts the cache for exactly that gem and version instead of for every gem released within the marker TTL. Without it a caller cannot distinguish "published moments ago in this very run" from "released sometime in the last month". Also adds RubyGemsVersions.recently_released?(gem_name, version), which reports whether the marker records that exact gem and version as published within the TTL, treating a missing or corrupt marker as false rather than raising.

Community support 👉️ Ruby Users Forum Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate to my FLOSS efforts at ko-fi.com

v3.1.7

Choose a tag to compare

@pboling pboling released this 05 Oct 04:02
v3.1.7
be142e9

3.1.7 - 2026-10-04

  • TAG: v3.1.7
  • COVERAGE: 91.75% -- 6261/6824 lines in 49 files
  • BRANCH COVERAGE: 76.08% -- 2388/3139 branches in 49 files
  • 51.34% documented

Added

  • kettle-release warns when the current branch is not among the release branches its family declares, naming the declaring config and the declared branches, instead of silently treating it as a feature branch destined for trunk.

Fixed

  • Branch-stack release detection now also reads release.member_target_branches.<gem> from the family root config, so a member whose templated local .kettle-family.yml is absent (a fresh branch, or a linked worktree) no longer degrades silently into a trunk pull request and a merge into trunk.

  • Branch-stack release detection no longer uses block-level rescue or Array#filter_map, which are Ruby 2.6+ and 2.7+ constructs; the gem supports Ruby 2.4. YAML loading is isolated in safe_load_kettle_family_config with a method-level rescue, restoring the explicit begin/end contract the surrounding code relies on.

  • Preserve the selected Gemfile and lockfile when Bundler restarts during release lockfile reset.

Changed

  • [kc] kettle-jem/prepare: updated 13 project files:

    • dependencies (13)
  • [kc] kettle-jem/template: updated 7 project files:

    • code and tests (2)
    • dependencies (1)
    • documentation (1)
    • other (2)
    • workflows (1)

Community support 👉️ Ruby Users Forum Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate to my FLOSS efforts at ko-fi.com

v3.1.6

Choose a tag to compare

@pboling pboling released this 03 Oct 01:37
v3.1.6
f4c2566

3.1.6 - 2026-10-02

  • TAG: v3.1.6
  • COVERAGE: 91.66% -- 6210/6775 lines in 49 files
  • BRANCH COVERAGE: 76.13% -- 2370/3113 branches in 49 files
  • 51.34% documented

Fixed

  • Branch-stack releases now dispatch selected GitHub Actions workflows directly on the release branch instead of relying on a possibly conflicted validation PR.

  • Branch-stack release workflow validation now supports the older Psych API bundled with Ruby 2.4.

  • YAML loading now selects the supported Psych API by version, including Ruby 2.5 environments that report misleading keyword parameters.

Community support 👉️ Ruby Users Forum Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate to my FLOSS efforts at ko-fi.com

v3.1.5

Choose a tag to compare

@pboling pboling released this 29 Sep 00:12
v3.1.5
14e06fe

3.1.5 - 2026-09-28

  • TAG: v3.1.5
  • COVERAGE: 91.43% -- 6170/6748 lines in 49 files
  • BRANCH COVERAGE: 75.89% -- 2348/3094 branches in 49 files
  • 51.34% documented

Fixed

  • Recheck registry gem availability after release lockfile resolution instead of reusing stale negative probes.

Community support 👉️ Ruby Users Forum Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate to my FLOSS efforts at ko-fi.com

v3.1.4

Choose a tag to compare

@pboling pboling released this 28 Sep 05:05
v3.1.4
a4708bf

3.1.4 - 2026-09-28

  • TAG: v3.1.4
  • COVERAGE: 91.89% -- 6197/6744 lines in 49 files
  • BRANCH COVERAGE: 76.24% -- 2359/3094 branches in 49 files
  • 51.34% documented

Fixed

  • Centralize canonical path and component-aware containment checks for Kettle tools.

Community support 👉️ Ruby Users Forum Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate to my FLOSS efforts at ko-fi.com

v3.1.3

Choose a tag to compare

@pboling pboling released this 27 Sep 21:30
v3.1.3
66592a6

3.1.3 - 2026-09-27

  • TAG: v3.1.3
  • COVERAGE: 91.63% -- 6155/6717 lines in 48 files
  • BRANCH COVERAGE: 76.05% -- 2347/3086 branches in 48 files
  • 51.13% documented

Fixed

  • Recognize Windows drive, UNC, and relative paths as local lockfile remotes during release validation.

Community support 👉️ Ruby Users Forum Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate to my FLOSS efforts at ko-fi.com

v3.1.2

Choose a tag to compare

@pboling pboling released this 27 Sep 07:21
v3.1.2
fcf6bb4

3.1.2 - 2026-09-27

  • TAG: v3.1.2
  • COVERAGE: 91.60% -- 6149/6713 lines in 48 files
  • BRANCH COVERAGE: 76.10% -- 2347/3084 branches in 48 files
  • 51.02% documented

Added

  • kettle-jem-template-20260913-001 - Templating now also surfaces a review
    entry in dependency_conflicts.resolve when a direct development
    dependency doesn't support one or more of this project's declared
    engines: and has no template-managed modular home (e.g. sqlite3 on
    jruby). Review each entry and pick a resolution per the project's own
    engine support needs.

Changed

  • [kc] kettle-jem/prepare: updated 15 project files:

    • configuration (1)
    • dependencies (14)
  • [kc] kettle-jem/template: updated 35 project files:

    • code and tests (3)
    • dependencies (1)
    • other (1)
    • workflows (30)

Fixed

  • Handle macOS PTY EOF and canonicalize release-contract paths beneath symlinked temporary roots.

  • Run bundled YARD scripts through Ruby on Windows and accept absolute Windows RUBOCOP_LTS_LOCAL paths.

Community support 👉️ Ruby Users Forum Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate to my FLOSS efforts at ko-fi.com

v3.1.1

Choose a tag to compare

@pboling pboling released this 14 Sep 21:40
v3.1.1
c9326df

3.1.1 - 2026-09-14

  • TAG: v3.1.1
  • COVERAGE: 91.54% -- 6138/6705 lines in 48 files
  • BRANCH COVERAGE: 76.08% -- 2344/3081 branches in 48 files
  • 51.02% documented

Fixed

  • Close release-created branch-stack validation PRs after successful publication instead of leaving obsolete conflicted PRs open.

Community support 👉️ Ruby Users Forum Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate to my FLOSS efforts at ko-fi.com

v3.1.0

Choose a tag to compare

@pboling pboling released this 10 Sep 21:04
v3.1.0
2e96dac

3.1.0 - 2026-09-10

  • TAG: v3.1.0
  • COVERAGE: 91.86% -- 6141/6685 lines in 48 files
  • BRANCH COVERAGE: 76.10% -- 2337/3071 branches in 48 files
  • 51.02% documented

Fixed

  • [kc] release-graph-contracts: Honor the serialized release graph for lockfile normalization and child commands, retaining only declared CI-resident monorepo paths.

  • Validate serialized family release graph contracts in release lockfile normalization and child commands instead of reconstructing local-path policy from ambient environment.

Community support 👉️ Ruby Users Forum Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate to my FLOSS efforts at ko-fi.com

v3.0.34

Choose a tag to compare

@pboling pboling released this 10 Sep 01:50
v3.0.34
79b4d98

3.0.34 - 2026-09-09

  • TAG: v3.0.34
  • COVERAGE: 91.95% -- 6101/6635 lines in 47 files
  • BRANCH COVERAGE: 76.43% -- 2332/3051 branches in 47 files
  • 50.23% documented

Fixed

  • Detect and reset release lockfiles whose BUNDLED WITH version lacks a matching Bundler checksum.

  • Declare the intentional version_gem runtime-heads dependency overlap for templating self-tests.

Community support 👉️ Ruby Users Forum Live Chat on Discord

Many paths lead to being a sponsor or a backer of this project. Are you on such a path?

OpenCollective Backers OpenCollective Sponsors Sponsor Me on Github Liberapay Goal Progress Donate on PayPal

Buy me a coffee Donate to my FLOSS efforts at ko-fi.com