diff --git a/.github/actions/run-ee-server/action.yaml b/.github/actions/run-ee-server/action.yaml
new file mode 100644
index 000000000..3476c2f9d
--- /dev/null
+++ b/.github/actions/run-ee-server/action.yaml
@@ -0,0 +1,44 @@
+name: "Run EE Server"
+description: "Run EE server. Returns once server is ready. Only tested on Linux and macOS"
+
+inputs:
+ # All inputs in composite actions are strings
+ use-server-rc:
+ description: Flag for rc candidates
+ required: true
+ default: "false"
+ server-tag:
+ description: Server version to use
+ required: true
+ default: "latest"
+ # Github Composite Actions can't access secrets
+ # so we need to pass them in as inputs
+ docker-hub-username:
+ description: Dockerhub username
+ required: false
+ docker-hub-password:
+ description: Dockerhub password
+ required: false
+ container-repo-url:
+ required: false
+ description: Container repo url
+ default: aerospike.jfrog.io/docker/
+
+runs:
+ using: "composite"
+ steps:
+ - name: Log into Docker Hub to get server RC
+ if: ${{ inputs.use-server-rc == 'true' }}
+ run: docker login ${{ inputs.container-repo-url }} --username ${{ inputs.docker-hub-username }} --password ${{ inputs.docker-hub-password }}
+ shell: bash
+
+ - run: echo IMAGE_NAME=${{ inputs.use-server-rc == 'true' && inputs.container-repo-url || '' }}aerospike/aerospike-server-enterprise${{ inputs.use-server-rc == 'true' && '-rc' || '' }}:${{ inputs.server-tag }} >> $GITHUB_ENV
+ shell: bash
+
+ - run: docker run -d --name aerospike -p 3000:3000 ${{ env.IMAGE_NAME }}
+ shell: bash
+
+ - uses: ./.github/actions/wait-for-as-server-to-start
+ with:
+ container-name: aerospike
+ is-security-enabled: true
diff --git a/.github/actions/upload-to-jfrog/action.yaml b/.github/actions/upload-to-jfrog/action.yaml
new file mode 100644
index 000000000..722a079ae
--- /dev/null
+++ b/.github/actions/upload-to-jfrog/action.yaml
@@ -0,0 +1,46 @@
+name: Publish artifacts to JFrog
+description: "Publishes artifacts to JFrog"
+
+inputs:
+ version:
+ description: ""
+ required: true
+ jdk-version:
+ description: ""
+ required: true
+ jfrog-repo-name:
+ description: ""
+ required: false
+ default: aerospike-maven-dev-local
+ jfrog-platform-url:
+ description: ""
+ required: false
+ default: https://aerospike.jfrog.io/
+ oidc-provider:
+ description: ""
+ required: false
+ default: gh-aerospike-clients
+ oidc-audience:
+ description: ""
+ required: false
+ default: aerospike/clients
+
+runs:
+ using: "composite"
+ steps:
+ - name: Set up JFrog credentials
+ uses: jfrog/setup-jfrog-cli@v3
+ env:
+ JF_URL: ${{ inputs.jfrog-platform-url }}
+ with:
+ oidc-provider-name: ${{ inputs.oidc-provider }}
+ oidc-audience: ${{ inputs.oidc-audience }}
+
+ - name: Upload from branches to JFrog
+ shell: bash
+ # Only interested in `aerospike-proxy-client-x.x.x....` and `aerospike-client-jdkx-x.x.x....`
+ run: jf rt upload --regexp=true --dry-run "aerospike-(proxy-client|client-(jdk\d+))-\d+\.\d+\.\d+(-jar-with-dependencies)?\.jar" "${{ inputs.jfrog-repo-name }}"
+
+ - name: Publish build info
+ shell: bash
+ run: jf rt build-publish --dry-run ${{ inputs.jdk-version == 'jdk8' && 'aerospike-client-jdk8' || 'aerospike-client-jdk21' }} ${{ inputs.version }}
diff --git a/.github/actions/wait-for-as-server-to-start/action.yaml b/.github/actions/wait-for-as-server-to-start/action.yaml
new file mode 100644
index 000000000..591c89434
--- /dev/null
+++ b/.github/actions/wait-for-as-server-to-start/action.yaml
@@ -0,0 +1,22 @@
+name: "Wait for Aerospike server to start"
+description: Only tested on Linux and macOS
+inputs:
+ container-name:
+ description: Container name
+ required: true
+ is-security-enabled:
+ description: Flag to toggle docker hub creds use. With this flag enabled before attempting to pull image we will attempt to log in do docker hub.
+ required: false
+ default: "false"
+
+runs:
+ using: "composite"
+ steps:
+ # Composite actions doesn't support step-level timeout-minutes
+ # Use timeout command and store polling logic in file to make it easier to read
+ # Call bash shell explicitly since timeout uses "sh" shell by default, for some reason
+ # Also, we don't want to fail if we timeout in case the server *did* finish starting up but the script couldn't detect it due to a bug
+ # Effectively, this composite action is like calling "sleep" that is optimized to exit early when it detects an ok from the server
+ - name: Wait for EE server to start
+ run: timeout 30 bash ./.github/workflows/scripts/wait-for-as-server-to-start.sh ${{ inputs.container-name }} ${{ inputs.is-security-enabled }} || true
+ shell: bash
diff --git a/.github/workflows/build-dev.yaml b/.github/workflows/build-dev.yaml
new file mode 100644
index 000000000..f32614d3b
--- /dev/null
+++ b/.github/workflows/build-dev.yaml
@@ -0,0 +1,62 @@
+on:
+ workflow_call:
+ inputs:
+ branch:
+ type: string
+ required: true
+ source-branch:
+ type: string
+ required: false
+ use-server-rc:
+ type: boolean
+ required: false
+ default: false
+ description: "Test against server release candidate?"
+ server-tag:
+ type: string
+ required: false
+ default: "latest"
+ description: "Server docker image tag"
+ upload-artifacts:
+ type: boolean
+ required: false
+ default: false
+ description: "Upload built artifacts to github?"
+ bump-version:
+ type: boolean
+ required: false
+ default: false
+ description: "Bump artifact version"
+
+jobs:
+ debug-job:
+ runs-on: ubuntu-latest
+ steps:
+ - name: debug
+ run: |
+ echo "${{ inputs.branch }}"
+ echo "${{ github.base_ref }}"
+
+ build-java-21:
+ if: ${{ inputs.source-branch == 'refs/heads/stage' }}
+ uses: ./.github/workflows/build.yaml
+ with:
+ java-version: 21
+ branch: ${{ inputs.branch }}
+ bump-version: ${{ inputs.bump-version }}
+ use-server-rc: ${{ inputs.use-server-rc }}
+ server-tag: ${{ inputs.server-tag }}
+ upload-artifacts: ${{ inputs.upload-artifacts }}
+ secrets: inherit
+
+ build-java-8:
+ if: ${{ inputs.source-branch == 'refs/heads/stage-jdk8' }}
+ uses: ./.github/workflows/build.yaml
+ with:
+ java-version: 8
+ branch: ${{ inputs.branch }}
+ bump-version: ${{ inputs.bump-version }}
+ use-server-rc: ${{ inputs.use-server-rc }}
+ server-tag: ${{ inputs.server-tag }}
+ upload-artifacts: ${{ inputs.upload-artifacts }}
+ secrets: inherit
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
new file mode 100644
index 000000000..526cdd4ef
--- /dev/null
+++ b/.github/workflows/build.yaml
@@ -0,0 +1,77 @@
+name: Build artifacts
+
+permissions:
+ # This is required for requesting the OIDC token
+ id-token: write
+
+on:
+ workflow_call:
+ inputs:
+ branch:
+ type: string
+ required: true
+ java-version:
+ type: number
+ required: true
+ use-server-rc:
+ type: boolean
+ required: false
+ default: false
+ description: "Test against server release candidate?"
+ server-tag:
+ type: string
+ required: false
+ default: "latest"
+ description: "Server docker image tag"
+ upload-artifacts:
+ type: boolean
+ required: false
+ default: false
+ description: "Upload built artifacts to github?"
+ secrets:
+ JFROG_USERNAME:
+ required: true
+ JFROG_DOCKER_TOKEN:
+ required: true
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout client
+ uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.branch }}
+
+ - name: Setup Java
+ uses: actions/setup-java@v4
+ with:
+ distribution: "semeru" # See 'Supported distributions' for available options
+ java-version: ${{ inputs.java-version }}
+
+ - name: Debug, list files
+ run: |
+ ls -laR .github
+ echo "Checked out branch ${{ inputs.branch }}"
+
+ - name: Run EE server
+ uses: ./.github/actions/run-ee-server
+ with:
+ use-server-rc: ${{ inputs.use-server-rc }}
+ server-tag: ${{ inputs.server-tag }}
+ docker-hub-username: ${{ secrets.JFROG_USERNAME }}
+ docker-hub-password: ${{ secrets.JFROG_DOCKER_TOKEN }}
+
+ - name: Build
+ run: mvn javadoc:jar source:jar install gpg:sign -P sign -Dcrypto.type=
+
+ - name: Test
+ working-directory: test
+ run: mvn test -DskipTests=false
+
+ - name: Upload to JFrog
+ if: ${{ !cancelled() && inputs.upload-artifacts == true }}
+ uses: ./.github/actions/upload-to-jfrog
+ with:
+ version: ${{ steps.get-new-version.outputs.new_version }}
+ jdk-version: "jdk${{ inputs.java-version }}"
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index d9bacbec2..000000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-name: Aerospike Java Client Tests
-
-on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - '**'
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout client
- uses: actions/checkout@v2
- - name: Setup Aerospike Database
- uses: reugn/github-action-aerospike@v1
- - run: mvn install
- - run: cd test
- - run: mvn test -DskipTests=false
diff --git a/.github/workflows/pull-request-open-dev.yaml b/.github/workflows/pull-request-open-dev.yaml
new file mode 100644
index 000000000..470c02f92
--- /dev/null
+++ b/.github/workflows/pull-request-open-dev.yaml
@@ -0,0 +1,35 @@
+name: PR open
+
+on:
+ pull_request:
+ branches:
+ - "dev/*"
+ types:
+ - opened
+ - reopened
+ workflow_dispatch:
+ inputs:
+ source-branch:
+ type: string
+ description: Base branch to use if manually starting. By default base_ref will empty if triggering manually hence base_ref is only available on PRs.
+
+jobs:
+ test-with-server-release:
+ name: Build stage - Test with latest version of Aerospike Enterprise Server
+ uses: ./.github/workflows/build-dev.yaml
+ with:
+ branch: ${{ github.ref }}
+ source-branch: ${{ inputs.source-branch || github.base_ref }}
+ use-server-rc: false
+ upload-artifacts: false
+ secrets: inherit
+
+ test-with-server-rc:
+ name: Build stage - Test with latest RC version of Aerospike Enterprise Server
+ uses: ./.github/workflows/build-dev.yaml
+ with:
+ branch: ${{ github.base_ref || inputs.branch }}
+ source-branch: ${{ inputs.source-branch || github.base_ref }}
+ use-server-rc: true
+ upload-artifacts: false
+ secrets: inherit
diff --git a/.github/workflows/push-to-dev.yaml b/.github/workflows/push-to-dev.yaml
new file mode 100644
index 000000000..32527321d
--- /dev/null
+++ b/.github/workflows/push-to-dev.yaml
@@ -0,0 +1,16 @@
+name: Push to dev
+
+on:
+ push:
+ branches:
+ - dev/*
+ workflow_dispatch:
+
+jobs:
+ build-stage:
+ name: Build stage
+ uses: ./.github/workflows/build-dev.yaml
+ with:
+ branch: ${{ github.ref }}
+ upload-artifacts: true
+ secrets: inherit
diff --git a/client/pom.xml b/client/pom.xml
index 914fcc4c0..e12294f46 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -69,7 +69,36 @@
+
+
+ sign
+
+ false
+
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 3.2.7
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+
+
+
+
+
+
+ aerospike-client-jdk${java.version}${crypto.type}-${version}
+
${project.basedir}/src
@@ -78,6 +107,12 @@
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 3.2.7
+
+
org.apache.maven.plugins
maven-compiler-plugin