diff --git a/.github/actions/build-and-test/action.yaml b/.github/actions/build-and-test/action.yaml index ca46c4302..b3ff56403 100644 --- a/.github/actions/build-and-test/action.yaml +++ b/.github/actions/build-and-test/action.yaml @@ -14,15 +14,15 @@ inputs: required: false default: "latest" description: "Server docker image tag" - jfrog-docker-username: + oidc-provider: required: true description: "" - jfrog-docker-token: + oidc-audience: required: true description: "" run-tests: required: true - default: "false" + default: "true" description: Spin up aerospike enterprise server and run tests runs: @@ -39,17 +39,17 @@ runs: shell: bash run: mvn clean install - - name: Run EE server + - name: Run Aerospike if: ${{ inputs.run-tests == 'true' }} uses: ./.github/actions/run-ee-server with: use-server-rc: ${{ inputs.use-server-rc }} server-tag: ${{ inputs.server-tag }} - docker-hub-username: ${{ inputs.jfrog-docker-username }} - docker-hub-password: ${{ inputs.jfrog-docker-token }} + oidc-provider: ${{ inputs.oidc-provider }} + oidc-audience: ${{ inputs.oidc-audience }} - name: Run tests shell: bash - if: ${{ inputs.run-tests == true }} + if: ${{ inputs.run-tests == 'true' }} working-directory: test run: mvn test -DskipTests=false diff --git a/.github/actions/publish-to-jfrog/action.yaml b/.github/actions/publish-to-jfrog/action.yaml index fff3f05db..1f07b7a17 100644 --- a/.github/actions/publish-to-jfrog/action.yaml +++ b/.github/actions/publish-to-jfrog/action.yaml @@ -36,6 +36,10 @@ inputs: description: "" required: false default: deploy-resources + package-install-location: + description: "" + required: false + default: ~/.m2/repository runs: using: "composite" @@ -62,13 +66,16 @@ runs: 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" \ + --arg publicPomPattern "${{ inputs.package-install-location }}/com/aerospike/${{ inputs.artifact-id }}/${{ inputs.artifact-version }}/*.pom" \ + --arg jarPattern "${{ inputs.package-install-location }}/com/aerospike/${{ inputs.artifact-id }}/${{ inputs.artifact-version }}/*.jar" \ + --arg ascPattern "${{ inputs.package-install-location }}/com/aerospike/${{ inputs.artifact-id }}/${{ inputs.artifact-version }}/*.asc" \ ' + .files[0].pattern = $jarPattern | .files[0].target = $targetPattern | + .files[1].pattern = $ascPattern | .files[1].target = $targetPattern | .files[2].pattern = $publicPomPattern | - .files[2].target = $publicPomTarget + .files[2].target = $targetPattern ' ${{ inputs.deploy-spec-path }}/publish-spec.json.template > ${{ inputs.deploy-spec-path }}/publish-spec.json - name: Debug deploy spec diff --git a/.github/actions/publish-to-sonatype/action.yaml b/.github/actions/publish-to-sonatype/action.yaml index 634b7e4e8..456e2414a 100644 --- a/.github/actions/publish-to-sonatype/action.yaml +++ b/.github/actions/publish-to-sonatype/action.yaml @@ -2,14 +2,6 @@ name: Publish artifacts to Sonatype description: "Publishes artifacts to Sonatype" inputs: - jfrog-releases-repo-name: - description: "" - required: false - default: clients-maven-dev-local - jfrog-snapshots-repo-name: - description: "" - required: false - default: clients-maven-dev-local jfrog-platform-url: description: "" required: false @@ -20,12 +12,6 @@ inputs: oidc-audience: description: "" required: true - artifact-name: - description: "" - required: true - artifact-version: - description: "" - required: true staging-folder: description: "" required: false @@ -34,6 +20,18 @@ inputs: description: "" required: false default: clients-maven-stage-local + build-name-number: + description: "" + required: true + artifact-version: + description: "" + required: true + publish-user: + description: "" + required: true + publish-password: + description: "" + required: true runs: using: "composite" @@ -48,6 +46,24 @@ runs: oidc-provider-name: ${{ inputs.oidc-provider }} oidc-audience: ${{ inputs.oidc-audience }} + - name: Get info + shell: bash + id: get-build-info + run: | + INPUT=${{ inputs.build-name-number }} + + BUILD_NAME="${INPUT%/*}" # Getting the build name + BUILD_NUMBER="${INPUT#*/}" # Getting build number + + BUILD_INFO=$(jf rt curl "/api/build/${BUILD_NAME}/${BUILD_NUMBER}" | jq -c ".") + echo build-info="${BUILD_INFO}" >> $GITHUB_OUTPUT + + - name: Get build name + shell: bash + id: get-build-name + run: | + echo build-name=$(echo '${{ steps.get-build-info.outputs.build-info }}' | jq -r '.buildInfo.modules[].id | sub("/[0-9]+$"; "")') >> $GITHUB_OUTPUT + - name: Create staging folder shell: bash run: | @@ -57,10 +73,60 @@ runs: shell: bash working-directory: ${{ inputs.staging-folder }} run: | - jf rt dl "${{ inputs.target-repository }}/com/aerospike/${{ inputs.artifact-name }}/${{ inputs.artifact-version }}/*" . + jf rt dl "${{ inputs.target-repository }}/com/aerospike/${{ steps.get-build-name.outputs.build-name }}/${{ inputs.artifact-version }}/*" . - name: Debug list downloaded content shell: bash working-directory: ${{ inputs.staging-folder }} run: | - ls -la + ls -laR + + - name: Get hashes from build_info and generate files + shell: bash + working-directory: ${{ inputs.staging-folder }} + run: | + BUILD_INFO='${{ steps.get-build-info.outputs.build-info }}' + MODULES=$(echo "${BUILD_INFO}" | jq -c '.buildInfo.modules[].artifacts[]') + STAGE_DIR="$(find . -type f -name '*.jar' -exec realpath {} \; | head -n 1 | xargs dirname)" + + for MODULE in ${MODULES}; do + NAME=$(echo "${MODULE}" | jq -r ".name") + SHA1=$(echo "${MODULE}" | jq -r ".sha1") + SHA256=$(echo "${MODULE}" | jq -r ".sha256") + MD5=$(echo "${MODULE}" | jq -r ".md5") + + FILE_NAME="${STAGE_DIR}/${NAME}" + echo "$FILE_NAME" + echo "${SHA1}" >"${FILE_NAME}.sha1" + echo "${SHA256}" >"${FILE_NAME}.sha256" + echo "${MD5}" >"${FILE_NAME}.md5" + done + + - name: Create upload archive + id: create-artifact + shell: bash + working-directory: ${{ inputs.staging-folder }} + run: | + ARTIFACT_NAME="$(echo '${{ steps.get-build-info.outputs.build-info }}' | jq -cr '.buildInfo.name | split("_")[1]').zip" + + # adding output variable for debug step later + echo "artifact-name=${ARTIFACT_NAME}" >> $GITHUB_OUTPUT + zip -r "${ARTIFACT_NAME}" . + + - name: Debug show content of the upload archive + shell: bash + working-directory: ${{ inputs.staging-folder }} + run: | + ARTIFACT_NAME='${{ steps.create-artifact.outputs.artifact-name }}' + unzip -l "${ARTIFACT_NAME}" | tail -n +4 | sort -k4,4 + + #- name: Stage artifacts + # working-directory: ${{ inputs.staging-folder }} + # shell: bash + # run: | + # TOKEN=$(printf "${{ inputs.publish-user }}:${{ inputs.publish-password }}" | base64) + # curl --request POST \ + # --verbose \ + # --header "Authorization: Bearer ${TOKEN}" \ + # --form bundle=@${{ steps.create-artifact.outputs.artifact-name }} \ + # https://central.sonatype.com/api/v1/publisher/upload diff --git a/.github/actions/run-ee-server/action.yaml b/.github/actions/run-ee-server/action.yaml index 22510249c..97b3287c7 100644 --- a/.github/actions/run-ee-server/action.yaml +++ b/.github/actions/run-ee-server/action.yaml @@ -15,19 +15,26 @@ inputs: required: false description: Container repo url default: aerospike.jfrog.io/docker/ - oidc-provider: + jfrog-platform-url: description: "" required: false - default: gh-aerospike-clients + default: https://aerospike.jfrog.io + oidc-provider: + description: "" + required: true oidc-audience: description: "" + required: true + container-name: + default: aerospike required: false - default: aerospike/clients + description: Name for test container 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 }} @@ -35,18 +42,30 @@ runs: oidc-provider-name: ${{ inputs.oidc-provider }} oidc-audience: ${{ inputs.oidc-audience }} - - 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 }} + - if: ${{ inputs.use-server-rc == 'true' }} + run: docker login ${{ inputs.container-repo-url }} --username ${{ steps.setup-jfrog-cli.outputs.oidc-user }} --password ${{ steps.setup-jfrog-cli.outputs.oidc-token }} 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 }} + - run: docker run -d --name ${{ inputs.container-name }} -p 3000:3000 ${{ env.IMAGE_NAME }} shell: bash - uses: ./.github/actions/wait-for-as-server-to-start with: - container-name: aerospike + container-name: ${{ inputs.container-name }} is-security-enabled: true + is-strong-consistency-enabled: true + + - run: docker exec ${{ inputs.container-name }} asadm --enable -e 'asinfo -v "roster-set:namespace=test;nodes=A1"' + shell: bash + + - run: docker exec ${{ inputs.container-name }} asadm --enable -e 'asinfo -v revive:' + shell: bash + + - run: docker exec ${{ inputs.container-name }} asadm --enable -e 'asinfo -v recluster:' + shell: bash + + - run: docker logs ${{ inputs.container-name }} + shell: bash diff --git a/.github/actions/wait-for-as-server-to-start/action.yaml b/.github/actions/wait-for-as-server-to-start/action.yaml index 591c89434..d98c170dd 100644 --- a/.github/actions/wait-for-as-server-to-start/action.yaml +++ b/.github/actions/wait-for-as-server-to-start/action.yaml @@ -8,6 +8,10 @@ inputs: 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" + is-strong-consistency-enabled: + description: Flag to enable strong consistency + required: false + default: "false" runs: using: "composite" @@ -18,5 +22,5 @@ runs: # 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 + run: timeout 30 bash ./.github/workflows/scripts/wait-for-as-server-to-start.sh ${{ inputs.container-name }} ${{ inputs.is-security-enabled }} ${{ inputs.is-strong-consistency-enabled }} || true shell: bash diff --git a/.github/workflows/aggregate-build.yaml b/.github/workflows/aggregate-build.yaml index afe14b3ca..cdbd976c0 100644 --- a/.github/workflows/aggregate-build.yaml +++ b/.github/workflows/aggregate-build.yaml @@ -14,10 +14,6 @@ on: type: string required: true secrets: - GPG_SECRET_KEY: - required: true - GPG_PASS: - required: true JFROG_OIDC_PROVIDER: required: true JFROG_OIDC_AUDIENCE: @@ -25,7 +21,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ${{ vars.BUILD_CONTAINER_DISTRO_VERSION }} steps: - name: Set up JFrog credentials l id: setup-jfrog-cli diff --git a/.github/workflows/build-dev.yaml b/.github/workflows/build-pr.yaml similarity index 82% rename from .github/workflows/build-dev.yaml rename to .github/workflows/build-pr.yaml index 1ca17a63e..b60775984 100644 --- a/.github/workflows/build-dev.yaml +++ b/.github/workflows/build-pr.yaml @@ -34,17 +34,8 @@ on: description: Spin up aerospike enterprise server and run tests jobs: - debug-job: - runs-on: ubuntu-latest - steps: - - name: debug - run: | - echo "${{ inputs.branch }}" - echo "${{ github.base_ref }}" - java-version: - needs: debug-job - runs-on: ubuntu-latest + runs-on: ${{ vars.BUILD_CONTAINER_DISTRO_VERSION }} outputs: java-version: ${{ steps.get-java-version.outputs.java-version }} steps: @@ -62,14 +53,6 @@ jobs: run: | echo ${{ steps.get-java-version.outputs.java-version }} - debug-java-version-job: - runs-on: ubuntu-latest - needs: java-version - steps: - - name: debug - run: | - echo "${{ needs.java-version.outputs.java-version }}" - build: uses: ./.github/workflows/build.yaml needs: java-version diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 34eaf7728..44b65de15 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -45,7 +45,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ${{ vars.BUILD_CONTAINER_DISTRO_VERSION }} steps: - name: Checkout code uses: actions/checkout@v4 @@ -58,22 +58,11 @@ jobs: distribution: "semeru" # See 'Supported distributions' for available options java-version: ${{ inputs.java-version }} - # This is needed so we can authenticate and get the credentials to be able to pull AE RC from JFrog - - 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: Build and test uses: ./.github/actions/build-and-test with: crypto-type: ${{ inputs.crypto-type }} server-tag: ${{ inputs.server-tag }} use-server-rc: ${{ inputs.use-server-rc }} - jfrog-docker-username: ${{ steps.setup-jfrog-cli.outputs.oidc-user }} - jfrog-docker-token: ${{ steps.setup-jfrog-cli.outputs.oidc-token }} + oidc-provider: ${{ secrets.JFROG_OIDC_PROVIDER }} + oidc-audience: ${{ secrets.JFROG_OIDC_AUDIENCE }} diff --git a/.github/workflows/promote.yaml b/.github/workflows/promote.yaml index 35a9e91f8..23301f1b7 100644 --- a/.github/workflows/promote.yaml +++ b/.github/workflows/promote.yaml @@ -13,6 +13,10 @@ on: type: string description: Target branch to promote token secrets: + SONATYPE_MAVEN_USER: + required: true + SONATYPE_MAVEN_PASSWORD: + required: true CLIENT_BOT_PAT: required: true JFROG_OIDC_PROVIDER: @@ -21,8 +25,11 @@ on: required: true jobs: - validate-build: - runs-on: ubuntu-latest + promote: + runs-on: ${{ vars.BUILD_CONTAINER_DISTRO_VERSION }} + outputs: + build-name-numbers: ${{ steps.get-build-name-number.outputs.build-name-numbers }} + artifact-version: ${{ steps.get-artifact-version.outputs.artifact-version }} steps: - name: Setup jfrog shell uses: jfrog/setup-jfrog-cli@v4 @@ -91,29 +98,43 @@ jobs: jf rt build-promote "$BUILD_NAME" ${{ inputs.build-number }} ${{ inputs.target-repository }} done + - name: Get build name with build number + id: get-build-name-number + run: | + echo "build-name-numbers=$(echo '${{ steps.get-build-info.outputs.build-info }}' | jq -c '[.buildInfo.modules[].id]')" >> $GITHUB_OUTPUT + - name: Get artifact version id: get-artifact-version - working-directory: client + working-directory: client # The version will be the same for all the modules in the project. Taking client since this is the module that is released. run: | - echo artifact-version=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) >> $GITHUB_OUTPUT + echo "artifact-version=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout | jq -Rc '[.]')" >> $GITHUB_OUTPUT - - name: Get artifact name - id: get-artifact-name - working-directory: client + - name: Debug show 'build-name-numbers' and 'artifact-version' run: | - echo artifact-name=$(mvn help:evaluate -Dexpression=project.build.finalName -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 }} + echo "build-name-number: ${{ steps.get-build-name-number.outputs.build-name-number }}" + echo "artifact-version: ${{ steps.get-artifact-version.output.artifact-version }}" + + publish-to-sonatype: + runs-on: ${{ vars.BUILD_CONTAINER_DISTRO_VERSION }} + needs: promote + strategy: + matrix: + build-name-number: ${{ fromJson(needs.promote.outputs.build-name-numbers) }} + artifact-version: ${{ fromJson(needs.promote.outputs.artifact-version) }} + steps: + # Needed since we are using actions which are part of the repository + - name: Checkout + uses: actions/checkout@v4 + with: + ref: ${{ inputs.target-branch }} + token: ${{ secrets.CLIENT_BOT_PAT }} - - name: Publish to Sonatype (Maven central) - uses: ./.github/actions/publish-to-sonatype + - uses: ./.github/actions/publish-to-sonatype with: oidc-provider: ${{ secrets.JFROG_OIDC_PROVIDER }} oidc-audience: ${{ secrets.JFROG_OIDC_AUDIENCE }} - artifact-name: ${{ steps.get-artifact-name.outputs.artifact-name }} - artifact-version: ${{ steps.get-artifact-version.outputs.artifact-version }} target-repository: ${{ inputs.target-repository }} + build-name-number: ${{ matrix.build-name-number }} + artifact-version: ${{ matrix.artifact-version }} + publish-user: ${{ secrets.SONATYPE_USER }} + publish-password: ${{ secrets.SONATYPE_PASSWORD }} diff --git a/.github/workflows/pull-request-open-dev.yaml b/.github/workflows/pull-request-open.yaml similarity index 91% rename from .github/workflows/pull-request-open-dev.yaml rename to .github/workflows/pull-request-open.yaml index bc8b0ae0b..48690fb02 100644 --- a/.github/workflows/pull-request-open-dev.yaml +++ b/.github/workflows/pull-request-open.yaml @@ -16,7 +16,7 @@ on: jobs: test-with-server-release: name: Build stage - Test with latest version of Aerospike Enterprise Server - uses: ./.github/workflows/build-dev.yaml + uses: ./.github/workflows/build-pr.yaml with: branch: ${{ github.ref }} source-branch: ${{ inputs.source-branch || github.base_ref }} @@ -26,7 +26,7 @@ jobs: test-with-server-rc: name: Build stage - Test with latest RC version of Aerospike Enterprise Server - uses: ./.github/workflows/build-dev.yaml + uses: ./.github/workflows/build-pr.yaml with: branch: ${{ github.base_ref || inputs.branch }} source-branch: ${{ inputs.source-branch || github.base_ref }} diff --git a/.github/workflows/release-stage.yaml b/.github/workflows/release-stage.yaml index aa3f78069..7420c2707 100644 --- a/.github/workflows/release-stage.yaml +++ b/.github/workflows/release-stage.yaml @@ -7,7 +7,7 @@ on: jobs: debug-job: - runs-on: ubuntu-latest + runs-on: ${{ vars.BUILD_CONTAINER_DISTRO_VERSION }} steps: - name: debug run: | @@ -16,7 +16,7 @@ jobs: java-version: needs: debug-job - runs-on: ubuntu-latest + runs-on: ${{ vars.BUILD_CONTAINER_DISTRO_VERSION }} outputs: java-version: ${{ steps.get-java-version.outputs.java-version }} steps: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 0c3a01319..2e6e45c9d 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -15,9 +15,9 @@ on: type: string required: true secrets: - GPG_SECRET_KEY: + GPG_SECRET_KEY_ORG: required: true - GPG_PASS: + GPG_PASS_ORG: required: true JFROG_OIDC_PROVIDER: required: true @@ -26,7 +26,7 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ${{ vars.BUILD_CONTAINER_DISTRO_VERSION }} steps: - name: Checkout code uses: actions/checkout@v4 @@ -40,7 +40,7 @@ jobs: with: distribution: "semeru" java-version: ${{ inputs.java-version }} - gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} + gpg-private-key: ${{ secrets.GPG_SECRET_KEY_ORG }} gpg-passphrase: GPG_PASS - name: Build all modules @@ -52,7 +52,7 @@ jobs: shell: bash run: mvn clean source:jar javadoc:jar install -P gpg -P ${{ inputs.crypto-type }} # The crypto profile is usually set with set_crypto but since we need to toggle multiple prfiles set_crypto option is not being picked up env: - GPG_PASS: ${{ secrets.GPG_PASS }} + GPG_PASS: ${{ secrets.GPG_PASS_ORG }} - name: Get artifact name id: get-artifact-name diff --git a/.gitignore b/.gitignore index 99bc3ed29..227c2df48 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ apidocs *.jar *.iml .idea/ +.vscode dependency-reduced-pom.xml gnu.config bouncycastle.config diff --git a/client/deploy-resources/publish-spec.json.template b/client/deploy-resources/publish-spec.json.template index 4d4bb0231..de025ac4d 100644 --- a/client/deploy-resources/publish-spec.json.template +++ b/client/deploy-resources/publish-spec.json.template @@ -1,11 +1,11 @@ { "files": [ { - "pattern": "target/*.asc", + "pattern": "", "target": "" }, { - "pattern": "target/*.jar", + "pattern": "", "target": "" }, { diff --git a/client/pom.xml b/client/pom.xml index cda8518d2..26d5f5731 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -85,6 +85,29 @@ + + org.codehaus.mojo + build-helper-maven-plugin + 3.2.0 + + + attach-custom-pom + package + + attach-artifact + + + + + ${project.basedir}/deploy-resources/bouncycastle_pom.xml + pom + + + + + + + maven-antrun-plugin 3.1.0 @@ -103,28 +126,6 @@ - - - org.apache.maven.plugins - maven-install-plugin - 3.1.3 - - - install-custom-pom - install - - install-file - - - ${project.basedir}/deploy-resources/bouncycastle_pom.xml - target/${project.build.finalName}.jar - com.aerospike - aerospike-client${crypto.type}-jdk21 - true - - - - @@ -149,6 +150,29 @@ + + org.codehaus.mojo + build-helper-maven-plugin + 3.2.0 + + + attach-custom-pom + package + + attach-artifact + + + + + ${project.basedir}/deploy-resources/gnu_pom.xml + pom + + + + + + + maven-antrun-plugin 3.1.0 @@ -167,34 +191,6 @@ - - - - org.apache.maven.plugins - maven-install-plugin - 3.1.3 - - - install-custom-pom - install - - install-file - - - ${project.basedir}/deploy-resources/gnu_pom.xml - target/${project.build.finalName}.jar - com.aerospike - aerospike-client${crypto.type}-jdk21 - true - - - -