Skip to content

v3.1.8

Choose a tag to compare

@pboling pboling released this 07 Oct 04:23
· 207 commits to main since this release
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