diff --git a/.github/workflows/publish-snapshot.yml b/.github/workflows/publish-snapshot.yml new file mode 100644 index 0000000000..2b6e5be866 --- /dev/null +++ b/.github/workflows/publish-snapshot.yml @@ -0,0 +1,33 @@ +name: Publish snapshot + +on: workflow_dispatch + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'maven' + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + - name: Get dependencies + run: make deps + - name: Publish snapshot + run: ./mvnw clean deploy -Psnapshots -DskipITs -DskipTests --no-transfer-progress + env: + MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} \ No newline at end of file diff --git a/.github/workflows/test-3.11-alpha.yml b/.github/workflows/test-3.11-alpha.yml new file mode 100644 index 0000000000..28ab3e31f6 --- /dev/null +++ b/.github/workflows/test-3.11-alpha.yml @@ -0,0 +1,58 @@ +name: Test against RabbitMQ 3.11 alpha + +on: + schedule: + - cron: '0 4 * * *' + pull_request: + branches: + - 5.16.x-stable + push: + branches: + - 5.16.x-stable + workflow_dispatch: + +env: + RABBITMQ_IMAGE_TAG: 3.11 + RABBITMQ_IMAGE: pivotalrabbitmq/rabbitmq-dev + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v3 + - name: Checkout tls-gen + uses: actions/checkout@v3 + with: + repository: rabbitmq/tls-gen + path: './tls-gen' + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'maven' + - name: Start broker + run: ci/start-broker.sh + - name: Get dependencies + run: make deps + - name: Test with NIO + run: | + ./mvnw verify -P '!setup-test-cluster,use-nio' -Drabbitmqctl.bin=DOCKER:rabbitmq \ + -Dtest-broker.A.nodename=rabbit@$(hostname) -Dmaven.javadoc.skip=true \ + -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ + -Dit.test=ClientTests,FunctionalTests,ServerTests,SSLTests \ + --no-transfer-progress + - name: Test with blocking IO + run: | + ./mvnw verify -P '!setup-test-cluster' -Drabbitmqctl.bin=DOCKER:rabbitmq \ + -Dtest-broker.A.nodename=rabbit@$(hostname) -Dmaven.javadoc.skip=true \ + -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ + -Dit.test=ClientTests,FunctionalTests,ServerTests,SSLTests \ + --no-transfer-progress + - name: Stop broker + run: docker stop rabbitmq && docker rm rabbitmq \ No newline at end of file diff --git a/.github/workflows/test-3.11-stable.yml b/.github/workflows/test-3.11-stable.yml new file mode 100644 index 0000000000..8b442d3380 --- /dev/null +++ b/.github/workflows/test-3.11-stable.yml @@ -0,0 +1,68 @@ +name: Test against RabbitMQ 3.11 stable + +on: + pull_request: + branches: + - 5.16.x-stable + push: + branches: + - 5.16.x-stable + workflow_dispatch: + +env: + RABBITMQ_IMAGE_TAG: 3.11 + RABBITMQ_IMAGE: rabbitmq + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v3 + - name: Checkout tls-gen + uses: actions/checkout@v3 + with: + repository: rabbitmq/tls-gen + path: './tls-gen' + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'maven' + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + - name: Start broker + run: ci/start-broker.sh + - name: Get dependencies + run: make deps + - name: Test with NIO + run: | + ./mvnw verify -P '!setup-test-cluster,use-nio' -Drabbitmqctl.bin=DOCKER:rabbitmq \ + -Dtest-broker.A.nodename=rabbit@$(hostname) -Dmaven.javadoc.skip=true \ + -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ + -Dit.test=ClientTests,FunctionalTests,ServerTests,SSLTests \ + --no-transfer-progress + - name: Test with blocking IO + run: | + ./mvnw verify -P '!setup-test-cluster' -Drabbitmqctl.bin=DOCKER:rabbitmq \ + -Dtest-broker.A.nodename=rabbit@$(hostname) -Dmaven.javadoc.skip=true \ + -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ + -Dit.test=ClientTests,FunctionalTests,ServerTests,SSLTests \ + --no-transfer-progress + - name: Stop broker + run: docker stop rabbitmq && docker rm rabbitmq + - name: Publish snapshot + if: ${{ github.event_name != 'pull_request' }} + run: ./mvnw clean deploy -Psnapshots -DskipITs -DskipTests --no-transfer-progress + env: + MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000000..455941b201 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,66 @@ +name: Test against RabbitMQ 3.12 stable + +on: + pull_request: + branches: + - 5.16.x-stable + push: + branches: + - 5.16.x-stable + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-22.04 + + steps: + - uses: actions/checkout@v3 + - name: Checkout tls-gen + uses: actions/checkout@v3 + with: + repository: rabbitmq/tls-gen + path: './tls-gen' + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'maven' + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + - name: Start cluster + run: ci/start-cluster.sh + - name: Get dependencies + run: make deps + - name: Test with NIO + run: | + ./mvnw verify -P '!setup-test-cluster,use-nio' -Drabbitmqctl.bin=DOCKER:rabbitmq \ + -Dtest-broker.A.nodename=rabbit@$(hostname) -Dtest-broker.B.nodename=hare@$(hostname) \ + -Dmaven.javadoc.skip=true \ + -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ + --no-transfer-progress + - name: Test with blocking IO + run: | + ./mvnw verify -P '!setup-test-cluster' -Drabbitmqctl.bin=DOCKER:rabbitmq \ + -Dtest-broker.A.nodename=rabbit@$(hostname) -Dtest-broker.B.nodename=hare@$(hostname) \ + -Dmaven.javadoc.skip=true \ + -Dtest-client-cert.password= -Dtest-tls-certs.dir=rabbitmq-configuration/tls \ + --no-transfer-progress + - name: Stop broker A + run: docker stop rabbitmq && docker rm rabbitmq + - name: Stop broker B + run: docker stop hare && docker rm hare + - name: Publish snapshot + if: ${{ github.event_name != 'pull_request' }} + run: ./mvnw clean deploy -Psnapshots -DskipITs -DskipTests --no-transfer-progress + env: + MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} diff --git a/.mvn/maven.config b/.mvn/maven.config new file mode 100644 index 0000000000..f373d1de10 --- /dev/null +++ b/.mvn/maven.config @@ -0,0 +1 @@ +-Dmaven.wagon.http.retryHandler.count=10 diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index 642d572ce9..a9f1ef87bb 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -1,2 +1,2 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.3/apache-maven-3.8.3-bin.zip wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/ci/evaluate-release.sh b/ci/evaluate-release.sh new file mode 100755 index 0000000000..4ad656d7a0 --- /dev/null +++ b/ci/evaluate-release.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +source ./release-versions.txt + +if [[ $RELEASE_VERSION == *[RCM]* ]] +then + echo "prerelease=true" >> $GITHUB_ENV + echo "ga_release=false" >> $GITHUB_ENV + echo "maven_server_id=packagecloud-rabbitmq-maven-milestones" >> $GITHUB_ENV +else + echo "prerelease=false" >> $GITHUB_ENV + echo "ga_release=true" >> $GITHUB_ENV + echo "maven_server_id=ossrh" >> $GITHUB_ENV +fi \ No newline at end of file diff --git a/ci/release-java-client.sh b/ci/release-java-client.sh new file mode 100755 index 0000000000..d3fd7df952 --- /dev/null +++ b/ci/release-java-client.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +source ./release-versions.txt +git checkout $RELEASE_BRANCH + +./mvnw release:clean release:prepare -DdryRun=true -Darguments="-DskipTests" --no-transfer-progress \ + --batch-mode -Dtag="v$RELEASE_VERSION" \ + -DreleaseVersion=$RELEASE_VERSION \ + -DdevelopmentVersion=$DEVELOPMENT_VERSION \ + +./mvnw release:clean release:prepare -Darguments="-DskipTests" --no-transfer-progress \ + --batch-mode -Dtag="v$RELEASE_VERSION" \ + -DreleaseVersion=$RELEASE_VERSION \ + -DdevelopmentVersion=$DEVELOPMENT_VERSION + +git checkout "v$RELEASE_VERSION" + +if [[ $RELEASE_VERSION == *[RCM]* ]] +then + MAVEN_PROFILE="milestone" + echo "prerelease=true" >> $GITHUB_ENV +else + MAVEN_PROFILE="release" + echo "prerelease=false" >> $GITHUB_ENV +fi + +./mvnw clean deploy -P $MAVEN_PROFILE -DskipTests --no-transfer-progress \ No newline at end of file diff --git a/ci/start-broker.sh b/ci/start-broker.sh new file mode 100755 index 0000000000..8ad81bb837 --- /dev/null +++ b/ci/start-broker.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +LOCAL_SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +RABBITMQ_IMAGE=${RABBITMQ_IMAGE:-rabbitmq:3.12} + +wait_for_message() { + while ! docker logs "$1" | grep -q "$2"; + do + sleep 5 + echo "Waiting 5 seconds for $1 to start..." + done +} + +make -C "${PWD}"/tls-gen/basic + +mv tls-gen/basic/result/server_$(hostname -s)_certificate.pem tls-gen/basic/result/server_certificate.pem +mv tls-gen/basic/result/server_$(hostname -s)_key.pem tls-gen/basic/result/server_key.pem +mv tls-gen/basic/server_$(hostname -s) tls-gen/basic/server +mv tls-gen/basic/client_$(hostname -s) tls-gen/basic/client + +mkdir -p rabbitmq-configuration/tls + +cp -R "${PWD}"/tls-gen/basic/* rabbitmq-configuration/tls +chmod -R o+r rabbitmq-configuration/tls/* +./mvnw -q clean resources:testResources -Dtest-tls-certs.dir=/etc/rabbitmq/tls +cp target/test-classes/rabbit@localhost.config rabbitmq-configuration/rabbitmq.config + +echo "Running RabbitMQ ${RABBITMQ_IMAGE}" + +docker rm -f rabbitmq 2>/dev/null || echo "rabbitmq was not running" +docker run -d --name rabbitmq \ + --network host \ + -v "${PWD}"/rabbitmq-configuration:/etc/rabbitmq \ + "${RABBITMQ_IMAGE}" + +wait_for_message rabbitmq "completed with" + +docker exec rabbitmq rabbitmq-diagnostics erlang_version +docker exec rabbitmq rabbitmqctl version diff --git a/ci/start-cluster.sh b/ci/start-cluster.sh new file mode 100755 index 0000000000..f855daaf93 --- /dev/null +++ b/ci/start-cluster.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +LOCAL_SCRIPT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +RABBITMQ_IMAGE=${RABBITMQ_IMAGE:-rabbitmq:3.12} + +wait_for_message() { + while ! docker logs "$1" | grep -q "$2"; + do + sleep 5 + echo "Waiting 5 seconds for $1 to start..." + done +} + +make -C "${PWD}"/tls-gen/basic + +mv tls-gen/basic/result/server_$(hostname -s)_certificate.pem tls-gen/basic/result/server_certificate.pem +mv tls-gen/basic/result/server_$(hostname -s)_key.pem tls-gen/basic/result/server_key.pem +mv tls-gen/basic/server_$(hostname -s) tls-gen/basic/server +mv tls-gen/basic/client_$(hostname -s) tls-gen/basic/client + +mkdir -p rabbitmq-configuration/tls + +cp -R "${PWD}"/tls-gen/basic/* rabbitmq-configuration/tls +chmod -R o+r rabbitmq-configuration/tls/* +./mvnw -q clean resources:testResources -Dtest-tls-certs.dir=/etc/rabbitmq/tls +cp target/test-classes/rabbit@localhost.config rabbitmq-configuration/rabbit@localhost.config +cp target/test-classes/hare@localhost.config rabbitmq-configuration/hare@localhost.config + +echo "Running RabbitMQ ${RABBITMQ_IMAGE}" + +docker rm -f rabbitmq 2>/dev/null || echo "rabbitmq was not running" +docker run -d --name rabbitmq \ + --network host \ + -v "${PWD}"/rabbitmq-configuration:/etc/rabbitmq \ + --env RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbit@localhost.config \ + --env RABBITMQ_NODENAME=rabbit@$(hostname) \ + --env RABBITMQ_NODE_PORT=5672 \ + --env RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie do-not-do-this-in-production" \ + "${RABBITMQ_IMAGE}" + +# for CLI commands to share the same cookie +docker exec rabbitmq bash -c "echo 'do-not-do-this-in-production' > /var/lib/rabbitmq/.erlang.cookie" +docker exec rabbitmq chmod 0600 /var/lib/rabbitmq/.erlang.cookie + +wait_for_message rabbitmq "completed with" + +docker run -d --name hare \ + --network host \ + -v "${PWD}"/rabbitmq-configuration:/etc/rabbitmq \ + --env RABBITMQ_CONFIG_FILE=/etc/rabbitmq/hare@localhost.config \ + --env RABBITMQ_NODENAME=hare@$(hostname) \ + --env RABBITMQ_NODE_PORT=5673 \ + --env RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie do-not-do-this-in-production" \ + "${RABBITMQ_IMAGE}" + +# for CLI commands to share the same cookie +docker exec hare bash -c "echo 'do-not-do-this-in-production' > /var/lib/rabbitmq/.erlang.cookie" +docker exec hare chmod 0600 /var/lib/rabbitmq/.erlang.cookie + +wait_for_message hare "completed with" + +docker exec hare rabbitmqctl --node hare@$(hostname) status + +docker exec rabbitmq rabbitmq-diagnostics --node rabbit@$(hostname) is_running +docker exec hare rabbitmq-diagnostics --node hare@$(hostname) is_running + +docker exec hare rabbitmqctl --node hare@$(hostname) stop_app +docker exec hare rabbitmqctl --node hare@$(hostname) join_cluster rabbit@$(hostname) +docker exec hare rabbitmqctl --node hare@$(hostname) start_app + +sleep 10 + +docker exec hare rabbitmqctl --node hare@$(hostname) await_startup + +docker exec rabbitmq rabbitmq-diagnostics --node rabbit@$(hostname) erlang_version +docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) version +docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) status +docker exec rabbitmq rabbitmqctl --node rabbit@$(hostname) cluster_status diff --git a/deploy-javadoc.sh b/deploy-javadoc.sh index 74878215e9..46cdb09398 100755 --- a/deploy-javadoc.sh +++ b/deploy-javadoc.sh @@ -5,6 +5,11 @@ TAG=$(git describe --exact-match --tags $(git log -n1 --pretty='%h')) make deps ./mvnw -q clean javadoc:javadoc -Dmaven.javadoc.failOnError=false + +if [ -e target/site/apidocs/element-list ] + then cp target/site/apidocs/element-list target/site/apidocs/package-list +fi + git co gh-pages rm -rf $DEPLOY_DIRECTORY/* cp -r target/site/apidocs/* $DEPLOY_DIRECTORY diff --git a/pom.xml b/pom.xml index f9c92a513d..ec466f29a2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.rabbitmq amqp-client - 5.13.0-SNAPSHOT + 5.16.2-SNAPSHOT jar RabbitMQ Java Client @@ -13,7 +13,7 @@ - ASL 2.0 + AL 2.0 https://www.apache.org/licenses/LICENSE-2.0.html repo @@ -54,35 +54,37 @@ UTF-8 UTF-8 - 1.7.31 - 4.2.2 - 1.7.1 - 2.12.3 - 1.2.3 + 1.7.36 + 4.2.12 + 1.9.3 + 1.17.0 + 2.13.4 + 1.2.11 4.13.2 - 3.11.2 - 3.20.2 - 9.4.42.v20210604 - 1.69 + 4.8.0 + 3.23.1 + 9.4.48.v20220622 + 1.70 + 0.10 - 3.2.0 + 3.4.1 2.5.3 - 2.3 - 3.1.0 - 3.0.1 - 2.0 - 2.4.8 - 1.5 - 1.12 - 3.8.1 + 2.12.0 + 3.3.0 + 3.2.1 + 2.1.1 + 2.4.21 + 1.6 + 3.3.0 + 3.10.1 2.22.2 2.22.2 - 1.6 - 3.0.2 - 3.2.0 + 3.0.1 + 3.2.2 + 5.1.8 0.0.6 - 1.6.8 - 1.8 + 1.6.13 + 1.11 1.3 - javadoc-no-module-dir-java-11 - - [11,) - - - --no-module-directories - - -