Skip to content

Java Prepare Deployment #425

Java Prepare Deployment

Java Prepare Deployment #425

Workflow file for this run

name: Java Prepare Deployment
on:
push:
tags:
- "v*.*"
workflow_dispatch:
inputs:
version:
description: "The release version of GLIDE, formatted as *.*.* or *.*.*-rc*"
required: true
maven_publish:
description: "Publish to Maven Central"
required: true
type: boolean
concurrency:
group: java-cd-${{ github.head_ref || github.ref }}
cancel-in-progress: true
permissions:
id-token: write
jobs:
load-platform-matrix:
runs-on: ubuntu-latest
# environment: AWS_ACTIONS
outputs:
PLATFORM_MATRIX: ${{ steps.load-platform-matrix.outputs.PLATFORM_MATRIX }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: load-platform-matrix
id: load-platform-matrix
shell: bash
run: |
# Get the matrix from the matrix.json file, without the object that has the IMAGE key
export "PLATFORM_MATRIX=$(jq 'map(select(.PACKAGE_MANAGERS | contains(["maven"])))' < .github/json_matrices/build-matrix.json | jq -c .)"
echo "PLATFORM_MATRIX=${PLATFORM_MATRIX}" >> $GITHUB_OUTPUT
set-release-version:
runs-on: ubuntu-latest
outputs:
RELEASE_VERSION: ${{ steps.release-version.outputs.RELEASE_VERSION }}
steps:
- name: Set the release version
id: release-version
shell: bash
run: |
if ${{ github.event_name == 'workflow_dispatch' }}; then
R_VERSION="${{ env.INPUT_VERSION }}"
else
R_VERSION=${GITHUB_REF:11}
fi
echo "RELEASE_VERSION=${R_VERSION}" >> $GITHUB_ENV
echo "Release version detected: $R_VERSION"
echo "RELEASE_VERSION=$R_VERSION" >> $GITHUB_OUTPUT
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
test-deployment-on-all-architectures:
needs: [set-release-version, load-platform-matrix]
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: Checkout
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 }}
engine-version: "7.2.5"
target: ${{ matrix.host.TARGET }}
github-token: ${{ secrets.GITHUB_TOKEN }}
use-cache: false
- name: Install protoc (protobuf)
uses: arduino/setup-protoc@v3
with:
version: "26.1"
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Find available port
id: port
run: |
if ${{ matrix.host.OS == 'ubuntu'}}; then
sudo apt install net-tools
while
port=$(shuf -n 1 -i 40000-65000)
netstat -atun | grep -q "$port"
do
continue
done
else
export port=`comm -23 <(seq 49152 65535 | sort) <(awk '{print $4}' | cut -d':' -f2 | sort -u) | shuf | head -n 1`
fi
echo "PORT=$port" >> $GITHUB_OUTPUT
- name: Start Valkey server
run:
cd ~/valkey/src
./valkey-server --port ${{ steps.port.outputs.PORT }}&
- name: Test deployment
working-directory: java
run: |
export ORG_GRADLE_PROJECT_centralManualTestingAuthHeaderName="Authorization"
export ORG_GRADLE_PROJECT_centralManualTestingAuthHeaderValue="Bearer $(echo "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" | base64)"
export GLIDE_RELEASE_VERSION=${{ env.RELEASE_VERSION }}
./gradlew :benchmarks:run --args="--minimal --clients glide --port ${{ env.VALKEY_PORT }}"
#
# 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: [publish-to-maven-central-deployment, 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 }}"