diff --git a/ruby/CHANGELOG.md b/ruby/CHANGELOG.md index 3cb39c8d4..68d982fee 100644 --- a/ruby/CHANGELOG.md +++ b/ruby/CHANGELOG.md @@ -7,11 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.13.0] - 2026-10-08 + ### Added - Expanded checks against Go-generated conformance fixtures to cover cron schedules, snooze counters, all shared metadata keys, and queue-control and leadership notification emission through both SQL drivers. [PR #1463](https://github.com/riverqueue/river/pull/1463). - Added `CRON_TZ=` / `TZ=` prefixes, `?` wildcards, and Go-style `@every` durations to `PeriodicCron`. [PR #1463](https://github.com/riverqueue/river/pull/1463). +### Changed + +- Ruby is now developed in the main [River repository](https://github.com/riverqueue/river/tree/master/ruby). Gem names and require paths are unchanged. The four public gems (`riverqueue`, `riverqueue-activerecord`, `riverqueue-sequel`, and `riverqueue-rails`) are released together. [PR #1463](https://github.com/riverqueue/river/pull/1463). +- **Breaking:** Job insertion accepts only `available`, `pending`, and `scheduled` states. `running`, `retryable`, and terminal states are rejected, including when set by insertion hooks. [PR #1463](https://github.com/riverqueue/river/pull/1463). +- **Breaking:** Insertion rejects queue names containing characters other than ASCII letters, digits, underscores, hyphens, colons, or periods. Nonzero `UniqueOpts#by_period` values must be at least one second. [PR #1463](https://github.com/riverqueue/river/pull/1463). +- **Breaking:** Attempt counts must be between 0 and 32,767, and `max_attempts` must be between 1 and 32,767. These bounds also apply on SQLite. `job_retry` raises `ArgumentError` when another attempt would exceed the limit. [PR #1463](https://github.com/riverqueue/river/pull/1463). +- **Breaking:** Job and queue metadata updates require a Hash; JSON-encoded strings are no longer accepted. Pass an empty Hash to clear metadata. Updates to `attempted_by` require string entries. [PR #1463](https://github.com/riverqueue/river/pull/1463). + ### Fixed - Externally claimed jobs honor worker retry hooks, including Active Job's retry policy, and use their claim timestamps for queue-wait statistics and attempt errors. Worker initialization failures are logged without losing the reported work error. [PR #1463](https://github.com/riverqueue/river/pull/1463). diff --git a/ruby/Gemfile.lock b/ruby/Gemfile.lock index c485b7455..8365ce469 100644 --- a/ruby/Gemfile.lock +++ b/ruby/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - riverqueue (0.12.0) + riverqueue (0.13.0) logger (> 0, < 1000) optparse (> 0, < 1000) securerandom (> 0, < 1000) @@ -10,16 +10,16 @@ PATH PATH remote: driver/riverqueue-activerecord specs: - riverqueue-activerecord (0.12.0) + riverqueue-activerecord (0.13.0) activerecord (> 0, < 1000) activesupport (> 0, < 1000) - riverqueue (= 0.12.0) + riverqueue (= 0.13.0) PATH remote: driver/riverqueue-sequel specs: - riverqueue-sequel (0.12.0) - riverqueue (= 0.12.0) + riverqueue-sequel (0.13.0) + riverqueue (= 0.13.0) sequel (> 0, < 1000) GEM diff --git a/ruby/driver/riverqueue-activerecord/Gemfile.lock b/ruby/driver/riverqueue-activerecord/Gemfile.lock index 3d3dc2413..47894537e 100644 --- a/ruby/driver/riverqueue-activerecord/Gemfile.lock +++ b/ruby/driver/riverqueue-activerecord/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - riverqueue (0.12.0) + riverqueue (0.13.0) logger (> 0, < 1000) optparse (> 0, < 1000) securerandom (> 0, < 1000) @@ -10,10 +10,10 @@ PATH PATH remote: . specs: - riverqueue-activerecord (0.12.0) + riverqueue-activerecord (0.13.0) activerecord (> 0, < 1000) activesupport (> 0, < 1000) - riverqueue (= 0.12.0) + riverqueue (= 0.13.0) GEM remote: https://rubygems.org/ diff --git a/ruby/driver/riverqueue-activerecord/riverqueue-activerecord.gemspec b/ruby/driver/riverqueue-activerecord/riverqueue-activerecord.gemspec index 9fe9f835a..e54cc6fde 100644 --- a/ruby/driver/riverqueue-activerecord/riverqueue-activerecord.gemspec +++ b/ruby/driver/riverqueue-activerecord/riverqueue-activerecord.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |s| s.name = "riverqueue-activerecord" - s.version = "0.12.0" + s.version = "0.13.0" s.summary = "ActiveRecord PostgreSQL and SQLite driver for the River Ruby gem." s.description = "ActiveRecord PostgreSQL and SQLite driver for inserting and working River jobs in Ruby." s.authors = ["Blake Gentry", "Brandur Leach"] diff --git a/ruby/driver/riverqueue-sequel/Gemfile.lock b/ruby/driver/riverqueue-sequel/Gemfile.lock index 1bfebf22b..d79a23345 100644 --- a/ruby/driver/riverqueue-sequel/Gemfile.lock +++ b/ruby/driver/riverqueue-sequel/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: ../.. specs: - riverqueue (0.12.0) + riverqueue (0.13.0) logger (> 0, < 1000) optparse (> 0, < 1000) securerandom (> 0, < 1000) @@ -10,8 +10,8 @@ PATH PATH remote: . specs: - riverqueue-sequel (0.12.0) - riverqueue (= 0.12.0) + riverqueue-sequel (0.13.0) + riverqueue (= 0.13.0) sequel (> 0, < 1000) GEM diff --git a/ruby/driver/riverqueue-sequel/riverqueue-sequel.gemspec b/ruby/driver/riverqueue-sequel/riverqueue-sequel.gemspec index ff2c4c204..8f937d341 100644 --- a/ruby/driver/riverqueue-sequel/riverqueue-sequel.gemspec +++ b/ruby/driver/riverqueue-sequel/riverqueue-sequel.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |s| s.name = "riverqueue-sequel" - s.version = "0.12.0" + s.version = "0.13.0" s.summary = "Sequel PostgreSQL and SQLite driver for the River Ruby gem." s.description = "Sequel PostgreSQL and SQLite driver for inserting and working River jobs in Ruby." s.authors = ["Blake Gentry", "Brandur Leach"] diff --git a/ruby/rails/riverqueue-rails/Gemfile.lock b/ruby/rails/riverqueue-rails/Gemfile.lock index bce2047de..4fd1be8f3 100644 --- a/ruby/rails/riverqueue-rails/Gemfile.lock +++ b/ruby/rails/riverqueue-rails/Gemfile.lock @@ -1,15 +1,15 @@ PATH remote: ../../driver/riverqueue-activerecord specs: - riverqueue-activerecord (0.12.0) + riverqueue-activerecord (0.13.0) activerecord (> 0, < 1000) activesupport (> 0, < 1000) - riverqueue (= 0.12.0) + riverqueue (= 0.13.0) PATH remote: ../.. specs: - riverqueue (0.12.0) + riverqueue (0.13.0) logger (> 0, < 1000) optparse (> 0, < 1000) securerandom (> 0, < 1000) @@ -18,10 +18,10 @@ PATH PATH remote: . specs: - riverqueue-rails (0.12.0) + riverqueue-rails (0.13.0) activejob (>= 7.2, < 8.2) railties (>= 7.2, < 8.2) - riverqueue-activerecord (= 0.12.0) + riverqueue-activerecord (= 0.13.0) GEM remote: https://rubygems.org/ @@ -343,9 +343,9 @@ CHECKSUMS rdoc (8.0.0) sha256=03bf8c08a9639658855a0cfd77c0abca8325c227693f7f33f82957811348c469 regexp_parser (2.12.0) sha256=35a916a1d63190ab5c9009457136ae5f3c0c7512d60291d0d1378ba18ce08ebb reline (0.7.0) sha256=5b012d8e55dbf9d450f12bde2cf7d15ff546ae80b3f8f3b30e570d431815583d - riverqueue (0.12.0) - riverqueue-activerecord (0.12.0) - riverqueue-rails (0.12.0) + riverqueue (0.13.0) + riverqueue-activerecord (0.13.0) + riverqueue-rails (0.13.0) rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c diff --git a/ruby/rails/riverqueue-rails/riverqueue-rails.gemspec b/ruby/rails/riverqueue-rails/riverqueue-rails.gemspec index b550a1f26..f259ef4dd 100644 --- a/ruby/rails/riverqueue-rails/riverqueue-rails.gemspec +++ b/ruby/rails/riverqueue-rails/riverqueue-rails.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |s| s.name = "riverqueue-rails" - s.version = "0.12.0" + s.version = "0.13.0" s.summary = "Active Job and Rails integration for River." s.authors = ["Blake Gentry", "Brandur Leach"] s.files = Dir.glob("lib/**/*") + ["README.md"] diff --git a/ruby/riverqueue.gemspec b/ruby/riverqueue.gemspec index 827e5f85e..340da6294 100644 --- a/ruby/riverqueue.gemspec +++ b/ruby/riverqueue.gemspec @@ -2,7 +2,7 @@ Gem::Specification.new do |s| s.name = "riverqueue" - s.version = "0.12.0" + s.version = "0.13.0" s.summary = "A fast, reliable job queue for Ruby backed by PostgreSQL or SQLite." s.description = "Insert and work River jobs in Ruby using the same schema and state machine as River's Go client. Use with riverqueue-activerecord or riverqueue-sequel." s.authors = ["Blake Gentry", "Brandur Leach"]