diff --git a/.github/workflows/java-cd.yml b/.github/workflows/java-cd.yml index 1d006f6f0f..f9fb9b56f3 100644 --- a/.github/workflows/java-cd.yml +++ b/.github/workflows/java-cd.yml @@ -58,160 +58,160 @@ jobs: env: INPUT_VERSION: ${{ github.event.inputs.version }} -# create-binaries-to-publish: -# needs: [set-release-version, load-platform-matrix] -# if: github.repository_owner == 'valkey-io' -# timeout-minutes: 35 -# env: -# JAVA_VERSION: "11" -# RELEASE_VERSION: ${{ needs.set-release-version.outputs.RELEASE_VERSION }} -# strategy: -# # Run all jobs -# fail-fast: false -# matrix: -# host: ${{ fromJson(needs.load-platform-matrix.outputs.PLATFORM_MATRIX) }} -# -# runs-on: ${{ matrix.host.RUNNER }} -# -# steps: -# - name: Setup self-hosted runner access -# run: | -# GHA_HOME=/home/ubuntu/actions-runner/_work/valkey-glide -# if [ -d $GHA_HOME ]; then -# sudo chown -R $USER:$USER $GHA_HOME -# sudo rm -rf $GHA_HOME -# mkdir -p $GHA_HOME/valkey-glide -# else -# echo "No cleaning needed" -# fi -# - uses: actions/checkout@v4 -# with: -# submodules: recursive -# -# - name: Set up JDK -# uses: actions/setup-java@v4 -# with: -# distribution: "temurin" -# java-version: ${{ env.JAVA_VERSION }} -# -# - name: Install shared software dependencies -# uses: ./.github/workflows/install-shared-dependencies -# with: -# os: ${{ matrix.host.OS }} -# target: ${{ matrix.host.TARGET }} -# github-token: ${{ secrets.GITHUB_TOKEN }} -# -# - name: Install protoc (protobuf) -# uses: arduino/setup-protoc@v3 -# with: -# version: "26.1" -# repo-token: ${{ secrets.GITHUB_TOKEN }} -# -# - name: Create secret key ring file -# working-directory: java/client -# run: | -# echo "$SECRING_GPG" | base64 --decode > ./secring.gpg -# ls -ltr -# env: -# SECRING_GPG: ${{ secrets.SECRING_GPG }} -# -# - name: Build java client -# working-directory: java -# run: | -# ./gradlew :client:publishToMavenLocal -Psigning.secretKeyRingFile=secring.gpg \ -# -Psigning.password="${{ secrets.GPG_PASSWORD }}" -Psigning.keyId=${{ secrets.GPG_KEY_ID }} -# env: -# GLIDE_RELEASE_VERSION: ${{ env.RELEASE_VERSION }} -# -# - name: Bundle JAR -# working-directory: java -# run: | -# src_folder=~/.m2/repository/io/valkey/valkey-glide/${{ env.RELEASE_VERSION }} -# cd $src_folder -# jar -cvf bundle.jar * -# ls -ltr -# cd - -# cp $src_folder/bundle.jar bundle-${{ matrix.host.TARGET }}.jar -# -# - name: Upload artifacts to publish -# continue-on-error: true -# uses: actions/upload-artifact@v4 -# with: -# name: java-${{ matrix.host.TARGET }} -# path: | -# java/bundle*.jar -# -# publish-to-maven-central-deployment: -# if: ${{ inputs.maven_publish == true || github.event_name == 'push' }} -# needs: [set-release-version, create-binaries-to-publish] -# runs-on: ubuntu-latest -# outputs: -# DEPLOYMENT_ID: ${{ steps.maven-deployment.outputs.DEPLOYMENT_ID }} -# env: -# RELEASE_VERSION: ${{ needs.set-release-version.outputs.RELEASE_VERSION }} -# steps: -# - name: Download published artifacts -# uses: actions/download-artifact@v4 -# -# - name: Move all required files to one directory -# run: | -# mkdir maven-files -# cd maven-files -# for file in $(find ../. -name "*.jar"); do jar xf "$file" ; done -# -# - name: Generate sha1 and md5 files for all Maven files -# run: | -# cd maven-files -# for i in *.jar *.pom *.module; do md5sum $i | cut -d ' ' -f 1 > $i.md5; done -# for i in *.jar *.pom *.module; do sha1sum $i | cut -d ' ' -f 1 > $i.sha1; done -# -# - name: Move files to the correct directory tree -# run: | -# mkdir -p build/io/valkey/valkey-glide/${{ env.RELEASE_VERSION }} -# cp -a maven-files/* build/io/valkey/valkey-glide/${{ env.RELEASE_VERSION }} -# rm -rf build/io/valkey/valkey-glide/${{ env.RELEASE_VERSION }}/META-INF -# cd build -# zip -r ../build io -# -# - name: Upload bundle to CI artifacts -# uses: actions/upload-artifact@v4 -# with: -# name: valkey-${{ env.RELEASE_VERSION }} -# path: | -# build -# -# - name: Publish to Maven Central -# id: maven-deployment -# run: | -# export DEPLOYMENT_ID=`curl --request POST \ -# -u "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" \ -# --form bundle=@build.zip \ -# https://central.sonatype.com/api/v1/publisher/upload | tail -n 1` -# echo "DEPLOYMENT_ID=$DEPLOYMENT_ID" >> $GITHUB_ENV -# echo "DEPLOYMENT_ID=$DEPLOYMENT_ID" >> $GITHUB_OUTPUT -# echo Uploaded to Maven deployment with deployment ID $DEPLOYMENT_ID. Will be released if smoke tests pass and approved for release. -# -# - name: Check status of deployment -# run: | -# for ((retries = 0; retries < 20; retries++)); do -# sleep 5 -# export DEPLOYMENT_STATUS=`curl --request POST \ -# -u "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" \ -# "https://central.sonatype.com/api/v1/publisher/status?id=${{ env.DEPLOYMENT_ID }}" \ -# | jq '.deploymentState'` -# -# if [[ $DEPLOYMENT_STATUS == ""\"VALIDATED"\"" ]]; then exit 0; fi -# done -# -# curl --request POST \ -# -u "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" \ -# "https://central.sonatype.com/api/v1/publisher/status?id=${{ env.DEPLOYMENT_ID }}" \ -# | jq -# echo "Deployment ${{ env.DEPLOYMENT_ID }} was unsuccessful with status $DEPLOYMENT_STATUS" -# exit 1 + create-binaries-to-publish: + needs: [set-release-version, load-platform-matrix] + if: github.repository_owner == 'valkey-io' + timeout-minutes: 35 + env: + JAVA_VERSION: "11" + RELEASE_VERSION: ${{ needs.set-release-version.outputs.RELEASE_VERSION }} + strategy: + # Run all jobs + fail-fast: false + matrix: + host: ${{ fromJson(needs.load-platform-matrix.outputs.PLATFORM_MATRIX) }} + + runs-on: ${{ matrix.host.RUNNER }} + + steps: + - name: Setup self-hosted runner access + run: | + GHA_HOME=/home/ubuntu/actions-runner/_work/valkey-glide + if [ -d $GHA_HOME ]; then + sudo chown -R $USER:$USER $GHA_HOME + sudo rm -rf $GHA_HOME + mkdir -p $GHA_HOME/valkey-glide + else + echo "No cleaning needed" + fi + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + distribution: "temurin" + java-version: ${{ env.JAVA_VERSION }} + + - name: Install shared software dependencies + uses: ./.github/workflows/install-shared-dependencies + with: + os: ${{ matrix.host.OS }} + target: ${{ matrix.host.TARGET }} + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Install protoc (protobuf) + uses: arduino/setup-protoc@v3 + with: + version: "26.1" + repo-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Create secret key ring file + working-directory: java/client + run: | + echo "$SECRING_GPG" | base64 --decode > ./secring.gpg + ls -ltr + env: + SECRING_GPG: ${{ secrets.SECRING_GPG }} + + - name: Build java client + working-directory: java + run: | + ./gradlew :client:publishToMavenLocal -Psigning.secretKeyRingFile=secring.gpg \ + -Psigning.password="${{ secrets.GPG_PASSWORD }}" -Psigning.keyId=${{ secrets.GPG_KEY_ID }} + env: + GLIDE_RELEASE_VERSION: ${{ env.RELEASE_VERSION }} + + - name: Bundle JAR + working-directory: java + run: | + src_folder=~/.m2/repository/io/valkey/valkey-glide/${{ env.RELEASE_VERSION }} + cd $src_folder + jar -cvf bundle.jar * + ls -ltr + cd - + cp $src_folder/bundle.jar bundle-${{ matrix.host.TARGET }}.jar + + - name: Upload artifacts to publish + continue-on-error: true + uses: actions/upload-artifact@v4 + with: + name: java-${{ matrix.host.TARGET }} + path: | + java/bundle*.jar + + publish-to-maven-central-deployment: + if: ${{ inputs.maven_publish == true || github.event_name == 'push' }} + needs: [set-release-version, create-binaries-to-publish] + runs-on: ubuntu-latest + outputs: + DEPLOYMENT_ID: ${{ steps.maven-deployment.outputs.DEPLOYMENT_ID }} + env: + RELEASE_VERSION: ${{ needs.set-release-version.outputs.RELEASE_VERSION }} + steps: + - name: Download published artifacts + uses: actions/download-artifact@v4 + + - name: Move all required files to one directory + run: | + mkdir maven-files + cd maven-files + for file in $(find ../. -name "*.jar"); do jar xf "$file" ; done + + - name: Generate sha1 and md5 files for all Maven files + run: | + cd maven-files + for i in *.jar *.pom *.module; do md5sum $i | cut -d ' ' -f 1 > $i.md5; done + for i in *.jar *.pom *.module; do sha1sum $i | cut -d ' ' -f 1 > $i.sha1; done + + - name: Move files to the correct directory tree + run: | + mkdir -p build/io/valkey/valkey-glide/${{ env.RELEASE_VERSION }} + cp -a maven-files/* build/io/valkey/valkey-glide/${{ env.RELEASE_VERSION }} + rm -rf build/io/valkey/valkey-glide/${{ env.RELEASE_VERSION }}/META-INF + cd build + zip -r ../build io + + - name: Upload bundle to CI artifacts + uses: actions/upload-artifact@v4 + with: + name: valkey-${{ env.RELEASE_VERSION }} + path: | + build + + - name: Publish to Maven Central + id: maven-deployment + run: | + export DEPLOYMENT_ID=`curl --request POST \ + -u "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" \ + --form bundle=@build.zip \ + https://central.sonatype.com/api/v1/publisher/upload | tail -n 1` + echo "DEPLOYMENT_ID=$DEPLOYMENT_ID" >> $GITHUB_ENV + echo "DEPLOYMENT_ID=$DEPLOYMENT_ID" >> $GITHUB_OUTPUT + echo Uploaded to Maven deployment with deployment ID $DEPLOYMENT_ID. Will be released if smoke tests pass and approved for release. + + - name: Check status of deployment + run: | + for ((retries = 0; retries < 20; retries++)); do + sleep 5 + export DEPLOYMENT_STATUS=`curl --request POST \ + -u "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" \ + "https://central.sonatype.com/api/v1/publisher/status?id=${{ env.DEPLOYMENT_ID }}" \ + | jq '.deploymentState'` + + if [[ $DEPLOYMENT_STATUS == ""\"VALIDATED"\"" ]]; then exit 0; fi + done + + curl --request POST \ + -u "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" \ + "https://central.sonatype.com/api/v1/publisher/status?id=${{ env.DEPLOYMENT_ID }}" \ + | jq + echo "Deployment ${{ env.DEPLOYMENT_ID }} was unsuccessful with status $DEPLOYMENT_STATUS" + exit 1 test-deployment-on-all-architectures: - needs: [set-release-version, load-platform-matrix] + needs: [set-release-version, load-platform-matrix, publish-to-maven-central-deployment] env: JAVA_VERSION: "11" RELEASE_VERSION: ${{ needs.set-release-version.outputs.RELEASE_VERSION }} @@ -268,29 +268,29 @@ jobs: export GLIDE_RELEASE_VERSION=${{ env.RELEASE_VERSION }} ./gradlew :benchmarks:run --args="--minimal --clients glide" -# publish-release-to-maven: -# if: ${{ inputs.maven_publish == true || github.event_name == 'push' }} -# needs: [test-deployment-on-all-architectures] -# runs-on: ubuntu-latest -# environment: AWS_ACTIONS -# env: -# DEPLOYMENT_ID: ${{ needs.publish-to-maven-central-deployment.outputs.DEPLOYMENT_ID }} -# steps: -# - name: Publish to Maven -# run: | -# curl --request POST \ -# -u "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" \ -# "https://central.sonatype.com/api/v1/publisher/deployment/${{ env.DEPLOYMENT_ID }}" -# -# drop-deployment-if-validation-fails: -# if: ${{ failure() }} -# needs: [test-deployment-on-all-architectures] -# runs-on: ubuntu-latest -# env: -# DEPLOYMENT_ID: ${{ needs.publish-to-maven-central-deployment.outputs.DEPLOYMENT_ID }} -# steps: -# - name: Drop deployment if validation fails -# run: | -# curl --request DELETE \ -# -u "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" \ -# "https://central.sonatype.com/api/v1/publisher/deployment/${{ env.DEPLOYMENT_ID }}" + publish-release-to-maven: + if: ${{ inputs.maven_publish == true || github.event_name == 'push' }} + needs: [test-deployment-on-all-architectures] + runs-on: ubuntu-latest + environment: AWS_ACTIONS + env: + DEPLOYMENT_ID: ${{ needs.publish-to-maven-central-deployment.outputs.DEPLOYMENT_ID }} + steps: + - name: Publish to Maven + run: | + curl --request POST \ + -u "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" \ + "https://central.sonatype.com/api/v1/publisher/deployment/${{ env.DEPLOYMENT_ID }}" + + drop-deployment-if-validation-fails: + if: ${{ failure() }} + needs: [test-deployment-on-all-architectures] + runs-on: ubuntu-latest + env: + DEPLOYMENT_ID: ${{ needs.publish-to-maven-central-deployment.outputs.DEPLOYMENT_ID }} + steps: + - name: Drop deployment if validation fails + run: | + curl --request DELETE \ + -u "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" \ + "https://central.sonatype.com/api/v1/publisher/deployment/${{ env.DEPLOYMENT_ID }}"