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