diff --git a/.github/wordlist.txt b/.github/wordlist.txt
index 7c8f1adf4f..2714717cb1 100644
--- a/.github/wordlist.txt
+++ b/.github/wordlist.txt
@@ -73,3 +73,10 @@ github
runtime
transactional
Github
+formatter
+RedisConnectionCommands
+BaseRedisCommands
+DnsResolver
+dnsResolver
+evalReadOnly
+gg
diff --git a/.github/workflows/version-and-release.yaml b/.github/workflows/version-and-release.yaml
index 93ee19348b..cc6b766e72 100644
--- a/.github/workflows/version-and-release.yaml
+++ b/.github/workflows/version-and-release.yaml
@@ -10,17 +10,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- - name: 1. Checkout sources
+ - name: Checkout sources
uses: actions/checkout@v4
- - name: 2. Extract version from tag
- id: get_version
- run: |
- realversion="${GITHUB_REF/refs\/tags\//}"
- realversion="${realversion//v/}"
- echo "VERSION=$realversion" >> $GITHUB_OUTPUT
+ - name: Set up Java with Maven cache
- - name: 3. Set up Java with Maven cache
uses: actions/setup-java@v4
with:
java-version: '8'
@@ -30,20 +24,27 @@ jobs:
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- - name: 4. Update version in Maven configuration
- run: mvn versions:set -DnewVersion=${{ steps.get_version.outputs.VERSION }}
+ - name: Update version in Maven configuration
+ run: |
+ mvn --no-transfer-progress \
+ --batch-mode \
+ versions:set -DnewVersion=${{ github.event.release.tag_name }}
+ if: ${{ github.event.release.tag_name }}
+
+ - name: Install GPG key
- - name: 5. Install GPG key
run: |
cat <(echo -e "${{ secrets.OSSH_GPG_SECRET_KEY }}") | gpg --batch --import
gpg --list-secret-keys --keyid-format LONG
- - name: 6. Publish to Maven
+ - name: Publish to Maven
+
run: |
mvn --no-transfer-progress \
--batch-mode \
-Dgpg.passphrase='${{ secrets.OSSH_GPG_SECRET_KEY_PASSWORD }}' \
- release:perform
+ deploy -P sonatype-oss-release
+
env:
MAVEN_USERNAME: ${{secrets.OSSH_USERNAME}}
MAVEN_PASSWORD: ${{secrets.OSSH_TOKEN}}
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 227a07354a..481c2b4cf8 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -1,124 +1,60 @@
-Lettuce 6.3.0 RELEASE NOTES
+Lettuce 6.4.0 RELEASE NOTES
==============================
-The Lettuce team is delighted to announce general availability of Lettuce 6.3.
+The Redis team is delighted to announce general availability of Lettuce 6.4.
-This release ships with support for Observability through Micrometer Tracing that has been
-ported from Spring Data into Lettuce directly. Another infrastructure change is to report
-the driver version and driver name to Redis through `CLIENT SETINFO` if the Redis version
-is 7.2 or later using RESP3.
-
-This release ships also with refinements around Cluster Topology refresh to suspend
-periodic refresh. This is useful for JVM Checkpoint-Restore arrangements (Project CRaC)
-to ensure that no background activity opens connections.
-
-This release also upgrades to Kotlin 1.7 as baseline.
+This Lettuce driver is now going to be shipped under the MIT licensing scheme. The `CLIENT SETINFO`
+is now working in a fire-and-forget mode to allow better compatibility with Redis servers that do
+not support this command.
Lettuce 6 supports Redis 2.6+ up to Redis 7.x. In terms of Java runtime, Lettuce requires
at least Java 8 and works with Java 21.
-Thanks to all contributors who made Lettuce 6.3.0 possible.
+Thanks to all contributors who made Lettuce 6.4.0 possible.
If you need any support, meet Lettuce at
* GitHub Discussions: https://github.com/lettuce-io/lettuce-core/discussions
* Stack Overflow (Questions): https://stackoverflow.com/questions/tagged/lettuce
-* Join the chat at https://gitter.im/lettuce-io/Lobby for general discussion
+* Join the chat at https://discord.gg/redis for general discussion
* GitHub Issues (Bug reports, feature
requests): https://github.com/lettuce-io/lettuce-core/issues
-* Documentation: https://lettuce.io/core/6.3.0.RELEASE/reference/
-* Javadoc: https://lettuce.io/core/6.3.0.RELEASE/api/
+* Documentation: https://lettuce.io/core/6.4.0.RELEASE/reference/
+* Javadoc: https://lettuce.io/core/6.4.0.RELEASE/api/
Commands
--------
-* Add `WITHSCORE` option to `ZRANK` and `ZREVRANK` commands #2410
-* Add support for `CLIENT SETINFO`, `CLIENT INFO`, and enhanced `CLIENT LIST` #2439
-* ZMPOP and BZMPOP commands #2435
-* Support 'FCALL' commands to Call Lua-scripts that are loaded as Function in redis #2185
+* Add `PUBSUB` shard channel commands `SHARDCHANNELS` #2756, `SHARDNUMSUB` #2776
+* Add `PUBSUB` shard channel commands `SPUBLISH` #2757, `SSUBSCRIBE` #2758 and `SUNSUBSCRIBE` #2758
+* Add support for `CLIENT KILL [MAXAGE]` #2782
+* Hash field expiration commands `HEXPIRE`, `HEXPIREAT`, `HEXPIRETIME` and `HPERSIST` #2836
+* Hash field expiration commands `HPEXPIRE`, `HPEXPIREAT`, `HPEXPIRETIME`, `HTTL` and `HPTTL` #2857
Enhancements
------------
-* Add support for disconnect on timeout to recover early from no `RST` packet failures
- #2082
-* Avoid buffer copies in `RedisStateMachine` #2173
-* Make SlotHash utility methods public #2199
-* Improve `AdaptiveRefreshTriggeredEvent` to provide the cause and contextual details
- #2338
-* Refine `RedisException` instantiation to avoid exception instances if they are not used
- #2353
-* Add capability of FailOver with takeOver option #2358
-* Add option to disable tracing for individual commands #2373
-* ReplicaTopologyProvider can't parse replicas from INFO #2375
-* Add support for Micrometer Tracing #2391
-* Add Command filter to `MicrometerCommandLatencyRecorder` #2406
-* Expose methods to suspend periodic topology refresh and to check whether a topology
- refresh is running #2428
-* Accept Double and Boolean in `MapOutput` #2429
-* Array lists with set capacities in SimpleBatcher #2445
-* Add fallback to RESP2 upon `NOPROTO` response #2455
-* Introduce generic Object output #2467
-* Propagate initialization failures from `ChannelInitializer` #2475
-* Register library name and library version on Redis 7.2 or greater #2483
-* Add support for cluster-announced hostname #2487
+* Add support for `HSCAN NOVALUES` #2763
+* Send the `CLIENT SETINFO` command in a fire-and-forget way #2082
+* Change the license to more permissive MIT #2173
+* Add a evalReadOnly overload that accepts the script as a String #2868
+* `XREAD` support for reading last message from stream #2863
+* Mark dnsResolver(DnsResolver) as deprecated #2855
+* Remove connection-related methods from commands API #2027
+* Move connection-related commands from BaseRedisCommands to RedisConnectionCommands #2031
Fixes
-----
-* Proper creation of `AttributeKey` #2111
-* INFO response parsing throws on encountering '\' on NodeTopologyView #2161
-* `PartitionSelectorException` during refresh of `Partitions` #2178
-* RedisURI.Builder#withSsl(RedisURI) not working with SslVerifyMode#CA #2182
-* SMISMEMBER is not marked a readonly command #2197
-* Eval lua script expects return integer but null #2200
-* `ZRANGESTORE` does not support by Rank comparison #2202
-* zrevrangestorebylex/zrevrangestorebyscore range arguments flipped #2203
-* Own `RedisCredentialsProvider` causes issue with protocol handshake on Redis 5 #2234
-* NullPointerException if INFO command on redis cluster fails #2243
-* XTrimArgs Should Allow Limit = 0 #2250
-* The hostname and password cannot parse even if escaping with RedisURI redis-sentinel the
- password include '@' and '#' #2254
-* Fix password parsing error when redis-sentinel URI contains @ #2255
-* Handle unknown endpoints in MOVED response #2290
-* Fallback to RESP2 hides potential authentication configuration problems #2313
-* Accept slots as String using `CLUSTER SHARDS` #2325
-* `RedisURI.applySsl(…)` does not retain `SslVerifyMode` #2328
-* Apply `SslVerifyMode` in `RedisURI.applySsl(…)` #2329
-* Fix long overflow in `RedisSubscription#potentiallyReadMore` #2383
-* Consistently implement CompositeArgument in arg types #2387
-* Reactive Cluster `MGET` is not running in parallel #2395
-* Polish RedisObservation name & javadoc #2404
-* `memory usage` command passes key as `String` instead of using the codec #2424
-* Fix NPE when manually flushing a batch #2444
-* `flushCommands` leads to random inbound command order when using large argument values
- with SSL #2456
-* `CommandListener` notified twice on error #2457
-* `RoleParser` does not define `none`, `handshake`, and `unknown` replica states #2482
-* StatefulRedisClusterPubSubConnectionImpl's activated() method will report exception
- after resubscribe() was call. #2534
+* None
Other
-----
-* Improve Document on pingBeforeActivateConnection #2138
-* Improve Document on dynamicRefreshSources #2139
-* Fixes typo in ReadFrom #2213
-* Fix duplicate word occurrences #2307
-* Update netty.version to 4.1.89.Final #2311
-* Avoid using port 7443 in Lettuce tests #2326
-* Upgrade to Reactor 3.4.27 #2330
-* Fix Set unit test sscanMultiple fail in redis7 #2349
-* README.md demo has a error #2377
-* Upgrade to Kotlin 1.7 #2392
-* Upgrade to Netty 4.1.94.Final #2431
-* Update SetArgs.java builder method param comment #2441
-* Use enum for no-op `PauseDetectorWrapper` #2474
-* Upgrade build to Redis 7.2 #2481
-* Refine command outputs to capture whether a segment has been received instead of relying
- on the deserialized value state #2498
-* Upgrade to Reactor 3.6.0 #2517
-* Docs on metrics (wiki) are misleading #2538
-* Upgrade to Micrometer 1.12.0 #2549
-* Upgrade to netty 4.1.101.Final #2550
-
+* Bump `org.apache.commons:commons-pool2` from 2.11.1 to 2.12.0 #2877
+* Bump `org.openjdk.jmh:jmh-generator-annprocess` from 1.21 to 1.37 #2876
+* Bump `org.apache.maven.plugins:maven-jar-plugin` from 3.3.0 to 3.4.1 #2875
+* Bump `org.codehaus.mojo:flatten-maven-plugin from` 1.5.0 to 1.6.0 #2874
+* Bump `org.apache.maven.plugins:maven-javadoc-plugin` from 3.6.3 to 3.7.0 #2873
+* Applying code formatter each time we run a Maven build #2841
+* Bump `setup-java` to v4 #2807
diff --git a/pom.xml b/pom.xml
index 9be9d982f7..793c3b2446 100644
--- a/pom.xml
+++ b/pom.xml
@@ -900,6 +900,18 @@
+
+ org.sonatype.plugins
+ nexus-staging-maven-plugin
+ 1.6.13
+ true
+
+ ossrh
+ https://oss.sonatype.org/
+ true
+
+
+
org.apache.maven.plugins
maven-source-plugin
@@ -1019,6 +1031,12 @@
org.apache.maven.plugins
maven-gpg-plugin
+
+
+ --pinentry-mode
+ loopback
+
+
sign-artifacts