From dd1a3bfd1a22d2dd47577020806ef1e1339139b8 Mon Sep 17 00:00:00 2001
From: Mirza Karacic <mkaracic@aerospike.com>
Date: Wed, 11 Dec 2024 14:37:58 -0800
Subject: [PATCH] Integration fixes

---
 .github/actions/build-and-test/action.yaml    |  4 +-
 .../actions/fast-forward-merge/action.yaml    | 36 ----------
 .github/actions/publish-to-jfrog/action.yaml  | 67 +++++++++++++++----
 .github/workflows/build-dev.yaml              |  2 +-
 .github/workflows/build.yaml                  | 23 ++++++-
 .github/workflows/promote-prod.yaml           |  5 +-
 .github/workflows/promote-to-stage.yaml       | 17 ++++-
 .github/workflows/promote.yaml                | 46 +++++++++----
 client/pom.xml                                |  3 +-
 .../{bouncy_pom.xml => bouncycastle_pom.xml}  |  2 +-
 client/src/resources/gnu_pom.xml              |  2 +-
 pom.xml                                       |  1 +
 12 files changed, 133 insertions(+), 75 deletions(-)
 delete mode 100644 .github/actions/fast-forward-merge/action.yaml
 rename client/src/resources/{bouncy_pom.xml => bouncycastle_pom.xml} (98%)

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/publish-to-jfrog/action.yaml b/.github/actions/publish-to-jfrog/action.yaml
index 68f8a7654..be0f9c091 100644
--- a/.github/actions/publish-to-jfrog/action.yaml
+++ b/.github/actions/publish-to-jfrog/action.yaml
@@ -13,40 +13,83 @@ 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
 
 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 }} \
+        --exclude-patterns="*client${{ inputs.crypto-type != 'bouncycastle' && '-bc' || '' }}-jdk21*"
 
-    - name: Deploy release
+    - name: Debug
       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
+        ls -la target
+
+    - name: Deploy client release
+      shell: bash
+      working-directory: client
+      run: |
+        jf mvn source:jar javadoc:jar install deploy:deploy-file \
+        -DartifactId=${{ inputs.artifact-id }} \
+        -DpomFile=src/resources/${{ inputs.crypto-type }}_pom.xml \
+        -Dfile=target/${{ inputs.artifact-name }}.jar \
+        -Dfiles=target/${{ inputs.artifact-name }}-jar-with-dependencies.jar \
+        -Dtypes=jar \
+        -Dclassifiers=jar-with-dependencies \
+        -Dsources=target/${{ inputs.artifact-name }}-sources.jar \
+        -Djavadoc=target/${{ inputs.artifact-name }}-javadoc.jar \
+        -DrepositoryId=jfrog \
+        -DgeneratePom=false \
+        -Durl=${{ inputs.jfrog-platform-url }}/artifactory/${{ inputs.jfrog-releases-repo-name }}
+
+    - name: Debug
+      shell: bash
+      working-directory: client
+      run: |
+        ls -la target
+
+    - name: Publish build info
+      shell: bash
+      run: |
+        # Collect environment variables for the build
+        jf rt bce 
+        # Collect VCS details from git and add them to the build
+        jf rt bag
+        # Publish build info
+        jf rt bp clients-java-push-to-dev ${{ 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..ac0a79c64 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,24 @@ jobs:
           server-tag: ${{ inputs.server-tag }}
           use-server-rc: ${{ inputs.use-server-rc }}
 
+      - 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: 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 }}
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..a8d203b2e 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,43 @@ 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 }}
diff --git a/client/pom.xml b/client/pom.xml
index baa6963c9..6eb75b67c 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -116,7 +116,7 @@
                   <goal>install-file</goal>
                   </goals>
                 <configuration>
-                  <pomFile>${project.basedir}/src/resources/bouncy_pom.xml</pomFile>
+                  <pomFile>${project.basedir}/src/resources/bouncycastle_pom.xml</pomFile>
                   <file>target/${project.build.finalName}.jar</file>
                   <groupId>com.aerospike</groupId>
                   <artifactId>aerospike-client${crypto.type}-jdk21</artifactId>
@@ -301,7 +301,6 @@
           </sourceFileIncludes>
           </configuration>
         </plugin>
-
     </plugins>
 
   </build>
diff --git a/client/src/resources/bouncy_pom.xml b/client/src/resources/bouncycastle_pom.xml
similarity index 98%
rename from client/src/resources/bouncy_pom.xml
rename to client/src/resources/bouncycastle_pom.xml
index c32d7bea6..1fc1c059c 100644
--- a/client/src/resources/bouncy_pom.xml
+++ b/client/src/resources/bouncycastle_pom.xml
@@ -2,7 +2,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.aerospike</groupId>
   <artifactId>aerospike-client-bc-jdk21</artifactId>
-  <version>9.0.1</version>
+  <version>9.0.2</version>
   <packaging>jar</packaging>
   <name>Aerospike Java Client BC</name>
   <description>Aerospike Java client interface to Aerospike database server. Uses Bouncy Castle crypto library for RIPEMD-160 hashing.</description>
diff --git a/client/src/resources/gnu_pom.xml b/client/src/resources/gnu_pom.xml
index 3682ae49a..5005254e9 100644
--- a/client/src/resources/gnu_pom.xml
+++ b/client/src/resources/gnu_pom.xml
@@ -2,7 +2,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.aerospike</groupId>
   <artifactId>aerospike-client-jdk21</artifactId>
-  <version>9.0.1</version>
+  <version>9.0.2</version>
   <packaging>jar</packaging>
   <name>Aerospike Java Client</name>
   <description>Aerospike Java client interface to Aerospike database server</description>
diff --git a/pom.xml b/pom.xml
index fb3e8f36c..2d6c63b6f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,7 @@
     <jbcrypt.version>0.4</jbcrypt.version>
     <commons-cli.version>1.9.0</commons-cli.version>
     <junit.version>4.13.1</junit.version>
+    <maven-deploy-plugin.version>3.1.3</maven-deploy-plugin.version>
     <crypto.type></crypto.type>
   </properties>