Java: Update workflow to zip bundle files and use build-matrix.json #192
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Java Prepare Deployment | |
on: | |
pull_request: | |
paths: | |
- .github/workflows/java-cd.yml | |
- .github/workflows/install-shared-dependencies/action.yml | |
- .github/workflows/start-self-hosted-runner/action.yml | |
- .github/json_matrices/build-matrix.json | |
push: | |
tags: | |
- "v*.*" | |
workflow_dispatch: | |
inputs: | |
version: | |
description: 'The release version of GLIDE, formatted as *.*.* or *.*.*-rc*' | |
required: true | |
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 | |
create-binaries-to-publish: | |
needs: load-platform-matrix | |
if: github.repository_owner == 'valkey-io' | |
timeout-minutes: 35 | |
env: | |
JAVA_VERSION: '11' | |
strategy: | |
# Run all jobs | |
fail-fast: false | |
matrix: | |
host: ${{fromJson(needs.load-platform-matrix.outputs.PLATFORM_MATRIX)}} | |
runs-on: ${{ matrix.host.RUNNER }} | |
steps: | |
- name: Publish to Maven Central | |
run: | | |
BEARER_TOKEN=$(echo "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" | base64) | |
mkdir -p com/sonatype/central/example/example_java_project/0.1.0 | |
cd com/sonatype/central/example/example_java_project/0.1.0 | |
touch test-0.1.0.jar test-0.1.0.jar.asc test-0.1.0.jar.sha1 test-0.1.0.jar.md5 | |
touch test-0.1.0.pom test-0.1.0.pom.asc test-0.1.0.pom.sha1 test-0.1.0.pom.md5 | |
touch test-0.1.0-sources.jar test-0.1.0-sources.jar.asc test-0.1.0-sources.jar.sha1 test-0.1.0-sources.jar.md5 | |
touch test-0.1.0-javadoc.jar test-0.1.0-javadoc.jar.asc test-0.1.0-javadoc.jar.sha1 test-0.1.0-javadoc.jar.md5 | |
cd ../../../../../.. | |
zip com example | |
curl --request POST \ | |
--verbose \ | |
--header "Authorization: Bearer $BEARER_TOKEN" \ | |
--form [email protected] \ | |
https://central.sonatype.com/api/v1/publisher/upload | |
- 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 the release version | |
shell: bash | |
run: | | |
if ${{ github.event_name == 'pull_request' }}; then | |
R_VERSION="255.255.255" | |
elif ${{ 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" | |
env: | |
EVENT_NAME: ${{ github.event_name }} | |
INPUT_VERSION: ${{ github.event.inputs.version }} | |
- 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 | |
combine-binaries-to-one-directory: | |
needs: create-binaries-to-publish | |
runs-on: ubuntu-latest | |
steps: | |
- name: Download published artifacts | |
uses: actions/download-artifact@v4 | |
- name: Set the release version | |
shell: bash | |
run: | | |
if ${{ github.event_name == 'pull_request' }}; then | |
R_VERSION="255.255.255" | |
elif ${{ 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" | |
env: | |
INPUT_VERSION: ${{ github.event.inputs.version }} | |
- name: Move all required files to one directory | |
# TODO: Add `./java-aarch64-unknown-linux-gnu/* bundles` when we are able to support a linux arm runner. | |
# TODO: Add "maven" to linux arm PACKAGE_MANAGER in build-matrix.json. | |
run: | | |
mkdir bundles | |
mkdir maven-files | |
find . -name "*.jar" | head -1 | xargs -I{} cp "{}" ./bundle.jar | |
mv ./java-*/* maven-files | |
unzip bundle.jar | |
mv valkey-glide-*.pom maven-files | |
mv valkey-glide-*-sources.jar maven-files | |
mv valkey-glide-*.module maven-files | |
mv valkey-glide-*javadoc.jar maven-files | |
- name: Generate sha1 files for all maven files | |
run: | | |
mkdir maven-sha1-files | |
cd maven-files | |
for file in *; do sha1sum "$file" > ../maven-sha1-files/"$file".sha1 ; done | |
- name: Generate md5 files for all maven files | |
run: | | |
mkdir maven-md5-files | |
cd maven-files | |
for file in *; do md5sum "$file" > ../maven-md5-files/"$file".md5 ; done | |
# - name: 'Install GPG Secret Key' | |
# id: import_gpg | |
# uses: crazy-max/ghaction-import-gpg@v4 | |
# with: | |
# gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} | |
# passphrase: ${{ secrets.GPG_PASSWORD }} | |
- name: Generate PGP signatures | |
run: | | |
cd maven-files | |
gpg --detach-sign --armor bundle-aarch64-apple-darwin.jar | |
- name: Upload artifacts to publish | |
uses: actions/upload-artifact@v4 | |
with: | |
name: maven-files-${{ env.RELEASE_VERSION }} | |
path: | | |
maven-files | |
maven-sha1-files | |
maven-md5-files | |
# - name: Publish to Maven Central | |
# run: | | |
# BEARER_TOKEN=$(echo "${{ secrets.CENTRAL_TOKEN_USERNAME }}:${{ secrets.CENTRAL_TOKEN_PASSWORD }}" | base64) | |
# curl --request POST \ | |
# --verbose \ | |
# --header 'Authorization: Bearer $BEARER_TOKEN' \ | |
# --form [email protected] \ | |
# https://central.sonatype.com/api/v1/publisher/upload |