Skip to content

Sync/2.x into 3.x#1145

Open
yisraelU wants to merge 66 commits into
profunktor:series/3.xfrom
yisraelU:sync/2.x-into-3.x
Open

Sync/2.x into 3.x#1145
yisraelU wants to merge 66 commits into
profunktor:series/3.xfrom
yisraelU:sync/2.x-into-3.x

Conversation

@yisraelU

Copy link
Copy Markdown
Collaborator

No description provided.

yisraelU and others added 30 commits January 1, 2026 14:24
* restore mima previous artifacts filter

* remove sbt prefix

* remove sbt prefix

* remove sbt prefix

* add filter for version 2.0.2
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
…ssic-1.5.24

Update logback-classic to 1.5.24
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
…ugin-1.1.5

Update sbt-mima-plugin to 1.1.5
…ssic-1.5.32

Update logback-classic to 1.5.32
* add basic publish and pubsub commands to core

* add basic publish and pubsub commands to core

* cleanup tests
…-3.7.0

Update cats-effect, cats-effect-kernel to 3.7.0
gvolpe-steward[bot] and others added 28 commits April 19, 2026 00:31
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
…check-1.3.0

Update munit-scalacheck to 1.3.0
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
Co-authored-by: gvolpe-steward[bot] <gvolpe-steward[bot]@users.noreply.github.com>
Co-authored-by: Yisrael Union <ysrlunion@gmail.com>
* update workflows

* remove test
profunktor#1135)

* add readme to clarify Lettuce version tracking , minor fix using delay instead of blocking for a non blocking call,add handling for a particular bug which is the result of a race condition, add support for consumer groups

* Fix cross-build compile errors and scalafmt formatting

- Subscriber: use PartialFunction case-syntax for onError so it compiles
  on Scala 2.12 (2.13 synthesizes a PartialFunction from a plain lambda,
  2.12 does not).
- redis.scala: explicitly discard non-Unit Lettuce builder returns in the
  XClaim/XAutoClaim arg conversions, fatal under Scala 3 -Wnonunit-statement.
- Apply scalafmt to RedisStreamConsumerGroupSpec so the tree stays clean
  under scalafmtOnCompile (check_dirty.sh).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Mirror Lettuce for xPending, close Subscriber leak gap, add tests

- xPending: replace the single method that took both `group` and an
  `Option[StreamConsumer]` (which also carries a group) with two overloads
  mirroring Lettuce — one keyed by `group`, one by `StreamConsumer`. Removes
  the silent group override Copilot flagged; single source of truth per path.
- Subscriber: allocate the Topic before the Dispatcher so nothing that can
  fail runs between acquiring the dispatcher and the cleanup-guarded block,
  closing a residual dispatcher leak.
- Tests: cover the consumer-filtered xPending overload and the xClaim /
  xAutoClaim force/justId paths.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Make XClaim idle/time a sum type; harden subscribe error cleanup

- XClaimArgs: replace the separate `idle`/`time` options (which could be set
  together, producing an XCLAIM with both IDLE and TIME — undocumented Redis
  behavior) with a single `idle: Option[XClaimIdle]` sum type
  (Relative | At). The illegal "both set" state is now unrepresentable.
- Subscriber: on subscribe failure also run unsubscribeFromRedis (in case we
  partially subscribed server-side) and attempt each cleanup step so a
  cleanup failure can neither skip the dispatcher release nor mask the
  original error.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* Handle null stream-message body for id-only replies

XCLAIM/XAUTOCLAIM with JUSTID return entries without a body, so
StreamMessage#getBody is null; converting it with asScala.toMap threw an
NPE. Treat a null body as an empty map. Verified the consumer-group spec
(including the justId/force paths) passes against a live Redis.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…iler-3.3.8

Update scala3-compiler, scala3-library, ... to 3.3.8
…rofunktor#1143)

* feat: add RedisURI#withCredentials for static auth (token with/without username)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: document StaticCredentialsProvider cast invariant; wrap withCredentials scaladoc

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs: document RedisURI#withCredentials for static auth

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat: add RedisUriConfig + RedisURI.fromConfig (Lettuce-parity construction)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: place sentinel node password on the sentinel node, not the main URI

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: cover multi-node sentinel passwords and Full/Ca verify modes

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat: add RedisClient.fromConfig

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: cover RedisClient.fromConfig with ClientOptions

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs: document RedisUriConfig construction

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs: note that RedisUriConfig cross-cutting options aren't validated per endpoint

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat: add RedisUriConfig smart constructors + fluent withX helpers

Avoids wrapping options in Some at the call site. Adds RedisUriConfig.standalone/
socket/sentinel, fluent withCredentials/withTls/withDatabase/withTimeout/withClientName/
withLibraryName/withLibraryVersion, and SentinelNode#withPassword.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat: add RedisClient.fromConfig overload taking Redis4CatsConfig

Parity with custom(uri, opts, config): lets the config-first path supply a
Redis4CatsConfig (shutdown/topology/clientResources) without merging it into
RedisUriConfig. The two stay separate (per-endpoint vs per-client).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test: verify distinct per-node sentinel passwords land on the correct nodes

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs: fix stale master/replica withOptions signature and point to RedisUriConfig

- client.md: RedisMasterReplica.withOptions doc was missing the config: Redis4CatsConfig
  parameter present in the code; the 'Standalone, Sentinel or Cluster' section now points
  to the RedisUriConfig/fromConfig Scala API rather than only Lettuce's JRedisURI builder.
- RedisMasterReplica scaladoc example updated to the current 4-arg withOptions signature.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Syncs all series/2.x work onto the Lettuce-7 series/3.x branch.

Conflict resolutions:
- build.sbt: kept series/3.x (crossScalaVersions 2.13.18/3.8.4 — 2.12 dropped;
  its mima filter; `commonSettings*` Scala-3 splat). 2.x's competing build
  changes were things 3.x intentionally diverged on.
- project/Dependencies.scala, project/plugins.sbt: took 2.x's newer munit (1.3.3)
  and sbt-tpolecat (0.5.6).
- redis.scala: kept 2.x's Stream Consumer Groups API block (profunktor#1135); 3.x had none.
  Did NOT take any Lettuce version change — 3.x stays on lettuce-core 7.6.0.

Brings forward from 2.x: RedisUriConfig + RedisURI.fromConfig / RedisClient.fromConfig
(profunktor#1143), stream consumer groups + XClaimIdle sum type + xPending overloads + Subscriber
leak/NPE fixes (profunktor#1135), and docs. GETDEL was already present on 3.x.

Lettuce 7 adaptation: Lettuce 7 removed RedisURI.getPassword/getUsername, so the
RedisURISuite/RedisClientSuite credential-reading helpers now resolve the
RedisCredentialsProvider's Mono reflectively (also dodges the reactor JSR-305
classfile-parse warning, scala/bug#7014, fatal under -Werror).

Verified: cross-compiles on Scala 2.13.18 and 3.8.4, scalafmt clean, core offline
tests 36/36 green. Redis-backed integration tests (incl. RedisStreamConsumerGroupSpec)
not run here — they require a live Redis 7.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@yisraelU
yisraelU changed the base branch from series/2.x to series/3.x June 19, 2026 19:27
@mergify

mergify Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Tick the box to add this pull request to the merge queue (same as @mergifyio queue).

  • Queue this pull request

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants