diff --git a/.github/actions/build-and-test/action.yaml b/.github/actions/build-and-test/action.yaml
index f9ab2d19b..27920a827 100644
--- a/.github/actions/build-and-test/action.yaml
+++ b/.github/actions/build-and-test/action.yaml
@@ -31,11 +31,11 @@ runs:
- name: Stage crypto
shell: bash
run: |
- ./set_cypto ${{ inputs.crypto-type }}
+ ./set_crypto ${{ inputs.crypto-type }}
- name: Build
shell: bash
- run: mvn clean install -P ${{ inputs.crypto-type }}
+ run: mvn clean install
- name: Run EE server
if: ${{ inputs.run-tests == 'true' }}
diff --git a/.github/actions/fast-forward-merge/action.yaml b/.github/actions/fast-forward-merge/action.yaml
deleted file mode 100644
index d917069b5..000000000
--- a/.github/actions/fast-forward-merge/action.yaml
+++ /dev/null
@@ -1,36 +0,0 @@
-name: "Fast forward merge"
-description: Fast forward target branch to given commit hash
-
-inputs:
- ref_to_merge:
- description: Branch to merge into base
- required: true
- base_branch:
- description: Base branch
- required: true
- git-bot-token:
- description: Git bot token
- required: true
-
-runs:
- using: composite
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- # Fetch the whole history to prevent unrelated history errors
- fetch-depth: "0"
- ref: ${{ inputs.base_branch }}
- token: ${{ inputs.git-bot-token }}
-
- - name: Debug stuff
- shell: bash
- run: |
- git remote -vvv
- - name: Fast forward
- shell: bash
- run: git merge --ff-only ${{ inputs.ref_to_merge }}
-
- - name: Upload changes to remote head branch
- shell: bash
- run: git push
diff --git a/.github/actions/github-release/action.yaml b/.github/actions/github-release/action.yaml
new file mode 100644
index 000000000..c987d3b9b
--- /dev/null
+++ b/.github/actions/github-release/action.yaml
@@ -0,0 +1,56 @@
+name: Create github release
+description: Creates a github release
+
+inputs:
+ artifact-version:
+ description: ""
+ required: true
+ github-token:
+ description: ""
+ required: true
+
+runs:
+ using: composite
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+
+ - name: Get previous tag
+ shell: bash
+ id: get-prev-tag
+ run: |
+ # Fetch all tags
+ git fetch --tags
+ echo "previous-tag=$(git tag --sort=-creatordate | sed -n '1p')" >> $GITHUB_OUTPUT
+
+ # Extract commit messages between previous tag and the current tag.
+ - name: Get release notes
+ shell: bash
+ id: release-notes
+ run: |
+ notes=$(git log "${{steps.get-previous-tag.outputs.previous-tag }}..HEAD" --pretty=format:"%s" --no-merges)
+
+ # GitHub Actions requires that multiline output is escaped:
+ notes="${notes//'%'/'%25'}"
+ notes="${notes//$'\n'/'%0A'}"
+ notes="${notes//$'\r'/'%0D'}"
+
+ echo "notes=$notes" >> $GITHUB_OUTPUT
+
+ - name: Debug
+ shell: bash
+ run: |
+ echo "artifact-version: ${{ inputs.artifact-version }}"
+ echo "body: ${{ steps.release-notes.outputs.notes }}"
+
+ # Create a new release using GitHub's built-in action
+ #- name: Create GitHub Release
+ # uses: actions/create-release@v1
+ # env:
+ # GITHUB_TOKEN: ${{ inputs.github-token }}
+ # with:
+ # tag_name: ${{ inputs.artifact-version }}
+ # release_name: ${{ inputs.artifact-version }}
+ # body: ${{ steps.release-notes.outputs.notes }}
+ # draft: false
+ # prerelease: false
diff --git a/.github/actions/publish-to-jfrog/action.yaml b/.github/actions/publish-to-jfrog/action.yaml
index 68f8a7654..821128395 100644
--- a/.github/actions/publish-to-jfrog/action.yaml
+++ b/.github/actions/publish-to-jfrog/action.yaml
@@ -13,40 +13,77 @@ inputs:
jfrog-platform-url:
description: ""
required: false
- default: https://aerospike.jfrog.io/
+ default: https://aerospike.jfrog.io
oidc-provider:
description: ""
- required: false
- default: gh-aerospike-clients
+ required: true
oidc-audience:
description: ""
- required: false
- default: aerospike/clients
+ required: true
crypto-type:
description: ""
required: false
- default: gnu
+ artifact-name:
+ description: ""
+ required: true
+ artifact-id:
+ description: ""
+ required: true
+ artifact-version:
+ description: ""
+ required: true
+ deploy-spec-path:
+ description: ""
+ required: false
+ default: deploy-resources
runs:
using: "composite"
steps:
- name: Set up JFrog credentials
+ id: setup-jfrog-cli
uses: jfrog/setup-jfrog-cli@v4
env:
JF_URL: ${{ inputs.jfrog-platform-url }}
with:
+ version: 2.72.2
oidc-provider-name: ${{ inputs.oidc-provider }}
oidc-audience: ${{ inputs.oidc-audience }}
- - name: Set crypto dependency
+ - uses: s4u/maven-settings-action@v3.1.0
+ with:
+ servers: '[{"id": "jfrog", "username": "${{ steps.setup-jfrog-cli.outputs.oidc-user }}", "password": "${{ steps.setup-jfrog-cli.outputs.oidc-token }}"}]'
+
+ - name: Configure jf cli
shell: bash
run: |
- ./set_crypto ${{ inputs.crypto-type }}
+ jf mvn-config \
+ --repo-deploy-releases=${{ inputs.jfrog-releases-repo-name }} \
+ --repo-deploy-snapshots=${{ inputs.jfrog-snapshots-repo-name }}
+
+ - name: Generate deploy spec
+ shell: bash
+ working-directory: client
+ run: |
+ jq --arg targetPattern "${{ inputs.jfrog-releases-repo-name }}/com/aerospike/${{ inputs.artifact-id }}/${{ inputs.artifact-version }}/" \
+ --arg publicPomPattern "deploy-resources/${{ inputs.crypto-type }}_pom.xml" \
+ --arg publicPomTarget "${{ inputs.jfrog-releases-repo-name }}/com/aerospike/${{ inputs.artifact-id }}/${{ inputs.artifact-version }}/${{ inputs.artifact-name }}.pom" \
+ '
+ .files[0].target = $targetPattern |
+ .files[1].pattern = $publicPomPattern |
+ .files[1].target = $publicPomTarget
+ ' ${{ inputs.deploy-spec-path }}/publish-spec.json.template > ${{ inputs.deploy-spec-path }}/publish-spec.json
+
+ - name: Debug deploy spec
+ shell: bash
+ working-directory: client
+ run: |
+ cat ${{ inputs.deploy-spec-path }}/publish-spec.json
- - name: Deploy release
+ - name: Overwrite default pom with public release pom
shell: bash
working-directory: client
run: |
- jf mvn-config --repo-deploy-releases=${{ inputs.jfrog-releases-repo-name }} --repo-deploy-snapshots=${{ inputs.jfrog-snapshots-repo-name }}
- jf mvn source:jar javadoc:jar deploy -Dusername=${{ steps.setup-jfrog-cli.outputs.oidc-user }} ${{ steps.setup-jfrog-cli.outputs.oidc-token }}
- jf rt bp
+ jf rt upload --spec=${{ inputs.deploy-spec-path }}/publish-spec.json \
+ --build-name=clients-java-push-to-dev \
+ --build-number=${{ github.run_number }}
diff --git a/.github/workflows/build-dev.yaml b/.github/workflows/build-dev.yaml
index 2a47beab5..1ca17a63e 100644
--- a/.github/workflows/build-dev.yaml
+++ b/.github/workflows/build-dev.yaml
@@ -75,7 +75,7 @@ jobs:
needs: java-version
strategy:
matrix:
- crypto-type: ["bouncycastle", "gnu"]
+ crypto-type: [bouncycastle, gnu]
with:
java-version: ${{ needs.java-version.outputs.java-version }}
branch: ${{ inputs.branch }}
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index f422b6b87..a0df97ca0 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -1,4 +1,5 @@
name: Build artifacts
+run-name: Build artifact for ${{ inputs.crypto-type }} ${{ inputs.java-version }}
permissions:
# This is required for requesting the OIDC token
@@ -41,12 +42,16 @@ on:
required: true
GPG_PASS:
required: true
+ JFROG_OIDC_PROVIDER:
+ required: true
+ JFROG_OIDC_AUDIENCE:
+ required: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- - name: Checkout client
+ - name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ inputs.branch }}
@@ -66,8 +71,37 @@ jobs:
server-tag: ${{ inputs.server-tag }}
use-server-rc: ${{ inputs.use-server-rc }}
+ - name: Generate docs and sources if release
+ if: ${{ inputs.upload-artifacts == true }}
+ working-directory: client
+ run: |
+ mvn source:jar javadoc:jar
+
+ - name: Get artifact name
+ id: get-artifact-name
+ working-directory: client
+ run: |
+ echo artifact-name=$(mvn help:evaluate -Dexpression=project.build.finalName -q -DforceStdout) >> $GITHUB_OUTPUT
+
+ - name: Get artifact ID
+ id: get-artifact-id
+ working-directory: client
+ run: |
+ echo artifact-id="aerospike-client${{ inputs.crypto-type == 'bouncycastle' && '-bc' || '' }}-jdk${{ inputs.java-version }}" >> $GITHUB_OUTPUT
+
+ - name: Get artifact version
+ id: get-artifact-version
+ working-directory: client
+ run: |
+ echo artifact-version=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) >> $GITHUB_OUTPUT
+
- name: Publish to JFrog
if: ${{ !cancelled() && inputs.upload-artifacts == true }}
uses: ./.github/actions/publish-to-jfrog
with:
crypto-type: ${{ inputs.crypto-type }}
+ oidc-provider: ${{ secrets.JFROG_OIDC_PROVIDER }}
+ oidc-audience: ${{ secrets.JFROG_OIDC_AUDIENCE }}
+ artifact-name: ${{ steps.get-artifact-name.outputs.artifact-name }}
+ artifact-id: ${{ steps.get-artifact-id.outputs.artifact-id }}
+ artifact-version: ${{ steps.get-artifact-version.outputs.artifact-version }}
diff --git a/.github/workflows/promote-prod.yaml b/.github/workflows/promote-prod.yaml
index 63f03a009..c724cf4aa 100644
--- a/.github/workflows/promote-prod.yaml
+++ b/.github/workflows/promote-prod.yaml
@@ -16,6 +16,7 @@ jobs:
name: Promot from stage to prod
uses: ./.github/workflows/promote.yaml
with:
- build-number: ${{ inputs.build-number }}
- target-repository: client-maven-stage-local
+ build-number: ${{ inputs.build-number }}
+ target-repository: clients-maven-stage-local
target-branch: dev-stage
+ secrets: inherit
diff --git a/.github/workflows/promote-to-stage.yaml b/.github/workflows/promote-to-stage.yaml
index fe52abdf9..6e01bd65a 100644
--- a/.github/workflows/promote-to-stage.yaml
+++ b/.github/workflows/promote-to-stage.yaml
@@ -20,14 +20,25 @@ jobs:
env:
JF_URL: ${{ vars.JFROG_PLATFORM_URL }}
with:
- oidc-provider-name: ${{ inputs.oidc-provider }}
- oidc-audience: ${{ inputs.oidc-audience }}
+ oidc-provider-name: ${{ secrets.JFROG_OIDC_PROVIDER }}
+ oidc-audience: ${{ secrets.JFROG_OIDC_AUDIENCE }}
- name: Get info
id: get-build-info
run: |
echo build-info=$(jf rt curl /api/build/clients-java-push-to-dev/${{ inputs.build-number }}) >> $GITHUB_OUTPUT
+ - name: Get commit hash from repo
+ id: get-commit-hash
+ run: |
+ echo commit-hash=$(echo '${{ steps.get-build-info.outputs.build-info }}' | jq -r '.buildInfo.vcs[].revision') >> $GITHUB_OUTPUT
+
+ - name: Get build name
+ id: get-build-name
+ run: |
+ echo build-name=$(echo '${{ steps.get-build-info.outputs.build-info }}' | jq -r '.buildInfo.name') >> $GITHUB_OUTPUT
+
- name: Debug
run: |
- echo ${{ steps.get-build-info.outputs.build-info }}
+ echo "commit-hash: '${{ steps.get-commit-hash.outputs.commit-hash }}'"
+ echo "build-name: '${{ steps.get-build-name.outputs.build-name }}'"
diff --git a/.github/workflows/promote.yaml b/.github/workflows/promote.yaml
index 302218397..536f6d2de 100644
--- a/.github/workflows/promote.yaml
+++ b/.github/workflows/promote.yaml
@@ -4,7 +4,7 @@ on:
workflow_call:
inputs:
build-number:
- type: number
+ type: string
description: Build number used to build artifact to be promoted
target-repository:
type: string
@@ -25,8 +25,8 @@ jobs:
env:
JF_URL: ${{ vars.JFROG_PLATFORM_URL }}
with:
- oidc-provider-name: ${{ inputs.oidc-provider }}
- oidc-audience: ${{ inputs.oidc-audience }}
+ oidc-provider-name: ${{ secrets.JFROG_OIDC_PROVIDER }}
+ oidc-audience: ${{ secrets.JFROG_OIDC_AUDIENCE }}
- name: Get info
id: get-build-info
@@ -36,25 +36,55 @@ jobs:
- name: Get commit hash from repo
id: get-commit-hash
run: |
- echo commit-hash=$(steps.get-build-info.outputs.build-info | jq -r '.vcs[].revision') >> $GITHUB_OUTPUT
+ echo commit-hash=$(echo '${{ steps.get-build-info.outputs.build-info }}' | jq -r '.buildInfo.vcs[].revision') >> $GITHUB_OUTPUT
- - name: Get commit hash from repo
+ - name: Get build name
id: get-build-name
run: |
- echo build-name=$(steps.get-build-info.outputs.build-info | jq -r '.name') >> $GITHUB_OUTPUT
+ echo build-name=$(echo '${{ steps.get-build-info.outputs.build-info }}' | jq -r '.buildInfo.name') >> $GITHUB_OUTPUT
- name: Debug
run: |
- echo ${{ steps.get-build-info.outputs.build-info }}
- echo ${{ steps.get-build-info.outputs.build-name }}
+ echo "commit-hash: '${{ steps.get-commit-hash.outputs.commit-hash }}'"
+ echo "build-name: '${{ steps.get-build-name.outputs.build-name }}'"
+
+ # Needed since we are using actions which are part of the repository
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ # Fetch the whole history to prevent unrelated history errors
+ fetch-depth: "0"
+ ref: ${{ inputs.target-branch }}
+ token: ${{ secrets.CLIENT_BOT_PAT }}
+
+ - name: Fast forward
+ shell: bash
+ run: git merge --ff-only ${{ inputs.ref-to-merge }}
- - name: Merge commit hash from source to target branch
- uses: ./github/actions/fast-forward-merge
+ - name: Add tagging message
+ uses: stefanzweifel/git-auto-commit-action@v4
with:
- ref-to-merge: ${{ steps.get-build-info.outputs.build-info }}
- base-branch: ${{ inputs.target-branch }}
- git-bot-token: ${{ secrets.CLIENT_BOT_PAT }}
+ commit_message: "Promote to prod [skip ci]"
+ commit_author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
+ tagging_message: Promote to PROD
+ branch: ${{ inputs.target-branch }}
+
+ - name: Upload changes to remote head branch
+ shell: bash
+ run: git push
- name: Promote build
run: |
- jf rt build-promote ${{ steps.get-build-info.outputs.build-name }} ${{ inputs.build-number }} ${{ inputs.target-repository }}
+ jf rt build-promote ${{ steps.get-build-name.outputs.build-name }} ${{ inputs.build-number }} ${{ inputs.target-repository }}
+
+ - name: Get artifact version
+ id: get-artifact-version
+ working-directory: client
+ run: |
+ echo artifact-version=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) >> $GITHUB_OUTPUT
+
+ - name: Create GitHub release
+ uses: ./.github/actions/github-release
+ with:
+ artifact-version: ${{ steps.get-artifact-version.outputs.artifact-version }}
+ github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml
index e779b50f1..a0734fccb 100644
--- a/benchmarks/pom.xml
+++ b/benchmarks/pom.xml
@@ -6,7 +6,7 @@
com.aerospike
aerospike-parent
- 9.0.2
+ ${revision}
aerospike-benchmarks
jar
diff --git a/client/config.json b/client/config.json
new file mode 100644
index 000000000..9963bf030
--- /dev/null
+++ b/client/config.json
@@ -0,0 +1,12 @@
+{
+ "files": [
+ {
+ "pattern": "target/*.jar",
+ "target": "test"
+ },
+ {
+ "pattern": "one",
+ "target": "another"
+ }
+ ]
+}
diff --git a/client/config.template b/client/config.template
new file mode 100644
index 000000000..5638046b9
--- /dev/null
+++ b/client/config.template
@@ -0,0 +1,12 @@
+{
+ "files": [
+ {
+ "pattern": "target/*.jar",
+ "target": ""
+ },
+ {
+ "pattern": "",
+ "target": ""
+ }
+ ]
+}
diff --git a/client/src/resources/bouncy_pom.xml b/client/deploy-resources/bouncycastle_pom.xml
similarity index 98%
rename from client/src/resources/bouncy_pom.xml
rename to client/deploy-resources/bouncycastle_pom.xml
index c32d7bea6..1fc1c059c 100644
--- a/client/src/resources/bouncy_pom.xml
+++ b/client/deploy-resources/bouncycastle_pom.xml
@@ -2,7 +2,7 @@
4.0.0
com.aerospike
aerospike-client-bc-jdk21
- 9.0.1
+ 9.0.2
jar
Aerospike Java Client BC
Aerospike Java client interface to Aerospike database server. Uses Bouncy Castle crypto library for RIPEMD-160 hashing.
diff --git a/client/src/resources/gnu_pom.xml b/client/deploy-resources/gnu_pom.xml
similarity index 98%
rename from client/src/resources/gnu_pom.xml
rename to client/deploy-resources/gnu_pom.xml
index 3682ae49a..5005254e9 100644
--- a/client/src/resources/gnu_pom.xml
+++ b/client/deploy-resources/gnu_pom.xml
@@ -2,7 +2,7 @@
4.0.0
com.aerospike
aerospike-client-jdk21
- 9.0.1
+ 9.0.2
jar
Aerospike Java Client
Aerospike Java client interface to Aerospike database server
diff --git a/client/deploy-resources/publish-spec.json.template b/client/deploy-resources/publish-spec.json.template
new file mode 100644
index 000000000..5638046b9
--- /dev/null
+++ b/client/deploy-resources/publish-spec.json.template
@@ -0,0 +1,12 @@
+{
+ "files": [
+ {
+ "pattern": "target/*.jar",
+ "target": ""
+ },
+ {
+ "pattern": "",
+ "target": ""
+ }
+ ]
+}
diff --git a/client/pom.xml b/client/pom.xml
index baa6963c9..3dd615a7f 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -6,9 +6,9 @@
com.aerospike
aerospike-parent
- 9.0.2
+ ${revision}
- aerospike-client-jdk21
+ aerospike-client${crypto.type}-jdk21
jar
aerospike-client-jdk21
@@ -114,16 +114,17 @@
install
install-file
-
+
- ${project.basedir}/src/resources/bouncy_pom.xml
+ ${project.basedir}/deploy-resources/bouncycastle_pom.xml
target/${project.build.finalName}.jar
com.aerospike
aerospike-client${crypto.type}-jdk21
-
-
-
-
+ true
+
+
+
+
@@ -183,13 +184,14 @@
install
install-file
-
+
- ${project.basedir}/src/resources/gnu_pom.xml
+ ${project.basedir}/deploy-resources/gnu_pom.xml
target/${project.build.finalName}.jar
com.aerospike
aerospike-client${crypto.type}-jdk21
-
+ true
+
@@ -301,7 +303,6 @@
-
diff --git a/examples/pom.xml b/examples/pom.xml
index 7e668d44d..8d8da1e34 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -6,7 +6,7 @@
com.aerospike
aerospike-parent
- 9.0.2
+ ${revision}
aerospike-examples
jar
diff --git a/pom.xml b/pom.xml
index fb3e8f36c..4eea320ed 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.aerospike
aerospike-parent
aerospike-parent
- 9.0.2
+ ${revision}
pom
https://github.com/aerospike/aerospike-client-java
@@ -29,6 +29,7 @@
+ 9.0.2
UTF-8
UTF-8
@@ -43,6 +44,7 @@
0.4
1.9.0
4.13.1
+ 3.1.3
@@ -134,6 +136,31 @@
org.apache.maven.plugins
maven-javadoc-plugin
${maven-javadoc-plugin.version}
+
+
+
+ org.codehaus.mojo
+ flatten-maven-plugin
+
+ true
+ resolveCiFriendliesOnly
+
+
+
+ flatten
+ process-resources
+
+ flatten
+
+
+
+ flatten.clean
+ clean
+
+ clean
+
+
+
diff --git a/test/pom.xml b/test/pom.xml
index e6d5d0086..8649bb7f7 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -6,7 +6,7 @@
com.aerospike
aerospike-parent
- 9.0.2
+ ${revision}
aerospike-client-test
jar